diff options
author | w0rp <devw0rp@gmail.com> | 2020-08-20 01:46:29 +0100 |
---|---|---|
committer | w0rp <devw0rp@gmail.com> | 2020-08-20 01:49:14 +0100 |
commit | 2b785688ead505dcbc1007374d3dca9914aa247a (patch) | |
tree | 6ca8b42b3eedc17e60931a6d22f61d71e8e142e3 /ale_linters/c | |
parent | 4d42ebc160d7cccd19c37ffe2ccb97752794be37 (diff) | |
download | ale-2b785688ead505dcbc1007374d3dca9914aa247a.zip |
#3299 Merge gcc and clang into a cc linter
Users can easily be confused when they set some options for a C or C++
compiler, and another compiler is run with different options, which
still reports errors. To remedy this, the existing `gcc` and `clang`
linters have been replaced with a `cc` linter that will run either
compiler.
This is a breaking change for ALE v3.0.0.
Diffstat (limited to 'ale_linters/c')
-rw-r--r-- | ale_linters/c/cc.vim (renamed from ale_linters/c/gcc.vim) | 32 | ||||
-rw-r--r-- | ale_linters/c/clang.vim | 33 |
2 files changed, 24 insertions, 41 deletions
diff --git a/ale_linters/c/gcc.vim b/ale_linters/c/cc.vim index 252285a3..6d920ab0 100644 --- a/ale_linters/c/gcc.vim +++ b/ale_linters/c/cc.vim @@ -1,12 +1,27 @@ " Author: w0rp <devw0rp@gmail.com> -" Description: gcc linter for c files +" Description: A C compiler linter for C files with gcc/clang, etc. -call ale#Set('c_gcc_executable', 'gcc') -call ale#Set('c_gcc_options', '-std=c11 -Wall') +call ale#Set('c_cc_executable', '<auto>') +call ale#Set('c_cc_options', '-std=c11 -Wall') -function! ale_linters#c#gcc#GetCommand(buffer, output) abort +function! ale_linters#c#cc#GetExecutable(buffer) abort + let l:executable = ale#Var(a:buffer, 'c_cc_executable') + + " Default to either clang or gcc. + if l:executable is# '<auto>' + if ale#engine#IsExecutable(a:buffer, 'clang') + let l:executable = 'clang' + else + let l:executable = 'gcc' + endif + endif + + return l:executable +endfunction + +function! ale_linters#c#cc#GetCommand(buffer, output) abort let l:cflags = ale#c#GetCFlags(a:buffer, a:output) - let l:ale_flags = ale#Var(a:buffer, 'c_gcc_options') + let l:ale_flags = ale#Var(a:buffer, 'c_cc_options') if l:cflags =~# '-std=' let l:ale_flags = substitute( @@ -29,9 +44,10 @@ function! ale_linters#c#gcc#GetCommand(buffer, output) abort endfunction call ale#linter#Define('c', { -\ 'name': 'gcc', +\ 'name': 'cc', +\ 'aliases': ['gcc', 'clang'], \ 'output_stream': 'stderr', -\ 'executable': {b -> ale#Var(b, 'c_gcc_executable')}, -\ 'command': {b -> ale#c#RunMakeCommand(b, function('ale_linters#c#gcc#GetCommand'))}, +\ 'executable': function('ale_linters#c#cc#GetExecutable'), +\ 'command': {b -> ale#c#RunMakeCommand(b, function('ale_linters#c#cc#GetCommand'))}, \ 'callback': 'ale#handlers#gcc#HandleGCCFormatWithIncludes', \}) diff --git a/ale_linters/c/clang.vim b/ale_linters/c/clang.vim deleted file mode 100644 index 84c105de..00000000 --- a/ale_linters/c/clang.vim +++ /dev/null @@ -1,33 +0,0 @@ -" Author: Masahiro H https://github.com/mshr-h -" Description: clang linter for c files - -call ale#Set('c_clang_executable', 'clang') -call ale#Set('c_clang_options', '-std=c11 -Wall') - -function! ale_linters#c#clang#GetCommand(buffer, output) abort - let l:cflags = ale#c#GetCFlags(a:buffer, a:output) - let l:ale_flags = ale#Var(a:buffer, 'c_clang_options') - - if l:cflags =~# '-std=' - let l:ale_flags = substitute( - \ l:ale_flags, - \ '-std=\(c\|gnu\)[0-9]\{2\}', - \ '', - \ 'g') - endif - - " -iquote with the directory the file is in makes #include work for - " headers in the same directory. - return '%e -S -x c -fsyntax-only' - \ . ' -iquote ' . ale#Escape(fnamemodify(bufname(a:buffer), ':p:h')) - \ . ale#Pad(l:cflags) - \ . ale#Pad(l:ale_flags) . ' -' -endfunction - -call ale#linter#Define('c', { -\ 'name': 'clang', -\ 'output_stream': 'stderr', -\ 'executable': {b -> ale#Var(b, 'c_clang_executable')}, -\ 'command': {b -> ale#c#RunMakeCommand(b, function('ale_linters#c#clang#GetCommand'))}, -\ 'callback': 'ale#handlers#gcc#HandleGCCFormatWithIncludes', -\}) |