Emacs

ESLint

请参阅 devtools 文档,其中介绍了如何在 Emacs 中集成 ESLint。

C/C++ 开发包

Emacs C++ 编程通用指南

以下指南概述了 emacs 的 C++ 编辑功能。

建议通读这些指南以了解可用的功能。本节的其余部分专门介绍 Mozilla/Gecko 包的特定设置。

rtags(基于 LLVM/Clang 的代码索引)

有关 rtags 安装说明,请访问 rtags github 仓库

rtags 需要一个 编译数据库

为了使 rtags 正确索引,需要复制包含文件并创建统一的编译文件。要么运行树的完整构建,要么如果您只想暂时生成索引,请运行以下命令(假设您位于 gecko 仓库根目录)

cd gecko_build_directory
make export
./config.status

为了提高索引速度,最好从数据库更新中删除统一的构建文件和测试文件。这可以通过创建一个包含以下内容的 ~/.rdmrc 文件来完成,其中 [src_dir] 替换为您签出的仓库或构建目录

-X */[src_dir]/*Unified*;*/[src_dir]/*/test/*;*/[src_dir]/*/tests/*

rdm 守护程序运行后,可以像这样将编译数据库添加到 rtags 中

rc -J [gecko_build_directory]/compile_commands.json

请注意,此过程最初需要一段时间。但是,一旦数据库构建完成,它只需要增量更新。只要 rdm 守护程序在后台运行,数据库就会根据文件的更改进行更新。

irony(基于 LLVM/Clang 的代码补全)

有关 irony-mode 安装说明,请访问 irony-mode github 仓库

irony-mode 需要一个 编译数据库

请注意,irony-mode 默认使用 elisp 解析 compile_commands.json 文件。由于 gecko 是一个非常大的代码库,此文件很容易达到几兆字节,这可能导致 irony-mode 在 gecko 文件上加载需要几秒钟。

建议使用 irony-mode 的此分支,它需要 boost System 和 Filesystem 库。

建议检查此错误以将此补丁合并到 irony-mode 的主分支,以查看是否可以使用该分支或是否可以使用主分支仓库。使用 Boost 版本的 irony-mode 服务器将文件加载时间缩短到 1 秒以内。

Projectile(项目管理)

有关 projectile 安装说明,请访问 projectile github 仓库

Projectile 预先配置了许多项目类型。由于 gecko 使用了自己的特殊构建系统 (mach),因此需要添加新的项目类型。这可以通过将以下 elisp 配置命令添加到您的 emacs 配置文件中来完成。

(projectile-register-project-type 'gecko
                                  '("mach" "moz.build")
                                  "python mach --log-no-times build"
                                  "python mach mochitest"
                                  "python mach run")

假设 projectile-global-mode 已开启,这将允许 projectile 在 gecko 仓库中工作时运行正确的命令。

gdb

Emacs 与 gdb 具有良好的集成,尤其是在使用 gdb-many-windows 时。

但是,当通过 mach 调用 gdb 时,需要传入一些特殊参数以确保使用正确的显示模式。要在 Firefox 上使用 M-x gdb 与 mach,请使用以下命令

gecko_repo_directory/mach run --debug --debugparams=-i=mi