Flutter命名规范插件conventional的使用

发布于 1周前 作者 bupafengyu 来自 Flutter

Flutter命名规范插件 conventional 的使用

conventional 是一个轻量级的库,用于处理遵循 Conventional Commits 规范的提交信息。它可以帮助你解析提交日志、检查是否有可发布的提交、自动生成 CHANGELOG 文件等。

主要功能

  • Commit.parseCommits(): 解析从 git --no-pager log --no-decorate 命令输出的提交信息。
  • hasReleasableCommits(): 检查提交列表中是否有符合规范的可发布提交。
  • writeChangelog(): 根据遵循 Conventional Commits 规范的提交信息自动生成 CHANGELOG 文件。
  • lintCommit(): 检查提交信息是否符合 Conventional Commits 规范,适合与 git_hooks 结合使用。
  • nextVersion(): 根据可发布的提交信息确定下一个版本号。

使用示例

下面是一个简单的示例,展示了如何使用 conventional 插件来解析提交日志、检查是否有可发布的提交,并生成 CHANGELOG 文件。

示例代码

import 'package:conventional/conventional.dart';

// 示例提交日志
const testLog = '''
commit fc9d8117b1074c3c965c5c1ccf845d784c026ac7
Author: Jane Doe <jane.doe@example.com>
Date:   Mon Feb 8 15:26:49 2021 +0800

    ci: fix release workflow

commit cf6080079cd96cb4ccc2edca2ba9cacbcfd64704
Author: Jane Doe <jane.doe@example.com>
Date:   Sun Feb 7 12:58:06 2021 +0800

    ci: try fixing problem with release

commit 925fcd38fe8bd2653ea70d67155b8e31082cf4b2
Author: Jane Doe <jane.doe@example.com>
Date:   Fri Feb 5 16:24:38 2021 +0800

    chore: fix analysis errors

    - disabled checking for non null-safe libraries (temporary)
    - annotation for DatabaseLogWrapper

commit 43cf9b78f77a0180ad408cb87e8a774a530619ce
Author: Jane Doe <jane.doe@example.com>
Date:   Fri Feb 5 11:56:26 2021 +0800

    feat: null-safety and piechart cache

    BREAKING CHANGE: uses null-safety

commit e86efaced15f875ae9e11fd0d79b72d85578f79a
Author: Jane Doe <jane.doe@example.com>
Date:   Wed Jan 27 18:20:41 2021 +0800

    chore: wip to null-safety

commit 18bf98f5cddfecc69b26285b6edca063f1a8b1ec
Merge: b457270 dc60e12
Author: Jane Doe <jane.doe@example.com>
Date:   Sat Dec 19 13:28:47 2020 +0800

    ci: Merge pull request #3 from asartalo/semantic-release

    ci: fixing semantic-release config
''';

void main() {
  // 解析提交日志
  final List<Commit> commits = Commit.parseCommits(testLog);
  
  // 获取第一个提交的信息
  final firstCommit = commits.first;
  print('Author Name: ${firstCommit.author.name}'); // "Jane Doe"
  print('Author Email: ${firstCommit.author.email}'); // "jane.doe@example.com"
  print('Breaking Change: ${firstCommit.breaking}'); // false
  print('Type: ${firstCommit.type}'); // "ci"
  print('Description: ${firstCommit.description}'); // "fix release workflow"

  // 检查是否有可发布的提交
  final shouldRelease = hasReleasableCommits(commits);
  print('Should Release: $shouldRelease'); // true

  // 如果有可发布的提交,则生成 CHANGELOG 文件
  if (shouldRelease) {
    writeChangelog(
      commits: commits,
      changelogFilePath: 'CHANGELOG.md',
      version: '1.2.0',
      now: DateTime.now(),
    );
  }
}

运行结果

假设上述代码成功运行后,将会输出以下内容:

Author Name: Jane Doe
Author Email: jane.doe@example.com
Breaking Change: false
Type: ci
Description: fix release workflow
Should Release: true

并且会在项目根目录下生成一个名为 CHANGELOG.md 的文件,其中包含根据提交信息生成的变更日志。

提交请求和问题反馈

如果你有任何功能请求或发现了 bug,请在 GitHub issue tracker 上提交。欢迎提交 PR(Pull Request)!

其他解决方案

除了 conventional,你还可以考虑使用其他类似的包,例如:

这些工具都可以帮助你在项目中更好地遵循 Conventional Commits 规范。


更多关于Flutter命名规范插件conventional的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

更多关于Flutter命名规范插件conventional的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


在Flutter项目中,遵循一致的命名规范对于提高代码的可读性和可维护性至关重要。conventional 插件可以帮助你强制执行这些命名规范。不过,需要注意的是,Flutter 社区中没有一个广泛认可的名为 conventional 的官方插件专门用于命名规范。通常,命名规范的执行依赖于代码风格指南和工具,如 dart_code_metricsdartfmt(Dart 格式化工具)以及使用 lint 规则。

不过,为了展示如何在 Flutter 项目中实施命名规范,我们可以使用 Dart 的 lint 规则来强制执行一些常见的命名约定。以下是如何在 Flutter 项目中设置和使用 lint 规则的一个示例。

步骤 1: 添加 lint 依赖

首先,在你的 pubspec.yaml 文件中添加 lint 依赖:

dependencies:
  flutter:
    sdk: flutter

dev_dependencies:
  lint: ^1.5.3  # 请注意,这里使用的是假设的包名,实际中应使用如 `pedantic` 或 `flutter_lints`

注意:实际上,lint 并不是一个官方的 Dart 包名。在 Flutter 社区中,更常用的是 pedanticflutter_lints。这里我们假设一个名为 lint 的包用于说明目的。

步骤 2: 配置分析选项

接下来,在你的项目根目录下创建一个 .analysis_options.yaml 文件(如果还没有的话),并添加你想要的 lint 规则。例如:

include: package:lint/analysis_options.yaml  # 假设 lint 包提供了这样的配置文件

linter:
  rules:
    # 强制类名使用驼峰命名法并以大写字母开头
    camel_case_types: true
    
    # 强制变量名使用小写字母和下划线
    lower_case_with_underscores: true
    
    # 禁止在类成员变量前加下划线(除了私有变量)
    avoid_leading_underscore_in_identifier_names: true
    
    # 其他你想要的规则...

注意:上面的 include 路径和规则是基于假设的。在实际项目中,你应该使用 pedanticflutter_lints 提供的配置文件,并根据需要调整规则。

步骤 3: 应用 lint 规则

一旦你配置了 .analysis_options.yaml 文件,Dart 分析器就会在每次运行 flutter analyze 命令时应用这些规则。如果你使用的是 IDE(如 VS Code 或 IntelliJ IDEA),它们通常也会实时显示 lint 警告和错误。

示例代码

以下是一个简单的 Flutter 组件代码示例,展示了如何遵循命名规范:

import 'package:flutter/material.dart';

// 遵循驼峰命名法并以大写字母开头的类名
class MyAppBar extends StatelessWidget {
  // 遵循小写字母和下划线规则的变量名
  final String title;

  // 构造函数
  MyAppBar({required this.title});

  @override
  Widget build(BuildContext context) {
    // 遵循命名规范的私有变量(以下划线开头)
    final _backgroundColor = Colors.blue;

    return AppBar(
      title: Text(title),
      backgroundColor: _backgroundColor,
    );
  }
}

void main() {
  runApp(
    MaterialApp(
      home: Scaffold(
        appBar: MyAppBar(title: 'Flutter Naming Conventions'),
        body: Center(
          child: Text('Hello, Flutter!'),
        ),
      ),
    ),
  );
}

在这个示例中,我们创建了一个名为 MyAppBar 的自定义组件,其变量和参数命名都遵循了我们之前在 .analysis_options.yaml 文件中定义的规则。

结论

虽然没有一个名为 conventional 的官方 Flutter 插件专门用于命名规范,但你可以通过配置 Dart 的 lint 规则来强制执行命名约定。使用 pedanticflutter_lints 等社区广泛接受的包可以帮助你实现这一目标。记得根据你的项目需求调整 lint 规则,并在团队中推广这些规范以提高代码质量。

回到顶部