mirror of
https://github.com/dense-analysis/ale.git
synced 2025-12-06 12:44:23 +08:00
Add prolog swipl linter (#1979)
* add prolog/swipl linter * use load_files/2 instead of read_term/2 Because it also checks some semantic warnings / errors not only syntactic warnings / errors. e.g.: * singleton warning * discontiguous warning * ... cf. http://www.swi-prolog.org/pldoc/doc_for?object=style_check/1 * support error messages with no line number :- module(module_name, [pred/0]). causes ERROR: Exported procedure module_name:pred/0 is not defined * add test for prolog/swipl handler * cosmetic fixes * detect timeout using SIGALRM * rename g:prolog_swipl_goals to g:prolog_swipl_load * write doc for prolog/swipl linter * update toc and README * fix ignore patterns
This commit is contained in:
95
test/handler/test_swipl_handler.vader
Normal file
95
test/handler/test_swipl_handler.vader
Normal file
@@ -0,0 +1,95 @@
|
||||
Before:
|
||||
runtime ale_linters/prolog/swipl.vim
|
||||
|
||||
After:
|
||||
call ale#linter#Reset()
|
||||
|
||||
Execute (The swipl handler should handle oneline warning / error):
|
||||
call ale#test#SetFilename('test.pl')
|
||||
AssertEqual
|
||||
\ [
|
||||
\ {
|
||||
\ 'lnum': 5,
|
||||
\ 'col': 1,
|
||||
\ 'text': 'Syntax error: Operator expected',
|
||||
\ 'type': 'E',
|
||||
\ },
|
||||
\ ],
|
||||
\ ale_linters#prolog#swipl#Handle(bufnr(''), [
|
||||
\ 'ERROR: /path/to/test.pl:5:1: Syntax error: Operator expected',
|
||||
\ ])
|
||||
|
||||
Execute (The swipl handler should handle a warning / error of two lines):
|
||||
call ale#test#SetFilename('test.pl')
|
||||
AssertEqual
|
||||
\ [
|
||||
\ {
|
||||
\ 'lnum': 9,
|
||||
\ 'col': 0,
|
||||
\ 'text': 'Singleton variables: [M]',
|
||||
\ 'type': 'W',
|
||||
\ },
|
||||
\ ],
|
||||
\ ale_linters#prolog#swipl#Handle(bufnr(''), [
|
||||
\ 'Warning: /path/to/test.pl:9:',
|
||||
\ ' Singleton variables: [M]',
|
||||
\ ])
|
||||
|
||||
Execute (The swipl handler should join three or more lines with '. '):
|
||||
call ale#test#SetFilename('test.pl')
|
||||
AssertEqual
|
||||
\ [
|
||||
\ {
|
||||
\ 'lnum': 10,
|
||||
\ 'col': 0,
|
||||
\ 'text': 'Clauses of fib/2 are not together in the source-file. Earlier definition at /path/to/test.pl:7. Current predicate: f/0. Use :- discontiguous fib/2. to suppress this message',
|
||||
\ 'type': 'W',
|
||||
\ },
|
||||
\ ],
|
||||
\ ale_linters#prolog#swipl#Handle(bufnr(''), [
|
||||
\ 'Warning: /path/to/test.pl:10:',
|
||||
\ ' Clauses of fib/2 are not together in the source-file',
|
||||
\ ' Earlier definition at /path/to/test.pl:7',
|
||||
\ ' Current predicate: f/0',
|
||||
\ ' Use :- discontiguous fib/2. to suppress this message',
|
||||
\ ])
|
||||
|
||||
Execute (The swipl handler should ignore warnings / errors 'No permission to call sandboxed ...'):
|
||||
call ale#test#SetFilename('test.pl')
|
||||
AssertEqual
|
||||
\ [],
|
||||
\ ale_linters#prolog#swipl#Handle(bufnr(''), [
|
||||
\ 'ERROR: /path/to/test.pl:11:',
|
||||
\ ' No permission to call sandboxed `''$set_predicate_attribute''(_G3416:_G3417,_G3413,_G3414)''',
|
||||
\ ' Reachable from:',
|
||||
\ ' system:''$set_pattr''(A,B,C,D)',
|
||||
\ ' system:''$set_pattr''(vimscript:A,B,C)',
|
||||
\ ' vimscript: (multifile A)',
|
||||
\ 'ERROR: /path/to/test.pl:12:',
|
||||
\ ' No permission to call sandboxed `''$set_predicate_attribute''(_G205:_G206,_G202,_G203)''',
|
||||
\ ' Reachable from:',
|
||||
\ ' system:''$set_pattr''(A,B,C,D)',
|
||||
\ ' system:''$set_pattr''(vimscript:A,B,C)',
|
||||
\ ' vimscript: (multifile A)',
|
||||
\ 'ERROR: /path/to/test.pl:13:',
|
||||
\ ' No permission to call sandboxed `''$set_predicate_attribute''(_G1808:_G1809,_G1805,_G1806)''',
|
||||
\ ' Reachable from:',
|
||||
\ ' system:''$set_pattr''(A,B,C,D)',
|
||||
\ ' system:''$set_pattr''(vimscript:A,B,C)',
|
||||
\ ' vimscript: (multifile A)',
|
||||
\ ])
|
||||
|
||||
Execute (The swipl handler should handle a warning / error with no line number):
|
||||
call ale#test#SetFilename('test.pl')
|
||||
AssertEqual
|
||||
\ [
|
||||
\ {
|
||||
\ 'lnum': 1,
|
||||
\ 'col': 0,
|
||||
\ 'text': 'Exported procedure module_name:pred/0 is not defined',
|
||||
\ 'type': 'E',
|
||||
\ },
|
||||
\ ],
|
||||
\ ale_linters#prolog#swipl#Handle(bufnr(''), [
|
||||
\ 'ERROR: Exported procedure module_name:pred/0 is not defined',
|
||||
\ ])
|
||||
Reference in New Issue
Block a user