mirror of
https://github.com/dense-analysis/ale.git
synced 2025-12-09 05:54:45 +08:00
Merge remote-tracking branch 'upstream/master'
This commit is contained in:
@@ -8,7 +8,7 @@ call ale#Set('c_build_dir', '')
|
|||||||
function! ale_linters#c#clangd#GetCommand(buffer) abort
|
function! ale_linters#c#clangd#GetCommand(buffer) abort
|
||||||
let l:build_dir = ale#c#GetBuildDirectory(a:buffer)
|
let l:build_dir = ale#c#GetBuildDirectory(a:buffer)
|
||||||
|
|
||||||
return '%e -x c'
|
return '%e'
|
||||||
\ . ale#Pad(ale#Var(a:buffer, 'c_clangd_options'))
|
\ . ale#Pad(ale#Var(a:buffer, 'c_clangd_options'))
|
||||||
\ . (!empty(l:build_dir) ? ' -compile-commands-dir=' . ale#Escape(l:build_dir) : '')
|
\ . (!empty(l:build_dir) ? ' -compile-commands-dir=' . ale#Escape(l:build_dir) : '')
|
||||||
endfunction
|
endfunction
|
||||||
|
|||||||
@@ -5,6 +5,10 @@ function! ale_linters#crystal#crystal#Handle(buffer, lines) abort
|
|||||||
let l:output = []
|
let l:output = []
|
||||||
|
|
||||||
for l:error in ale#util#FuzzyJSONDecode(a:lines, [])
|
for l:error in ale#util#FuzzyJSONDecode(a:lines, [])
|
||||||
|
if !has_key(l:error, 'file')
|
||||||
|
continue
|
||||||
|
endif
|
||||||
|
|
||||||
call add(l:output, {
|
call add(l:output, {
|
||||||
\ 'lnum': l:error.line + 0,
|
\ 'lnum': l:error.line + 0,
|
||||||
\ 'col': l:error.column + 0,
|
\ 'col': l:error.column + 0,
|
||||||
|
|||||||
@@ -1,6 +1,15 @@
|
|||||||
" Author: Baabelfish
|
" Author: Baabelfish
|
||||||
" Description: Typechecking for nim files
|
" Description: Typechecking for nim files
|
||||||
|
|
||||||
|
let s:end_col_patterns = [
|
||||||
|
\ '\v''([^'']+)'' is declared but not used.*',
|
||||||
|
\ '\videntifier expected, but found ''([^'']+)''',
|
||||||
|
\ '\vimported and not used: ''([^'']+)''.*',
|
||||||
|
\ '\vundeclared identifier: ''([^'']+)''',
|
||||||
|
\ '\v''([^'']+)'' cannot be assigned to',
|
||||||
|
\ '\vredefinition of ''([^'']+)'';',
|
||||||
|
\]
|
||||||
|
|
||||||
function! ale_linters#nim#nimcheck#Handle(buffer, lines) abort
|
function! ale_linters#nim#nimcheck#Handle(buffer, lines) abort
|
||||||
let l:buffer_filename = fnamemodify(bufname(a:buffer), ':p:t')
|
let l:buffer_filename = fnamemodify(bufname(a:buffer), ':p:t')
|
||||||
let l:pattern = '^\(.\+\.nim\)(\(\d\+\), \(\d\+\)) \(.\+\)'
|
let l:pattern = '^\(.\+\.nim\)(\(\d\+\), \(\d\+\)) \(.\+\)'
|
||||||
@@ -43,6 +52,11 @@ function! ale_linters#nim#nimcheck#Handle(buffer, lines) abort
|
|||||||
let l:item.code = l:code_match[2]
|
let l:item.code = l:code_match[2]
|
||||||
endif
|
endif
|
||||||
|
|
||||||
|
" Find position end_col.
|
||||||
|
for l:col_match in ale#util#GetMatches(l:item.text, s:end_col_patterns)
|
||||||
|
let l:item.end_col = l:item.col + len(l:col_match[1]) - 1
|
||||||
|
endfor
|
||||||
|
|
||||||
call add(l:output, l:item)
|
call add(l:output, l:item)
|
||||||
endfor
|
endfor
|
||||||
|
|
||||||
|
|||||||
@@ -2,13 +2,13 @@
|
|||||||
" Description: Fixing R files with styler.
|
" Description: Fixing R files with styler.
|
||||||
|
|
||||||
call ale#Set('r_styler_executable', 'Rscript')
|
call ale#Set('r_styler_executable', 'Rscript')
|
||||||
call ale#Set('r_styler_options', 'tidyverse_style')
|
call ale#Set('r_styler_options', 'tidyverse_style()')
|
||||||
|
|
||||||
function! ale#fixers#styler#Fix(buffer) abort
|
function! ale#fixers#styler#Fix(buffer) abort
|
||||||
return {
|
return {
|
||||||
\ 'command': 'Rscript --vanilla -e '
|
\ 'command': 'Rscript --vanilla -e '
|
||||||
\ . '"suppressPackageStartupMessages(library(styler));'
|
\ . '"suppressPackageStartupMessages(library(styler));'
|
||||||
\ . 'style_file(commandArgs(TRUE), style = '
|
\ . 'style_file(commandArgs(TRUE), transformers = '
|
||||||
\ . ale#Var(a:buffer, 'r_styler_options') . ')"'
|
\ . ale#Var(a:buffer, 'r_styler_options') . ')"'
|
||||||
\ . ' %t',
|
\ . ' %t',
|
||||||
\ 'read_temporary_file': 1,
|
\ 'read_temporary_file': 1,
|
||||||
|
|||||||
@@ -9,18 +9,14 @@ Before:
|
|||||||
Save b:ale_c_build_dir_names
|
Save b:ale_c_build_dir_names
|
||||||
Save b:ale_c_parse_compile_commands
|
Save b:ale_c_parse_compile_commands
|
||||||
|
|
||||||
let b:command_tail = ' -x c'
|
|
||||||
|
|
||||||
After:
|
After:
|
||||||
unlet! b:command_tail
|
|
||||||
|
|
||||||
call ale#assert#TearDownLinterTest()
|
call ale#assert#TearDownLinterTest()
|
||||||
|
|
||||||
Execute(The language string should be correct):
|
Execute(The language string should be correct):
|
||||||
AssertLSPLanguage 'c'
|
AssertLSPLanguage 'c'
|
||||||
|
|
||||||
Execute(The default executable should be correct):
|
Execute(The default executable should be correct):
|
||||||
AssertLinter 'clangd', ale#Escape('clangd') . b:command_tail
|
AssertLinter 'clangd', ale#Escape('clangd')
|
||||||
|
|
||||||
Execute(The project root should be detected correctly):
|
Execute(The project root should be detected correctly):
|
||||||
call ale#test#SetFilename(tempname() . '/dummy.c')
|
call ale#test#SetFilename(tempname() . '/dummy.c')
|
||||||
@@ -34,12 +30,12 @@ Execute(The project root should be detected correctly):
|
|||||||
Execute(The executable should be configurable):
|
Execute(The executable should be configurable):
|
||||||
let g:ale_c_clangd_executable = 'foobar'
|
let g:ale_c_clangd_executable = 'foobar'
|
||||||
|
|
||||||
AssertLinter 'foobar', ale#Escape('foobar') . b:command_tail
|
AssertLinter 'foobar', ale#Escape('foobar')
|
||||||
|
|
||||||
Execute(The options should be configurable):
|
Execute(The options should be configurable):
|
||||||
let b:ale_c_clangd_options = '-compile-commands-dir=foo'
|
let b:ale_c_clangd_options = '-compile-commands-dir=foo'
|
||||||
|
|
||||||
AssertLinter 'clangd', ale#Escape('clangd') . b:command_tail . ' ' . b:ale_c_clangd_options
|
AssertLinter 'clangd', ale#Escape('clangd') . ' ' . b:ale_c_clangd_options
|
||||||
|
|
||||||
Execute(The compile command database should be detected correctly):
|
Execute(The compile command database should be detected correctly):
|
||||||
call ale#test#SetFilename('clangd_paths/with_build_dir/dummy_src/dummy.c')
|
call ale#test#SetFilename('clangd_paths/with_build_dir/dummy_src/dummy.c')
|
||||||
@@ -49,7 +45,7 @@ Execute(The compile command database should be detected correctly):
|
|||||||
let b:ale_c_build_dir_names = ['unusual_build_dir_name']
|
let b:ale_c_build_dir_names = ['unusual_build_dir_name']
|
||||||
let b:ale_c_parse_compile_commands = 1
|
let b:ale_c_parse_compile_commands = 1
|
||||||
|
|
||||||
AssertLinter 'clangd', ale#Escape('clangd') . b:command_tail
|
AssertLinter 'clangd', ale#Escape('clangd')
|
||||||
\ . ' -compile-commands-dir='
|
\ . ' -compile-commands-dir='
|
||||||
\ . ale#Escape(ale#path#Simplify(g:dir . '/clangd_paths/with_build_dir/unusual_build_dir_name'))
|
\ . ale#Escape(ale#path#Simplify(g:dir . '/clangd_paths/with_build_dir/unusual_build_dir_name'))
|
||||||
|
|
||||||
|
|||||||
@@ -12,5 +12,5 @@ After:
|
|||||||
|
|
||||||
Execute(The html-beautify callback should return the correct default command):
|
Execute(The html-beautify callback should return the correct default command):
|
||||||
AssertEqual
|
AssertEqual
|
||||||
\ {'command': '''html-beautify'' -'},
|
\ {'command': ale#Escape('html-beautify') . ' -'},
|
||||||
\ ale#fixers#html_beautify#Fix(bufnr(''))
|
\ ale#fixers#html_beautify#Fix(bufnr(''))
|
||||||
|
|||||||
@@ -13,7 +13,7 @@ Execute(The styler callback should include custom styler options):
|
|||||||
\ {
|
\ {
|
||||||
\ 'command': 'Rscript --vanilla -e '
|
\ 'command': 'Rscript --vanilla -e '
|
||||||
\ . '"suppressPackageStartupMessages(library(styler));'
|
\ . '"suppressPackageStartupMessages(library(styler));'
|
||||||
\ . 'style_file(commandArgs(TRUE), style = '
|
\ . 'style_file(commandArgs(TRUE), transformers = '
|
||||||
\ . 'a_custom_option)"'
|
\ . 'a_custom_option)"'
|
||||||
\ . ' %t',
|
\ . ' %t',
|
||||||
\ 'read_temporary_file': 1,
|
\ 'read_temporary_file': 1,
|
||||||
|
|||||||
@@ -16,3 +16,13 @@ Execute(The crystal handler should parse lines correctly and add the column if i
|
|||||||
\ ale_linters#crystal#crystal#Handle(255, [
|
\ ale_linters#crystal#crystal#Handle(255, [
|
||||||
\ '[{"file":"/tmp/test.cr","line":2,"column":1,"size":null,"message":"unexpected token: EOF"}]'
|
\ '[{"file":"/tmp/test.cr","line":2,"column":1,"size":null,"message":"unexpected token: EOF"}]'
|
||||||
\ ])
|
\ ])
|
||||||
|
|
||||||
|
Execute(The crystal handler should not fail when a missing file is required):
|
||||||
|
AssertEqual
|
||||||
|
\ [ { 'lnum':1, 'col': 1, 'text': 'while requiring "./nonexistent.cr"' } ],
|
||||||
|
\ ale_linters#crystal#crystal#Handle(255,
|
||||||
|
\ json_encode([
|
||||||
|
\ { "file":"/tmp/file.cr","line":1,"column":1,"size":0,"message":"while requiring \"./nonexistent.cr\"" },
|
||||||
|
\ { "message": "can't find file './nonexistent.cr' relative to '/tmp'" },
|
||||||
|
\ ])
|
||||||
|
\ )
|
||||||
|
|||||||
@@ -21,6 +21,7 @@ Execute(Parsing nim errors should work):
|
|||||||
\ 'col': 2,
|
\ 'col': 2,
|
||||||
\ 'text': 'identifier expected, but found ''a.barfoo''',
|
\ 'text': 'identifier expected, but found ''a.barfoo''',
|
||||||
\ 'type': 'E',
|
\ 'type': 'E',
|
||||||
|
\ 'end_col': 9,
|
||||||
\ },
|
\ },
|
||||||
\ {
|
\ {
|
||||||
\ 'lnum': 2,
|
\ 'lnum': 2,
|
||||||
@@ -28,6 +29,7 @@ Execute(Parsing nim errors should work):
|
|||||||
\ 'text': '''NotUsed'' is declared but not used',
|
\ 'text': '''NotUsed'' is declared but not used',
|
||||||
\ 'code': 'XDeclaredButNotUsed',
|
\ 'code': 'XDeclaredButNotUsed',
|
||||||
\ 'type': 'W',
|
\ 'type': 'W',
|
||||||
|
\ 'end_col': 11,
|
||||||
\ },
|
\ },
|
||||||
\ {
|
\ {
|
||||||
\ 'lnum': 12,
|
\ 'lnum': 12,
|
||||||
@@ -35,6 +37,35 @@ Execute(Parsing nim errors should work):
|
|||||||
\ 'text': 'with : character',
|
\ 'text': 'with : character',
|
||||||
\ 'type': 'E',
|
\ 'type': 'E',
|
||||||
\ },
|
\ },
|
||||||
|
\ {
|
||||||
|
\ 'lnum': 1,
|
||||||
|
\ 'col': 8,
|
||||||
|
\ 'text': 'imported and not used: ''strutils''',
|
||||||
|
\ 'code': 'UnusedImport',
|
||||||
|
\ 'type': 'W',
|
||||||
|
\ 'end_col': 15,
|
||||||
|
\ },
|
||||||
|
\ {
|
||||||
|
\ 'lnum': 12,
|
||||||
|
\ 'col': 9,
|
||||||
|
\ 'text': 'undeclared identifier: ''total''',
|
||||||
|
\ 'type': 'E',
|
||||||
|
\ 'end_col': 13,
|
||||||
|
\ },
|
||||||
|
\ {
|
||||||
|
\ 'lnum': 14,
|
||||||
|
\ 'col': 1,
|
||||||
|
\ 'text': '''sum'' cannot be assigned to',
|
||||||
|
\ 'type': 'E',
|
||||||
|
\ 'end_col': 3,
|
||||||
|
\ },
|
||||||
|
\ {
|
||||||
|
\ 'lnum': 15,
|
||||||
|
\ 'col': 1,
|
||||||
|
\ 'text': 'redefinition of ''getName''; previous declaration here: /nested/folder/foobar.nim(14, 6)',
|
||||||
|
\ 'type': 'E',
|
||||||
|
\ 'end_col': 7,
|
||||||
|
\ },
|
||||||
\ ],
|
\ ],
|
||||||
\ ale_linters#nim#nimcheck#Handle(bufnr(''), [
|
\ ale_linters#nim#nimcheck#Handle(bufnr(''), [
|
||||||
\ 'Line with wrong( format)',
|
\ 'Line with wrong( format)',
|
||||||
@@ -42,4 +73,8 @@ Execute(Parsing nim errors should work):
|
|||||||
\ 'foobar.nim(12, 2) Error: identifier expected, but found ''a.barfoo''',
|
\ 'foobar.nim(12, 2) Error: identifier expected, but found ''a.barfoo''',
|
||||||
\ '/nested/folder/foobar.nim(2, 5) Hint: ''NotUsed'' is declared but not used [XDeclaredButNotUsed]',
|
\ '/nested/folder/foobar.nim(2, 5) Hint: ''NotUsed'' is declared but not used [XDeclaredButNotUsed]',
|
||||||
\ 'foobar.nim(12, 2) Error: with : character',
|
\ 'foobar.nim(12, 2) Error: with : character',
|
||||||
|
\ 'foobar.nim(1, 8) Warning: imported and not used: ''strutils'' [UnusedImport]',
|
||||||
|
\ 'foobar.nim(12, 9) Error: undeclared identifier: ''total''',
|
||||||
|
\ 'foobar.nim(14, 1) Error: ''sum'' cannot be assigned to',
|
||||||
|
\ 'foobar.nim(15, 1) Error: redefinition of ''getName''; previous declaration here: /nested/folder/foobar.nim(14, 6)',
|
||||||
\ ])
|
\ ])
|
||||||
|
|||||||
Reference in New Issue
Block a user