Skip to content

feat(app): add fmp_lints with a wiring sentinel - #177

Merged
1morr merged 5 commits into
mainfrom
feat/fmp-lints
Sep 29, 2026
Merged

1morr merged 5 commits into
mainfrom
feat/fmp-lints

Conversation

@1morr

@1morr 1morr commented Sep 29, 2026

Copy link
Copy Markdown
Owner

內容

M1 PR 3:fmp_lints 與接線哨兵(ADR 0015 §決定 2;.trellis/tasks/archive/2026-09/09-29-fmp-lints/prd.md)。

  • app/packages/fmp_lints/:用官方 analysis_server_plugin 自寫 13 條規則。
    • 十條核心規則;
    • fmp_toast_entry(ADR 0023);
    • fmp_design_tokens(ADR 0024);
    • fmp_material_import:取代 PR 2 的 static-rule 測試,ADR 0015 已補一句。
    • 每條的允許清單是規則檔頂端的常數,app/AGENTS.md § Lint 列出每一條。
  • 測試:每條都用 analyzer_testing 做雙向變異,86 個測試;以 posix 與 Windows 路徑各跑一次。
  • 接線哨兵 app/tool/lint_sentinel.dart:
    • 在 lib/ 與 test/ 暫放違規檔,斷言 dart analyze 失敗,而且報出 analysis_options.yaml 開啟的每一條規則;
    • 暫放檔一定會刪掉。
  • CI 的 app job:加 dart analyze --fatal-infos、哨兵與規則測試。flutter analyze 保留,因為它有 Flutter 專屬的診斷。
  • riverpod_lint 3.1.9:已接上新插件系統。missing_provider_scope 暫時關閉,因為還沒用 Riverpod;第一個加 ProviderScope 的 PR 要打開它(已記在 M1 implement)。

版本

  • analysis_server_plugin 0.3.18、analyzer 13.3.0、analyzer_testing 0.3.2,都不是最新版。
  • 原因:Flutter 3.47.5 的 flutter_test 釘 test_api 0.7.12,把 analyzer 限制在 14 以下,最新版解不出來。solver 訊息記在 research/notes.md。
  • Flutter 放寬後三個一起升(已記在 M1 implement)。

§7 實測:dart analyze 看得到插件診斷,flutter analyze 看不到(flutter/flutter#187999)

同一個含 catch (_) {} 的暫放檔:

$ dart analyze --fatal-infos
warning - lib\core\zz_measure.dart:4:15 - Empty catch block. Handle the error: log it through the facade, rethrow, or map it to an AppError. - fmp_no_empty_catch
1 issue found.            (exit 2)
$ flutter analyze
No issues found! (ran in 8.8s)   (exit 0)

Review 指南

  • 規則只看名稱(Dio、SnackBar、Platform),不查宣告來自哪個函式庫,所以同名的自訂型別也會被報。這是刻意的,寫在 app/AGENTS.md。
  • 檢查代理修了兩個漏報,都已補測試:
    • debugPrint 是函式型別的變數,原本抓不到;
    • EdgeInsets.all((8)) 用括號可以繞過。
  • fmp_design_tokens 與 fmp_toast_entry 依 ADR 的用意擴到相鄰寫法:
    • EdgeInsetsDirectional;
    • Radius.circular;
    • Color.fromARGB;
    • ScaffoldMessenger.maybeOf。
  • 沒有使用者看得到的改動,不需要實機驗證。

驗證

  • fmp_lints:dart test,兩種路徑模式各 86 個全過。
  • app/:
    • format;
    • dart analyze --fatal-infos;
    • flutter analyze;
    • flutter test:36 過、1 跳過(live);
    • 哨兵報出 13 條規則。

@1morr
1morr merged commit e5d1b1e into main Sep 29, 2026
6 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant