mirror of
https://github.com/amix/vimrc
synced 2025-07-12 14:15:00 +08:00
Updated Vim plugins
This commit is contained in:
133
sources_non_forked/ale/autoload/ale/filerename.vim
Normal file
133
sources_non_forked/ale/autoload/ale/filerename.vim
Normal file
@ -0,0 +1,133 @@
|
||||
" Author: Dalius Dobravolskas <dalius.dobravolskas@gmail.com>
|
||||
" Description: Rename file support for tsserver
|
||||
|
||||
let s:filerename_map = {}
|
||||
|
||||
" Used to get the rename map in tests.
|
||||
function! ale#filerename#GetMap() abort
|
||||
return deepcopy(s:filerename_map)
|
||||
endfunction
|
||||
|
||||
" Used to set the rename map in tests.
|
||||
function! ale#filerename#SetMap(map) abort
|
||||
let s:filerename_map = a:map
|
||||
endfunction
|
||||
|
||||
function! ale#filerename#ClearLSPData() abort
|
||||
let s:filerename_map = {}
|
||||
endfunction
|
||||
|
||||
function! s:message(message) abort
|
||||
call ale#util#Execute('echom ' . string(a:message))
|
||||
endfunction
|
||||
|
||||
function! ale#filerename#HandleTSServerResponse(conn_id, response) abort
|
||||
if get(a:response, 'command', '') isnot# 'getEditsForFileRename'
|
||||
return
|
||||
endif
|
||||
|
||||
if !has_key(s:filerename_map, a:response.request_seq)
|
||||
return
|
||||
endif
|
||||
|
||||
let l:options = remove(s:filerename_map, a:response.request_seq)
|
||||
|
||||
let l:old_name = l:options.old_name
|
||||
let l:new_name = l:options.new_name
|
||||
|
||||
if get(a:response, 'success', v:false) is v:false
|
||||
let l:message = get(a:response, 'message', 'unknown')
|
||||
call s:message('Error renaming file "' . l:old_name . '" to "' . l:new_name
|
||||
\ . '". Reason: ' . l:message)
|
||||
|
||||
return
|
||||
endif
|
||||
|
||||
let l:changes = a:response.body
|
||||
|
||||
if empty(l:changes)
|
||||
call s:message('No changes while renaming "' . l:old_name . '" to "' . l:new_name . '"')
|
||||
else
|
||||
call ale#code_action#HandleCodeAction(
|
||||
\ {
|
||||
\ 'description': 'filerename',
|
||||
\ 'changes': l:changes,
|
||||
\ },
|
||||
\ {
|
||||
\ 'should_save': 1,
|
||||
\ },
|
||||
\)
|
||||
endif
|
||||
|
||||
silent! noautocmd execute 'saveas ' . l:new_name
|
||||
call delete(l:old_name)
|
||||
endfunction
|
||||
|
||||
function! s:OnReady(options, linter, lsp_details) abort
|
||||
let l:id = a:lsp_details.connection_id
|
||||
|
||||
if !ale#lsp#HasCapability(l:id, 'filerename')
|
||||
return
|
||||
endif
|
||||
|
||||
let l:buffer = a:lsp_details.buffer
|
||||
|
||||
let l:Callback = function('ale#filerename#HandleTSServerResponse')
|
||||
|
||||
call ale#lsp#RegisterCallback(l:id, l:Callback)
|
||||
|
||||
let l:message = ale#lsp#tsserver_message#GetEditsForFileRename(
|
||||
\ a:options.old_name,
|
||||
\ a:options.new_name,
|
||||
\)
|
||||
|
||||
let l:request_id = ale#lsp#Send(l:id, l:message)
|
||||
|
||||
let s:filerename_map[l:request_id] = a:options
|
||||
endfunction
|
||||
|
||||
function! s:ExecuteFileRename(linter, options) abort
|
||||
let l:buffer = bufnr('')
|
||||
|
||||
let l:Callback = function('s:OnReady', [a:options])
|
||||
call ale#lsp_linter#StartLSP(l:buffer, a:linter, l:Callback)
|
||||
endfunction
|
||||
|
||||
function! ale#filerename#Execute() abort
|
||||
let l:lsp_linters = []
|
||||
|
||||
for l:linter in ale#linter#Get(&filetype)
|
||||
if l:linter.lsp is# 'tsserver'
|
||||
call add(l:lsp_linters, l:linter)
|
||||
endif
|
||||
endfor
|
||||
|
||||
if empty(l:lsp_linters)
|
||||
call s:message('No active tsserver LSPs')
|
||||
|
||||
return
|
||||
endif
|
||||
|
||||
let l:buffer = bufnr('')
|
||||
let l:old_name = expand('#' . l:buffer . ':p')
|
||||
let l:new_name = ale#util#Input('New file name: ', l:old_name, 'file')
|
||||
|
||||
if l:old_name is# l:new_name
|
||||
call s:message('New file name matches old file name')
|
||||
|
||||
return
|
||||
endif
|
||||
|
||||
if empty(l:new_name)
|
||||
call s:message('New name cannot be empty!')
|
||||
|
||||
return
|
||||
endif
|
||||
|
||||
for l:lsp_linter in l:lsp_linters
|
||||
call s:ExecuteFileRename(l:lsp_linter, {
|
||||
\ 'old_name': l:old_name,
|
||||
\ 'new_name': l:new_name,
|
||||
\})
|
||||
endfor
|
||||
endfunction
|
12
sources_non_forked/ale/autoload/ale/fixers/buf_format.vim
Normal file
12
sources_non_forked/ale/autoload/ale/fixers/buf_format.vim
Normal file
@ -0,0 +1,12 @@
|
||||
" Author: Alex McKinney <alexmckinney01@gmail.com>
|
||||
" Description: Run buf format.
|
||||
|
||||
call ale#Set('proto_buf_format_executable', 'buf')
|
||||
|
||||
function! ale#fixers#buf_format#Fix(buffer) abort
|
||||
let l:executable = ale#Var(a:buffer, 'proto_buf_format_executable')
|
||||
|
||||
return {
|
||||
\ 'command': ale#Escape(l:executable) . ' format %t',
|
||||
\}
|
||||
endfunction
|
14
sources_non_forked/ale/autoload/ale/fixers/crystal.vim
Normal file
14
sources_non_forked/ale/autoload/ale/fixers/crystal.vim
Normal file
@ -0,0 +1,14 @@
|
||||
call ale#Set('crystal_format_executable', 'crystal')
|
||||
call ale#Set('crystal_format_options', '')
|
||||
|
||||
function! ale#fixers#crystal#Fix(buffer) abort
|
||||
let l:executable = ale#Var(a:buffer, 'crystal_format_executable')
|
||||
let l:options = ale#Var(a:buffer, 'crystal_format_options')
|
||||
|
||||
return {
|
||||
\ 'command': ale#Escape(l:executable)
|
||||
\ . ' tool format'
|
||||
\ . ale#Pad(l:options)
|
||||
\ . ' -'
|
||||
\}
|
||||
endfunction
|
29
sources_non_forked/ale/autoload/ale/fixers/dprint.vim
Normal file
29
sources_non_forked/ale/autoload/ale/fixers/dprint.vim
Normal file
@ -0,0 +1,29 @@
|
||||
call ale#Set('dprint_executable', 'dprint')
|
||||
call ale#Set('dprint_executable_override', 0)
|
||||
call ale#Set('dprint_use_global', get(g:, 'ale_use_global_executables', 0))
|
||||
call ale#Set('dprint_options', '')
|
||||
call ale#Set('dprint_config', 'dprint.json')
|
||||
|
||||
function! ale#fixers#dprint#Fix(buffer) abort
|
||||
let l:executable = ale#path#FindExecutable(a:buffer, 'dprint', ['dprint'])
|
||||
let l:executable_override = ale#Var(a:buffer, 'dprint_executable_override')
|
||||
|
||||
if !executable(l:executable) && !l:executable_override
|
||||
return 0
|
||||
endif
|
||||
|
||||
let l:options = ale#Var(a:buffer, 'dprint_options')
|
||||
let l:config = ale#path#FindNearestFile(a:buffer, ale#Var(a:buffer, 'dprint_config'))
|
||||
|
||||
if !empty(l:config)
|
||||
let l:options = l:options . ' -c ' . ale#Escape(l:config)
|
||||
endif
|
||||
|
||||
let l:options = l:options . ' --stdin %s'
|
||||
|
||||
return {
|
||||
\ 'command': ale#Escape(l:executable)
|
||||
\ . ' fmt '
|
||||
\ . l:options
|
||||
\}
|
||||
endfunction
|
16
sources_non_forked/ale/autoload/ale/fixers/dune.vim
Normal file
16
sources_non_forked/ale/autoload/ale/fixers/dune.vim
Normal file
@ -0,0 +1,16 @@
|
||||
" Author: Albert Peschar <albert@peschar.net>
|
||||
" Description: Fix files with dune format.
|
||||
|
||||
call ale#Set('ocaml_dune_executable', 'dune')
|
||||
call ale#Set('ocaml_dune_options', '')
|
||||
|
||||
function! ale#fixers#dune#Fix(buffer) abort
|
||||
let l:executable = ale#Var(a:buffer, 'ocaml_dune_executable')
|
||||
let l:options = ale#Var(a:buffer, 'ocaml_dune_options')
|
||||
|
||||
return {
|
||||
\ 'command': ale#Escape(l:executable)
|
||||
\ . ' format'
|
||||
\ . (empty(l:options) ? '' : ' ' . l:options),
|
||||
\}
|
||||
endfunction
|
17
sources_non_forked/ale/autoload/ale/fixers/gofumpt.vim
Normal file
17
sources_non_forked/ale/autoload/ale/fixers/gofumpt.vim
Normal file
@ -0,0 +1,17 @@
|
||||
" Author: David Houston <houstdav000>
|
||||
" Description: A stricter gofmt implementation.
|
||||
|
||||
call ale#Set('go_gofumpt_executable', 'gofumpt')
|
||||
call ale#Set('go_gofumpt_options', '')
|
||||
|
||||
function! ale#fixers#gofumpt#Fix(buffer) abort
|
||||
let l:executable = ale#Var(a:buffer, 'go_gofumpt_executable')
|
||||
let l:options = ale#Var(a:buffer, 'go_gofumpt_options')
|
||||
|
||||
return {
|
||||
\ 'command': ale#Escape(l:executable)
|
||||
\ . ale#Pad(l:options)
|
||||
\ . ' -w -- %t',
|
||||
\ 'read_temporary_file': 1,
|
||||
\}
|
||||
endfunction
|
15
sources_non_forked/ale/autoload/ale/fixers/opafmt.vim
Normal file
15
sources_non_forked/ale/autoload/ale/fixers/opafmt.vim
Normal file
@ -0,0 +1,15 @@
|
||||
" Description: Fixer for rego files
|
||||
|
||||
call ale#Set('opa_fmt_executable', 'opa')
|
||||
call ale#Set('opa_fmt_options', '')
|
||||
|
||||
function! ale#fixers#opafmt#Fix(buffer) abort
|
||||
let l:executable = ale#Var(a:buffer, 'opa_fmt_executable')
|
||||
let l:options = ale#Var(a:buffer, 'opa_fmt_options')
|
||||
|
||||
return {
|
||||
\ 'command': ale#Escape(l:executable)
|
||||
\ . ' fmt'
|
||||
\ . (empty(l:options) ? '' : ' ' . l:options)
|
||||
\}
|
||||
endfunction
|
17
sources_non_forked/ale/autoload/ale/fixers/packer.vim
Normal file
17
sources_non_forked/ale/autoload/ale/fixers/packer.vim
Normal file
@ -0,0 +1,17 @@
|
||||
" Author: Zhuoyun Wei <wzyboy@wzyboy.org>
|
||||
" Description: Fixer for Packer HCL files
|
||||
|
||||
call ale#Set('packer_fmt_executable', 'packer')
|
||||
call ale#Set('packer_fmt_options', '')
|
||||
|
||||
function! ale#fixers#packer#Fix(buffer) abort
|
||||
let l:executable = ale#Var(a:buffer, 'packer_fmt_executable')
|
||||
let l:options = ale#Var(a:buffer, 'packer_fmt_options')
|
||||
|
||||
return {
|
||||
\ 'command': ale#Escape(l:executable)
|
||||
\ . ' fmt'
|
||||
\ . (empty(l:options) ? '' : ' ' . l:options)
|
||||
\ . ' -'
|
||||
\}
|
||||
endfunction
|
25
sources_non_forked/ale/autoload/ale/fixers/pint.vim
Normal file
25
sources_non_forked/ale/autoload/ale/fixers/pint.vim
Normal file
@ -0,0 +1,25 @@
|
||||
" Author: Michael Dyrynda <michael@dyrynda.com.au>
|
||||
" Description: Fixing files with Laravel Pint.
|
||||
|
||||
call ale#Set('php_pint_executable', 'pint')
|
||||
call ale#Set('php_pint_use_global', get(g:, 'ale_use_global_executables', 0))
|
||||
call ale#Set('php_pint_options', '')
|
||||
|
||||
function! ale#fixers#pint#GetExecutable(buffer) abort
|
||||
return ale#path#FindExecutable(a:buffer, 'php_pint', [
|
||||
\ 'vendor/bin/pint',
|
||||
\ 'pint'
|
||||
\])
|
||||
endfunction
|
||||
|
||||
function! ale#fixers#pint#Fix(buffer) abort
|
||||
let l:executable = ale#fixers#pint#GetExecutable(a:buffer)
|
||||
|
||||
return {
|
||||
\ 'command': ale#Escape(l:executable)
|
||||
\ . ' ' . ale#Var(a:buffer, 'php_pint_options')
|
||||
\ . ' %t',
|
||||
\ 'read_temporary_file': 1,
|
||||
\}
|
||||
endfunction
|
||||
|
41
sources_non_forked/ale/autoload/ale/fixers/pyflyby.vim
Normal file
41
sources_non_forked/ale/autoload/ale/fixers/pyflyby.vim
Normal file
@ -0,0 +1,41 @@
|
||||
" Author: infokiller <joweill@icloud.com>
|
||||
" Description: Tidy imports using pyflyby's tidy-import script
|
||||
" https://github.com/deshaw/pyflyby
|
||||
|
||||
call ale#Set('python_pyflyby_executable', 'tidy-imports')
|
||||
call ale#Set('python_pyflyby_use_global', get(g:, 'ale_use_global_executables', 0))
|
||||
call ale#Set('python_pyflyby_options', '')
|
||||
call ale#Set('python_pyflyby_auto_pipenv', 0)
|
||||
call ale#Set('python_pyflyby_auto_poetry', 0)
|
||||
|
||||
function! ale#fixers#pyflyby#GetExecutable(buffer) abort
|
||||
if (ale#Var(a:buffer, 'python_auto_pipenv') || ale#Var(a:buffer, 'python_pyflyby_auto_pipenv'))
|
||||
\ && ale#python#PipenvPresent(a:buffer)
|
||||
return 'pipenv'
|
||||
endif
|
||||
|
||||
if (ale#Var(a:buffer, 'python_auto_poetry') || ale#Var(a:buffer, 'python_pyflyby_auto_poetry'))
|
||||
\ && ale#python#PoetryPresent(a:buffer)
|
||||
return 'poetry'
|
||||
endif
|
||||
|
||||
return ale#python#FindExecutable(a:buffer, 'python_pyflyby', ['tidy-imports'])
|
||||
endfunction
|
||||
|
||||
function! ale#fixers#pyflyby#Fix(buffer) abort
|
||||
" let l:executable = ale#fixers#pyflyby#GetExecutable(a:buffer)
|
||||
let l:executable = ale#fixers#pyflyby#GetExecutable(a:buffer)
|
||||
let l:cmd = [ale#Escape(l:executable)]
|
||||
|
||||
if l:executable =~? 'pipenv\|poetry$'
|
||||
call extend(l:cmd, ['run', 'tidy-imports'])
|
||||
endif
|
||||
|
||||
let l:options = ale#Var(a:buffer, 'python_pyflyby_options')
|
||||
|
||||
if !empty(l:options)
|
||||
call add(l:cmd, l:options)
|
||||
endif
|
||||
|
||||
return {'command': join(l:cmd, ' ')}
|
||||
endfunction
|
17
sources_non_forked/ale/autoload/ale/fixers/statix.vim
Normal file
17
sources_non_forked/ale/autoload/ale/fixers/statix.vim
Normal file
@ -0,0 +1,17 @@
|
||||
" Author: David Houston <houstdav000>
|
||||
" Description: Provide statix fix as a fixer for simple Nix antipatterns.
|
||||
|
||||
call ale#Set('nix_statix_fix_executable', 'statix')
|
||||
call ale#Set('nix_statix_fix_options', '')
|
||||
|
||||
function! ale#fixers#statix#Fix(buffer) abort
|
||||
let l:executable = ale#Var(a:buffer, 'nix_statix_fix_executable')
|
||||
let l:options = ale#Var(a:buffer, 'nix_statix_fix_options')
|
||||
|
||||
return {
|
||||
\ 'command': ale#Escape(l:executable)
|
||||
\ . ale#Pad('fix')
|
||||
\ . ale#Pad('--stdin')
|
||||
\ . ale#Pad(l:options),
|
||||
\}
|
||||
endfunction
|
14
sources_non_forked/ale/autoload/ale/fixers/zigfmt.vim
Normal file
14
sources_non_forked/ale/autoload/ale/fixers/zigfmt.vim
Normal file
@ -0,0 +1,14 @@
|
||||
scriptencoding utf-8
|
||||
" Author: Arash Mousavi <arash-m>
|
||||
" Description: Official formatter for Zig.
|
||||
|
||||
call ale#Set('zig_zigfmt_executable', 'zig')
|
||||
|
||||
function! ale#fixers#zigfmt#Fix(buffer) abort
|
||||
let l:executable = ale#Var(a:buffer, 'zig_zigfmt_executable')
|
||||
|
||||
return {
|
||||
\ 'command': ale#Escape(l:executable) . ' fmt %t',
|
||||
\ 'read_temporary_file': 1,
|
||||
\}
|
||||
endfunction
|
36
sources_non_forked/ale/autoload/ale/handlers/actionlint.vim
Normal file
36
sources_non_forked/ale/autoload/ale/handlers/actionlint.vim
Normal file
@ -0,0 +1,36 @@
|
||||
function! ale#handlers#actionlint#GetCommand(buffer) abort
|
||||
let l:options = ale#Var(a:buffer, 'yaml_actionlint_options')
|
||||
|
||||
" automatically add --no-color option if not defined
|
||||
if l:options !~# '--no-color'
|
||||
let l:options .= ' --no-color'
|
||||
endif
|
||||
|
||||
" automatically add --oneline option if not defined
|
||||
if l:options !~# '--oneline'
|
||||
let l:options .= ' --oneline'
|
||||
endif
|
||||
|
||||
return '%e ' . l:options . ' %t'
|
||||
endfunction
|
||||
|
||||
function! ale#handlers#actionlint#Handle(buffer, lines) abort
|
||||
" Matches patterns line the following:
|
||||
".github/workflows/main.yml:19:0: could not parse as YAML: yaml: line 19: mapping values are not allowed in this context [yaml-syntax]
|
||||
let l:pattern = '\v^.*:(\d+):(\d+): (.+) \[(.+)\]$'
|
||||
let l:output = []
|
||||
|
||||
for l:match in ale#util#GetMatches(a:lines, l:pattern)
|
||||
let l:item = {
|
||||
\ 'lnum': l:match[1] + 0,
|
||||
\ 'col': l:match[2] + 0,
|
||||
\ 'text': l:match[3],
|
||||
\ 'code': l:match[4],
|
||||
\ 'type': 'E',
|
||||
\}
|
||||
|
||||
call add(l:output, l:item)
|
||||
endfor
|
||||
|
||||
return l:output
|
||||
endfunction
|
54
sources_non_forked/ale/autoload/ale/handlers/cspell.vim
Normal file
54
sources_non_forked/ale/autoload/ale/handlers/cspell.vim
Normal file
@ -0,0 +1,54 @@
|
||||
scriptencoding utf-8
|
||||
" Author: David Houston <houstdav000>
|
||||
" Description: Define a handler function for cspell's output
|
||||
|
||||
function! ale#handlers#cspell#GetExecutable(buffer) abort
|
||||
return ale#path#FindExecutable(a:buffer,
|
||||
\ 'cspell', [
|
||||
\ 'node_modules/.bin/cspell',
|
||||
\ 'node_modules/cspell/bin.js',
|
||||
\ ]
|
||||
\)
|
||||
endfunction
|
||||
|
||||
function! ale#handlers#cspell#GetCommand(buffer) abort
|
||||
let l:executable = ale#handlers#cspell#GetExecutable(a:buffer)
|
||||
let l:options = ale#Var(a:buffer, 'cspell_options')
|
||||
|
||||
return ale#node#Executable(a:buffer, l:executable)
|
||||
\ . ' lint --no-color --no-progress --no-summary'
|
||||
\ . ale#Pad(l:options)
|
||||
\ . ' -- stdin'
|
||||
endfunction
|
||||
|
||||
function! ale#handlers#cspell#Handle(buffer, lines) abort
|
||||
" Look for lines like the following:
|
||||
"
|
||||
" /home/user/repos/ale/README.md:723:48 - Unknown word (stylelint)
|
||||
let l:pattern = '\v^.*:(\d+):(\d+) - (.*)$'
|
||||
let l:output = []
|
||||
|
||||
for l:match in ale#util#GetMatches(a:lines, l:pattern)
|
||||
call add(l:output, {
|
||||
\ 'lnum': l:match[1] + 0,
|
||||
\ 'col': l:match[2] + 0,
|
||||
\ 'text': l:match[3],
|
||||
\ 'type': 'W',
|
||||
\})
|
||||
endfor
|
||||
|
||||
return l:output
|
||||
endfunction
|
||||
|
||||
function! ale#handlers#cspell#DefineLinter(filetype) abort
|
||||
call ale#Set('cspell_executable', 'cspell')
|
||||
call ale#Set('cspell_options', '')
|
||||
call ale#Set('cspell_use_global', get(g:, 'ale_use_global_executables', 0))
|
||||
|
||||
call ale#linter#Define(a:filetype, {
|
||||
\ 'name': 'cspell',
|
||||
\ 'executable': function('ale#handlers#cspell#GetExecutable'),
|
||||
\ 'command': function('ale#handlers#cspell#GetCommand'),
|
||||
\ 'callback': 'ale#handlers#cspell#Handle',
|
||||
\})
|
||||
endfunction
|
30
sources_non_forked/ale/autoload/ale/handlers/naga.vim
Normal file
30
sources_non_forked/ale/autoload/ale/handlers/naga.vim
Normal file
@ -0,0 +1,30 @@
|
||||
" Author: rhysd <https://github.com/rhysd>
|
||||
" Description: Handle errors for naga-cli.
|
||||
|
||||
function! ale#handlers#naga#Handle(buffer, lines) abort
|
||||
let l:errors = []
|
||||
let l:current_error = v:null
|
||||
|
||||
for l:line in a:lines
|
||||
if l:line =~# '^error: '
|
||||
let l:text = l:line[7:]
|
||||
let l:current_error = { 'text': l:text, 'type': 'E' }
|
||||
continue
|
||||
endif
|
||||
|
||||
if l:current_error isnot v:null
|
||||
let l:matches = matchlist(l:line, '\v:(\d+):(\d+)$')
|
||||
|
||||
if !empty(l:matches)
|
||||
let l:current_error.lnum = str2nr(l:matches[1])
|
||||
let l:current_error.col = str2nr(l:matches[2])
|
||||
call add(l:errors, l:current_error)
|
||||
let l:current_error = v:null
|
||||
continue
|
||||
endif
|
||||
endif
|
||||
endfor
|
||||
|
||||
return l:errors
|
||||
endfunction
|
||||
|
73
sources_non_forked/ale/autoload/ale/handlers/openscad.vim
Normal file
73
sources_non_forked/ale/autoload/ale/handlers/openscad.vim
Normal file
@ -0,0 +1,73 @@
|
||||
scriptencoding utf-8LE
|
||||
" Description: This file defines a handler function for linting OpenSCAD files
|
||||
" with SCA2D
|
||||
|
||||
function! ale#handlers#openscad#SCA2D_callback(buffer, lines) abort
|
||||
" Example output::
|
||||
" foo.scad:3:1: W2001: Variable `unused` overwritten within scope.
|
||||
" foo.scad:1:1: F0001: Cannot read file due to syntax error:
|
||||
" - No terminal matches '}' in the current parser context, at line 1 col 36
|
||||
let l:filename_re = '^\([^:]*\):'
|
||||
let l:linenum_re = '\([0-9]*\):'
|
||||
let l:colnum_re = '\([0-9]*\):'
|
||||
let l:err_id = '\([IWEFU][0-9]\+\):'
|
||||
let l:err_msg = '\(.*\)'
|
||||
let l:pattern = filename_re .
|
||||
\ linenum_re .
|
||||
\ colnum_re .
|
||||
\ ' ' .
|
||||
\ err_id .
|
||||
\ ' ' .
|
||||
\ err_msg
|
||||
|
||||
let l:result = []
|
||||
let l:idx = 0
|
||||
|
||||
for l:line in a:lines
|
||||
let l:matches = matchlist(line, pattern)
|
||||
|
||||
if len(matches) > 0
|
||||
" option: Info, Warning, Error, Fatal, Unknown
|
||||
if index(['I', 'W'], matches[4][0]) >= 0
|
||||
let l:type = 'W'
|
||||
else
|
||||
let l:type = 'E'
|
||||
endif
|
||||
|
||||
let l:lnum = matches[2]
|
||||
let l:col = matches[3]
|
||||
let l:text = matches[5]
|
||||
|
||||
" Better locations for some syntax errors
|
||||
if matches[4][0] is# 'F'
|
||||
let l:syntax_error_re = '^\(.*\), at line \([0-9]\+\) col \([0-9]\+\)$'
|
||||
let l:next_line = a:lines[idx+1]
|
||||
let l:syn_err_matches = matchlist(l:next_line, l:syntax_error_re)
|
||||
|
||||
if len(syn_err_matches) > 0
|
||||
let l:text = l:text . l:syn_err_matches[1]
|
||||
let l:lnum = l:syn_err_matches[2]
|
||||
let l:col = l:syn_err_matches[3]
|
||||
else
|
||||
let l:text = l:next_line
|
||||
endif
|
||||
endif
|
||||
|
||||
let l:element = {
|
||||
\ 'lnum': str2nr(l:lnum),
|
||||
\ 'col': str2nr(l:col),
|
||||
\ 'text': l:text,
|
||||
\ 'detail': l:matches[4] . ': ' . l:text,
|
||||
\ 'filename': fnamemodify(matches[1], ':p'),
|
||||
\ 'type': l:type
|
||||
\ }
|
||||
|
||||
call add(l:result, l:element)
|
||||
endif
|
||||
|
||||
let l:idx += 1
|
||||
endfor
|
||||
|
||||
return result
|
||||
|
||||
endfun
|
24
sources_non_forked/ale/autoload/ale/handlers/statix.vim
Normal file
24
sources_non_forked/ale/autoload/ale/handlers/statix.vim
Normal file
@ -0,0 +1,24 @@
|
||||
scriptencoding utf-8
|
||||
" Author: David Houston
|
||||
" Description: This file defines a handler function for statix's errorformat
|
||||
" output.
|
||||
|
||||
function! ale#handlers#statix#Handle(buffer, lines) abort
|
||||
" Look for lines like the following.
|
||||
"
|
||||
" flake.nix>46:13:W:3:This assignment is better written with `inherit`
|
||||
let l:pattern = '\v^.*\>(\d+):(\d+):([A-Z]):(\d+):(.*)$'
|
||||
let l:output = []
|
||||
|
||||
for l:match in ale#util#GetMatches(a:lines, l:pattern)
|
||||
call add(l:output, {
|
||||
\ 'lnum': l:match[1] + 0,
|
||||
\ 'col': l:match[2] + 0,
|
||||
\ 'type': l:match[3],
|
||||
\ 'code': l:match[4],
|
||||
\ 'text': l:match[5],
|
||||
\})
|
||||
endfor
|
||||
|
||||
return l:output
|
||||
endfunction
|
110
sources_non_forked/ale/autoload/ale/uri/jdt.vim
Normal file
110
sources_non_forked/ale/autoload/ale/uri/jdt.vim
Normal file
@ -0,0 +1,110 @@
|
||||
" Author: yoshi1123 <yoshi1@tutanota.com>
|
||||
" Description: Functions for working with jdt:// URIs.
|
||||
|
||||
function! s:OpenJDTLink(root, uri, line, column, options, result) abort
|
||||
if has_key(a:result, 'error')
|
||||
" no-custom-checks
|
||||
echoerr a:result.error.message
|
||||
|
||||
return
|
||||
endif
|
||||
|
||||
let l:contents = a:result['result']
|
||||
|
||||
if type(l:contents) is# type(v:null)
|
||||
" no-custom-checks
|
||||
echoerr 'File content not found'
|
||||
endif
|
||||
|
||||
" disable autocmd when opening buffer
|
||||
autocmd! AleURISchemes
|
||||
call ale#util#Open(a:uri, a:line, a:column, a:options)
|
||||
autocmd AleURISchemes BufNewFile,BufReadPre jdt://** call ale#uri#jdt#ReadJDTLink(expand('<amatch>'))
|
||||
|
||||
if !empty(getbufvar(bufnr(''), 'ale_lsp_root', ''))
|
||||
return
|
||||
endif
|
||||
|
||||
let b:ale_lsp_root = a:root
|
||||
set filetype=java
|
||||
|
||||
call setline(1, split(l:contents, '\n'))
|
||||
call cursor(a:line, a:column)
|
||||
normal! zz
|
||||
|
||||
setlocal buftype=nofile nomodified nomodifiable readonly
|
||||
endfunction
|
||||
|
||||
" Load new buffer with jdt:// contents and jump to line and column.
|
||||
function! ale#uri#jdt#OpenJDTLink(encoded_uri, line, column, options, conn_id) abort
|
||||
let l:found_eclipselsp = v:false
|
||||
|
||||
for l:linter in ale#linter#Get('java')
|
||||
if l:linter.name is# 'eclipselsp'
|
||||
let l:found_eclipselsp = v:true
|
||||
endif
|
||||
endfor
|
||||
|
||||
if !l:found_eclipselsp
|
||||
throw 'eclipselsp not running'
|
||||
endif
|
||||
|
||||
let l:root = a:conn_id[stridx(a:conn_id, ':')+1:]
|
||||
let l:uri = a:encoded_uri
|
||||
call ale#lsp_linter#SendRequest(
|
||||
\ bufnr(''),
|
||||
\ 'eclipselsp',
|
||||
\ [0, 'java/classFileContents', {'uri': ale#util#ToURI(l:uri)}],
|
||||
\ function('s:OpenJDTLink', [l:root, l:uri, a:line, a:column, a:options])
|
||||
\)
|
||||
endfunction
|
||||
|
||||
function! s:ReadClassFileContents(uri, result) abort
|
||||
if has_key(a:result, 'error')
|
||||
" no-custom-checks
|
||||
echoerr a:result.error.message
|
||||
|
||||
return
|
||||
endif
|
||||
|
||||
let l:contents = a:result['result']
|
||||
|
||||
if type(l:contents) is# type(v:null)
|
||||
" no-custom-checks
|
||||
echoerr 'File content not found'
|
||||
endif
|
||||
|
||||
call setline(1, split(l:contents, '\n'))
|
||||
|
||||
setlocal buftype=nofile nomodified nomodifiable readonly
|
||||
endfunction
|
||||
|
||||
" Read jdt:// contents, as part of current project, into current buffer.
|
||||
function! ale#uri#jdt#ReadJDTLink(encoded_uri) abort
|
||||
if !empty(getbufvar(bufnr(''), 'ale_lsp_root', ''))
|
||||
return
|
||||
endif
|
||||
|
||||
let l:linter_map = ale#lsp_linter#GetLSPLinterMap()
|
||||
|
||||
for l:conn_id in keys(l:linter_map)
|
||||
if l:linter_map[l:conn_id] is# 'eclipselsp'
|
||||
let l:root = l:conn_id[stridx(l:conn_id, ':')+1:]
|
||||
endif
|
||||
endfor
|
||||
|
||||
if l:root is# v:null
|
||||
throw 'eclipselsp not running'
|
||||
endif
|
||||
|
||||
let l:uri = a:encoded_uri
|
||||
let b:ale_lsp_root = l:root
|
||||
set filetype=java
|
||||
|
||||
call ale#lsp_linter#SendRequest(
|
||||
\ bufnr(''),
|
||||
\ 'eclipselsp',
|
||||
\ [0, 'java/classFileContents', {'uri': ale#util#ToURI(l:uri)}],
|
||||
\ function('s:ReadClassFileContents', [l:uri])
|
||||
\)
|
||||
endfunction
|
Reference in New Issue
Block a user