| " Copyright (c) 2017 The Fuchsia Authors. All rights reserved. | |
| " Use of this source code is governed by a BSD-style license that can be | |
| " found in the LICENSE file. | |
| " Use `fx build` to build when you type :make | |
| " Helper to clean up quickfix list in make.vim | |
| let &makeprg="fx build" | |
| " Look for the fuchsia root containing the current directory by looking for a | |
| " .jiri_manifest file | |
| let jiri_manifest = findfile(".jiri_manifest", ".;") | |
| if jiri_manifest != "" | |
| let g:fuchsia_dir = fnamemodify(jiri_manifest, ":p:h") | |
| " Get the current build dir from fx | |
| let g:fuchsia_build_dir = systemlist(g:fuchsia_dir . "/scripts/fx get-build-dir")[0] | |
| " Tell YCM where to find its configuration script | |
| let g:ycm_global_ycm_extra_conf = g:fuchsia_dir . '/scripts/youcompleteme/ycm_extra_conf.py' | |
| " Do not load fuchsia/.ycm_extra_conf in case the user created a symlink for | |
| " other editors. | |
| let g:ycm_extra_conf_globlist = [ '!' . g:fuchsia_dir . '/*'] | |
| " Google-internal options - use clangd completer if the user has a compilation | |
| " database (built with `fx compdb`). | |
| if filereadable(g:fuchsia_dir . '/compile_commands.json') | |
| let g:ycm_use_clangd = 1 | |
| let g:ycm_clangd_binary_path = systemlist(g:fuchsia_dir . "/scripts/youcompleteme/paths.py CLANG_PATH")[0] . '/bin/clangd' | |
| " Disable clang tidy warnings for YCM, they're too noisy and cause you to quickly hit the YCM | |
| " diagnostics limit | |
| let g:ycm_clangd_args = ["-clang-tidy=false"] | |
| else | |
| let g:ycm_use_clangd = 0 | |
| endif | |
| let &runtimepath .= "," . | |
| \ g:fuchsia_dir . "/scripts/vim/," . | |
| \ g:fuchsia_dir . "/garnet/public/lib/fidl/tools/vim/," . | |
| \ g:fuchsia_dir . "/third_party/json5.vim/" | |
| " The "filetype plugin" line must come AFTER the changes to runtimepath | |
| " above (so the proper directories are searched), but must come BEFORE the | |
| " FuchsiaBuffer function below (to work around a bug on MacOS where | |
| " Ctrl-] does not work because filetype is undefined instead of being | |
| " equal to "cpp".) | |
| filetype plugin indent on | |
| function! FuchsiaBuffer() | |
| let full_path = expand("%:p") | |
| let extension = expand("%:e") | |
| " Only run if the buffer is inside the Fuchsia dir | |
| if full_path !~ '^\V' . escape(g:fuchsia_dir, '\') | |
| return | |
| endif | |
| let b:is_fuchsia = 1 | |
| " Set up path so that 'gf' and :find do what we want. | |
| " This includes the directory of the file, cwd, all layers, layer public | |
| " directories, the build directory, the gen directory and the zircon | |
| " sysroot include directory. | |
| let &l:path = ".,," . | |
| \ $PWD . "/**/," . | |
| \ g:fuchsia_dir . "," . | |
| \ g:fuchsia_dir . "/*/," . | |
| \ g:fuchsia_dir . "/*/public/," . | |
| \ g:fuchsia_build_dir . "," . | |
| \ g:fuchsia_build_dir . "/gen," . | |
| \ g:fuchsia_build_dir . "/sdk/exported/zircon_sysroot/arch/*/sysroot/include" | |
| " Make sure Dart files are recognized as such. | |
| if extension == "dart" | |
| set filetype=dart | |
| endif | |
| " The Buf* autocmds sometimes run before and sometimes after FileType. | |
| if &filetype == "cpp" | |
| call FuchsiaCppBuffer() | |
| endif | |
| endfunction | |
| " This may be called twice because autocmds arrive in different orders on | |
| " different platforms. | |
| function! FuchsiaCppBuffer() | |
| if !exists("b:is_fuchsia") || !b:is_fuchsia | |
| return | |
| endif | |
| if exists('g:loaded_youcompleteme') | |
| " Replace the normal go to tag key with YCM when editing C/CPP. | |
| nnoremap <C-]> :YcmCompleter GoTo<cr> | |
| endif | |
| set textwidth=100 | |
| endfunction | |
| augroup fuchsia | |
| au! | |
| autocmd BufRead,BufNewFile * call FuchsiaBuffer() | |
| autocmd Filetype cpp call FuchsiaCppBuffer() | |
| " .cmx files are JSON | |
| autocmd BufRead,BufNewFile *.cmx set syntax=json | |
| " .cml files are JSON5 | |
| autocmd BufRead,BufNewFile *.cml set syntax=json5 | |
| " zsh completion functions are zsh scripts | |
| autocmd BufRead,BufNewFile */scripts/zsh-completion/_* set filetype=zsh | |
| " .tmpl.go files are Go template files | |
| autocmd BufRead,BufNewFile *.tmpl.go set syntax=gotmpl | |
| " If this is a golden file, strip the .golden and run autocommands | |
| " This will allow syntax highlighting of FIDL goldens. | |
| autocmd BufNewFile *.golden execute "doautocmd BufNewFile " . expand("%:r") | |
| autocmd BufRead *.golden execute "doautocmd BufRead " . expand("%:r") | |
| augroup END | |
| endif |