dart - Dart 的分析器和 linter 有什么区别?
问题描述
你一定在里面看到过analysis_options.yaml
:
analyzer:
exclude: [build]
strong-mode:
implicit-casts: false
linter:
rules:
- camel_case_types
两者都在编译时使用吗?两者有什么区别?
解决方案
简短的回答是他们专注于不同的事情。
分析器的目标是检查您的程序是否有效。它检查语法错误和类型错误。从历史上看,在 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 集。
推荐阅读
- c# - 如何使用 C# iTextSharp 在可编辑 PDF 中证明文本字段控件中的文本是合理的?
- c# - 有没有办法在设计视图中隐藏控件
- c# - 如何确保我的班级的 2 个实例具有相同的哈希码?
- javascript - 如何自定义 React-Konva 旋转处理程序?
- php - Laravel - 如何替换数据库中的字符串
- mysql - MariaDB:如何将表名存储到变量中?
- json - getById和getByName之间的Angular Http获取方法区别
- android - 模拟惰性构造函数参数
- python - Python - 如何在巨大的 CSV 文件中删除重复项(200+ 百万行)
- regex - Google App Script findText 正则表达式不适用于换行符