From 655f0070cd2ce575f81092d1faac739fd116b515 Mon Sep 17 00:00:00 2001 From: fiatjaf Date: Fri, 26 Mar 2021 03:38:57 -0300 Subject: Add support for V: "v" (compiler) and "vfmt" fixer. (#3622) * v: add "v fmt" fixer. * v: add "v" (build) linter. * v: fix vlint complaints and add documentation. * v: add tests. * v: use ale#Pad(). --- test/fixers/test_vfmt_fixer_callback.vader | 44 ++++++++++++++++++++++++ test/handler/test_v_handler.vader | 54 ++++++++++++++++++++++++++++++ test/linter/test_v_command_callback.vader | 25 ++++++++++++++ test/v_files/testfile.v | 0 4 files changed, 123 insertions(+) create mode 100644 test/fixers/test_vfmt_fixer_callback.vader create mode 100644 test/handler/test_v_handler.vader create mode 100644 test/linter/test_v_command_callback.vader create mode 100644 test/v_files/testfile.v (limited to 'test') diff --git a/test/fixers/test_vfmt_fixer_callback.vader b/test/fixers/test_vfmt_fixer_callback.vader new file mode 100644 index 00000000..cbab1189 --- /dev/null +++ b/test/fixers/test_vfmt_fixer_callback.vader @@ -0,0 +1,44 @@ +Before: + Save g:ale_v_v_executable + Save g:ale_v_vfmt_options + + " Use an invalid global executable, so we don't match it. + let g:ale_v_v_executable = 'xxxinvalid' + let g:ale_v_vfmt_options = '' + + call ale#test#SetDirectory('/testplugin/test/fixers') + +After: + Restore + + call ale#test#RestoreDirectory() + +Execute(The vfmt callback should return the correct default values): + call ale#test#SetFilename('../v_files/testfile.v') + + AssertEqual + \ { + \ 'command': ale#Escape('xxxinvalid') . ' fmt', + \ }, + \ ale#fixers#vfmt#Fix(bufnr('')) + +Execute(The vfmt callback should include custom vfmt options): + let g:ale_v_vfmt_options = "-r '(a) -> a'" + + call ale#test#SetFilename('../v_files/testfile.v') + + AssertEqual + \ { + \ 'command': ale#Escape('xxxinvalid') + \ . ' fmt ' . g:ale_v_vfmt_options, + \ }, + \ ale#fixers#vfmt#Fix(bufnr('')) + +Execute(The vfmt callback should support Go environment variables): + call ale#test#SetFilename('../v_files/testfile.v') + + AssertEqual + \ { + \ 'command': ale#Escape('xxxinvalid') . ' fmt', + \ }, + \ ale#fixers#vfmt#Fix(bufnr('')) diff --git a/test/handler/test_v_handler.vader b/test/handler/test_v_handler.vader new file mode 100644 index 00000000..4d6e3d9b --- /dev/null +++ b/test/handler/test_v_handler.vader @@ -0,0 +1,54 @@ +Before: + runtime ale_linters/v/v.vim + +After: + call ale#linter#Reset() + +Execute (The v handler should correctly parse error messages): + AssertEqual + \ [{ + \ 'lnum': 4, + \ 'col': 3, + \ 'filename': ale#path#GetAbsPath(expand('%:p:h'), 'const ants.v'), + \ 'type': 'W', + \ 'end_col': 14, + \ 'text': 'const names cannot contain uppercase letters, use snake_case instead' + \ }, + \ { + \ 'lnum': 4, + \ 'col': 8, + \ 'filename': ale#path#GetAbsPath(expand('%:p:h'), 'main.v'), + \ 'type': 'W', + \ 'end_col': 10, + \ 'text': 'module "os" is imported but never used' + \ }, + \ { + \ 'lnum': 20, + \ 'col': 10, + \ 'filename': ale#path#GetAbsPath(expand('%:p:h'), 'main.v'), + \ 'type': 'E', + \ 'end_col': 18, + \ 'text': 'undefined ident: `win_widt`' + \ }], + \ ale_linters#v#v#Handler('', [ + \ './const ants.v:4:3: warning: const names cannot contain uppercase letters, use snake_case instead', + \ ' 2 |', + \ ' 3 | const (', + \ ' 4 | BUTTON_TEXT = "OK"', + \ ' | ~~~~~~~~~~~', + \ ' 5 | )', + \ './main.v:4:8: warning: module "os" is imported but never used', + \ ' 2 |', + \ ' 3 | import ui', + \ ' 4 | import os', + \ ' | ~~', + \ ' 5 |', + \ ' 6 | const (', + \ './main.v:20:10: error: undefined ident: `win_widt`', + \ ' 18 | mut app := &App{}', + \ ' 19 | app.window = ui.window({', + \ ' 20 | width: win_widt', + \ ' | ~~~~~~~~', + \ ' 21 | height: win_height', + \ ' 22 | title: "Counter"', + \ ]) diff --git a/test/linter/test_v_command_callback.vader b/test/linter/test_v_command_callback.vader new file mode 100644 index 00000000..17f24ad7 --- /dev/null +++ b/test/linter/test_v_command_callback.vader @@ -0,0 +1,25 @@ +Before: + Save g:ale_v_v_executable + + call ale#assert#SetUpLinterTest('v', 'v') + + GivenCommandOutput ['/foo/bar', '/foo/baz'] + +After: + Restore + call ale#assert#TearDownLinterTest() + +Execute(The default command should be correct): + AssertLinter 'v', 'v . -o /tmp/vim-ale-v' + +Execute(Extra options should be supported): + let g:ale_v_v_options = '--foo-bar' + + AssertLinter 'v', 'v --foo-bar . -o /tmp/vim-ale-v' + + let g:ale_v_vbuild_options = '' + +Execute(The executable should be configurable): + let g:ale_v_v_executable = 'foobar' + + AssertLinter 'foobar', 'foobar . -o /tmp/vim-ale-v' diff --git a/test/v_files/testfile.v b/test/v_files/testfile.v new file mode 100644 index 00000000..e69de29b -- cgit v1.2.3