linter/sh: Improve parsing of error messages in different locales
Fixes #2687
This commit is contained in:
parent
73812c3e41
commit
2b12c8ccbf
2 changed files with 138 additions and 1 deletions
|
@ -34,8 +34,10 @@ function! ale_linters#sh#shell#Handle(buffer, lines) abort
|
|||
" Matches patterns line the following:
|
||||
"
|
||||
" bash: line 13: syntax error near unexpected token `d'
|
||||
" bash:行0: 未预期的符号“done”附近有语法错误
|
||||
" bash: 列 90: 尋找匹配的「"」時遇到了未預期的檔案結束符
|
||||
" sh: 11: Syntax error: "(" unexpected
|
||||
let l:pattern = '\v(line |: ?)(\d+): (.+)$'
|
||||
let l:pattern = '\v([^:]+:\D*)(\d+): (.+)$'
|
||||
let l:output = []
|
||||
|
||||
for l:match in ale#util#GetMatches(a:lines, l:pattern)
|
||||
|
|
|
@ -40,3 +40,138 @@ Execute(The shell handler should parse lines correctly):
|
|||
\ 'qfm:22: :11: :33: :44:',
|
||||
\ 'foo.sh: syntax error at line 9: `done'' unexpected',
|
||||
\ ])
|
||||
|
||||
Execute(The shell handler should parse Simplified Chinese lines correctly):
|
||||
AssertEqual
|
||||
\ [
|
||||
\ {
|
||||
\ 'lnum': 0,
|
||||
\ 'text': '未预期的符号“done”附近有语法错误',
|
||||
\ },
|
||||
\ {
|
||||
\ 'lnum': 90,
|
||||
\ 'text': '寻找匹配的“"”时遇到了未预期的文件结束符',
|
||||
\ },
|
||||
\ {
|
||||
\ 'lnum': 111,
|
||||
\ 'text': '语法错误: 未预期的文件结尾',
|
||||
\ },
|
||||
\ {
|
||||
\ 'lnum': 22,
|
||||
\ 'text': ':11: :33: :44:',
|
||||
\ },
|
||||
\ ],
|
||||
\ ale_linters#sh#shell#Handle(347, [
|
||||
\ '/tmp/nvimWL5sOL/2/a.sh:行0: 未预期的符号“done”附近有语法错误',
|
||||
\ '/tmp/nvimWL5sOL/2/a.sh:行90: 寻找匹配的“"”时遇到了未预期的文件结束符',
|
||||
\ '/tmp/nvimWL5sOL/2/a.sh:行111: 语法错误: 未预期的文件结尾',
|
||||
\ '/tmp/nvimWL5sOL/2/a.sh:行22: :11: :33: :44:',
|
||||
\ ])
|
||||
|
||||
Execute(The shell handler should parse Traditional Chinese lines correctly):
|
||||
AssertEqual
|
||||
\ [
|
||||
\ {
|
||||
\ 'lnum': 0,
|
||||
\ 'text': '未預期的字組「(」附近有語法錯誤',
|
||||
\ },
|
||||
\ {
|
||||
\ 'lnum': 90,
|
||||
\ 'text': '尋找匹配的「"」時遇到了未預期的檔案結束符',
|
||||
\ },
|
||||
\ {
|
||||
\ 'lnum': 111,
|
||||
\ 'text': '語法錯誤: 未預期的檔案結尾',
|
||||
\ },
|
||||
\ {
|
||||
\ 'lnum': 22,
|
||||
\ 'text': ':11: :33: :44:',
|
||||
\ },
|
||||
\ ],
|
||||
\ ale_linters#sh#shell#Handle(347, [
|
||||
\ '/tmp/nvimWL5sOL/2/a.sh: 列 0: 未預期的字組「(」附近有語法錯誤',
|
||||
\ '/tmp/nvimWL5sOL/2/a.sh: 列 90: 尋找匹配的「"」時遇到了未預期的檔案結束符',
|
||||
\ '/tmp/nvimWL5sOL/2/a.sh: 列 111: 語法錯誤: 未預期的檔案結尾',
|
||||
\ '/tmp/nvimWL5sOL/2/a.sh: 列 22: :11: :33: :44:',
|
||||
\ ])
|
||||
|
||||
Execute(The shell handler should parse Japanese lines correctly):
|
||||
AssertEqual
|
||||
\ [
|
||||
\ {
|
||||
\ 'lnum': 0,
|
||||
\ 'text': "予期しないトークン `(' 周辺に構文エラーがあります",
|
||||
\ },
|
||||
\ {
|
||||
\ 'lnum': 90,
|
||||
\ 'text': "予期しないトークン `done' 周辺に構文エラーがあります",
|
||||
\ },
|
||||
\ {
|
||||
\ 'lnum': 111,
|
||||
\ 'text': "対応する `\"' を探索中に予期しないファイル終了 (EOF) です",
|
||||
\ },
|
||||
\ {
|
||||
\ 'lnum': 22,
|
||||
\ 'text': ':11: :33: :44:',
|
||||
\ },
|
||||
\ ],
|
||||
\ ale_linters#sh#shell#Handle(347, [
|
||||
\ "/tmp/nvimWL5sOL/2/a.sh: 行 0: 予期しないトークン `(' 周辺に構文エラーがあります",
|
||||
\ "/tmp/nvimWL5sOL/2/a.sh: 行 90: 予期しないトークン `done' 周辺に構文エラーがあります",
|
||||
\ "/tmp/nvimWL5sOL/2/a.sh: 行 111: 対応する `\"' を探索中に予期しないファイル終了 (EOF) です",
|
||||
\ "/tmp/nvimWL5sOL/2/a.sh: 行 22: :11: :33: :44:",
|
||||
\ ])
|
||||
|
||||
Execute(The shell handler should parse Greek lines correctly):
|
||||
AssertEqual
|
||||
\ [
|
||||
\ {
|
||||
\ 'lnum': 0,
|
||||
\ 'text': 'συντακτικό σφάλμα κοντά στο μη αναμενόμενο σύμβολο «done»',
|
||||
\ },
|
||||
\ {
|
||||
\ 'lnum': 90,
|
||||
\ 'text': 'syntax error: μη αναμενόμενο τέλος αρχείου',
|
||||
\ },
|
||||
\ {
|
||||
\ 'lnum': 111,
|
||||
\ 'text': 'μη αναμενόμενο EOF κατά την αναζήτηση «"»',
|
||||
\ },
|
||||
\ {
|
||||
\ 'lnum': 22,
|
||||
\ 'text': ':11: :33: :44:',
|
||||
\ },
|
||||
\ ],
|
||||
\ ale_linters#sh#shell#Handle(347, [
|
||||
\ '/tmp/nvimWL5sOL/2/a.sh: γραμμή 0: συντακτικό σφάλμα κοντά στο μη αναμενόμενο σύμβολο «done»',
|
||||
\ '/tmp/nvimWL5sOL/2/a.sh: γραμμή 90: syntax error: μη αναμενόμενο τέλος αρχείου',
|
||||
\ '/tmp/nvimWL5sOL/2/a.sh: γραμμή 111: μη αναμενόμενο EOF κατά την αναζήτηση «"»',
|
||||
\ "/tmp/nvimWL5sOL/2/a.sh: γραμμή 22: :11: :33: :44:",
|
||||
\ ])
|
||||
|
||||
Execute(The shell handler should parse Russian lines correctly):
|
||||
AssertEqual
|
||||
\ [
|
||||
\ {
|
||||
\ 'lnum': 0,
|
||||
\ 'text': 'синтаксическая ошибка рядом с неожиданным маркером «done»',
|
||||
\ },
|
||||
\ {
|
||||
\ 'lnum': 90,
|
||||
\ 'text': 'синтаксическая ошибка: неожиданный конец файла',
|
||||
\ },
|
||||
\ {
|
||||
\ 'lnum': 111,
|
||||
\ 'text': 'неожиданный конец файла во время поиска «"»',
|
||||
\ },
|
||||
\ {
|
||||
\ 'lnum': 22,
|
||||
\ 'text': ':11: :33: :44:',
|
||||
\ },
|
||||
\ ],
|
||||
\ ale_linters#sh#shell#Handle(347, [
|
||||
\ '/tmp/nvimWL5sOL/2/a.sh: строка 0: синтаксическая ошибка рядом с неожиданным маркером «done»',
|
||||
\ '/tmp/nvimWL5sOL/2/a.sh: строка 90: синтаксическая ошибка: неожиданный конец файла',
|
||||
\ '/tmp/nvimWL5sOL/2/a.sh: строка 111: неожиданный конец файла во время поиска «"»',
|
||||
\ '/tmp/nvimWL5sOL/2/a.sh: строка 22: :11: :33: :44:',
|
||||
\ ])
|
||||
|
|
Reference in a new issue