Add support for ASM files using GCC

This commit is contained in:
Lucas Kolstad 2017-03-25 16:02:59 -07:00
parent 822b19ac83
commit d84d91ff35
5 changed files with 90 additions and 0 deletions

1
.gitignore vendored
View File

@ -2,3 +2,4 @@
/doc/tags
.*
*.obj
tags

View File

@ -52,6 +52,7 @@ name. That seems to be the fairest way to arrange this table.
| Language | Tools |
| -------- | ----- |
| ASM | [gcc](https://gcc.gnu.org) |
| Ansible | [ansible-lint](https://github.com/willthames/ansible-lint) |
| AsciiDoc | [proselint](http://proselint.com/)|
| Bash | [-n flag](https://www.gnu.org/software/bash/manual/bash.html#index-set), [shellcheck](https://www.shellcheck.net/) |

44
ale_linters/asm/gcc.vim Normal file
View File

@ -0,0 +1,44 @@
" Author: Lucas Kolstad <lkolstad@uw.edu>
" Description: gcc linter for asm files
let g:ale_asm_gcc_options =
\ get(g:, 'ale_asm_gcc_options', '-Wall')
function! ale_linters#asm#gcc#GetCommand(buffer) abort
return 'gcc -x assembler -fsyntax-only '
\ . '-iquote ' . fnameescape(fnamemodify(bufname(a:buffer), ':p:h'))
\ . ' ' . g:ale_asm_gcc_options . ' -'
endfunction
function! ale_linters#asm#gcc#Handle(buffer, lines) abort
let l:pattern = '^.\+:\(\d\+\): \([^:]\+\): \(.\+\)$'
let l:output = []
for l:line in a:lines
let l:match = matchlist(l:line, l:pattern)
if len(l:match) == 0
continue
endif
call add(l:output, {
\ 'bufnr': a:buffer,
\ 'lnum': l:match[1] + 0,
\ 'vcol': 0,
\ 'col': 0,
\ 'text': l:match[3],
\ 'type': l:match[2] =~? 'error' ? 'E' : 'W',
\ 'nr': -1,
\})
endfor
return l:output
endfunction
call ale#linter#Define('asm', {
\ 'name': 'gcc',
\ 'output_stream': 'stderr',
\ 'executable': 'gcc',
\ 'command_callback': 'ale_linters#asm#gcc#GetCommand',
\ 'callback': 'ale_linters#asm#gcc#Handle',
\})

View File

@ -43,6 +43,7 @@ CONTENTS *ale-contents*
4.31. yamllint........................|ale-linter-options-yamllint|
4.32. cmakelint.......................|ale-linter-options-cmakelint|
4.33. perl-perl.......................|ale-linter-options-perl-perl|
4.34. asm-gcc.........................|ale-linter-options-asm-gcc|
5. Linter Integration Notes.............|ale-linter-integration|
5.1. merlin..........................|ale-linter-integration-ocaml-merlin|
5.2. rust.............................|ale-integration-rust|
@ -74,6 +75,7 @@ ALE supports the following key features:
The following languages and tools are supported.
* ASM: 'gcc'
* Ansible: 'ansible-lint'
* Asciidoc: 'proselint'
* Bash: 'shell' (-n flag), 'shellcheck'
@ -1120,6 +1122,16 @@ g:ale_perl_perl_options *g:ale_perl_perl_options*
This variable can be changed to alter the command-line arguments to the perl
invocation.
-------------------------------------------------------------------------------
4.34. asm-gcc *ale-linter-options-asm-gcc*
g:ale_asm_gcc_options *g:ale_asm_gcc_options*
Type: |String|
Default: `'-Wall'`
This variable can be set to pass additional options to gcc.
===============================================================================
5. Linter Integration Notes *ale-linter-integration*

View File

@ -0,0 +1,32 @@
Execute(The asm GCC handler should parse lines from GCC 6.3.1 correctly):
runtime ale_linters/asm/gcc.vim
AssertEqual
\ [
\ {
\ 'bufnr': 357,
\ 'lnum': 38,
\ 'vcol': 0,
\ 'col': 0,
\ 'text': "too many memory references for `mov'",
\ 'type': 'E',
\ 'nr': -1,
\ },
\ {
\ 'bufnr': 357,
\ 'lnum': 42,
\ 'vcol': 0,
\ 'col': 0,
\ 'text': "incorrect register `%ax' used with `l' suffix",
\ 'type': 'E',
\ 'nr': -1,
\ },
\ ],
\ ale_linters#asm#gcc#Handle(357, [
\ "{standard input}: Assembler messages:",
\ "{standard_input}:38: Error: too many memory references for `mov'",
\ "{standard input}:42: Error: incorrect register `%ax' used with `l' suffix",
\ ])
After:
call ale#linter#Reset()