| " 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. |
| 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 |