linter/sh: Improve parsing of error messages in different locales

Fixes #2687
This commit is contained in:
Jeffrey Lau 2019-08-31 15:05:49 +08:00
parent 73812c3e41
commit 2b12c8ccbf
2 changed files with 138 additions and 1 deletions

View file

@ -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)

View file

@ -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:',
\ ])