From 8c7193347cafadb0865f877f25e8c5a672d8c410 Mon Sep 17 00:00:00 2001 From: Prashanth Chandra Date: Sun, 2 Oct 2016 15:39:21 +0800 Subject: [PATCH] Add coffeelint for coffeescript --- README.md | 1 + ale_linters/coffee/coffeelint.vim | 51 +++++++++++++++++++++++++++++++ 2 files changed, 52 insertions(+) create mode 100644 ale_linters/coffee/coffeelint.vim diff --git a/README.md b/README.md index dd05454..e71e1cf 100644 --- a/README.md +++ b/README.md @@ -31,6 +31,7 @@ name. That seems to be the fairest way to arrange this table. | Bash | [-n flag](https://www.gnu.org/software/bash/manual/bash.html#index-set) | | Bourne Shell | [-n flag](http://linux.die.net/man/1/sh) | | C | [gcc](https://gcc.gnu.org/) | +| CoffeeScript | [coffeelint](https://www.npmjs.com/package/coffeelint) | | D | [dmd](https://dlang.org/dmd-linux.html)^ | | Fortran | [gcc](https://gcc.gnu.org/) | | Haskell | [ghc](https://www.haskell.org/ghc/)^ | diff --git a/ale_linters/coffee/coffeelint.vim b/ale_linters/coffee/coffeelint.vim new file mode 100644 index 0000000..4a1d732 --- /dev/null +++ b/ale_linters/coffee/coffeelint.vim @@ -0,0 +1,51 @@ +" Author: prashcr - https://github.com/prashcr + +if exists('g:loaded_ale_linters_coffee_coffeelint') + finish +endif + +let g:loaded_ale_linters_coffee_coffeelint = 1 + +function! ale_linters#coffee#coffeelint#Handle(buffer, lines) + " Matches patterns like the following: + " + " path,lineNumber,lineNumberEnd,level,message + " stdin,14,,error,Throwing strings is forbidden + " + " Note that we currently ignore lineNumberEnd for multiline errors + let pattern = 'stdin,\(\d\+\),\(\d*\),\(.\+\),\(.\+\)' + let output = [] + + for line in a:lines + let l:match = matchlist(line, pattern) + + if len(l:match) == 0 + continue + endif + + let line = l:match[1] + 0 + let column = 1 + let type = l:match[3] ==# 'error' ? 'error' : 'warn' + let text = type . ': ' . l:match[4] + + " vcol is needed to indicate that the column is a character + call add(output, { + \ 'bufnr': a:buffer, + \ 'lnum': line, + \ 'vcol': 0, + \ 'col': column, + \ 'text': text, + \ 'type': type, + \ 'nr': -1, + \}) + endfor + + return output +endfunction + +call ALEAddLinter('coffee', { +\ 'name': 'coffeelint', +\ 'executable': 'coffeelint', +\ 'command': 'coffeelint --stdin --reporter csv', +\ 'callback': 'ale_linters#coffee#coffeelint#Handle', +\})