自定义Flutter Lint插件实现自己的Dart语法规则(静态语法分析检测)

摘要:

本文实现了一个自定义的语法检查插件,功能是:当新写一个dart类,如果类名中包含ViewModel,那么必须添加前缀HDW。在vscode中效果如下:

1

在网上搜索自定义Dart语法检查自定义Dart lint最终都会导向 Customizing static analysis 这篇文档。文档中介绍了Dart Static analysis的功能和使用方式。

如在if语句使用了错误的变量名称,提示如下错误。

void main() {
  var count = 0;
  if (counts < 10) {
    count++;
  }
  print(count);
}

提示
error • Undefined name 'counts'. • lib/main.dart:3:7 • undefined_identifier

但是文章标题中所谓Customizing(自定义)指的是自定义修改配置检查规则、设置工程中文件的检查匹配范围、调整某些规则的检查级别(由warning提升到error)等。具体方式是,首先在工程目录下添加analysis_options.yaml文件:

include: package:pedantic/analysis_options.1.8.0.yaml

analyzer:
  exclude: #忽略检测的文件配置
    - lib/client.dart
    - lib/server/*.g.dart
    - test/_data/**
  strong-mode: #设置某些规则为严格模式
    implicit-casts: false

linter:
  rules: #开启或禁用某些规则
    avoid_shadowing_type_parameters: false
    await_only_futures: true

但这种自定义不是我们想要的。我们想要的不仅仅是Dart官网为我们提供的语法检查,我们需要自己能去分析当前代码的AST(抽象语法树),进而写出一些符合自己团队内部语法约定或业务约定的自定义规则。这可行吗?可以的,而且这个功能就是Dart Static analysis提供,并且仍然可以配置在analysis_options.yaml中。但是不知为何官网没有提供相关的文档描述和教程,网上能搜到的文章也很少,并且写这种自定义规则在工程创建和调试上都会遇到很多点,所以我打算用一个自定义规则的完整示例,将整个过程呈现出来。

这个示例的需求是:当新写一个dart类,如果类名中包含ViewModel,那么必须添加前缀HDW。(不要纠结这个规则的实际意义,就当是业务命名的强约束吧😂)

//此处需要报错,并提示用户必须添加HDW前缀
class ViewModel {
  
}

Analyzer plugin简介

自定义符合自己团队内部语法约定或业务约定的规则,可以通过analyzer plugin实现。

通过analyzer plugin写的这些规则,其使用方法,检查效果,以及在VSCode或AndroidStudio中的表现形式都与Dart Static analysis提供效果完全相同。

在了解analyzer plugin是什么之前,我们先想一下,本文第一节所说的Dart Static analysis是如何工作的?为什么工程中的analysis_options.yaml文件配置会生效,并且它是如何生效的?

直观的答案是”Dart SDK提供的功能“,打开github的dart-lang项目,相关的代码在pkg下的analysis_server、analysis_cli、analysis_plugin等文件夹中。我们安装Flutter后执行Flutter doctor会下载对应版本的Dart SDK,在flutter/bin/cache/dart-sdk/bin目录下我们可以找到dart sdk提供的工具包ÿ

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
Podspec是CocoaPods使用的一种文件格式,用于描述一个库的元数据信息。在Flutter插件开发中,我们需要使用Podspec文件来描述iOS平台上的插件信息,以便其他开发者在使用我们的插件时能够正确地集成到他们的项目中。 下面是一些关于Podspec语法的整理: 1. Podspec文件的命名应该以插件的名称为准,并以`.podspec`作为文件扩展名,如`flutter_my_plugin.podspec`。 2. Podspec文件应该包含以下信息: - 插件的名称和版本号 - 插件的描述 - 作者信息 - 插件的许可证 - 插件依赖的库和框架 - 插件的源代码文件和资源文件 3. Podspec文件的基本结构如下: ``` Pod::Spec.new do |s| s.name = '插件名称' s.version = '插件版本号' s.summary = '插件描述' s.homepage = '插件主页' s.license = '插件许可证' s.author = { '作者名称' => '作者邮箱' } s.source = { :git => '插件源代码仓库地址', :tag => '插件版本号' } s.dependency '依赖库名称', '依赖库版本号' # 插件依赖的库和框架 s.source_files = '插件源代码文件路径' # 插件的源代码文件 s.resource_bundles = { '插件资源文件名称' => ['插件资源文件路径'] } # 插件的资源文件 end ``` 4. 在描述依赖库时,可以使用以下语法: - `s.dependency '库名称'`:插件依赖的库名称。 - `s.dependency '库名称', '~> 版本号'`:插件依赖的库名称和版本号,其中`~>`表示兼容某个版本号及以上的库。 - `s.dependency '库名称', '>= 版本号'`:插件依赖的库名称和版本号,其中`>=`表示需要某个版本号及以上的库。 5. 在描述源代码文件和资源文件时,可以使用以下语法: - `s.source_files = '路径/**/*.{h,m,swift}'`:插件的源代码文件路径,可以使用通配符`*`和`**`。 - `s.resource_bundles = { 'Bundle名称' => ['路径/**/*'] }`:插件的资源文件,可以使用通配符`*`和`**`。 以上就是关于Podspec语法的整理,希望能对Flutter插件开发有所帮助。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值