Before: call ale#test#SetDirectory('/testplugin/test/handler') runtime ale_linters/perl6/perl6.vim After: call ale#test#RestoreDirectory() call ale#linter#Reset() Execute(The Perl6 linter should handle empty output): call ale#test#SetFilename('bar.pl6') AssertEqual [], ale_linters#perl6#perl6#Handle(bufnr(''), []) Execute(The Perl6 linter should complain about undeclared variables): call ale#test#SetFilename('bar.pl6') AssertEqual \ [ \ { \ 'lnum': '6', \ 'text': 'Variable ''$tes'' is not declared. Did you mean any of these? $res $test ', \ 'type': 'E', \ 'col': '', \ 'end_lnum': '', \ 'code': 'X::Undeclared', \ } \ ], \ ale_linters#perl6#perl6#Handle(bufnr(''), [ \ '{ \ "X::Undeclared" : { \ "highexpect" : [ ], \ "is-compile-time" : 1, \ "modules" : [ ], \ "column" : null, \ "pos" : 18, \ "symbol" : "$tes", \ "filename" : "bar.pl6", \ "what" : "Variable", \ "pre" : "my $test = 0; say ", \ "post" : "$tes", \ "suggestions" : [ \ "$res", \ "$test" \ ], \ "line" : 6, \ "message" : "Variable ''$tes'' is not declared. Did you mean any of these?\n $res\n $test\n" \ } \ }' \ ]) Execute(The Perl6 linter should complain about Comp::AdHoc errors): call ale#test#SetFilename('bar.pl6') AssertEqual \ [ \ { \ 'lnum': '3', \ 'type': 'E', \ 'text': 'is repr(...) trait needs a parameter', \ 'col': '', \ 'end_lnum': '', \ 'code': 'X::Comp::AdHoc', \ } \ ], \ ale_linters#perl6#perl6#Handle(bufnr(''), [ \ '{ \ "X::Comp::AdHoc" : { \ "pre" : "class test is repr", \ "message" : "is repr(...) trait needs a parameter", \ "line" : 3, \ "post" : " {}", \ "is-compile-time" : true, \ "pos" : 19, \ "highexpect" : [ ], \ "payload" : "is repr(...) trait needs a parameter", \ "filename" : "bar.pl6", \ "column" : null, \ "modules" : [ ] \ } \ }' \]) Execute(The Perl6 linter should be able to extract a line number from an error message): call ale#test#SetFilename('bar.pl6') AssertEqual \ [ \ { \ 'lnum': '3', \ 'text': 'Could not find Module::Does::not::exist at line 3 in: /usr/share/perl6/site /usr/share/perl6/vendor /usr/share/perl6 CompUnit::Repository::AbsolutePath<94023691448416> CompUnit::Repository::NQP<94023670532736> CompUnit::Repository::Perl5<94023670532776>', \ 'col': '', \ 'type': 'E', \ 'end_lnum': '', \ 'code': 'X::CompUnit::UnsatisfiedDependency', \ } \ ], \ ale_linters#perl6#perl6#Handle(bufnr(''), [ \ '{ \ "X::CompUnit::UnsatisfiedDependency" : { \ "message" : "Could not find Module::Does::not::exist at line 3 in:\n /usr/share/perl6/site\n /usr/share/perl6/vendor\n /usr/share/perl6\n CompUnit::Repository::AbsolutePath<94023691448416>\n CompUnit::Repository::NQP<94023670532736>\n CompUnit::Repository::Perl5<94023670532776>", \ "specification" : "Module::Does::not::exist" \ } \ }' \ ]) Execute(The Perl6 linter should be able to differentiate between warnings and errors): call ale#test#SetFilename('bar.pl6') AssertEqual \ [ \ { \ 'lnum': '1', \ 'col': '', \ 'code': 'X::Syntax::Regex::Unterminated', \ 'end_lnum': '', \ 'type': 'E', \ 'text': 'Regex not terminated.', \ }, \ { \ 'lnum': '1', \ 'col': '', \ 'code': 'X::Comp::AdHoc', \ 'end_lnum': '', \ 'type': 'W', \ 'text': 'Space is not significant here; please use quotes or :s (:sigspace) modifier (or, to suppress this warning, omit the space, or otherwise change the spacing)', \ } \ ], \ ale_linters#perl6#perl6#Handle(bufnr(''), [ \ '{ \ "X::Comp::Group" : { \ "message" : "Regex not terminated.\nUnable to parse regex; couldn''t find final ''/''\nSpace is not significant here; please use quotes or :s (:sigspace) modifier (or, to suppress this warning, omit the space, or otherwise change the spacing)", \ "panic" : "Unable to parse regex; couldn''t find final ''/''", \ "sorrows" : [ \ { \ "X::Syntax::Regex::Unterminated" : { \ "highexpect" : [ \ "infix stopper" \ ], \ "pos" : 6, \ "is-compile-time" : 1, \ "modules" : [ ], \ "post" : "", \ "message" : "Regex not terminated.", \ "line" : 1, \ "filename" : "bar.pl6", \ "column" : null, \ "pre" : "/win 3" \ } \ } \ ], \ "worries" : [ \ { \ "X::Comp::AdHoc" : { \ "filename" : "bar.pl6", \ "line" : 1, \ "column" : null, \ "pre" : "/win", \ "highexpect" : [ ], \ "payload" : "Space is not significant here; please use quotes or :s (:sigspace) modifier (or, to suppress this warning, omit the space, or otherwise change the spacing)", \ "post" : " 3", \ "message" : "Space is not significant here; please use quotes or :s (:sigspace) modifier (or, to suppress this warning, omit the space, or otherwise change the spacing)", \ "modules" : [ ], \ "is-compile-time" : true, \ "pos" : 4 \ } \ } \ ] \ } \ }' \]) Execute(The Perl6 linter should gracefully handle non-JSON messages): call ale#test#SetFilename('bar.pl6') AssertEqual \ [ \ { \ 'lnum': '1', \ 'text': 'Received output in the default Perl6 error format. See :ALEDetail for details', \ 'type': 'W', \ 'detail': join([ \ 'Potential difficulties:', \ ' Redeclaration of symbol ''$_''', \ ' at /home/travis/perl6-error-fail/insanity-test.pl6:1', \ ' ------> sub foo($_) {.say}; my $_ = 1; .&foo;', \ ' Space is not significant here; please use quotes or :s (:sigspace) modifier (or, to suppress this warning, omit the space, or otherwise change the spacing)', \ ' at /home/travis/perl6-error-fail/insanity-test.pl6:4', \ ' ------> /win 3/', \ 'Syntax OK',], "\n") \ } \ ], \ ale_linters#perl6#perl6#Handle(bufnr(''), [ \ 'Potential difficulties:', \ ' Redeclaration of symbol ''$_''', \ ' at /home/travis/perl6-error-fail/insanity-test.pl6:1', \ ' ------> sub foo($_) {.say}; my $_ = 1; .&foo;', \ ' Space is not significant here; please use quotes or :s (:sigspace) modifier (or, to suppress this warning, omit the space, or otherwise change the spacing)', \ ' at /home/travis/perl6-error-fail/insanity-test.pl6:4', \ ' ------> /win 3/', \ 'Syntax OK' \ ]) Execute(The Perl6 linter should gracefully handle messages without a line number): call ale#test#SetFilename('bar.pl6') AssertEqual \ [ \ { \ 'lnum': '1', \ 'end_lnum': '', \ 'text': 'Cannot find method ''has_compile_time_value'' on object of type NQPMu', \ 'type': 'E', \ 'col' : '', \ 'code': 'X::AdHoc', \ } \ ], \ ale_linters#perl6#perl6#Handle(bufnr(''), [ \ '{', \ '"X::AdHoc" : {', \ '"message" : "Cannot find method ''has_compile_time_value'' on object of type NQPMu",', \ '"payload" : "Cannot find method ''has_compile_time_value'' on object of type NQPMu"', \ '}', \ '}', \ ]) Execute(The Perl6 linter should not include errors from a known separate file): call ale#test#SetFilename('bar.pl6') AssertEqual \ [], \ ale_linters#perl6#perl6#Handle(bufnr(''), [ \ '{ \ "X::Undeclared" : { \ "highexpect" : [ ], \ "is-compile-time" : 1, \ "modules" : [ ], \ "column" : null, \ "pos" : 18, \ "symbol" : "$tes", \ "filename" : "foo.pl6", \ "what" : "Variable", \ "pre" : "my $test = 0; say ", \ "post" : "$tes", \ "suggestions" : [ \ "$res", \ "$test" \ ], \ "line" : 6, \ "message" : "Variable ''$tes'' is not declared. Did you mean any of these?\n $res\n $test\n" \ } \ }' \ ]) Execute(The Perl6 linter should not ignore errors without a filename): call ale#test#SetFilename('bar.pl6') AssertEqual \ [ \ { \ 'lnum': '3', \ 'end_lnum': '', \ 'text': 'Cannot find method ''has_compile_time_value'' on object of type NQPMu', \ 'type': 'E', \ 'col' : '', \ 'code': 'X::AdHoc', \ } \ ], \ ale_linters#perl6#perl6#Handle(bufnr(''), [ \ '{', \ '"X::AdHoc" : {', \ '"line" : 3,', \ '"message" : "Cannot find method ''has_compile_time_value'' on object of type NQPMu",', \ '"payload" : "Cannot find method ''has_compile_time_value'' on object of type NQPMu"', \ '}', \ '}', \ ])