Merge pull request #220 from kongo2002/c_config
Add configuration file support for C/C++
This commit is contained in:
commit
e961f17c7c
@ -65,6 +65,41 @@ function! syntastic#c#GetIncludeDirs(filetype)
|
|||||||
return join(map(s:Unique(include_dirs), '"-I" . v:val'), ' ')
|
return join(map(s:Unique(include_dirs), '"-I" . v:val'), ' ')
|
||||||
endfunction
|
endfunction
|
||||||
|
|
||||||
|
" read additional compiler flags from the given configuration file
|
||||||
|
" the file format and its parsing mechanism is inspired by clang_complete
|
||||||
|
function! syntastic#c#ReadConfig(file)
|
||||||
|
" search in the current file's directory upwards
|
||||||
|
let config = findfile(a:file, '.;')
|
||||||
|
if config == '' || !filereadable(config) | return '' | endif
|
||||||
|
|
||||||
|
" convert filename into absolute path
|
||||||
|
let filepath = substitute(fnamemodify(config, ':p:h'), '\', '/', 'g')
|
||||||
|
|
||||||
|
" try to read config file
|
||||||
|
try
|
||||||
|
let lines = map(readfile(config),
|
||||||
|
\ 'substitute(v:val, ''\'', ''/'', ''g'')')
|
||||||
|
catch /E484/
|
||||||
|
return ''
|
||||||
|
endtry
|
||||||
|
|
||||||
|
let parameters = []
|
||||||
|
for line in lines
|
||||||
|
let matches = matchlist(line, '^\s*-I\s*\(\S\+\)')
|
||||||
|
if matches != [] && matches[1] != ''
|
||||||
|
" this one looks like an absolute path
|
||||||
|
if match(matches[1], '^\%(/\|\a:\)') != -1
|
||||||
|
call add(parameters, '-I' . matches[1])
|
||||||
|
else
|
||||||
|
call add(parameters, '-I' . filepath . '/' . matches[1])
|
||||||
|
endif
|
||||||
|
else
|
||||||
|
call add(parameters, line)
|
||||||
|
endif
|
||||||
|
endfor
|
||||||
|
|
||||||
|
return join(parameters, ' ')
|
||||||
|
endfunction
|
||||||
|
|
||||||
" search the first 100 lines for include statements that are
|
" search the first 100 lines for include statements that are
|
||||||
" given in the handlers dictionary
|
" given in the handlers dictionary
|
||||||
|
@ -46,6 +46,13 @@
|
|||||||
"
|
"
|
||||||
" let g:syntastic_c_compiler_options = ' -ansi'
|
" let g:syntastic_c_compiler_options = ' -ansi'
|
||||||
"
|
"
|
||||||
|
" Additionally the setting 'g:syntastic_c_config_file' allows you to define a
|
||||||
|
" file that contains additional compiler arguments like include directories or
|
||||||
|
" CFLAGS. The file is expected to contain one option per line. If none is
|
||||||
|
" given the filename defaults to '.syntastic_c_config':
|
||||||
|
"
|
||||||
|
" let g:syntastic_c_config_file = '.config'
|
||||||
|
"
|
||||||
" Using the global variable 'g:syntastic_c_remove_include_errors' you can
|
" Using the global variable 'g:syntastic_c_remove_include_errors' you can
|
||||||
" specify whether errors of files included via the g:syntastic_c_include_dirs'
|
" specify whether errors of files included via the g:syntastic_c_include_dirs'
|
||||||
" setting are removed from the result set:
|
" setting are removed from the result set:
|
||||||
@ -68,6 +75,10 @@ if !exists('g:syntastic_c_compiler_options')
|
|||||||
let g:syntastic_c_compiler_options = '-std=gnu99'
|
let g:syntastic_c_compiler_options = '-std=gnu99'
|
||||||
endif
|
endif
|
||||||
|
|
||||||
|
if !exists('g:syntastic_c_config_file')
|
||||||
|
let g:syntastic_c_config_file = '.syntastic_c_config'
|
||||||
|
endif
|
||||||
|
|
||||||
function! SyntaxCheckers_c_GetLocList()
|
function! SyntaxCheckers_c_GetLocList()
|
||||||
let makeprg = 'gcc -fsyntax-only '
|
let makeprg = 'gcc -fsyntax-only '
|
||||||
let errorformat = '%-G%f:%s:,%-G%f:%l: %#error: %#(Each undeclared '.
|
let errorformat = '%-G%f:%s:,%-G%f:%l: %#error: %#(Each undeclared '.
|
||||||
@ -113,6 +124,9 @@ function! SyntaxCheckers_c_GetLocList()
|
|||||||
let makeprg .= b:syntastic_c_cflags
|
let makeprg .= b:syntastic_c_cflags
|
||||||
endif
|
endif
|
||||||
|
|
||||||
|
" add optional config file parameters
|
||||||
|
let makeprg .= syntastic#c#ReadConfig(g:syntastic_c_config_file)
|
||||||
|
|
||||||
" process makeprg
|
" process makeprg
|
||||||
let errors = SyntasticMake({ 'makeprg': makeprg,
|
let errors = SyntasticMake({ 'makeprg': makeprg,
|
||||||
\ 'errorformat': errorformat })
|
\ 'errorformat': errorformat })
|
||||||
|
@ -46,6 +46,13 @@
|
|||||||
"
|
"
|
||||||
" let g:syntastic_cpp_compiler_options = ' -std=c++0x'
|
" let g:syntastic_cpp_compiler_options = ' -std=c++0x'
|
||||||
"
|
"
|
||||||
|
" Additionally the setting 'g:syntastic_cpp_config_file' allows you to define
|
||||||
|
" a file that contains additional compiler arguments like include directories
|
||||||
|
" or CFLAGS. The file is expected to contain one option per line. If none is
|
||||||
|
" given the filename defaults to '.syntastic_cpp_config':
|
||||||
|
"
|
||||||
|
" let g:syntastic_cpp_config_file = '.config'
|
||||||
|
"
|
||||||
" Using the global variable 'g:syntastic_cpp_remove_include_errors' you can
|
" Using the global variable 'g:syntastic_cpp_remove_include_errors' you can
|
||||||
" specify whether errors of files included via the
|
" specify whether errors of files included via the
|
||||||
" g:syntastic_cpp_include_dirs' setting are removed from the result set:
|
" g:syntastic_cpp_include_dirs' setting are removed from the result set:
|
||||||
@ -64,6 +71,10 @@ endif
|
|||||||
let s:save_cpo = &cpo
|
let s:save_cpo = &cpo
|
||||||
set cpo&vim
|
set cpo&vim
|
||||||
|
|
||||||
|
if !exists('g:syntastic_cpp_config_file')
|
||||||
|
let g:syntastic_cpp_config_file = '.syntastic_cpp_config'
|
||||||
|
endif
|
||||||
|
|
||||||
function! SyntaxCheckers_cpp_GetLocList()
|
function! SyntaxCheckers_cpp_GetLocList()
|
||||||
let makeprg = 'g++ -fsyntax-only '
|
let makeprg = 'g++ -fsyntax-only '
|
||||||
let errorformat = '%-G%f:%s:,%f:%l:%c: %m,%f:%l: %m'
|
let errorformat = '%-G%f:%s:,%f:%l:%c: %m,%f:%l: %m'
|
||||||
@ -101,6 +112,9 @@ function! SyntaxCheckers_cpp_GetLocList()
|
|||||||
let makeprg .= b:syntastic_cpp_cflags
|
let makeprg .= b:syntastic_cpp_cflags
|
||||||
endif
|
endif
|
||||||
|
|
||||||
|
" add optional config file parameters
|
||||||
|
let makeprg .= syntastic#c#ReadConfig(g:syntastic_cpp_config_file)
|
||||||
|
|
||||||
" process makeprg
|
" process makeprg
|
||||||
let errors = SyntasticMake({ 'makeprg': makeprg,
|
let errors = SyntasticMake({ 'makeprg': makeprg,
|
||||||
\ 'errorformat': errorformat })
|
\ 'errorformat': errorformat })
|
||||||
|
Loading…
Reference in New Issue
Block a user