首页 > 解决方案 > Dart 的分析器和 linter 有什么区别?

问题描述

你一定在里面看到过analysis_options.yaml

analyzer:
  exclude: [build]
  strong-mode:
    implicit-casts: false

linter:
  rules:
    - camel_case_types

两者都在编译时使用吗?两者有什么区别?

标签: dart

解决方案


简短的回答是他们专注于不同的事情。

分析器的目标是检查您的程序是否有效。它检查语法错误和类型错误。从历史上看,在 Dart 1 中,这是进行类型检查的唯一方法,因为编译器忽略了类型,但在 Dart 2 中不再是这种情况。

分析器最终添加了比语言所需的更多检查。即使语言允许,它也可以检测死代码或绝对错误的分配,因为它具有比语言规范要求的更好的静态分析。通常,分析器会针对无效程序或可能出现的问题发出警告。一些警告是默认启用的,而另一些则需要启用,因为它们可能导致错误警告。每个问题问题的严重性可以配置为错误、警告、提示(或忽略)。无效的 Dart 总是一个错误。

linter是作为一个单独的项目开发的它仅适用于有效的 Dart 程序,并且旨在强制执行编码风格。语言不关心你的类Capitalized和变量是否是lowerCase,但是样式指南说它们应该是,如果不满足,linter 可以通过报告 lint 错误来强制执行该样式。这就是 linter 所做的:它报告样式违规。由于风格是主观的,所有 lints 都需要启用,默认情况下没有启用 lints。

棉绒也可以非常具体。有些 lint 仅适用于使用特定库的代码,以便为该代码强制执行特定样式。像 Flutter 这样的项目可能会在它创建的包中默认启用一些 lints。

分析器在 linter 之前就存在,如果今天添加一些警告,添加到分析器中可能会被 lints。两者都依赖于package:meta添加元数据以驱动警告/lints 的注释。分析器现在包括linter 并提供来自两者的错误/警告/提示/lints,因此程序员很少需要进行区分。主要区别在于,lint 记录在 linter存储库中,并且关于新 lint 的讨论发生在那里,与分析器中的更改无关。

Dart 包pedantic定义了一组用于所有内部 Google 代码的 lint。它非常严格和固执己见,目的是防止潜在危险的代码和任何不必要的风格讨论。其他包提供其他套 lints。只要您遵循样式指南,Dart 团队(目前)还没有推荐的官方 lints 集。


推荐阅读