跳至主要内容

编码风格

以下是 Electron 的编码风格指南。

你可以运行 npm run lint 来显示 cpplinteslint 检测到的任何风格问题。

通用代码

  • 文件末尾带一个换行符。
  • 按照以下顺序放置 require 语句
    • Node 内置模块 (例如 path)
    • Electron 内置模块 (例如 ipc, app)
    • 本地模块 (使用相对路径)
  • 按照以下顺序放置类属性
    • 类方法和属性 (以 @ 开头的方法)
    • 实例方法和属性
  • 避免平台依赖的代码
    • 使用 path.join() 连接文件名。
    • 需要引用临时目录时,使用 os.tmpdir() 而不是 /tmp
  • 函数末尾明确返回时,使用简单的 return
    • 不是 return null, return undefined, nullundefined

C++ 和 Python

对于 C++ 和 Python,我们遵循 Chromium 的 编码风格。还有一个脚本 script/cpplint.py 用于检查所有文件是否符合规范。

我们现在使用的 Python 版本是 Python 3.9。

C++ 代码大量使用了 Chromium 的抽象和类型,因此建议熟悉它们。一个很好的起点是 Chromium 的 重要抽象和数据结构文档。该文档提到了一些特殊类型、作用域类型(在超出作用域时自动释放内存)、日志机制等。

文档

  • 编写 remark markdown 风格的文档。

你可以运行 npm run lint:docs 来确保你的文档更改格式正确。

JavaScript

  • 编写 标准 JavaScript 风格的代码。
  • 文件名应使用 - 连接而不是 _,例如 file-name.js 而不是 file_name.js,因为在 atom/atom 中,模块名通常是 module-name 的形式。这条规则仅适用于 .js 文件。
  • 在适当的地方使用较新的 ES6/ES2015 语法
    • const 对 require 语句和其他常量使用 const。如果值是原始类型,使用大写命名 (例如 const NUMBER_OF_RETRIES = 5)。
    • let 使用 let 定义变量
    • 箭头函数 使用箭头函数 (`Arrow functions`) 而不是 function () { }
    • 模板字面量 使用模板字面量 (`Template literals`) 而不是使用 + 进行字符串连接

命名规范

Electron API 使用与 Node.js 相同的命名约定

  • 当模块本身是一个类,例如 BrowserWindow,使用 PascalCase
  • 当模块是一组 API,例如 globalShortcut,使用 camelCase
  • 当 API 是对象的属性,且足够复杂以至于可以单独成章,例如 win.webContents,使用 mixedCase
  • 对于其他非模块 API,使用自然标题,例如 <webview> TagProcess Object

创建新的 API 时,优先使用 getter 和 setter,而不是 jQuery 的单函数风格。例如,.getText().setText(text).text([text]) 更受欢迎。关于这一点有一场讨论