From e19b8c05cd8b0e74eb71d577ce6239bc71717dd9 Mon Sep 17 00:00:00 2001 From: "David A. R. Robin" Date: Mon, 24 Jun 2019 06:24:07 +0200 Subject: Fix crystal-lang non file-tied message handling Some messages of the crystal compiler are not tied to a file. This causes a 'Key not present in Dictionnary' error (E716). For the record, the json output on ```require "./nonexistent.cr"``` is the following : ```json [ { "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'" } ] ``` The second message does not have line/column attributes. --- ale_linters/crystal/crystal.vim | 4 ++++ test/handler/test_crystal_handler.vader | 10 ++++++++++ 2 files changed, 14 insertions(+) diff --git a/ale_linters/crystal/crystal.vim b/ale_linters/crystal/crystal.vim index 3c2fefb7..8a905b12 100644 --- a/ale_linters/crystal/crystal.vim +++ b/ale_linters/crystal/crystal.vim @@ -5,6 +5,10 @@ function! ale_linters#crystal#crystal#Handle(buffer, lines) abort let l:output = [] for l:error in ale#util#FuzzyJSONDecode(a:lines, []) + if !has_key(l:error, 'file') + continue + endif + call add(l:output, { \ 'lnum': l:error.line + 0, \ 'col': l:error.column + 0, diff --git a/test/handler/test_crystal_handler.vader b/test/handler/test_crystal_handler.vader index a7b7f3ab..209632e9 100644 --- a/test/handler/test_crystal_handler.vader +++ b/test/handler/test_crystal_handler.vader @@ -16,3 +16,13 @@ Execute(The crystal handler should parse lines correctly and add the column if i \ ale_linters#crystal#crystal#Handle(255, [ \ '[{"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'" }, + \ ]) + \ ) -- cgit v1.2.3 From dfbb387cc7c754d75ecd0dede0635e39ce9ff028 Mon Sep 17 00:00:00 2001 From: tamago324 Date: Thu, 7 Nov 2019 02:44:56 +0900 Subject: Add nimcheck end_col options nimcheck --- ale_linters/nim/nimcheck.vim | 14 ++++++++++++++ test/handler/test_nim_handler.vader | 35 +++++++++++++++++++++++++++++++++++ 2 files changed, 49 insertions(+) diff --git a/ale_linters/nim/nimcheck.vim b/ale_linters/nim/nimcheck.vim index b5796dcd..b739ca04 100644 --- a/ale_linters/nim/nimcheck.vim +++ b/ale_linters/nim/nimcheck.vim @@ -1,6 +1,15 @@ " Author: Baabelfish " 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 let l:buffer_filename = fnamemodify(bufname(a:buffer), ':p:t') 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] 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) endfor diff --git a/test/handler/test_nim_handler.vader b/test/handler/test_nim_handler.vader index e484000e..b6784d84 100644 --- a/test/handler/test_nim_handler.vader +++ b/test/handler/test_nim_handler.vader @@ -21,6 +21,7 @@ Execute(Parsing nim errors should work): \ 'col': 2, \ 'text': 'identifier expected, but found ''a.barfoo''', \ 'type': 'E', + \ 'end_col': 9, \ }, \ { \ 'lnum': 2, @@ -28,6 +29,7 @@ Execute(Parsing nim errors should work): \ 'text': '''NotUsed'' is declared but not used', \ 'code': 'XDeclaredButNotUsed', \ 'type': 'W', + \ 'end_col': 11, \ }, \ { \ 'lnum': 12, @@ -35,6 +37,35 @@ Execute(Parsing nim errors should work): \ 'text': 'with : character', \ '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(''), [ \ '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''', \ '/nested/folder/foobar.nim(2, 5) Hint: ''NotUsed'' is declared but not used [XDeclaredButNotUsed]', \ '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)', \ ]) -- cgit v1.2.3 From bde9b1cfcd9cf4808ce29014851b3f7592574d99 Mon Sep 17 00:00:00 2001 From: w0rp Date: Thu, 7 Nov 2019 15:41:58 +0000 Subject: Revert "Add definition of c/clangd's language as C (#2791)" This reverts commit f4070f6c43b3cb2e7463d8426a68d5a726991288. --- ale_linters/c/clangd.vim | 2 +- test/command_callback/test_c_clangd_command_callbacks.vader | 12 ++++-------- 2 files changed, 5 insertions(+), 9 deletions(-) diff --git a/ale_linters/c/clangd.vim b/ale_linters/c/clangd.vim index ab8a0259..c42d4497 100644 --- a/ale_linters/c/clangd.vim +++ b/ale_linters/c/clangd.vim @@ -8,7 +8,7 @@ call ale#Set('c_build_dir', '') function! ale_linters#c#clangd#GetCommand(buffer) abort let l:build_dir = ale#c#GetBuildDirectory(a:buffer) - return '%e -x c' + return '%e' \ . ale#Pad(ale#Var(a:buffer, 'c_clangd_options')) \ . (!empty(l:build_dir) ? ' -compile-commands-dir=' . ale#Escape(l:build_dir) : '') endfunction diff --git a/test/command_callback/test_c_clangd_command_callbacks.vader b/test/command_callback/test_c_clangd_command_callbacks.vader index 555122f6..753dc9a8 100644 --- a/test/command_callback/test_c_clangd_command_callbacks.vader +++ b/test/command_callback/test_c_clangd_command_callbacks.vader @@ -9,18 +9,14 @@ Before: Save b:ale_c_build_dir_names Save b:ale_c_parse_compile_commands - let b:command_tail = ' -x c' - After: - unlet! b:command_tail - call ale#assert#TearDownLinterTest() Execute(The language string should be correct): AssertLSPLanguage 'c' 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): 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): 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): 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): 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_parse_compile_commands = 1 - AssertLinter 'clangd', ale#Escape('clangd') . b:command_tail + AssertLinter 'clangd', ale#Escape('clangd') \ . ' -compile-commands-dir=' \ . ale#Escape(ale#path#Simplify(g:dir . '/clangd_paths/with_build_dir/unusual_build_dir_name')) -- cgit v1.2.3 From a273b9cf4a9778fd6f083eb534fefa72c4bea623 Mon Sep 17 00:00:00 2001 From: w0rp Date: Thu, 7 Nov 2019 15:51:55 +0000 Subject: Fix a test failing in AppVeyor --- test/fixers/test_html_beautify_fixer_callback.vader | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/fixers/test_html_beautify_fixer_callback.vader b/test/fixers/test_html_beautify_fixer_callback.vader index 05e10a36..372572e4 100644 --- a/test/fixers/test_html_beautify_fixer_callback.vader +++ b/test/fixers/test_html_beautify_fixer_callback.vader @@ -12,5 +12,5 @@ After: Execute(The html-beautify callback should return the correct default command): AssertEqual - \ {'command': '''html-beautify'' -'}, + \ {'command': ale#Escape('html-beautify') . ' -'}, \ ale#fixers#html_beautify#Fix(bufnr('')) -- cgit v1.2.3 From db6b1b5ecc17558f87f55b159f90ebf36677b6b3 Mon Sep 17 00:00:00 2001 From: Thibault Vatter Date: Thu, 7 Nov 2019 13:22:57 -0500 Subject: Switch from style to transformers (#2838) * Switch to transformers for styler * Adapt unit test too --- autoload/ale/fixers/styler.vim | 4 ++-- test/fixers/test_styler_fixer_callback.vader | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/autoload/ale/fixers/styler.vim b/autoload/ale/fixers/styler.vim index 7ff3275c..1c7607bd 100644 --- a/autoload/ale/fixers/styler.vim +++ b/autoload/ale/fixers/styler.vim @@ -2,13 +2,13 @@ " Description: Fixing R files with styler. 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 return { \ 'command': 'Rscript --vanilla -e ' \ . '"suppressPackageStartupMessages(library(styler));' - \ . 'style_file(commandArgs(TRUE), style = ' + \ . 'style_file(commandArgs(TRUE), transformers = ' \ . ale#Var(a:buffer, 'r_styler_options') . ')"' \ . ' %t', \ 'read_temporary_file': 1, diff --git a/test/fixers/test_styler_fixer_callback.vader b/test/fixers/test_styler_fixer_callback.vader index 85e45c1d..79f71ba9 100644 --- a/test/fixers/test_styler_fixer_callback.vader +++ b/test/fixers/test_styler_fixer_callback.vader @@ -13,7 +13,7 @@ Execute(The styler callback should include custom styler options): \ { \ 'command': 'Rscript --vanilla -e ' \ . '"suppressPackageStartupMessages(library(styler));' - \ . 'style_file(commandArgs(TRUE), style = ' + \ . 'style_file(commandArgs(TRUE), transformers = ' \ . 'a_custom_option)"' \ . ' %t', \ 'read_temporary_file': 1, -- cgit v1.2.3