Editor Configuration

Introduction

This page contains techniques and advice for setting up text editors and IDEs that will help you to work with Mozilla projects like the gecko codebase.

Emacs

Mozilla Specific Packages

dxr.el

dxr.el is an elisp package that enables searching of DXR Code Indexer results from within emacs. Using this can sometimes be easier than doing localized code indexing with rtags, as rtags processing of code trees can be very processing intensive (similar to a clobber build).

dxr.el is available via github repo, or via the Marmalade pacakge manager.

eslint

Mozilla uses eslint to automate various coding style checks for JavaScript sources. See the devtools documentation that describes how to integrate this into Emacs.

C/C++ Development Packages

General Guidelines to Emacs C++ Programming

The following guides give an overview of the C++ editing capabilties of emacs. It is worth reading through these guides to see what features are available. The rest of this section is dedicated to Mozilla/Gecko specific setup for packages.

Once rtags is installed, a compile_commands.json file will need to be created for indexing purposes. Using mach, this can be done via the following command, after configuration is run.

./mach build-backend -b CompileDB

In order for rtags to index correctly, included files need to be copied and unified compilation files need to be created. Either run a full build of the tree, or if you only want indexes to be generated for the moment, run the following commands (assuming you're in the gecko repo root):

cd [gecko_build_directory]
make export
./config.status

To increase indexing speed, it's best to remove unified build files and test files from database updates. This can be done by creating a ~/.rdmrc file with the following contents, with [src_dir] replaced with either the repo or build directory for your checkout:

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

Once the rdm daemon is running, the DB can be added to rtags like so:

rc -J [gecko_build_directory]/compile_commands.json

Note that this process will take a while initially. However, once the database is built, it will only require incremental updates. As long as the rdm daemon is running in the background, the database will be updated based on changes to files.

irony (LLVM/Clang-based Code Completion)

Irony mode also requires a compile_commands.json. Instructions for the generation of that file can be found in the rtags section of this page.

Note that irony-mode, by default, uses elisp to parse the compile_commands.json file. As gecko is a very large codebase, this file can easily be multiple megabytes, which can make irony-mode take multiple seconds to load on a gecko file. It is recommended to use this fork of irony-mode, which requires the boost System and Filesystem libraries. Checking the bug to get this patch into the mainline of irony-mode is recommended, to see if the fork can be used or if the mainline repo can be used. Using the Boost version of the irony-mode server brings file load times to under 1s.

Projectile (Project Management)

Projectile comes preconfigured for many project types. Since, gecko uses its own special build system (mach), a new project type needs to be added. This can be done via adding the following elisp configuration command to your emacs configuration file.

Assuming projectile-global-mode is on, this will allow projectile to run the correct commands whenever it is working in a gecko repo.

gdb

Emacs comes with great integration with gdb, especially when using gdb-many-windows. However, when gdb is invoked via mach, some special arguments need to be passed in order to make sure the correct display mode is used. To use M-x gdb with mach on firefox, use the following command: