summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--README.md3
-rw-r--r--ale_linters/elixir/credo.vim51
-rw-r--r--doc/ale.txt1
3 files changed, 54 insertions, 1 deletions
diff --git a/README.md b/README.md
index 1e414095..f159e075 100644
--- a/README.md
+++ b/README.md
@@ -36,6 +36,7 @@ name. That seems to be the fairest way to arrange this table.
| CSS | [csslint](http://csslint.net/) |
| Cython (pyrex filetype) | [cython](http://cython.org/) |
| D | [dmd](https://dlang.org/dmd-linux.html)^ |
+| Elixir | [credo](https://github.com/rrrene/credo) |
| Fortran | [gcc](https://gcc.gnu.org/) |
| Go | [gofmt -e](https://golang.org/cmd/gofmt/), [go vet](https://golang.org/cmd/vet/), [golint](https://godoc.org/github.com/golang/lint) |
| Haskell | [ghc](https://www.haskell.org/ghc/) |
@@ -47,7 +48,7 @@ name. That seems to be the fairest way to arrange this table.
| PHP | [php -l](https://secure.php.net/), [phpcs](https://github.com/squizlabs/PHP_CodeSniffer) |
| Pug | [pug-lint](https://github.com/pugjs/pug-lint) |
| Python | [flake8](http://flake8.pycqa.org/en/latest/) |
-| Ruby | [rubocop](https://github.com/bbatsov/rubocop) |
+| Ruby | [rubocop](https://github.com/bbatsov/rubocop) |
| SASS | [sass-lint](https://www.npmjs.com/package/sass-lint) |
| SCSS | [sass-lint](https://www.npmjs.com/package/sass-lint), [scss-lint](https://github.com/brigade/scss-lint) |
| Scala | [scalac](http://scala-lang.org) |
diff --git a/ale_linters/elixir/credo.vim b/ale_linters/elixir/credo.vim
new file mode 100644
index 00000000..0d84fcd9
--- /dev/null
+++ b/ale_linters/elixir/credo.vim
@@ -0,0 +1,51 @@
+" Author: hauleth - https://github.com/haulethe
+
+if exists('g:loaded_ale_linters_elixir_credo')
+ finish
+endif
+
+let g:loaded_ale_linters_elixir_credo = 1
+
+function! ale_linters#elixir#credo#Handle(buffer, lines)
+ " Matches patterns line the following:
+ "
+ " stdin:19: F: Pipe chain should start with a raw value.
+ let l:pattern = '\v^stdin:(\d+):?(\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
+
+ let l:type = l:match[3]
+ let l:text = l:match[4]
+
+ if l:type ==# 'C'
+ let l:type = 'E'
+ elseif l:type ==# 'R'
+ let l:type = 'W'
+ endif
+
+ " vcol is Needed to indicate that the column is a character.
+ call add(l:output, {
+ \ 'bufnr': a:buffer,
+ \ 'lnum': l:match[1] + 0,
+ \ 'vcol': 0,
+ \ 'col': l:match[2] + 0,
+ \ 'type': l:type,
+ \ 'text': l:text,
+ \ 'nr': -1,
+ \})
+ endfor
+
+ return l:output
+endfunction
+
+call ale#linter#Define('elixir', {
+ \ 'name': 'credo',
+ \ 'executable': 'mix',
+ \ 'command': 'mix credo suggest --format=flycheck --read-from-stdin',
+ \ 'callback': 'ale_linters#elixir#credo#Handle' })
diff --git a/doc/ale.txt b/doc/ale.txt
index 6f47cc2b..07cfec31 100644
--- a/doc/ale.txt
+++ b/doc/ale.txt
@@ -56,6 +56,7 @@ The following languages and tools are supported.
* CSS: 'csslint'
* Cython (pyrex filetype): 'cython'
* D: 'dmd'
+* Elixir: 'credo'
* Fortran: 'gcc'
* Go: 'gofmt -e', 'go vet', 'golint'
* Haskell: 'ghc'