原文地址:flutter-explained.dev/blog/flutte…
原文作者:flutter-explained.dev/blog/author…
发布时间:2021年1月4日
我们在Flutter最佳实践视频中介绍的最佳实践之一是Flutter代码分析和Linting。我想开始一个小系列的不同的博客文章,在那里我们谈论这些最佳实践中的每一个,今天我们从第一个开始。代码分析和提示。
为Flutter项目设置代码提示功能
首先,我想说的是,Flutter中的额外Linting是一个有争议的话题。一方面,许多人喜欢代码提示,因为它使我们能够关注代码的关键部分。然而,有些人不喜欢它,因为它限制了他们,导致错误的构建错误。但在我们开始讨论之前,让我们先说说什么是代码提示,以及我们如何充分使用它的潜力。
代码提示是一种自动验证你的代码是否正确的方法。在我们的日常工作中,总是有一个林特,我们都在使用。在VSCode和Android Studio这样的编辑器中,当我们的代码无法运行时,我们会收到错误。构建错误的可视化已经是我们的Linter的功能了。这个集成的Code Linter是一个检查你的代码是否存在构建问题的工具,这意味着你甚至不可能运行你的应用程序。我们不必在我们的代码中寻找错误,当一切正常时,我们确信我们的代码是可执行的。
感谢现代工具,我们可以扩展这些规则,检查我们当前的项目,而不仅仅是破损的代码。例如,我们可以告诉我们的Linter,我们要检查错误的代码样式。在Dart和Flutter中,额外的lint规则是由一个叫做analysis_options.yaml的文件管理。如果你没有听说过yaml文件扩展名,它只是一种方便的文件结构方式,允许你用两个空格创建树状结构。请随时在这里阅读更多关于.yaml文件扩展名的信息。
我们的任务。在我们的项目中强制执行单引号
让我们假设我们会强迫所有的开发人员在我们的项目中工作,每一个字符串都应该用单引号来完成。我们的IDE应该立即显示出来,就像下面的图片。
我们的结果示例
为了让Dart和Flutter的静态代码分析器识别这个错误,我们必须创建一个analysis_options.yaml,负责为整个项目提供Dart分析器的指令,在后台运行并验证我们的代码。我们可以在我们项目的根部创建analysis_options,大多数IDE,如Android Studio或Visual Studio Code会立即理解它需要做什么。现在,让我们仔细看看analysis_options文件。在analysis_options中,我们可以修改分析器和linter的行为。
分析器和衬垫器
在常见的analysis_options.yaml文件的第一部分,通常是分析器。在这里,我们可以配置更多关于如何检查我们代码的一般部分。首先,我们可以设置是否要显示错误、警告,或作为特定规则的信息。其次,我们可以将文件和文件夹排除在检查系统之外。此外,我们还可以忽略特定的规则。最后但并非最不重要的是,我们有机会引入额外的严格的类型检查和实验性行为,如无慢速检查或超级混合器。
现在要使用我们注册给分析器的主要信息,我们必须指定我们要在我们的项目中应用的规则。因此,我们使用analysis_options.yaml的Linter部分。在linter部分,我们定义哪些规则将应用于我们的项目。大约有180条规则,你可以指定并使它们在你的应用程序中立即可见。如果要解释的话,所有的规则都会占用这篇博文的篇幅,所以请随时查看Linter for Dart网站上你可以指定的提示规则列表。
润色规则
在我写这篇文章的时候,有三个不同类别的提示规则。首先是错误规则,它们是可能的编码错误。第二,我们有风格规则,定义代码风格事项,如单引号或双引号。它并不提示你的代码是否稳定,但它有助于对齐整个代码库。pub规则遵循这两点。这套规则定义了一个pub包必须的行为方式;它只包括两条规则,即如何在你的pubspec.yaml中命名包和排序依赖关系。
avoid_init_to_null
正如名字已经说明的那样,通过这条林特规则,你不再允许用null来初始化变量。但为什么这样做会有帮助呢?在Dart中,每个没有指定值的变量都会被自动设置为null。没有空内存的概念,也没有任何其他我们可能陷入的陷阱。考虑到这一点,特别声明一个变量为null只会使我们的代码变得臃肿,而且是不必要的,不需要的。
在明确声明为null时,linter会显示一个信息
use_string_buffers
另一个奇妙的规则,许多开发者并没有真正意识到,它是一种更高性能的串联字符串的方式。字符串缓冲器可以帮助你改善字符串的连接,并允许你以最有效的方式进行连接。为了确保你的代码中的所有贡献者都能有效地连接字符串,我们可以设置use_string_buffers样式规则。
如果你可以使用一个StringBuffer,Linter会显示一个警告
StringBuffer提供了一种处理字符串的高性能方法
prefer_double_quotes
首选双引号规则允许你控制你想要执行的特定引号样式。在我们的代码库中,我们更喜欢双引号,但也存在单引号规则,这使得我们可以强制执行引号样式。如果你在一个多语言团队中工作,这尤其有帮助,因为各国的键盘布局不同。相比之下,在英语和美语国家,单引号更容易使用,而且在其他国家,如德国,通常更喜欢使用双引号。这条规则使得维护者或包或项目的拥有者在一般情况下希望如何工作的信息变得清晰。
喜欢双引号的规则导致了关于双引号用法的信息
这也是我们要用来解决我们的问题的规则,并在整个项目中强制使用双引号。
解决方案
好了,现在我们知道了Linter和Analyzer是如何工作的,让我们来解决这篇博文的目标,我们要强制每个在我们代码库上工作的开发人员喜欢双引号,如果他们不这样做,我们要把它真正显示为一个错误。我们要做的第一件事是用问题的正确严重程度来定义分析器。在我们的例子中,这将是 "错误"。接下来,我们在pubspec.yaml中定义了我们要添加的新规则的linter。
分析器和线程
现在,在我们指定了规则和执行的严重程度后,我们已经可以在IDE中看到错误出现了。
设置了正确的规则后出现的提示错误
如果我们现在在项目中的终端运行dart analyze,我们会收到一份完整的分析报告。现在我们可以在我们的终端中使用这个命令。如果我们现在在CI/CD链中使用这个命令,构建将失败,我们的团队将不得不修复它以合并到我们的项目。
作为一个包的Lint规则
像往常一样,有一些神奇的包,它们带有预定义的规则选择,使你更容易设置你想在项目中使用的第一个基线。让我们先来看看如何在我们的项目中包含它们。
安装一个第三方的提示规则集
为了添加一个品评规则集,我们必须首先在pubspec.yaml中添加对pub.dev包的依赖。举个例子,我们想把Lint包添加到我们的项目中。
将Lint添加到我们的dev依赖项中
下一步是将包中的规则导入我们的analysis_options.yaml中。
将lint包的analysis_options添加到我们项目的analysis_options中
只要你现在打开不同的文件,你就会发现,软件包的linting规则已经被考虑到了,并且可以使用了。让我们假设你不喜欢某个规则。你可以通过包括林特和分析器轻松地覆盖该行为。你的规则将覆盖软件包的规则,这样你就能一直控制提示的内容。
覆盖特定规则的完整解决方案
润色包
Lint包的标志
Pascal Welsch创建了第一个Lint包,它包括Flutter和Dart项目的lint规则的基线。如果你使用这个包,你可以事后扩展或排除规则,但它是用消费者创建的。这意味着如果你不一定在Flutter项目上工作。这应该是你的方法。
Pedantic
我想向你介绍的第二个包是所谓的pedantic包。Flutter团队创建了迂回包来支持一套规则,这套规则通常在使用和允许方面有更多的限制,并且不时地有点过度工程化。
总结
在这篇文章中,我们学习了如何将Linting规则用于我们的优势,并执行规则,以便每个与我们合作的开发者以相同的方式工作。生成这些规则并在团队中讨论它们可能是很乏味的,很多人会说这是不值得的。但是,如果现在开始对话和讨论,你就有合适的工具加入讨论并给出一些有价值的见解。
谢谢你的阅读,请在下面的描述中告诉我你对Linting规则的看法!