This repository has been archived by the owner on Mar 16, 2021. It is now read-only.
/
flags.vim
81 lines (67 loc) · 2.41 KB
/
flags.vim
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
" File: autoload/cmake/flags.vim
" Description: Handles the act of injecting flags into Vim.
" Author: Jacky Alciné <me@jalcine.me>
" License: MIT
" Website: https://jalcine.github.io/cmake.vim
" Version: 0.3.0
" TODO: Filter the flags so that we only have warnings and includes passed
" into the mix.
func! cmake#flags#filter(flags)
let l:flags = a:flags
if g:cmake_filter_flags == 1 && !empty(l:flags)
for flag in flags
let l:index = index(flags, flag)
let l:isAInclude = stridx(flag, '-I') || stridx(flag, '-i')
let l:isAWarning = stridx(flag, '-W')
endfor
endif
return l:flags
endfunc!
func! cmake#flags#inject()
let target = cmake#targets#for_file(fnamemodify(bufname('%'), ':p'))
if empty(target)
return
endif
call cmake#flags#inject_to_ycm(target)
call cmake#flags#inject_to_syntastic(target)
endfunc
" TODO Fix this; it doesn't use the right Syntastic option.
func! cmake#flags#inject_to_syntastic(target)
if g:cmake_inject_flags.syntastic != 1
return
endif
let l:flags = cmake#targets#flags(a:target)
if empty(l:flags)
return
endif
for l:language in keys(l:flags)
"let l:checker_val = "g:syntastic_" . l:language . "_checkers"
"if !exists(l:checker_val)
"continue
"endif
"let l:checkers = eval(l:checker_val)
"for l:checker in l:checkers
"let l:args = l:flags[l:language]
"let l:sy_flag = "g:syntastic_" . l:language . "_" . l:checker . "_args"
"exec("let " . l:sy_flag . "='" . join(l:args, " ") . "'")
"endfor
endfor
endfunc!
func! cmake#flags#collect(flags_file, prefix)
let l:flags = split(system("grep '" . a:prefix . "_FLAGS = ' " . a:flags_file .
\ ' | cut -b ' . (strlen(a:prefix) + strlen('_FLAGS = ')) . '-'))
let l:flags = cmake#flags#filter(l:flags)
let l:defines = split(system("grep '" . a:prefix . "_DEFINES = ' " . a:flags_file
\ . ' | cut -b ' . (strlen(a:prefix) + strlen('_DEFINES = ')) . '-'))
let l:params = l:flags + l:defines
return l:params
endfunc!
" TODO: Don't clobber the values for vim data in YCM.
func! cmake#flags#inject_to_ycm(target)
if g:cmake_inject_flags.ycm != 1
return
endif
let g:cmake_binary_dir = cmake#util#binary_dir()
let g:cmake_current_flags = cmake#targets#flags(a:target)
let g:ycm_extra_conf_vim_data = ['g:cmake_binary_dir', 'g:cmake_current_flags']
endfunc!