A typical Atom workflow consists of the following.

  1. Use Ctrl-Shift-R to find a symbol in the .tags file or Ctrl-P to find a file by name.
  2. Switch between the header and the source using Alt-O.
  3. While editing, you-complete-me package helps with C++ auto-completion and shows compile errors through lint package.
  4. Press Ctrl-Shift-P and type format<Enter> to format the code.
  5. Select the target to build by pressing F7 and typing, for example, base_unittests.
  6. Rebuild again by pressing F9.

Atom packages

To setup this workflow, install Atom packages for Chrome development.

$ apm install build-ninja clang-format \
    linter linter-eslint switch-header-source you-complete-me


Install C++ auto-completion engine.

$ git clone ~/.ycmd
$ cd ~/.ycmd
$ ./ --clang-completer

JavaScript lint

Install JavaScript linter for Blink layout tests.

$ npm install -g eslint eslint-config-google

Configure the JavaScript linter to use the Google style by default by replacing the contents of ~/.eslintrc with the following.

    "extends": "google",
    "env": {
      "browser": true


Configure Atom by replacing the contents of ~/.atom/config.cson with the following. Replace <path-of-your-home-dir> and <path-of-your-chrome-checkout> with the actual full paths of your home directory and chrome checkout. For example, these can be /Users/bob and /Users/bob/chrome/src.

  # Configure ninja builder.
    ninjaOptions: [
      # The number of jobs to use when running ninja. Adjust to taste.
    subdirs: [
      # The location of your file.
  # Do not auto-format entire files on save.
    formatCOnSave: false
    formatCPlusPlusOnSave: false
    # Treat .h files as C++.
      "source.cpp": [
    # Don't send metrics if you're working on anything sensitive.
    disabledPackages: [
  # Use spaces instead of tabs.
    tabType: "soft"
  # Show lint errors only when you save the file.
    lintOnFly: false
  # Configure JavaScript lint.
    eslintrcPath: "<path-of-your-home-dir>/.eslintrc"
    useGlobalEslint: true
  # Don't show ignored files in the project file browser.
    hideIgnoredNames: true
    hideVcsIgnoredFiles: true
  # Configure C++ autocomplete and lint.
    globalExtraConfig: "<path-of-your-chrome-checkout>/tools/vim/"
    ycmdPath: "<path-of-your-home-dir>/.ycmd/"
# Java uses 4 space indents and 100 character lines.
    preferredLineLength: 100
    tabLength: 4

Symbol lookup

Atom fuzzy file finder is slow to index all files in Chrome. If you're working on a project that frequently uses foo or bar in files names, you can create a small .tags file to efficiently search the symbols within these files. Be sure to use “Exuberant Ctags.”

$ git ls | egrep -i "foo|bar" | ctags -f .tags -L -

Don't create a ctags file for the full Chrome repository, as that would result in ~9GB tag file that will not be usable in Atom.