Flutter Dart 分析器未应用我的 linter 规则

Tho*_*mas 9 dart dart-analyzer flutter

我正在开发一个非常标准的 Flutter 项目。因为我是 Flutter 和 Dart 的新手,所以我希望我的工具尽可能有用。所以我添加pedantic: ^1.9.0并这样dev_dependencies写:analysis_options.yaml

\n\n
include: package:pedantic/analysis_options.yaml\n\nanalyzer:\n  exclude: [build/**]\n  strong-mode:\n    implicit-casts: false\n    implicit-dynamic: false\n
Run Code Online (Sandbox Code Playgroud)\n\n

根据https://dart-lang.github.io/linter/lints/pedantic应该启用avoid_empty_elseavoid_relative_lib_importslints 等错误。但是当我编写如下代码时:

\n\n
import \'../model/model.dart\';\n
Run Code Online (Sandbox Code Playgroud)\n\n

或这个:

\n\n
  if (context == null) {\n    print(\'context is null\');\n  } else {\n  }\n
Run Code Online (Sandbox Code Playgroud)\n\n

我在 IntelliJ IDEA 中没有收到任何错误,flutter analyze手动运行时也没有收到任何错误:

\n\n
$ flutter analyze\nAnalyzing app...                                                        \nNo issues found! (ran in 5.0s)\n
Run Code Online (Sandbox Code Playgroud)\n\n

我尝试显式启用这些 lints:

\n\n
$ flutter analyze\nAnalyzing app...                                                        \nNo issues found! (ran in 5.0s)\n
Run Code Online (Sandbox Code Playgroud)\n\n

这没有任何区别。

\n\n

我尝试将不存在的 lint 添加foo到该列表中以验证该文件是否正在使用,它是:

\n\n
$ flutter analyze\nAnalyzing app...                                                        \n\nwarning \xe2\x80\xa2 \'foo\' is not a recognized lint rule \xe2\x80\xa2 analysis_options.yaml:12:7 \xe2\x80\xa2 undefined_lint_warning\n\n1 issue found. (ran in 4.9s)\n
Run Code Online (Sandbox Code Playgroud)\n\n

dartanalyzer我什至尝试直接从 Flutter 安装目录运行,并使用我能找到的所有详细选项:

\n\n
$ ~/flutter/bin/cache/dart-sdk/bin/dartanalyzer --lints --verbose --log --options analysis_options.yaml .\nAnalyzing app...\nLoaded analysis options from analysis_options.yaml\nAnalysis options: lints = true\nNo issues found!\n
Run Code Online (Sandbox Code Playgroud)\n\n

为了完整起见,这是我的医生的输出:

\n\n
$ flutter doctor -v\n[\xe2\x9c\x93] Flutter (Channel stable, v1.17.1, on Linux, locale en_US.UTF-8)\n    \xe2\x80\xa2 Flutter version 1.17.1 at /home/thomas/flutter\n    \xe2\x80\xa2 Framework revision f7a6a7906b (5 days ago), 2020-05-12 18:39:00 -0700\n    \xe2\x80\xa2 Engine revision 6bc433c6b6\n    \xe2\x80\xa2 Dart version 2.8.2\n\n\n[\xe2\x9c\x93] Android toolchain - develop for Android devices (Android SDK version 28.0.3)\n    \xe2\x80\xa2 Android SDK at /opt/android-sdk\n    \xe2\x80\xa2 Platform android-28, build-tools 28.0.3\n    \xe2\x80\xa2 ANDROID_HOME = /opt/android-sdk\n    \xe2\x80\xa2 ANDROID_SDK_ROOT = /opt/android-sdk\n    \xe2\x80\xa2 Java binary at: /usr/lib/jvm/default/bin/java\n    \xe2\x80\xa2 Java version OpenJDK Runtime Environment (build 1.8.0_242-b08)\n    \xe2\x80\xa2 All Android licenses accepted.\n\n[!] Android Studio (not installed)\n    \xe2\x80\xa2 Android Studio not found; download from https://developer.android.com/studio/index.html\n      (or visit https://flutter.dev/docs/get-started/install/linux#android-setup for detailed instructions).\n\n[\xe2\x9c\x93] IntelliJ IDEA Community Edition (version 2019.3)\n    \xe2\x80\xa2 IntelliJ at /usr/share/jetbrains-idea-ce\n    \xe2\x80\xa2 Flutter plugin version 44.0.3\n    \xe2\x80\xa2 Dart plugin version 193.6911.31\n\n[\xe2\x9c\x93] Connected device (1 available)\n    \xe2\x80\xa2 FP2 \xe2\x80\xa2 1e95f6f3 \xe2\x80\xa2 android-arm \xe2\x80\xa2 Android 7.1.2 (API 25)\n\n! Doctor found issues in 1 category.\n
Run Code Online (Sandbox Code Playgroud)\n\n

我还应该做些什么来让 linter 正常工作吗?

\n

Tho*_*mas 5

啊,所以...linter 工作正常;只是我的假设被打破了。

avoid_empty_else不检查空{}块,而只检查;之后的空块else,这就是它没有触发的原因。

avoid_relative_lib_imports 从字面上看,仅检查路径包含/lib/在名称中的相对导入,而不检查目标解析为 内某个文件的相对导入lib/

真糟糕。我希望完全禁止相对导入,但这仍然没有实现