编码规范

从事过开源项目的同学都知道,通常都会在仓库中加入 CONTRIBUTING.md 文件,内容就是如何规范编码的条条框框。不同的公司,不同的团队遵循的编码规范差别很大。大家最熟悉的应该就是 Google Coding Style, 这也是大多数公司使用的。

IDE 支持

当在某个项目中使用 Google Coding Style 的时候,往往需要 IDE 插件的支持,流行的 IDE 都会有支持,如 Microsoft Visual Studio, Jetbrains IDEA, Android Studio 等。那么这里有个问题,开源的项目是否要依赖 IDE 呢? 这个问题没有绝对的答案,我通常是不关心团队程成员使用什么工具编码的,这是每个人自己的喜好问题,不能够强迫。

不依赖 IDE 的选择

通常我会选择 editorconfigclang-format 共存的方式来做限定。 editorconfig 用来限定文件编码,缩进方式等,而 clang-format 用来格式化代码。

Bazel skylark 自动格式化

skylarkbazel 构建系统下的类 python 脚本语言,用来提供给开发者扩展自己的规则,遗憾的是 clang-format 并不支持。但是官方提供了工具: buildtools

这个工具需要根据自己的平台自行下载,之前我都是下载到本地,配置好环境变量使用 。发现这样很不便利,我仍然需要在项目的开发者规范中去书写如何使用这些工具去格式化 skylark 文件,想要更懒一些,所以就做了这么一件事情。 给 buildtools 扩展了一套 bazel rules, 可以按照依赖的方式自动下载并集成到项目中,不再需要开发者去配置环境,这样就简单多了。

buildtools

这个项目和官方的项目名称一致,因为只是用脚本做了一层 wrapper. 使用方式很简单。如同 README 中写到的一样:

in your WORKSPACE:

  load("@bazel_tools//tools/build_defs/repo:git.bzl", "git_repository")

  git_repository(
    name = "com_deepinthink_buildtools",
    remote = "https://github.com/deepinthink/buildtools.git",
    commit = "" # latest commit
  )

  load("@com_deepinthink_buildtools//bazel:repositories.bzl", "buildtools_repositories")

  buildtools_repositories()

using Makefile:

  fmt: fmt-bazel
  fmt-bazel:
    $(BAZEL) run @com_deepinthink_buildtools//:buildifier `pwd`/WORKSPACE
    $(BAZEL) run @com_deepinthink_buildtools//:buildifier `pwd`/project_module/BUILD

可以结合之前的文章中说到的 Makefile 使用方式来指定格式化代码的使用方式。 很简单只需要 :

    make fmt
01-18 21:47