flutter如何统一代码规范

8,589

前言

Dart语言在统一代码规范这方面做的还是比较完善的,不仅有官方文档 effective-dart 指导我们写出优雅的dart代码,更是提供了像eslint(写过js/ts的应该都知道)一样的工具linter来检查我们的代码是否符合规范。当然,检查项是可以配置的,这个后面再说,我们先来介绍如何使用官方提供的工具。

使用工具检查代码规范

首先,我们需要在项目的根目录下添加analysis_options.yaml文件,再次确认下这个文件应该跟pubspec.yaml在同一级目录下(不要嫌啰嗦)。文件添加好了,那应该怎么写配置的内容呢?这里有三个预设可供选择:

我们以pendantic为例,首先在pubspec.yaml文件的dev_dependencies下添加pendantic库,接着运行pub get将该库加载到项目中。

dev_dependencies:
  pedantic: ^1.9.0

然后我们在analysis_options.yaml文件中添加如下配置:

include: package:pedantic/analysis_options.yaml

当然也可以像下面这样写,指定具体的options版本号:

include: package:pedantic/analysis_options.1.9.0.yaml

通过查看pedantic库的代码结构也能够看出analysis_options.yaml里一直是引用最新的预设文件。

第一种引用option的方式可能会在库更新的时候带来新版本的option文件,这样的话有可能会带来新的错误警告信息,而第二种引用指定版本option的方式会比较的稳定,这个大家选择合适自己的就好(星座决定选择,手动滑稽一下)。

配置好analysis_options文件后我们就可以在Android Studio的Dart Analysis下看到提示了,鼠标点击具体条目可以跳转到具体代码进行修改调整。(VS Code应该会在PROBLEMS下面看到相应的提示)

配置analysis_options.yaml文件

include: package:pedantic/analysis_options.1.9.0.yaml

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

linter:
  rules:
    - camel_case_types
  • include : 指定引用第三方库中预设文件的路径
  • analyzer : 配置static analysis的条目,包括启用更严格的类型检查,排除文件,忽略特定规则,更改规则的严重程度等。
  • linter : 配置linter规则

需要注意:不要在YAML文件中使用制表符,而是要用2个空格来表示每个缩进级别。

启用更严格的类型检查

analyzer:
  strong-mode:
    implicit-casts: false
    implicit-dynamic: false

我们可以使用implicit-casts和implicit-dynamic这两个配置项来启用更严格的类型检查,他们的默认值都为true,可以组合使用,也可以分开使用。

  • implicit-casts的值为false时,可以确保类型推断引擎不会隐式转换成具体的数据类型。
  • implicit-dynamic的值为false时, 可以确保类型推断引擎在无法确定具体的数据类型时不会转换成动态类型。

这个大家可以设置一下试试,99%的人应该会收获一堆错误,然后开始怀疑自己写的是什么粑粑。。。。

定制自己的linter规则

linter:
  rules:
    - annotate_overrides
    - await_only_futures
    - camel_case_types
    - cancel_subscriptions

按照上面的格式,可以根据实际需要添加自己的linter规则, dart-lang.github.io/linter/lint… 这里可以查看所有的linter规则,下面标注的标签会很清楚的标注每条规则的所在以及类别(例如:style)

但是如果你要禁用前面通过include引入的linter规则,则需要下面的配置格式

include: package:pedantic/analysis_options.1.9.0.yaml

linter:
  rules:
    avoid_shadowing_type_parameters: false
    await_only_futures: true

当然也可以启用新的规则。这里需要注意的是,以上两种配置linter的方式不能混用。

排除文件

有些时候我们需要排除一些文件,比如json_serializable库生成的.g.dart文件,这时候就需要配置exclude,可以指定具体文件,也可以指定一类文件或者这个文件夹下的所有文件,所以说这个还是比较灵活的。

analyzer:
  exclude:
    - lib/http_client.dart
    - lib/models/*.g.dart
    - lib/mock/**

忽略特定规则

我们可以忽略指定的linter规则,配置样式如下:

analyzer:
  errors:
    todo: ignore

更改规则的严重程度

我们也可以全局更改指定规则的严重程度,配置样式如下:

analyzer:
  errors:
    invalid_assignment: warning
    missing_return: error
    dead_code: info

IDE的提示修复功能

不管是VS Code 还是Android Studio,提示错误的同时一般都会带着修复提示的。

鼠标点点就能搞定大部分的警告,strong-mode开启的话另说,不是很强迫症的话可以忽略这个选项。

结束语

既然dart自带的代码规范功能这么强大,我们也不能浪费了google工程师们的一片良苦用心。简单的设置一下就可以让代码规范很多,赶快动手试试吧。

感谢大家


1.如果本文对你有帮助,就点个赞支持下吧,你的「赞」是我创作的动力。

2.关注公众号「码农码未来」让我们一起进步,码出自己绚丽多彩的未来。