blob: d3f57b054d34f71c93a4e5b3f799469b6fd28505 [file] [log] [blame] [view]
# YouCompleteMe integration
[YouCompleteMe](http://ycm-core.github.io/YouCompleteMe/) is a semantic
code-completion engine. YouCompleteMe works natively with Vim but it can also be
integrated with other editors through [ycmd](https://github.com/Valloric/ycmd).
## Install YouCompleteMe in your editor
{% dynamic if user.is_googler %}
### [Googlers only] gLinux
(This applies to anyone compiling on gLinux, even if editing over SSHFS on
MacOS) See the Google intranet specific instructions [go/ycm](http://go/ycm).
You'll also need to setup
`${FUCHSIA_DIR}/scripts/youcompleteme/default_settings.json` as the default
settings path in your editor, in order to disable the internal `use_clangd`
flag. If you want to use clangd, you can additionally edit that file to set
`use_clangd` to 1, and `clang_binary_path` to
`${FUCHSIA_DIR}/prebuilt/third_party/clang/${HOST_PLATFORM}/bin/clangd`.
{% dynamic else %}
See the [installation
guide](https://github.com/Valloric/YouCompleteMe#installation).
Note: Installing YCM on MacOS with Homebrew is not recommended because of
library compatibility errors. Use the official installation guide instead.
{% dynamic endif %}
## Generate compilation database
YouCompleteMe (and other tools like clang-tidy) require a [JSON compilation
database](https://clang.llvm.org/docs/JSONCompilationDatabase.html) that
specifies how each file is compiled. `fx` will automatically symlink the database,
`compile_commands.json`, from your current build directory to your source root.
If this database is not present, then Vim can be configured to fall back to the configuration
in [/scripts/youcompleteme/ycm_extra_conf.py](/scripts/youcompleteme/ycm_extra_conf.py). See
[Vim configuration](vim.md) for how to set this up.
## Use it
YouCompleteMe will use `compile_commands.json` to do code completion and find
symbol definitions/declarations. See your editor's YouCompleteMe docs for
details. The editor should pick up `compile_commands.json` file automatically.
See [Vim setup](vim.md) for instructions on configuring Vim for Fuchsia development.
## Other editors (ycmd)
You'll need to set the ycmd config option `global_ycm_extra_conf` to point to
`${FUCHSIA_DIR}/scripts/youcompleteme/ycm_extra_conf.py`.
Note you may need to manually replace `${FUCHSIA_DIR}` with the correct path.
Alternatively, you can create a `.ycm_extra_conf.py` symbolic link to let YCM
automatically find the config for any fuchsia repository:
```posix-terminal
ln -s $FUCHSIA_DIR/scripts/youcompleteme/ycm_extra_conf.py $FUCHSIA_DIR/.ycm_extra_conf.py
```