handle multibyte string when linting text with redpen (#1416)

* handle multibyte string when linting text with redpen

* fix error when no string is provided, fix test's expect value

* remove ambiguious `==` operator
This commit is contained in:
INOUE Yosuke 2018-03-19 03:12:47 +09:00 committed by w0rp
parent 434f22e44a
commit 68b9399d4c
2 changed files with 48 additions and 0 deletions

View File

@ -25,6 +25,30 @@ function! ale#handlers#redpen#HandleRedpenOutput(buffer, lines) abort
let l:item.lnum = l:err.lineNum let l:item.lnum = l:err.lineNum
let l:item.col = l:err.sentenceStartColumnNum + 1 let l:item.col = l:err.sentenceStartColumnNum + 1
endif endif
" Adjust column number for multibyte string
let l:line = getline(l:item.lnum)
if l:line is# ''
let l:line = l:err.sentence
endif
let l:line = split(l:line, '\zs')
if l:item.col >= 2
let l:col = 0
for l:strlen in map(l:line[0:(l:item.col - 2)], 'strlen(v:val)')
let l:col = l:col + l:strlen
endfor
let l:item.col = l:col + 1
endif
if has_key(l:item, 'end_col')
let l:col = 0
for l:strlen in map(l:line[0:(l:item.end_col - 1)], 'strlen(v:val)')
let l:col = l:col + l:strlen
endfor
let l:item.end_col = l:col
endif
call add(l:output, l:item) call add(l:output, l:item)
endfor endfor
return l:output return l:output

View File

@ -23,6 +23,15 @@ Execute(redpen handler should handle errors output):
\ 'type': 'W', \ 'type': 'W',
\ 'code': 'Spelling', \ 'code': 'Spelling',
\ }, \ },
\ {
\ 'lnum': 1,
\ 'col': 35,
\ 'end_lnum': 1,
\ 'end_col': 55,
\ 'text': 'Found possibly misspelled word "コードチェック".',
\ 'type': 'W',
\ 'code': 'Spelling',
\ },
\ ], \ ],
\ ale#handlers#redpen#HandleRedpenOutput(bufnr(''), [ \ ale#handlers#redpen#HandleRedpenOutput(bufnr(''), [
\ '[', \ '[',
@ -50,6 +59,21 @@ Execute(redpen handler should handle errors output):
\ ' "lineNum": 1,', \ ' "lineNum": 1,',
\ ' "sentenceStartColumnNum": 0,', \ ' "sentenceStartColumnNum": 0,',
\ ' "message": "Found possibly misspelled word \"NeoVim\"."', \ ' "message": "Found possibly misspelled word \"NeoVim\"."',
\ ' },',
\ ' {',
\ ' "sentence": "ALEはNeoVimとVim8で非同期のコードチェックを実現するプラグインです。",',
\ ' "endPosition": {',
\ ' "offset": 27,',
\ ' "lineNum": 1',
\ ' },',
\ ' "validator": "Spelling",',
\ ' "lineNum": 1,',
\ ' "sentenceStartColumnNum": 0,',
\ ' "message": "Found possibly misspelled word \"コードチェック\".",',
\ ' "startPosition": {',
\ ' "offset": 20,',
\ ' "lineNum": 1',
\ ' }',
\ ' }', \ ' }',
\ ' ]', \ ' ]',
\ ' }', \ ' }',