mirror of
				https://github.com/amix/vimrc
				synced 2025-10-31 14:43:35 +08:00 
			
		
		
		
	Updated plugins
This commit is contained in:
		| @ -16,10 +16,12 @@ function! ale_linters#apiblueprint#drafter#HandleErrors(buffer, lines) abort | ||||
|         \   'lnum': l:match[3] + 0, | ||||
|         \   'col': l:match[4] + 0, | ||||
|         \} | ||||
|  | ||||
|         if l:match[5] isnot# '' | ||||
|             let l:item.end_lnum = l:match[6] + 0 | ||||
|             let l:item.end_col = l:match[7] + 0 | ||||
|         endif | ||||
|  | ||||
|         call add(l:output, l:item) | ||||
|     endfor | ||||
|  | ||||
|  | ||||
| @ -6,6 +6,7 @@ call ale#Set('c_clangd_options', '') | ||||
|  | ||||
| function! ale_linters#c#clangd#GetProjectRoot(buffer) abort | ||||
|     let l:project_root = ale#path#FindNearestFile(a:buffer, 'compile_commands.json') | ||||
|  | ||||
|     return !empty(l:project_root) ? fnamemodify(l:project_root, ':h') : '' | ||||
| endfunction | ||||
|  | ||||
|  | ||||
| @ -9,9 +9,11 @@ function! ale_linters#clojure#joker#HandleJokerFormat(buffer, lines) abort | ||||
|  | ||||
|     for l:match in ale#util#GetMatches(a:lines, l:pattern) | ||||
|         let l:type = 'E' | ||||
|  | ||||
|         if l:match[4] is? 'Parse warning' | ||||
|           let l:type = 'W' | ||||
|         endif | ||||
|  | ||||
|         call add(l:output, { | ||||
|         \   'lnum': l:match[1] + 0, | ||||
|         \   'col': l:match[2] + 0, | ||||
|  | ||||
| @ -6,6 +6,7 @@ call ale#Set('cpp_clangd_options', '') | ||||
|  | ||||
| function! ale_linters#cpp#clangd#GetProjectRoot(buffer) abort | ||||
|     let l:project_root = ale#path#FindNearestFile(a:buffer, 'compile_commands.json') | ||||
|  | ||||
|     return !empty(l:project_root) ? fnamemodify(l:project_root, ':h') : '' | ||||
| endfunction | ||||
|  | ||||
|  | ||||
| @ -22,6 +22,7 @@ function! ale_linters#cucumber#cucumber#Handle(buffer, lines) abort | ||||
|     endtry | ||||
|  | ||||
|     let l:output = [] | ||||
|  | ||||
|     for l:element in get(l:json, 'elements', []) | ||||
|         for l:step in l:element['steps'] | ||||
|             if l:step['result']['status'] is# 'undefined' | ||||
|  | ||||
| @ -8,7 +8,6 @@ function! ale_linters#cuda#nvcc#GetCommand(buffer) abort | ||||
|     " Unused: use ale#util#nul_file | ||||
|     " let l:output_file = ale#util#Tempname() . '.ii' | ||||
|     " call ale#engine#ManageFile(a:buffer, l:output_file) | ||||
|  | ||||
|     return '%e -cuda' | ||||
|     \   . ale#Pad(ale#c#IncludeOptions(ale#c#FindLocalHeaderPaths(a:buffer))) | ||||
|     \   . ale#Pad(ale#Var(a:buffer, 'cuda_nvcc_options')) | ||||
| @ -23,7 +22,6 @@ function! ale_linters#cuda#nvcc#HandleNVCCFormat(buffer, lines) abort | ||||
|     let l:output = [] | ||||
|  | ||||
|     for l:match in ale#util#GetMatches(a:lines, l:pattern) | ||||
|  | ||||
|         let l:item = { | ||||
|         \   'lnum': str2nr(l:match[2]), | ||||
|         \   'type': l:match[4] =~# 'error' ? 'E' : 'W', | ||||
|  | ||||
| @ -13,6 +13,7 @@ function! ale_linters#dafny#dafny#Handle(buffer, lines) abort | ||||
|         \    'type': l:match[4] =~# '^Error' ? 'E' : 'W' | ||||
|         \ }) | ||||
|     endfor | ||||
|  | ||||
|     return l:output | ||||
| endfunction | ||||
|  | ||||
|  | ||||
| @ -15,6 +15,6 @@ call ale#linter#Define('dart', { | ||||
| \   'name': 'language_server', | ||||
| \   'lsp': 'stdio', | ||||
| \   'executable_callback': ale#VarFunc('dart_language_server_executable'), | ||||
| \   'command_callback': 'ale_linters#dart#language_server#GetExecutable', | ||||
| \   'command': '%e', | ||||
| \   'project_root_callback': 'ale_linters#dart#language_server#GetProjectRoot', | ||||
| \}) | ||||
|  | ||||
| @ -82,9 +82,11 @@ endfunction | ||||
|  | ||||
| function! ale_linters#dockerfile#hadolint#GetCommand(buffer) abort | ||||
|     let l:command = ale_linters#dockerfile#hadolint#GetExecutable(a:buffer) | ||||
|  | ||||
|     if l:command is# 'docker' | ||||
|         return 'docker run --rm -i ' . ale#Var(a:buffer, 'dockerfile_hadolint_docker_image') | ||||
|     endif | ||||
|  | ||||
|     return 'hadolint -' | ||||
| endfunction | ||||
|  | ||||
|  | ||||
| @ -10,7 +10,6 @@ function! ale_linters#elixir#mix#Handle(buffer, lines) abort | ||||
|     " | ||||
|     " TODO: Warning format | ||||
|     " warning: variable "foobar" does not exist and is being expanded to "foobar()", please use parentheses to remove the ambiguity or change the variable name | ||||
|  | ||||
|     let l:pattern = '\v\(([^\)]+Error)\) ([^:]+):([^:]+): (.+)$' | ||||
|     let l:output = [] | ||||
|  | ||||
| @ -32,9 +31,11 @@ endfunction | ||||
|  | ||||
| function! ale_linters#elixir#mix#FindProjectRoot(buffer) abort | ||||
|     let l:mix_file = ale#path#FindNearestFile(a:buffer, 'mix.exs') | ||||
|  | ||||
|     if !empty(l:mix_file) | ||||
|       return fnamemodify(l:mix_file, ':p:h') | ||||
|     endif | ||||
|  | ||||
|     return '.' | ||||
| endfunction | ||||
|  | ||||
|  | ||||
| @ -23,8 +23,10 @@ function! ale_linters#gitcommit#gitlint#Handle(buffer, lines) abort | ||||
|     for l:match in ale#util#GetMatches(a:lines, l:pattern) | ||||
|         let l:code = l:match[2] | ||||
|  | ||||
|         if l:code is# 'T2' && !ale#Var(a:buffer, 'warn_about_trailing_whitespace') | ||||
|             continue | ||||
|         if !ale#Var(a:buffer, 'warn_about_trailing_whitespace') | ||||
|             if l:code is# 'T2' || l:code is# 'B2' | ||||
|                 continue | ||||
|             endif | ||||
|         endif | ||||
|  | ||||
|         let l:item = { | ||||
|  | ||||
| @ -3,6 +3,7 @@ | ||||
| " Description: go build for Go files | ||||
| " inspired by work from dzhou121 <dzhou121@gmail.com> | ||||
|  | ||||
| call ale#Set('go_go_executable', 'go') | ||||
| call ale#Set('go_gobuild_options', '') | ||||
|  | ||||
| function! ale_linters#go#gobuild#GetCommand(buffer) abort | ||||
| @ -10,7 +11,7 @@ function! ale_linters#go#gobuild#GetCommand(buffer) abort | ||||
|  | ||||
|     " Run go test in local directory with relative path | ||||
|     return ale#path#BufferCdString(a:buffer) | ||||
|     \   . 'go test' | ||||
|     \   . ale#Var(a:buffer, 'go_go_executable') . ' test' | ||||
|     \   . (!empty(l:options) ? ' ' . l:options : '') | ||||
|     \   . ' -c -o /dev/null ./' | ||||
| endfunction | ||||
| @ -21,7 +22,6 @@ function! ale_linters#go#gobuild#GetMatches(lines) abort | ||||
|     " file.go:27: missing argument for Printf("%s"): format reads arg 2, have only 1 args | ||||
|     " file.go:53:10: if block ends with a return statement, so drop this else and outdent its block (move short variable declaration to its own line if necessary) | ||||
|     " file.go:5:2: expected declaration, found 'STRING' "log" | ||||
|  | ||||
|     " go test returns relative paths so use tail of filename as part of pattern matcher | ||||
|     let l:pattern = '\v^([a-zA-Z]?:?[^:]+):(\d+):?(\d+)?:? (.+)$' | ||||
|  | ||||
| @ -48,7 +48,7 @@ endfunction | ||||
| call ale#linter#Define('go', { | ||||
| \   'name': 'gobuild', | ||||
| \   'aliases': ['go build'], | ||||
| \   'executable': 'go', | ||||
| \   'executable_callback': ale#VarFunc('go_go_executable'), | ||||
| \   'command_callback': 'ale_linters#go#gobuild#GetCommand', | ||||
| \   'output_stream': 'stderr', | ||||
| \   'callback': 'ale_linters#go#gobuild#Handler', | ||||
|  | ||||
							
								
								
									
										56
									
								
								sources_non_forked/ale/ale_linters/go/golangci_lint.vim
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										56
									
								
								sources_non_forked/ale/ale_linters/go/golangci_lint.vim
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,56 @@ | ||||
| " Author: Sascha Grunert <mail@saschagrunert.de> | ||||
| " Description: Adds support of golangci-lint | ||||
|  | ||||
| call ale#Set('go_golangci_lint_options', '--enable-all') | ||||
| call ale#Set('go_golangci_lint_executable', 'golangci-lint') | ||||
| call ale#Set('go_golangci_lint_package', 0) | ||||
|  | ||||
| function! ale_linters#go#golangci_lint#GetCommand(buffer) abort | ||||
|     let l:filename = expand('#' . a:buffer . ':t') | ||||
|     let l:options = ale#Var(a:buffer, 'go_golangci_lint_options') | ||||
|     let l:lint_package = ale#Var(a:buffer, 'go_golangci_lint_package') | ||||
|  | ||||
|     if l:lint_package | ||||
|         return ale#path#BufferCdString(a:buffer) | ||||
|         \   . '%e run ' | ||||
|         \   .  l:options | ||||
|     endif | ||||
|  | ||||
|     return ale#path#BufferCdString(a:buffer) | ||||
|     \   . '%e run ' | ||||
|     \   . ale#Escape(l:filename) | ||||
|     \   . ' ' . l:options | ||||
| endfunction | ||||
|  | ||||
| function! ale_linters#go#golangci_lint#GetMatches(lines) abort | ||||
|     let l:pattern = '\v^([a-zA-Z]?:?[^:]+):(\d+):?(\d+)?:?:?:?\s\*?(.+)$' | ||||
|  | ||||
|     return ale#util#GetMatches(a:lines, l:pattern) | ||||
| endfunction | ||||
|  | ||||
| function! ale_linters#go#golangci_lint#Handler(buffer, lines) abort | ||||
|     let l:dir = expand('#' . a:buffer . ':p:h') | ||||
|     let l:output = [] | ||||
|  | ||||
|     for l:match in ale_linters#go#golangci_lint#GetMatches(a:lines) | ||||
|         " l:match[1] will already be an absolute path, output from | ||||
|         " golangci_lint | ||||
|         call add(l:output, { | ||||
|         \   'filename': ale#path#GetAbsPath(l:dir, l:match[1]), | ||||
|         \   'lnum': l:match[2] + 0, | ||||
|         \   'col': l:match[3] + 0, | ||||
|         \   'type': 'E', | ||||
|         \   'text': l:match[4], | ||||
|         \}) | ||||
|     endfor | ||||
|  | ||||
|     return l:output | ||||
| endfunction | ||||
|  | ||||
| call ale#linter#Define('go', { | ||||
| \   'name': 'golangci-lint', | ||||
| \   'executable_callback': ale#VarFunc('go_golangci_lint_executable'), | ||||
| \   'command_callback': 'ale_linters#go#golangci_lint#GetCommand', | ||||
| \   'callback': 'ale_linters#go#golangci_lint#Handler', | ||||
| \   'lint_file': 1, | ||||
| \}) | ||||
| @ -4,19 +4,23 @@ | ||||
| " Author: John Eikenberry <jae@zhar.net> | ||||
| " Description: updated to work with go1.10 | ||||
|  | ||||
| call ale#Set('go_go_executable', 'go') | ||||
| call ale#Set('go_govet_options', '') | ||||
|  | ||||
| function! ale_linters#go#govet#GetCommand(buffer) abort | ||||
|     let l:options = ale#Var(a:buffer, 'go_govet_options') | ||||
|     return ale#path#BufferCdString(a:buffer) . ' go vet .' | ||||
|  | ||||
|     return ale#path#BufferCdString(a:buffer) . ' ' | ||||
|     \   . ale#Var(a:buffer, 'go_go_executable') . ' vet ' | ||||
|     \   . (!empty(l:options) ? ' ' . l:options : '') | ||||
|     \   . ' .' | ||||
| endfunction | ||||
|  | ||||
| call ale#linter#Define('go', { | ||||
| \   'name': 'govet', | ||||
| \   'aliases': ['go vet'], | ||||
| \   'output_stream': 'stderr', | ||||
| \   'executable': 'go', | ||||
| \   'executable_callback': ale#VarFunc('go_go_executable'), | ||||
| \   'command_callback': 'ale_linters#go#govet#GetCommand', | ||||
| \   'callback': 'ale#handlers#go#Handler', | ||||
| \   'lint_file': 1, | ||||
|  | ||||
							
								
								
									
										28
									
								
								sources_non_forked/ale/ale_linters/go/langserver.vim
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										28
									
								
								sources_non_forked/ale/ale_linters/go/langserver.vim
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,28 @@ | ||||
| " Author: Horacio Sanson <https://github.com/hsanson> | ||||
| " Description: Support for go-langserver https://github.com/sourcegraph/go-langserver | ||||
|  | ||||
| call ale#Set('go_langserver_executable', 'go-langserver') | ||||
| call ale#Set('go_langserver_options', '') | ||||
|  | ||||
| function! ale_linters#go#langserver#GetCommand(buffer) abort | ||||
|     let l:executable = [ale#Escape(ale#Var(a:buffer, 'go_langserver_executable'))] | ||||
|     let l:options = ale#Var(a:buffer, 'go_langserver_options') | ||||
|     let l:options = substitute(l:options, '-gocodecompletion', '', 'g') | ||||
|     let l:options = filter(split(l:options, ' '), 'empty(v:val) != 1') | ||||
|  | ||||
|     if(ale#Var(a:buffer, 'completion_enabled') == 1) | ||||
|       call add(l:options, '-gocodecompletion') | ||||
|     endif | ||||
|  | ||||
|     let l:options = uniq(sort(l:options)) | ||||
|  | ||||
|     return join(extend(l:executable, l:options), ' ') | ||||
| endfunction | ||||
|  | ||||
| call ale#linter#Define('go', { | ||||
| \   'name': 'golangserver', | ||||
| \   'lsp': 'stdio', | ||||
| \   'executable_callback': ale#VarFunc('go_langserver_executable'), | ||||
| \   'command_callback': 'ale_linters#go#langserver#GetCommand', | ||||
| \   'project_root_callback': 'ale#go#FindProjectRoot', | ||||
| \}) | ||||
| @ -25,6 +25,7 @@ function! ale_linters#html#tidy#GetCommand(buffer) abort | ||||
|     " On macOS, old tidy (released on 31 Oct 2006) is installed. It does not | ||||
|     " consider HTML5 so we should avoid it. | ||||
|     let l:executable = ale#Var(a:buffer, 'html_tidy_executable') | ||||
|  | ||||
|     if has('mac') && l:executable is# 'tidy' && exists('*exepath') | ||||
|     \  && exepath(l:executable) is# '/usr/bin/tidy' | ||||
|         return '' | ||||
| @ -40,7 +41,6 @@ endfunction | ||||
| function! ale_linters#html#tidy#Handle(buffer, lines) abort | ||||
|     " Matches patterns lines like the following: | ||||
|     " line 7 column 5 - Warning: missing </title> before </head> | ||||
|  | ||||
|     let l:pattern = '^line \(\d\+\) column \(\d\+\) - \(Warning\|Error\): \(.\+\)$' | ||||
|     let l:output = [] | ||||
|  | ||||
|  | ||||
| @ -12,7 +12,7 @@ endfunction | ||||
|  | ||||
| function! ale_linters#idris#idris#Handle(buffer, lines) abort | ||||
|     " This was copied almost verbatim from ale#handlers#haskell#HandleGHCFormat | ||||
|  | ||||
|     " | ||||
|     " Look for lines like the following: | ||||
|     " foo.idr:2:6:When checking right hand side of main with expected type | ||||
|     " bar.idr:11:11-13: | ||||
| @ -30,6 +30,7 @@ function! ale_linters#idris#idris#Handle(buffer, lines) abort | ||||
|             else | ||||
|                 let l:corrected_lines[-1] .= l:line | ||||
|             endif | ||||
|  | ||||
|             let l:corrected_lines[-1] = substitute(l:corrected_lines[-1], '\s\+', ' ', 'g') | ||||
|         endif | ||||
|     endfor | ||||
|  | ||||
| @ -16,6 +16,7 @@ function! ale_linters#java#javac#GetImportPaths(buffer) abort | ||||
|     endif | ||||
|  | ||||
|     let l:classpath_command = ale#gradle#BuildClasspathCommand(a:buffer) | ||||
|  | ||||
|     if !empty(l:classpath_command) | ||||
|         return l:classpath_command | ||||
|     endif | ||||
| @ -90,7 +91,6 @@ function! ale_linters#java#javac#Handle(buffer, lines) abort | ||||
|     " | ||||
|     " Main.java:13: warning: [deprecation] donaught() in Testclass has been deprecated | ||||
|     " Main.java:16: error: ';' expected | ||||
|  | ||||
|     let l:directory = expand('#' . a:buffer . ':p:h') | ||||
|     let l:pattern = '\v^(.*):(\d+): (.+):(.+)$' | ||||
|     let l:col_pattern = '\v^(\s*\^)$' | ||||
|  | ||||
							
								
								
									
										23
									
								
								sources_non_forked/ale/ale_linters/java/javalsp.vim
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										23
									
								
								sources_non_forked/ale/ale_linters/java/javalsp.vim
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,23 @@ | ||||
| " Author: Horacio Sanson <https://github.com/hsanson> | ||||
| " Description: Support for the Java language server https://github.com/georgewfraser/vscode-javac | ||||
|  | ||||
| call ale#Set('java_javalsp_jar', 'javacs.jar') | ||||
|  | ||||
| function! ale_linters#java#javalsp#Executable(buffer) abort | ||||
|     return 'java' | ||||
| endfunction | ||||
|  | ||||
| function! ale_linters#java#javalsp#Command(buffer) abort | ||||
|     let l:jar = ale#Var(a:buffer, 'java_javalsp_jar') | ||||
|  | ||||
|     return ale#Escape('java -cp ' . l:jar . ' -Xverify:none org.javacs.Main') | ||||
| endfunction | ||||
|  | ||||
| call ale#linter#Define('java', { | ||||
| \   'name': 'javalsp', | ||||
| \   'lsp': 'stdio', | ||||
| \   'executable_callback': 'ale_linters#java#javalsp#Executable', | ||||
| \   'command_callback': 'ale_linters#java#javalsp#Command', | ||||
| \   'language': 'java', | ||||
| \   'project_root_callback': 'ale#java#FindProjectRoot', | ||||
| \}) | ||||
| @ -91,7 +91,6 @@ function! s:GetDetails(error) abort | ||||
|     let l:detail = '' | ||||
|  | ||||
|     for l:extra_error in a:error.extra | ||||
|  | ||||
|         if has_key(l:extra_error, 'message') | ||||
|             for l:extra_message in l:extra_error.message | ||||
|                 let l:detail = s:ExtraErrorMsg(l:detail, l:extra_message.descr) | ||||
| @ -105,7 +104,6 @@ function! s:GetDetails(error) abort | ||||
|                 endfor | ||||
|             endfor | ||||
|         endif | ||||
|  | ||||
|     endfor | ||||
|  | ||||
|     return l:detail | ||||
| @ -161,7 +159,6 @@ function! ale_linters#javascript#flow#Handle(buffer, lines) abort | ||||
|         endif | ||||
|  | ||||
|         call add(l:output, l:errorToAdd) | ||||
|  | ||||
|     endfor | ||||
|  | ||||
|     return l:output | ||||
|  | ||||
| @ -3,7 +3,6 @@ | ||||
| function! ale_linters#json#jsonlint#Handle(buffer, lines) abort | ||||
|     " Matches patterns like the following: | ||||
|     " line 2, col 15, found: 'STRING' - expected: 'EOF', '}', ',', ']'. | ||||
|  | ||||
|     let l:pattern = '^line \(\d\+\), col \(\d*\), \(.\+\)$' | ||||
|     let l:output = [] | ||||
|  | ||||
|  | ||||
							
								
								
									
										21
									
								
								sources_non_forked/ale/ale_linters/julia/languageserver.vim
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										21
									
								
								sources_non_forked/ale/ale_linters/julia/languageserver.vim
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,21 @@ | ||||
| " Author: Bartolomeo Stellato <bartolomeo.stellato@gmail.com> | ||||
| " Description: A language server for Julia | ||||
|  | ||||
| " Set julia executable variable | ||||
| call ale#Set('julia_executable', 'julia') | ||||
|  | ||||
| function! ale_linters#julia#languageserver#GetCommand(buffer) abort | ||||
|     let l:julia_executable = ale#Var(a:buffer, 'julia_executable') | ||||
|     let l:cmd_string = 'using LanguageServer; server = LanguageServer.LanguageServerInstance(isdefined(Base, :stdin) ? stdin : STDIN, isdefined(Base, :stdout) ? stdout : STDOUT, false); server.runlinter = true; run(server);' | ||||
|  | ||||
|     return ale#Escape(l:julia_executable) . ' --startup-file=no --history-file=no -e ' . ale#Escape(l:cmd_string) | ||||
| endfunction | ||||
|  | ||||
| call ale#linter#Define('julia', { | ||||
| \   'name': 'languageserver', | ||||
| \   'lsp': 'stdio', | ||||
| \   'executable_callback': ale#VarFunc('julia_executable'), | ||||
| \   'command_callback': 'ale_linters#julia#languageserver#GetCommand', | ||||
| \   'language': 'julia', | ||||
| \   'project_root_callback': 'ale#julia#FindProjectRoot', | ||||
| \}) | ||||
| @ -17,12 +17,14 @@ function! ale_linters#kotlin#kotlinc#GetImportPaths(buffer) abort | ||||
|         return '' | ||||
|     else | ||||
|         let l:pom_path = ale#path#FindNearestFile(a:buffer, 'pom.xml') | ||||
|  | ||||
|         if !empty(l:pom_path) && executable('mvn') | ||||
|             return ale#path#CdString(fnamemodify(l:pom_path, ':h')) | ||||
|                         \ . 'mvn dependency:build-classpath' | ||||
|         endif | ||||
|  | ||||
|         let l:classpath_command = ale#gradle#BuildClasspathCommand(a:buffer) | ||||
|  | ||||
|         if !empty(l:classpath_command) | ||||
|             return l:classpath_command | ||||
|         endif | ||||
| @ -78,12 +80,13 @@ function! ale_linters#kotlin#kotlinc#GetCommand(buffer, import_paths) abort | ||||
|     endif | ||||
|  | ||||
|     let l:fname = '' | ||||
|  | ||||
|     if ale#Var(a:buffer, 'kotlin_kotlinc_sourcepath') isnot# '' | ||||
|         let l:fname .= expand(ale#Var(a:buffer, 'kotlin_kotlinc_sourcepath'), 1) . ' ' | ||||
|     else | ||||
|         " Find the src directory for files in this project. | ||||
|  | ||||
|         let l:project_root = ale#gradle#FindProjectRoot(a:buffer) | ||||
|  | ||||
|         if !empty(l:project_root) | ||||
|             let l:src_dir = l:project_root | ||||
|         else | ||||
| @ -93,6 +96,7 @@ function! ale_linters#kotlin#kotlinc#GetCommand(buffer, import_paths) abort | ||||
|  | ||||
|         let l:fname .= expand(l:src_dir, 1) . ' ' | ||||
|     endif | ||||
|  | ||||
|     let l:fname .= ale#Escape(expand('#' . a:buffer . ':p')) | ||||
|     let l:command .= l:kotlinc_opts . ' ' . l:fname | ||||
|  | ||||
| @ -124,6 +128,7 @@ function! ale_linters#kotlin#kotlinc#Handle(buffer, lines) abort | ||||
|         if l:buf_abspath isnot# l:curbuf_abspath | ||||
|             continue | ||||
|         endif | ||||
|  | ||||
|         let l:type_marker_str = l:type is# 'warning' ? 'W' : 'E' | ||||
|  | ||||
|         call add(l:output, { | ||||
|  | ||||
| @ -13,6 +13,7 @@ function! ale_linters#make#checkmake#Handle(buffer, lines) abort | ||||
|         \    'text': l:match[3], | ||||
|         \}) | ||||
|     endfor | ||||
|  | ||||
|     return l:output | ||||
| endfunction | ||||
|  | ||||
|  | ||||
| @ -24,10 +24,12 @@ function! ale_linters#markdown#remark_lint#Handle(buffer, lines) abort | ||||
|         \   'type': l:match[6] is# 'error' ? 'E' : 'W', | ||||
|         \   'text': l:match[7], | ||||
|         \} | ||||
|  | ||||
|         if l:match[3] isnot# '' | ||||
|             let l:item.end_lnum = l:match[4] + 0 | ||||
|             let l:item.end_col = l:match[5] + 0 | ||||
|         endif | ||||
|  | ||||
|         call add(l:output, l:item) | ||||
|     endfor | ||||
|  | ||||
|  | ||||
| @ -8,10 +8,12 @@ function! ale_linters#nasm#nasm#GetCommand(buffer) abort | ||||
|     " Note that NASM requires a trailing slash for the -I option. | ||||
|     let l:separator = has('win32') ? '\' : '/' | ||||
|     let l:path = fnamemodify(bufname(a:buffer), ':p:h') . l:separator | ||||
|     let l:output_null = has('win32') ? 'NUL' : '/dev/null' | ||||
|  | ||||
|     return '%e -X gnu -I ' . ale#Escape(l:path) | ||||
|     \   . ale#Pad(ale#Var(a:buffer, 'nasm_nasm_options')) | ||||
|     \   . ' %s' | ||||
|     \   . ' -o ' . l:output_null | ||||
| endfunction | ||||
|  | ||||
| function! ale_linters#nasm#nasm#Handle(buffer, lines) abort | ||||
|  | ||||
| @ -6,6 +6,7 @@ call ale#Set('objc_clangd_options', '') | ||||
|  | ||||
| function! ale_linters#objc#clangd#GetProjectRoot(buffer) abort | ||||
|     let l:project_root = ale#path#FindNearestFile(a:buffer, 'compile_commands.json') | ||||
|  | ||||
|     return !empty(l:project_root) ? fnamemodify(l:project_root, ':h') : '' | ||||
| endfunction | ||||
|  | ||||
|  | ||||
| @ -6,6 +6,7 @@ call ale#Set('objcpp_clangd_options', '') | ||||
|  | ||||
| function! ale_linters#objcpp#clangd#GetProjectRoot(buffer) abort | ||||
|     let l:project_root = ale#path#FindNearestFile(a:buffer, 'compile_commands.json') | ||||
|  | ||||
|     return !empty(l:project_root) ? fnamemodify(l:project_root, ':h') : '' | ||||
| endfunction | ||||
|  | ||||
|  | ||||
| @ -14,11 +14,16 @@ let s:begin_failed_skip_pattern = '\v' . join([ | ||||
| \], '|') | ||||
|  | ||||
| function! ale_linters#perl#perl#Handle(buffer, lines) abort | ||||
|     if empty(a:lines) | ||||
|         return [] | ||||
|     endif | ||||
|  | ||||
|     let l:pattern = '\(.\+\) at \(.\+\) line \(\d\+\)' | ||||
|     let l:output = [] | ||||
|     let l:basename = expand('#' . a:buffer . ':t') | ||||
|  | ||||
|     let l:type = 'E' | ||||
|  | ||||
|     if a:lines[-1] =~# 'syntax OK' | ||||
|         let l:type = 'W' | ||||
|     endif | ||||
|  | ||||
| @ -8,6 +8,7 @@ function! ale_linters#puppet#languageserver#GetProjectRoot(buffer) abort | ||||
|     " there's no requirement to have it, so fall back to the other possible | ||||
|     " Puppet module directories | ||||
|     let l:root_path = ale#path#FindNearestFile(a:buffer, 'metadata.json') | ||||
|  | ||||
|     if !empty(l:root_path) | ||||
|         return fnamemodify(l:root_path, ':h') | ||||
|     endif | ||||
| @ -17,6 +18,7 @@ function! ale_linters#puppet#languageserver#GetProjectRoot(buffer) abort | ||||
|     \   'templates', | ||||
|     \] | ||||
|         let l:root_path = ale#path#FindNearestDirectory(a:buffer, l:test_path) | ||||
|  | ||||
|         if !empty(l:root_path) | ||||
|             return fnamemodify(l:root_path, ':h:h') | ||||
|         endif | ||||
|  | ||||
| @ -1,11 +1,13 @@ | ||||
| " Author: Alexander Olofsson <alexander.olofsson@liu.se> | ||||
|  | ||||
| call ale#Set('puppet_puppet_executable', 'puppet') | ||||
| call ale#Set('puppet_puppet_options', '') | ||||
|  | ||||
| function! ale_linters#puppet#puppet#Handle(buffer, lines) abort | ||||
|     " Matches patterns like the following: | ||||
|     " Error: Could not parse for environment production: Syntax error at ':' at /root/puppetcode/modules/nginx/manifests/init.pp:43:12 | ||||
|     " Error: Could not parse for environment production: Syntax error at '='; expected '}' at /root/puppetcode/modules/pancakes/manifests/init.pp:5" | ||||
|     " Error: Could not parse for environment production: Syntax error at 'parameter1' (file: /tmp/modules/mariadb/manifests/slave.pp, line: 4, column: 5) | ||||
|  | ||||
|     let l:pattern = '^Error: .*: \(.\+\) \((file:\|at\) .\+\.pp\(, line: \|:\)\(\d\+\)\(, column: \|:\)\=\(\d*\)' | ||||
|     let l:output = [] | ||||
|  | ||||
| @ -20,10 +22,16 @@ function! ale_linters#puppet#puppet#Handle(buffer, lines) abort | ||||
|     return l:output | ||||
| endfunction | ||||
|  | ||||
| function! ale_linters#puppet#puppet#GetCommand(buffer) abort | ||||
|     return '%e parser validate --color=false ' | ||||
|     \    . ale#Pad(ale#Var(a:buffer, 'puppet_puppet_options')) | ||||
|     \    . ' %t' | ||||
| endfunction | ||||
|  | ||||
| call ale#linter#Define('puppet', { | ||||
| \   'name': 'puppet', | ||||
| \   'executable': 'puppet', | ||||
| \   'executable_callback': ale#VarFunc('puppet_puppet_executable'), | ||||
| \   'output_stream': 'stderr', | ||||
| \   'command': 'puppet parser validate --color=false %t', | ||||
| \   'command_callback': 'ale_linters#puppet#puppet#GetCommand', | ||||
| \   'callback': 'ale_linters#puppet#puppet#Handle', | ||||
| \}) | ||||
|  | ||||
| @ -5,12 +5,18 @@ call ale#Set('python_flake8_executable', 'flake8') | ||||
| call ale#Set('python_flake8_options', '') | ||||
| call ale#Set('python_flake8_use_global', get(g:, 'ale_use_global_executables', 0)) | ||||
| call ale#Set('python_flake8_change_directory', 1) | ||||
| call ale#Set('python_flake8_auto_pipenv', 0) | ||||
|  | ||||
| function! s:UsingModule(buffer) abort | ||||
|     return ale#Var(a:buffer, 'python_flake8_options') =~# ' *-m flake8' | ||||
| endfunction | ||||
|  | ||||
| function! ale_linters#python#flake8#GetExecutable(buffer) abort | ||||
|     if (ale#Var(a:buffer, 'python_auto_pipenv') || ale#Var(a:buffer, 'python_flake8_auto_pipenv')) | ||||
|     \ && ale#python#PipenvPresent(a:buffer) | ||||
|         return 'pipenv' | ||||
|     endif | ||||
|  | ||||
|     if !s:UsingModule(a:buffer) | ||||
|         return ale#python#FindExecutable(a:buffer, 'python_flake8', ['flake8']) | ||||
|     endif | ||||
|  | ||||
| @ -5,8 +5,14 @@ call ale#Set('python_mypy_executable', 'mypy') | ||||
| call ale#Set('python_mypy_ignore_invalid_syntax', 0) | ||||
| call ale#Set('python_mypy_options', '') | ||||
| call ale#Set('python_mypy_use_global', get(g:, 'ale_use_global_executables', 0)) | ||||
| call ale#Set('python_mypy_auto_pipenv', 0) | ||||
|  | ||||
| function! ale_linters#python#mypy#GetExecutable(buffer) abort | ||||
|     if (ale#Var(a:buffer, 'python_auto_pipenv') || ale#Var(a:buffer, 'python_mypy_auto_pipenv')) | ||||
|     \ && ale#python#PipenvPresent(a:buffer) | ||||
|         return 'pipenv' | ||||
|     endif | ||||
|  | ||||
|     return ale#python#FindExecutable(a:buffer, 'python_mypy', ['mypy']) | ||||
| endfunction | ||||
|  | ||||
|  | ||||
| @ -1,6 +1,8 @@ | ||||
| " Author: chocoelho <carlospecter@gmail.com> | ||||
| " Description: prospector linter python files | ||||
|  | ||||
| call ale#Set('python_prospector_auto_pipenv', 0) | ||||
|  | ||||
| let g:ale_python_prospector_executable = | ||||
| \   get(g:, 'ale_python_prospector_executable', 'prospector') | ||||
|  | ||||
| @ -10,6 +12,11 @@ let g:ale_python_prospector_options = | ||||
| let g:ale_python_prospector_use_global = get(g:, 'ale_python_prospector_use_global', get(g:, 'ale_use_global_executables', 0)) | ||||
|  | ||||
| function! ale_linters#python#prospector#GetExecutable(buffer) abort | ||||
|     if (ale#Var(a:buffer, 'python_auto_pipenv') || ale#Var(a:buffer, 'python_prospector_auto_pipenv')) | ||||
|     \ && ale#python#PipenvPresent(a:buffer) | ||||
|         return 'pipenv' | ||||
|     endif | ||||
|  | ||||
|     return ale#python#FindExecutable(a:buffer, 'python_prospector', ['prospector']) | ||||
| endfunction | ||||
|  | ||||
|  | ||||
| @ -4,8 +4,14 @@ | ||||
| call ale#Set('python_pycodestyle_executable', 'pycodestyle') | ||||
| call ale#Set('python_pycodestyle_options', '') | ||||
| call ale#Set('python_pycodestyle_use_global', get(g:, 'ale_use_global_executables', 0)) | ||||
| call ale#Set('python_pycodestyle_auto_pipenv', 0) | ||||
|  | ||||
| function! ale_linters#python#pycodestyle#GetExecutable(buffer) abort | ||||
|     if (ale#Var(a:buffer, 'python_auto_pipenv') || ale#Var(a:buffer, 'python_pycodestyle_auto_pipenv')) | ||||
|     \ && ale#python#PipenvPresent(a:buffer) | ||||
|         return 'pipenv' | ||||
|     endif | ||||
|  | ||||
|     return ale#python#FindExecutable(a:buffer, 'python_pycodestyle', ['pycodestyle']) | ||||
| endfunction | ||||
|  | ||||
|  | ||||
| @ -3,8 +3,14 @@ | ||||
|  | ||||
| call ale#Set('python_pyflakes_executable', 'pyflakes') | ||||
| call ale#Set('python_pyflakes_use_global', get(g:, 'ale_use_global_executables', 0)) | ||||
| call ale#Set('python_pyflakes_auto_pipenv', 0) | ||||
|  | ||||
| function! ale_linters#python#pyflakes#GetExecutable(buffer) abort | ||||
|     if (ale#Var(a:buffer, 'python_auto_pipenv') || ale#Var(a:buffer, 'python_pyflakes_auto_pipenv')) | ||||
|     \ && ale#python#PipenvPresent(a:buffer) | ||||
|         return 'pipenv' | ||||
|     endif | ||||
|  | ||||
|     return ale#python#FindExecutable(a:buffer, 'python_pyflakes', ['pyflakes']) | ||||
| endfunction | ||||
|  | ||||
|  | ||||
| @ -5,8 +5,14 @@ call ale#Set('python_pylint_executable', 'pylint') | ||||
| call ale#Set('python_pylint_options', '') | ||||
| call ale#Set('python_pylint_use_global', get(g:, 'ale_use_global_executables', 0)) | ||||
| call ale#Set('python_pylint_change_directory', 1) | ||||
| call ale#Set('python_pylint_auto_pipenv', 0) | ||||
|  | ||||
| function! ale_linters#python#pylint#GetExecutable(buffer) abort | ||||
|     if (ale#Var(a:buffer, 'python_auto_pipenv') || ale#Var(a:buffer, 'python_pylint_auto_pipenv')) | ||||
|     \ && ale#python#PipenvPresent(a:buffer) | ||||
|         return 'pipenv' | ||||
|     endif | ||||
|  | ||||
|     return ale#python#FindExecutable(a:buffer, 'python_pylint', ['pylint']) | ||||
| endfunction | ||||
|  | ||||
|  | ||||
| @ -3,8 +3,14 @@ | ||||
|  | ||||
| call ale#Set('python_pyls_executable', 'pyls') | ||||
| call ale#Set('python_pyls_use_global', get(g:, 'ale_use_global_executables', 0)) | ||||
| call ale#Set('python_pyls_auto_pipenv', 0) | ||||
|  | ||||
| function! ale_linters#python#pyls#GetExecutable(buffer) abort | ||||
|     if (ale#Var(a:buffer, 'python_auto_pipenv') || ale#Var(a:buffer, 'python_pyls_auto_pipenv')) | ||||
|     \ && ale#python#PipenvPresent(a:buffer) | ||||
|         return 'pipenv' | ||||
|     endif | ||||
|  | ||||
|     return ale#python#FindExecutable(a:buffer, 'python_pyls', ['pyls']) | ||||
| endfunction | ||||
|  | ||||
|  | ||||
| @ -3,8 +3,14 @@ | ||||
|  | ||||
| call ale#Set('python_pyre_executable', 'pyre') | ||||
| call ale#Set('python_pyre_use_global', get(g:, 'ale_use_global_executables', 0)) | ||||
| call ale#Set('python_pyre_auto_pipenv', 0) | ||||
|  | ||||
| function! ale_linters#python#pyre#GetExecutable(buffer) abort | ||||
|     if (ale#Var(a:buffer, 'python_auto_pipenv') || ale#Var(a:buffer, 'python_pyre_auto_pipenv')) | ||||
|     \ && ale#python#PipenvPresent(a:buffer) | ||||
|         return 'pipenv' | ||||
|     endif | ||||
|  | ||||
|     return ale#python#FindExecutable(a:buffer, 'python_pyre', ['pyre']) | ||||
| endfunction | ||||
|  | ||||
|  | ||||
| @ -8,6 +8,7 @@ function! ale_linters#rst#rstcheck#Handle(buffer, lines) abort | ||||
|     let l:pattern = '\v^(.+):(\d*): \(([a-zA-Z]*)/\d*\) (.+)$' | ||||
|     let l:dir = expand('#' . a:buffer . ':p:h') | ||||
|     let l:output = [] | ||||
|  | ||||
|     for l:match in ale#util#GetMatches(a:lines, l:pattern) | ||||
|         call add(l:output, { | ||||
|         \   'filename': ale#path#GetAbsPath(l:dir, l:match[1]), | ||||
|  | ||||
| @ -1,8 +1,9 @@ | ||||
| " Author: Eddie Lebow https://github.com/elebow | ||||
| " Description: Brakeman, a static analyzer for Rails security | ||||
|  | ||||
| let g:ale_ruby_brakeman_options = | ||||
| \   get(g:, 'ale_ruby_brakeman_options', '') | ||||
| call ale#Set('ruby_brakeman_options', '') | ||||
| call ale#Set('ruby_brakeman_executable', 'brakeman') | ||||
| call ale#Set('ruby_brakeman_options', '') | ||||
|  | ||||
| function! ale_linters#ruby#brakeman#Handle(buffer, lines) abort | ||||
|     let l:output = [] | ||||
| @ -33,14 +34,17 @@ function! ale_linters#ruby#brakeman#GetCommand(buffer) abort | ||||
|         return '' | ||||
|     endif | ||||
|  | ||||
|     return 'brakeman -f json -q ' | ||||
|     let l:executable = ale#Var(a:buffer, 'ruby_brakeman_executable') | ||||
|  | ||||
|     return ale#handlers#ruby#EscapeExecutable(l:executable, 'brakeman') | ||||
|     \    . ' -f json -q ' | ||||
|     \    . ale#Var(a:buffer, 'ruby_brakeman_options') | ||||
|     \    . ' -p ' . ale#Escape(l:rails_root) | ||||
| endfunction | ||||
|  | ||||
| call ale#linter#Define('ruby', { | ||||
| \    'name': 'brakeman', | ||||
| \    'executable': 'brakeman', | ||||
| \    'executable_callback': ale#VarFunc('ruby_brakeman_executable'), | ||||
| \    'command_callback': 'ale_linters#ruby#brakeman#GetCommand', | ||||
| \    'callback': 'ale_linters#ruby#brakeman#Handle', | ||||
| \    'lint_file': 1, | ||||
|  | ||||
| @ -22,26 +22,18 @@ function! ale_linters#ruby#rails_best_practices#Handle(buffer, lines) abort | ||||
|     return l:output | ||||
| endfunction | ||||
|  | ||||
| function! ale_linters#ruby#rails_best_practices#GetExecutable(buffer) abort | ||||
|     return ale#Var(a:buffer, 'ruby_rails_best_practices_executable') | ||||
| endfunction | ||||
|  | ||||
| function! ale_linters#ruby#rails_best_practices#GetCommand(buffer) abort | ||||
|     let l:executable = ale_linters#ruby#rails_best_practices#GetExecutable(a:buffer) | ||||
|     let l:exec_args = l:executable =~? 'bundle$' | ||||
|     \   ? ' exec rails_best_practices' | ||||
|     \   : '' | ||||
|  | ||||
|     let l:rails_root = ale#ruby#FindRailsRoot(a:buffer) | ||||
|  | ||||
|     if l:rails_root is? '' | ||||
|         return '' | ||||
|     endif | ||||
|  | ||||
|     let l:executable = ale#Var(a:buffer, 'ruby_rails_best_practices_executable') | ||||
|     let l:output_file = ale#Has('win32') ? '%t ' : '/dev/stdout ' | ||||
|     let l:cat_file = ale#Has('win32') ? '; type %t' : '' | ||||
|  | ||||
|     return ale#Escape(l:executable) . l:exec_args | ||||
|     return ale#handlers#ruby#EscapeExecutable(l:executable, 'rails_best_practices') | ||||
|     \    . ' --silent -f json --output-file ' . l:output_file | ||||
|     \    . ale#Var(a:buffer, 'ruby_rails_best_practices_options') | ||||
|     \    . ale#Escape(l:rails_root) | ||||
| @ -50,7 +42,7 @@ endfunction | ||||
|  | ||||
| call ale#linter#Define('ruby', { | ||||
| \    'name': 'rails_best_practices', | ||||
| \    'executable_callback': 'ale_linters#ruby#rails_best_practices#GetExecutable', | ||||
| \    'executable_callback': ale#VarFunc('ruby_rails_best_practices_executable'), | ||||
| \    'command_callback': 'ale_linters#ruby#rails_best_practices#GetCommand', | ||||
| \    'callback': 'ale_linters#ruby#rails_best_practices#Handle', | ||||
| \    'lint_file': 1, | ||||
|  | ||||
| @ -3,6 +3,8 @@ | ||||
|  | ||||
| call ale#Set('ruby_reek_show_context', 0) | ||||
| call ale#Set('ruby_reek_show_wiki_link', 0) | ||||
| call ale#Set('ruby_reek_options', '') | ||||
| call ale#Set('ruby_reek_executable', 'reek') | ||||
|  | ||||
| function! ale_linters#ruby#reek#VersionCheck(buffer) abort | ||||
|     " If we have previously stored the version number in a cache, then | ||||
| @ -12,18 +14,23 @@ function! ale_linters#ruby#reek#VersionCheck(buffer) abort | ||||
|         return '' | ||||
|     endif | ||||
|  | ||||
|     return 'reek --version' | ||||
|     let l:executable = ale#Var(a:buffer, 'ruby_reek_executable') | ||||
|  | ||||
|     return ale#handlers#ruby#EscapeExecutable(l:executable, 'reek') | ||||
|     \   . ' --version' | ||||
| endfunction | ||||
|  | ||||
| function! ale_linters#ruby#reek#GetCommand(buffer, version_output) abort | ||||
|     let l:version = ale#semver#GetVersion('reek', a:version_output) | ||||
|     let l:executable = ale#Var(a:buffer, 'ruby_reek_executable') | ||||
|  | ||||
|     " Tell reek what the filename is if the version of reek is new enough. | ||||
|     let l:display_name_args = ale#semver#GTE(l:version, [5, 0, 0]) | ||||
|     \   ? ' --stdin-filename %s' | ||||
|     \   : '' | ||||
|  | ||||
|     return 'reek -f json --no-progress --no-color' | ||||
|     return ale#handlers#ruby#EscapeExecutable(l:executable, 'reek') | ||||
|     \   . ' -f json --no-progress --no-color' | ||||
|     \   . l:display_name_args | ||||
| endfunction | ||||
|  | ||||
| @ -62,7 +69,7 @@ endfunction | ||||
|  | ||||
| call ale#linter#Define('ruby', { | ||||
| \   'name': 'reek', | ||||
| \   'executable': 'reek', | ||||
| \   'executable_callback': ale#VarFunc('ruby_reek_executable'), | ||||
| \   'command_chain': [ | ||||
| \       {'callback': 'ale_linters#ruby#reek#VersionCheck'}, | ||||
| \       {'callback': 'ale_linters#ruby#reek#GetCommand'}, | ||||
|  | ||||
| @ -1,13 +1,13 @@ | ||||
| " Author: ynonp - https://github.com/ynonp, Eddie Lebow https://github.com/elebow | ||||
| " Description: RuboCop, a code style analyzer for Ruby files | ||||
|  | ||||
| function! ale_linters#ruby#rubocop#GetCommand(buffer) abort | ||||
|     let l:executable = ale#handlers#rubocop#GetExecutable(a:buffer) | ||||
|     let l:exec_args = l:executable =~? 'bundle$' | ||||
|     \   ? ' exec rubocop' | ||||
|     \   : '' | ||||
| call ale#Set('ruby_rubocop_executable', 'rubocop') | ||||
| call ale#Set('ruby_rubocop_options', '') | ||||
|  | ||||
|     return ale#Escape(l:executable) . l:exec_args | ||||
| function! ale_linters#ruby#rubocop#GetCommand(buffer) abort | ||||
|     let l:executable = ale#Var(a:buffer, 'ruby_rubocop_executable') | ||||
|  | ||||
|     return ale#handlers#ruby#EscapeExecutable(l:executable, 'rubocop') | ||||
|     \   . ' --format json --force-exclusion ' | ||||
|     \   . ale#Var(a:buffer, 'ruby_rubocop_options') | ||||
|     \   . ' --stdin ' . ale#Escape(expand('#' . a:buffer . ':p')) | ||||
| @ -55,7 +55,7 @@ endfunction | ||||
|  | ||||
| call ale#linter#Define('ruby', { | ||||
| \   'name': 'rubocop', | ||||
| \   'executable_callback': 'ale#handlers#rubocop#GetExecutable', | ||||
| \   'executable_callback': ale#VarFunc('ruby_rubocop_executable'), | ||||
| \   'command_callback': 'ale_linters#ruby#rubocop#GetCommand', | ||||
| \   'callback': 'ale_linters#ruby#rubocop#Handle', | ||||
| \}) | ||||
|  | ||||
							
								
								
									
										20
									
								
								sources_non_forked/ale/ale_linters/ruby/solargraph.vim
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										20
									
								
								sources_non_forked/ale/ale_linters/ruby/solargraph.vim
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,20 @@ | ||||
| " Author: Horacio Sanson - https://github.com/hsanson | ||||
| " Description: Solargraph Language Server https://solargraph.org/ | ||||
| " | ||||
| " Author: Devon Meunier <devon.meunier@gmail.com> | ||||
| " Description: updated to use stdio | ||||
|  | ||||
| call ale#Set('ruby_solargraph_executable', 'solargraph') | ||||
|  | ||||
| function! ale_linters#ruby#solargraph#GetCommand(buffer) abort | ||||
|     return '%e' . ale#Pad('stdio') | ||||
| endfunction | ||||
|  | ||||
| call ale#linter#Define('ruby', { | ||||
| \   'name': 'solargraph', | ||||
| \   'lsp': 'stdio', | ||||
| \   'language': 'ruby', | ||||
| \   'executable_callback': ale#VarFunc('ruby_solargraph_executable'), | ||||
| \   'command_callback': 'ale_linters#ruby#solargraph#GetCommand', | ||||
| \   'project_root_callback': 'ale#ruby#FindProjectRoot', | ||||
| \}) | ||||
| @ -42,6 +42,7 @@ function! ale_linters#rust#cargo#GetCommand(buffer, version_output) abort | ||||
|     \   && ale#semver#GTE(l:version, [0, 22, 0]) | ||||
|  | ||||
|     let l:include_features = ale#Var(a:buffer, 'rust_cargo_include_features') | ||||
|  | ||||
|     if !empty(l:include_features) | ||||
|         let l:include_features = ' --features ' . ale#Escape(l:include_features) | ||||
|     endif | ||||
| @ -59,6 +60,7 @@ function! ale_linters#rust#cargo#GetCommand(buffer, version_output) abort | ||||
|     endif | ||||
|  | ||||
|     let l:default_feature_behavior = ale#Var(a:buffer, 'rust_cargo_default_feature_behavior') | ||||
|  | ||||
|     if l:default_feature_behavior is# 'all' | ||||
|         let l:include_features = '' | ||||
|         let l:default_feature = ' --all-features' | ||||
|  | ||||
							
								
								
									
										31
									
								
								sources_non_forked/ale/ale_linters/scala/sbtserver.vim
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										31
									
								
								sources_non_forked/ale/ale_linters/scala/sbtserver.vim
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,31 @@ | ||||
| " Author: ophirr33 <coghlan.ty@gmail.com> | ||||
| " Description: TCP lsp client for sbt Server | ||||
|  | ||||
| call ale#Set('scala_sbtserver_address', '127.0.0.1:4273') | ||||
| call ale#Set('scala_sbtserver_project_root', '') | ||||
|  | ||||
| function! ale_linters#scala#sbtserver#GetProjectRoot(buffer) abort | ||||
|     let l:project_root = ale#Var(a:buffer, 'scala_sbtserver_project_root') | ||||
|  | ||||
|     if l:project_root is? '' | ||||
|         let l:project_root = ale#path#FindNearestFile(a:buffer, 'build.sbt') | ||||
|  | ||||
|         return !empty(l:project_root) ? fnamemodify(l:project_root, ':h') : '' | ||||
|     endif | ||||
|  | ||||
|     return l:project_root | ||||
| endfunction | ||||
|  | ||||
| function! ale_linters#scala#sbtserver#GetAddress(buffer) abort | ||||
|     let l:address = ale#Var(a:buffer, 'scala_sbtserver_address') | ||||
|  | ||||
|     return l:address | ||||
| endfunction | ||||
|  | ||||
| call ale#linter#Define('scala', { | ||||
| \   'name': 'sbtserver', | ||||
| \   'lsp': 'socket', | ||||
| \   'address_callback': 'ale_linters#scala#sbtserver#GetAddress', | ||||
| \   'language': 'scala', | ||||
| \   'project_root_callback': 'ale_linters#scala#sbtserver#GetProjectRoot', | ||||
| \}) | ||||
| @ -53,12 +53,14 @@ function! ale_linters#scala#scalastyle#GetCommand(buffer) abort | ||||
|     \   'scalastyle_config.xml', | ||||
|     \   'scalastyle-config.xml' | ||||
|     \] | ||||
|  | ||||
|     for l:config in l:potential_configs | ||||
|         let l:scalastyle_config = ale#path#ResolveLocalPath( | ||||
|         \   a:buffer, | ||||
|         \   l:config, | ||||
|         \   '' | ||||
|         \) | ||||
|  | ||||
|         if !empty(l:scalastyle_config) | ||||
|             break | ||||
|         endif | ||||
|  | ||||
| @ -3,6 +3,7 @@ | ||||
|  | ||||
| function! ale_linters#sml#smlnj_cm#GetCommand(buffer) abort | ||||
|     let l:cmfile = ale#handlers#sml#GetCmFile(a:buffer) | ||||
|  | ||||
|     return 'sml -m ' . l:cmfile . ' < /dev/null' | ||||
| endfunction | ||||
|  | ||||
|  | ||||
| @ -4,7 +4,6 @@ | ||||
| function! ale_linters#solidity#solhint#Handle(buffer, lines) abort | ||||
|     " Matches patterns like the following: | ||||
|     " /path/to/file/file.sol: line 1, col 10, Error - 'addOne' is defined but never used. (no-unused-vars) | ||||
|  | ||||
|     let l:pattern = '\v^[^:]+: line (\d+), col (\d+), (Error|Warning) - (.*) \((.*)\)$' | ||||
|     let l:output = [] | ||||
|  | ||||
|  | ||||
| @ -15,7 +15,6 @@ function! ale_linters#tcl#nagelfar#Handle(buffer, lines) abort | ||||
|     " Line   5: W Found constant "bepa" which is also a variable. | ||||
|     " Line  13: E Wrong number of arguments (3) to "set" | ||||
|     " Line  93: N Close brace not aligned with line 90 (4 0) | ||||
|  | ||||
|     let l:pattern = '^Line\s\+\([0-9]\+\): \([NEW]\) \(.*\)$' | ||||
|     let l:output = [] | ||||
|  | ||||
|  | ||||
| @ -40,6 +40,7 @@ function! ale_linters#terraform#tflint#GetCommand(buffer) abort | ||||
|     endif | ||||
|  | ||||
|     let l:opts = ale#Var(a:buffer, 'terraform_tflint_options') | ||||
|  | ||||
|     if !empty(l:opts) | ||||
|         let l:cmd .= ' ' . l:opts | ||||
|     endif | ||||
|  | ||||
| @ -8,7 +8,6 @@ function! ale_linters#tex#lacheck#Handle(buffer, lines) abort | ||||
|     " | ||||
|     " "book.tex", line 37: possible unwanted space at "{" | ||||
|     " "book.tex", line 38: missing `\ ' after "etc." | ||||
|  | ||||
|     let l:pattern = '^".\+", line \(\d\+\): \(.\+\)$' | ||||
|     let l:output = [] | ||||
|  | ||||
|  | ||||
| @ -2,7 +2,7 @@ | ||||
|  | ||||
| call ale#Set('thrift_thrift_executable', 'thrift') | ||||
| call ale#Set('thrift_thrift_generators', ['cpp']) | ||||
| call ale#Set('thrift_thrift_includes', []) | ||||
| call ale#Set('thrift_thrift_includes', ['.']) | ||||
| call ale#Set('thrift_thrift_options', '-strict') | ||||
|  | ||||
| function! ale_linters#thrift#thrift#GetCommand(buffer) abort | ||||
| @ -42,12 +42,14 @@ function! ale_linters#thrift#thrift#Handle(buffer, lines) abort | ||||
|         let l:line = a:lines[l:index] | ||||
|  | ||||
|         let l:match = matchlist(l:line, l:pattern) | ||||
|  | ||||
|         if empty(l:match) | ||||
|             let l:index += 1 | ||||
|             continue | ||||
|         endif | ||||
|  | ||||
|         let l:severity = l:match[1] | ||||
|  | ||||
|         if l:severity is# 'WARNING' | ||||
|             let l:type = 'W' | ||||
|         else | ||||
| @ -57,6 +59,7 @@ function! ale_linters#thrift#thrift#Handle(buffer, lines) abort | ||||
|         " If our text looks like "(last token was ';')", the *next* line | ||||
|         " should contain a more descriptive error message. | ||||
|         let l:text = l:match[4] | ||||
|  | ||||
|         if l:text =~# '\(last token was .*\)' | ||||
|             let l:index += 1 | ||||
|             let l:text = get(a:lines, l:index, 'Unknown error ' . l:text) | ||||
|  | ||||
| @ -25,7 +25,13 @@ endfunction | ||||
| function! ale_linters#vim#ale_custom_linting_rules#GetCommand(buffer) abort | ||||
|     let l:dir = s:GetALEProjectDir(a:buffer) | ||||
|  | ||||
|     return ale#path#CdString(l:dir) . '%e .' | ||||
|     let l:temp_dir = ale#engine#CreateDirectory(a:buffer) | ||||
|     let l:temp_file = l:temp_dir . '/example.vim' | ||||
|  | ||||
|     let l:lines = getbufline(a:buffer, 1, '$') | ||||
|     call ale#util#Writefile(a:buffer, l:lines, l:temp_file) | ||||
|  | ||||
|     return ale#path#CdString(l:dir) . '%e ' . ale#Escape(l:temp_dir) | ||||
| endfunction | ||||
|  | ||||
| function! ale_linters#vim#ale_custom_linting_rules#Handle(buffer, lines) abort | ||||
| @ -34,15 +40,17 @@ function! ale_linters#vim#ale_custom_linting_rules#Handle(buffer, lines) abort | ||||
|     let l:pattern = '\v^([a-zA-Z]?:?[^:]+):(\d+) (.+)$' | ||||
|  | ||||
|     for l:match in ale#util#GetMatches(a:lines, l:pattern) | ||||
|         let l:filename = ale#path#GetAbsPath(l:dir, l:match[1]) | ||||
|  | ||||
|         if bufnr(l:filename) is a:buffer | ||||
|             call add(l:output, { | ||||
|             \   'lnum': l:match[2], | ||||
|             \   'text': l:match[3], | ||||
|             \   'type': 'W', | ||||
|             \}) | ||||
|         " Ignore trailing whitespace errors if we've turned them off. | ||||
|         if !ale#Var(a:buffer, 'warn_about_trailing_whitespace') | ||||
|         \&& l:match[3] is# 'Trailing whitespace' | ||||
|             continue | ||||
|         endif | ||||
|  | ||||
|         call add(l:output, { | ||||
|         \   'lnum': l:match[2], | ||||
|         \   'text': l:match[3], | ||||
|         \   'type': 'W', | ||||
|         \}) | ||||
|     endfor | ||||
|  | ||||
|     return l:output | ||||
| @ -53,5 +61,5 @@ call ale#linter#Define('vim', { | ||||
| \   'executable_callback': 'ale_linters#vim#ale_custom_linting_rules#GetExecutable', | ||||
| \   'command_callback': 'ale_linters#vim#ale_custom_linting_rules#GetCommand', | ||||
| \   'callback': 'ale_linters#vim#ale_custom_linting_rules#Handle', | ||||
| \   'lint_file': 1, | ||||
| \   'read_buffer': 0, | ||||
| \}) | ||||
|  | ||||
| @ -25,9 +25,9 @@ function! ale_linters#xml#xmllint#Handle(buffer, lines) abort | ||||
|     let l:output = [] | ||||
|  | ||||
|     for l:line in a:lines | ||||
|  | ||||
|         " Parse error/warning lines | ||||
|         let l:match_message = matchlist(l:line, l:pattern_message) | ||||
|  | ||||
|         if !empty(l:match_message) | ||||
|           let l:line = l:match_message[2] + 0 | ||||
|           let l:type = l:match_message[4] =~? 'warning' ? 'W' : 'E' | ||||
| @ -44,13 +44,13 @@ function! ale_linters#xml#xmllint#Handle(buffer, lines) abort | ||||
|  | ||||
|         " Parse column position | ||||
|         let l:match_column_token = matchlist(l:line, l:pattern_column_token) | ||||
|  | ||||
|         if !empty(l:output) && !empty(l:match_column_token) | ||||
|           let l:previous = l:output[len(l:output) - 1] | ||||
|           let l:previous['col'] = len(l:match_column_token[0]) | ||||
|  | ||||
|           continue | ||||
|         endif | ||||
|  | ||||
|     endfor | ||||
|  | ||||
|     return l:output | ||||
|  | ||||
| @ -2,6 +2,7 @@ call ale#Set('yang_lsp_executable', 'yang-language-server') | ||||
|  | ||||
| function! ale_linters#yang#yang_lsp#GetProjectRoot(buffer) abort | ||||
|     let l:project_root = ale#path#FindNearestFile(a:buffer, 'yang.settings') | ||||
|  | ||||
|     return !empty(l:project_root) ? fnamemodify(l:project_root, ':h') : '' | ||||
| endfunction | ||||
|  | ||||
|  | ||||
| @ -27,7 +27,7 @@ let s:getcmdwintype_exists = exists('*getcmdwintype') | ||||
| function! ale#ShouldDoNothing(buffer) abort | ||||
|     " The checks are split into separate if statements to make it possible to | ||||
|     " profile each check individually with Vim's profiling tools. | ||||
|  | ||||
|     " | ||||
|     " Do nothing if ALE is disabled. | ||||
|     if !getbufvar(a:buffer, 'ale_enabled', get(g:, 'ale_enabled', 0)) | ||||
|         return 1 | ||||
| @ -62,6 +62,11 @@ function! ale#ShouldDoNothing(buffer) abort | ||||
|         return 1 | ||||
|     endif | ||||
|  | ||||
|     " Don't start linting and so on when an operator is pending. | ||||
|     if ale#util#Mode(1) is# 'no' | ||||
|         return 1 | ||||
|     endif | ||||
|  | ||||
|     " Do nothing if running in the sandbox. | ||||
|     if ale#util#InSandbox() | ||||
|         return 1 | ||||
|  | ||||
| @ -101,6 +101,14 @@ function! ale#assert#LSPProject(expected_root) abort | ||||
|     AssertEqual a:expected_root, l:root | ||||
| endfunction | ||||
|  | ||||
| function! ale#assert#LSPAddress(expected_address) abort | ||||
|     let l:buffer = bufnr('') | ||||
|     let l:linter = s:GetLinter() | ||||
|     let l:address = ale#util#GetFunction(l:linter.address_callback)(l:buffer) | ||||
|  | ||||
|     AssertEqual a:expected_address, l:address | ||||
| endfunction | ||||
|  | ||||
| " A dummy function for making sure this module is loaded. | ||||
| function! ale#assert#SetUpLinterTest(filetype, name) abort | ||||
|     " Set up a marker so ALE doesn't create real random temporary filenames. | ||||
| @ -141,6 +149,7 @@ function! ale#assert#SetUpLinterTest(filetype, name) abort | ||||
|     command! -nargs=+ AssertLSPOptions :call ale#assert#LSPOptions(<args>) | ||||
|     command! -nargs=+ AssertLSPLanguage :call ale#assert#LSPLanguage(<args>) | ||||
|     command! -nargs=+ AssertLSPProject :call ale#assert#LSPProject(<args>) | ||||
|     command! -nargs=+ AssertLSPAddress :call ale#assert#LSPAddress(<args>) | ||||
| endfunction | ||||
|  | ||||
| function! ale#assert#TearDownLinterTest() abort | ||||
| @ -171,6 +180,10 @@ function! ale#assert#TearDownLinterTest() abort | ||||
|         delcommand AssertLSPProject | ||||
|     endif | ||||
|  | ||||
|     if exists(':AssertLSPAddress') | ||||
|         delcommand AssertLSPAddress | ||||
|     endif | ||||
|  | ||||
|     if exists('g:dir') | ||||
|         call ale#test#RestoreDirectory() | ||||
|     endif | ||||
|  | ||||
| @ -54,7 +54,8 @@ function! ale#c#ParseCFlags(path_prefix, cflag_line) abort | ||||
|         call add(l:previous_options, l:option) | ||||
|         " Check if cflag contained a '-' and should not have been splitted | ||||
|         let l:option_list = split(l:option, '\zs') | ||||
|         if l:option_list[-1] isnot# ' ' | ||||
|  | ||||
|         if len(l:option_list) > 0 && l:option_list[-1] isnot# ' ' | ||||
|             continue | ||||
|         endif | ||||
|  | ||||
|  | ||||
| @ -39,10 +39,14 @@ let s:LSP_COMPLETION_COLOR_KIND = 16 | ||||
| let s:LSP_COMPLETION_FILE_KIND = 17 | ||||
| let s:LSP_COMPLETION_REFERENCE_KIND = 18 | ||||
|  | ||||
| let s:lisp_regex = '\v[a-zA-Z_\-][a-zA-Z_\-0-9]*$' | ||||
|  | ||||
| " Regular expressions for checking the characters in the line before where | ||||
| " the insert cursor is. If one of these matches, we'll check for completions. | ||||
| let s:should_complete_map = { | ||||
| \   '<default>': '\v[a-zA-Z$_][a-zA-Z$_0-9]*$|\.$', | ||||
| \   'clojure': s:lisp_regex, | ||||
| \   'lisp': s:lisp_regex, | ||||
| \   'typescript': '\v[a-zA-Z$_][a-zA-Z$_0-9]*$|\.$|''$|"$', | ||||
| \   'rust': '\v[a-zA-Z$_][a-zA-Z$_0-9]*$|\.$|::$', | ||||
| \} | ||||
| @ -75,6 +79,7 @@ endfunction | ||||
| " Check if we should look for completions for a language. | ||||
| function! ale#completion#GetPrefix(filetype, line, column) abort | ||||
|     let l:regex = s:GetFiletypeValue(s:should_complete_map, a:filetype) | ||||
|  | ||||
|     " The column we're using completions for is where we are inserting text, | ||||
|     " like so: | ||||
|     "   abc | ||||
| @ -93,14 +98,15 @@ function! ale#completion#GetTriggerCharacter(filetype, prefix) abort | ||||
|     return '' | ||||
| endfunction | ||||
|  | ||||
| function! ale#completion#Filter(buffer, suggestions, prefix) abort | ||||
| function! ale#completion#Filter(buffer, filetype, suggestions, prefix) abort | ||||
|     let l:excluded_words = ale#Var(a:buffer, 'completion_excluded_words') | ||||
|     let l:triggers = s:GetFiletypeValue(s:trigger_character_map, a:filetype) | ||||
|  | ||||
|     " For completing... | ||||
|     "   foo. | ||||
|     "       ^ | ||||
|     " We need to include all of the given suggestions. | ||||
|     if a:prefix is# '.' | ||||
|     if index(l:triggers, a:prefix) >= 0 | ||||
|         let l:filtered_suggestions = a:suggestions | ||||
|     else | ||||
|         let l:filtered_suggestions = [] | ||||
| @ -259,7 +265,7 @@ function! ale#completion#ParseTSServerCompletionEntryDetails(response) abort | ||||
|             call add(l:documentationParts, l:part.text) | ||||
|         endfor | ||||
|  | ||||
|         if l:suggestion.kind is# 'clasName' | ||||
|         if l:suggestion.kind is# 'className' | ||||
|             let l:kind = 'f' | ||||
|         elseif l:suggestion.kind is# 'parameterName' | ||||
|             let l:kind = 'f' | ||||
| @ -354,17 +360,23 @@ function! ale#completion#ParseLSPCompletions(response) abort | ||||
|             let l:kind = 'v' | ||||
|         endif | ||||
|  | ||||
|         let l:doc = get(l:item, 'documentation', '') | ||||
|  | ||||
|         if type(l:doc) is v:t_dict && has_key(l:doc, 'value') | ||||
|             let l:doc = l:doc.value | ||||
|         endif | ||||
|  | ||||
|         call add(l:results, { | ||||
|         \   'word': l:word, | ||||
|         \   'kind': l:kind, | ||||
|         \   'icase': 1, | ||||
|         \   'menu': get(l:item, 'detail', ''), | ||||
|         \   'info': get(l:item, 'documentation', ''), | ||||
|         \   'info': (type(l:doc) is v:t_string ? l:doc : ''), | ||||
|         \}) | ||||
|     endfor | ||||
|  | ||||
|     if has_key(l:info, 'prefix') | ||||
|         return ale#completion#Filter(l:buffer, l:results, l:info.prefix) | ||||
|         return ale#completion#Filter(l:buffer, &filetype, l:results, l:info.prefix) | ||||
|     endif | ||||
|  | ||||
|     return l:results | ||||
| @ -385,6 +397,7 @@ function! ale#completion#HandleTSServerResponse(conn_id, response) abort | ||||
|     if l:command is# 'completions' | ||||
|         let l:names = ale#completion#Filter( | ||||
|         \   l:buffer, | ||||
|         \   &filetype, | ||||
|         \   ale#completion#ParseTSServerCompletions(a:response), | ||||
|         \   b:ale_completion_info.prefix, | ||||
|         \)[: g:ale_completion_max_suggestions - 1] | ||||
|  | ||||
| @ -1,4 +1,6 @@ | ||||
| scriptencoding utf-8 | ||||
| " Author: w0rp <devw0rp@gmail.com> | ||||
| " Author: João Paulo S. de Souza <joao.paulo.silvasouza@hotmail.com> | ||||
| " Description: Echoes lint message for the current line, if any | ||||
|  | ||||
| " Controls the milliseconds delay before echoing a message. | ||||
| @ -37,12 +39,11 @@ function! ale#cursor#TruncatedEcho(original_message) abort | ||||
|     endtry | ||||
| endfunction | ||||
|  | ||||
| function! s:FindItemAtCursor() abort | ||||
|     let l:buf = bufnr('') | ||||
|     let l:info = get(g:ale_buffer_info, l:buf, {}) | ||||
| function! s:FindItemAtCursor(buffer) abort | ||||
|     let l:info = get(g:ale_buffer_info, a:buffer, {}) | ||||
|     let l:loclist = get(l:info, 'loclist', []) | ||||
|     let l:pos = getcurpos() | ||||
|     let l:index = ale#util#BinarySearch(l:loclist, l:buf, l:pos[1], l:pos[2]) | ||||
|     let l:index = ale#util#BinarySearch(l:loclist, a:buffer, l:pos[1], l:pos[2]) | ||||
|     let l:loc = l:index >= 0 ? l:loclist[l:index] : {} | ||||
|  | ||||
|     return [l:info, l:loc] | ||||
| @ -56,42 +57,55 @@ function! s:StopCursorTimer() abort | ||||
| endfunction | ||||
|  | ||||
| function! ale#cursor#EchoCursorWarning(...) abort | ||||
|     if !g:ale_echo_cursor | ||||
|     let l:buffer = bufnr('') | ||||
|  | ||||
|     if !g:ale_echo_cursor && !g:ale_cursor_detail | ||||
|         return | ||||
|     endif | ||||
|  | ||||
|     " Only echo the warnings in normal mode, otherwise we will get problems. | ||||
|     if mode() isnot# 'n' | ||||
|     if mode(1) isnot# 'n' | ||||
|         return | ||||
|     endif | ||||
|  | ||||
|     if ale#ShouldDoNothing(bufnr('')) | ||||
|     if ale#ShouldDoNothing(l:buffer) | ||||
|         return | ||||
|     endif | ||||
|  | ||||
|     let l:buffer = bufnr('') | ||||
|     let [l:info, l:loc] = s:FindItemAtCursor() | ||||
|     let [l:info, l:loc] = s:FindItemAtCursor(l:buffer) | ||||
|  | ||||
|     if !empty(l:loc) | ||||
|         let l:format = ale#Var(l:buffer, 'echo_msg_format') | ||||
|         let l:msg = ale#GetLocItemMessage(l:loc, l:format) | ||||
|         call ale#cursor#TruncatedEcho(l:msg) | ||||
|         let l:info.echoed = 1 | ||||
|     elseif get(l:info, 'echoed') | ||||
|         " We'll only clear the echoed message when moving off errors once, | ||||
|         " so we don't continually clear the echo line. | ||||
|         execute 'echo' | ||||
|         let l:info.echoed = 0 | ||||
|     if g:ale_echo_cursor | ||||
|         if !empty(l:loc) | ||||
|             let l:format = ale#Var(l:buffer, 'echo_msg_format') | ||||
|             let l:msg = ale#GetLocItemMessage(l:loc, l:format) | ||||
|             call ale#cursor#TruncatedEcho(l:msg) | ||||
|             let l:info.echoed = 1 | ||||
|         elseif get(l:info, 'echoed') | ||||
|             " We'll only clear the echoed message when moving off errors once, | ||||
|             " so we don't continually clear the echo line. | ||||
|             execute 'echo' | ||||
|             let l:info.echoed = 0 | ||||
|         endif | ||||
|     endif | ||||
|  | ||||
|     if g:ale_cursor_detail | ||||
|         if !empty(l:loc) | ||||
|             call s:ShowCursorDetailForItem(l:loc, {'stay_here': 1}) | ||||
|         else | ||||
|             call ale#preview#CloseIfTypeMatches('ale-preview') | ||||
|         endif | ||||
|     endif | ||||
| endfunction | ||||
|  | ||||
| function! ale#cursor#EchoCursorWarningWithDelay() abort | ||||
|     if !g:ale_echo_cursor | ||||
|     let l:buffer = bufnr('') | ||||
|  | ||||
|     if !g:ale_echo_cursor && !g:ale_cursor_detail | ||||
|         return | ||||
|     endif | ||||
|  | ||||
|     " Only echo the warnings in normal mode, otherwise we will get problems. | ||||
|     if mode() isnot# 'n' | ||||
|     if mode(1) isnot# 'n' | ||||
|         return | ||||
|     endif | ||||
|  | ||||
| @ -104,7 +118,7 @@ function! ale#cursor#EchoCursorWarningWithDelay() abort | ||||
|     " we should echo something. Otherwise we can end up doing processing | ||||
|     " the echo message far too frequently. | ||||
|     if l:pos != s:last_pos | ||||
|         let l:delay = ale#Var(bufnr(''), 'echo_delay') | ||||
|         let l:delay = ale#Var(l:buffer, 'echo_delay') | ||||
|  | ||||
|         let s:last_pos = l:pos | ||||
|         let s:cursor_timer = timer_start( | ||||
| @ -114,24 +128,37 @@ function! ale#cursor#EchoCursorWarningWithDelay() abort | ||||
|     endif | ||||
| endfunction | ||||
|  | ||||
| function! s:ShowCursorDetailForItem(loc, options) abort | ||||
|     let l:stay_here = get(a:options, 'stay_here', 0) | ||||
|  | ||||
|     let s:last_detailed_line = line('.') | ||||
|     let l:message = get(a:loc, 'detail', a:loc.text) | ||||
|     let l:lines = split(l:message, "\n") | ||||
|     call ale#preview#Show(l:lines, {'stay_here': l:stay_here}) | ||||
|  | ||||
|     " Clear the echo message if we manually displayed details. | ||||
|     if !l:stay_here | ||||
|         execute 'echo' | ||||
|     endif | ||||
| endfunction | ||||
|  | ||||
| function! ale#cursor#ShowCursorDetail() abort | ||||
|     let l:buffer = bufnr('') | ||||
|  | ||||
|     " Only echo the warnings in normal mode, otherwise we will get problems. | ||||
|     if mode() isnot# 'n' | ||||
|         return | ||||
|     endif | ||||
|  | ||||
|     if ale#ShouldDoNothing(bufnr('')) | ||||
|     if ale#ShouldDoNothing(l:buffer) | ||||
|         return | ||||
|     endif | ||||
|  | ||||
|     call s:StopCursorTimer() | ||||
|  | ||||
|     let [l:info, l:loc] = s:FindItemAtCursor() | ||||
|     let [l:info, l:loc] = s:FindItemAtCursor(l:buffer) | ||||
|  | ||||
|     if !empty(l:loc) | ||||
|         let l:message = get(l:loc, 'detail', l:loc.text) | ||||
|  | ||||
|         call ale#preview#Show(split(l:message, "\n")) | ||||
|         execute 'echo' | ||||
|         call s:ShowCursorDetailForItem(l:loc, {'stay_here': 0}) | ||||
|     endif | ||||
| endfunction | ||||
|  | ||||
| @ -49,7 +49,7 @@ function! ale#definition#HandleLSPResponse(conn_id, response) abort | ||||
|         for l:item in l:result | ||||
|             let l:filename = ale#path#FromURI(l:item.uri) | ||||
|             let l:line = l:item.range.start.line + 1 | ||||
|             let l:column = l:item.range.start.character | ||||
|             let l:column = l:item.range.start.character + 1 | ||||
|  | ||||
|             call ale#util#Open(l:filename, l:line, l:column, l:options) | ||||
|             break | ||||
|  | ||||
| @ -18,6 +18,22 @@ if !has_key(s:, 'executable_cache_map') | ||||
|     let s:executable_cache_map = {} | ||||
| endif | ||||
|  | ||||
|  | ||||
| function! ale#engine#CleanupEveryBuffer() abort | ||||
|     for l:key in keys(g:ale_buffer_info) | ||||
|         " The key could be a filename or a buffer number, so try and | ||||
|         " convert it to a number. We need a number for the other | ||||
|         " functions. | ||||
|         let l:buffer = str2nr(l:key) | ||||
|  | ||||
|         if l:buffer > 0 | ||||
|             " Stop all jobs and clear the results for everything, and delete | ||||
|             " all of the data we stored for the buffer. | ||||
|             call ale#engine#Cleanup(l:buffer) | ||||
|         endif | ||||
|     endfor | ||||
| endfunction | ||||
|  | ||||
| function! ale#engine#ResetExecutableCache() abort | ||||
|     let s:executable_cache_map = {} | ||||
| endfunction | ||||
| @ -231,6 +247,7 @@ function! s:HandleExit(job_id, exit_code) abort | ||||
|  | ||||
|     if l:next_chain_index < len(get(l:linter, 'command_chain', [])) | ||||
|         call s:InvokeChain(l:buffer, l:executable, l:linter, l:next_chain_index, l:output) | ||||
|  | ||||
|         return | ||||
|     endif | ||||
|  | ||||
| @ -595,9 +612,8 @@ function! ale#engine#ProcessChain(buffer, linter, chain_index, input) abort | ||||
|                 \) | ||||
|             endif | ||||
|  | ||||
|             " If we have a command to run, execute that. | ||||
|             if !empty(l:command) | ||||
|                 " We hit a command to run, so we'll execute that | ||||
|  | ||||
|                 " The chain item can override the output_stream option. | ||||
|                 if has_key(l:chain_item, 'output_stream') | ||||
|                     let l:output_stream = l:chain_item.output_stream | ||||
|  | ||||
| @ -131,13 +131,17 @@ function! ale#events#Init() abort | ||||
|                 autocmd InsertLeave * call ale#Queue(0) | ||||
|             endif | ||||
|  | ||||
|             if g:ale_echo_cursor | ||||
|             if g:ale_echo_cursor || g:ale_cursor_detail | ||||
|                 autocmd CursorMoved,CursorHold * if exists('*ale#engine#Cleanup') | call ale#cursor#EchoCursorWarningWithDelay() | endif | ||||
|                 " Look for a warning to echo as soon as we leave Insert mode. | ||||
|                 " The script's position variable used when moving the cursor will | ||||
|                 " not be changed here. | ||||
|                 autocmd InsertLeave * if exists('*ale#engine#Cleanup') | call ale#cursor#EchoCursorWarning() | endif | ||||
|             endif | ||||
|  | ||||
|             if g:ale_close_preview_on_insert | ||||
|                 autocmd InsertEnter * if exists('*ale#preview#CloseIfTypeMatches') | call ale#preview#CloseIfTypeMatches('ale-preview') | endif | ||||
|             endif | ||||
|         endif | ||||
|     augroup END | ||||
| endfunction | ||||
|  | ||||
| @ -30,7 +30,14 @@ function! ale#fix#ApplyQueuedFixes() abort | ||||
|             call winrestview(l:save) | ||||
|         endif | ||||
|  | ||||
|         call setline(1, l:data.output) | ||||
|         " If the file is in DOS mode, we have to remove carriage returns from | ||||
|         " the ends of lines before calling setline(), or we will see them | ||||
|         " twice. | ||||
|         let l:lines_to_set = getbufvar(l:buffer, '&fileformat') is# 'dos' | ||||
|         \   ? map(copy(l:data.output), 'substitute(v:val, ''\r\+$'', '''', '''')') | ||||
|         \   : l:data.output | ||||
|  | ||||
|         call setline(1, l:lines_to_set) | ||||
|  | ||||
|         if l:data.should_save | ||||
|             if empty(&buftype) | ||||
| @ -71,6 +78,7 @@ function! ale#fix#ApplyFixes(buffer, output) abort | ||||
|         if l:data.lines_before != l:lines | ||||
|             call remove(g:ale_fix_buffer_data, a:buffer) | ||||
|             execute 'echoerr ''The file was changed before fixing finished''' | ||||
|  | ||||
|             return | ||||
|         endif | ||||
|     endif | ||||
|  | ||||
| @ -145,6 +145,11 @@ let s:default_registry = { | ||||
| \       'suggested_filetypes': ['go'], | ||||
| \       'description': 'Fix Go files imports with goimports.', | ||||
| \   }, | ||||
| \   'gomod': { | ||||
| \       'function': 'ale#fixers#gomod#Fix', | ||||
| \       'suggested_filetypes': ['gomod'], | ||||
| \       'description': 'Fix Go module files with go mod edit -fmt.', | ||||
| \   }, | ||||
| \   'tslint': { | ||||
| \       'function': 'ale#fixers#tslint#Fix', | ||||
| \       'suggested_filetypes': ['typescript'], | ||||
| @ -180,6 +185,11 @@ let s:default_registry = { | ||||
| \       'suggested_filetypes': ['haskell'], | ||||
| \       'description': 'Refactor Haskell files with stylish-haskell.', | ||||
| \   }, | ||||
| \   'ocamlformat': { | ||||
| \       'function': 'ale#fixers#ocamlformat#Fix', | ||||
| \       'suggested_filetypes': ['ocaml'], | ||||
| \       'description': 'Fix OCaml files with ocamlformat.', | ||||
| \   }, | ||||
| \   'refmt': { | ||||
| \       'function': 'ale#fixers#refmt#Fix', | ||||
| \       'suggested_filetypes': ['reason'], | ||||
| @ -190,6 +200,11 @@ let s:default_registry = { | ||||
| \       'suggested_filetypes': ['sh'], | ||||
| \       'description': 'Fix sh files with shfmt.', | ||||
| \   }, | ||||
| \   'sqlfmt': { | ||||
| \       'function': 'ale#fixers#sqlfmt#Fix', | ||||
| \       'suggested_filetypes': ['sql'], | ||||
| \       'description': 'Fix SQL files with sqlfmt.', | ||||
| \   }, | ||||
| \   'google_java_format': { | ||||
| \       'function': 'ale#fixers#google_java_format#Fix', | ||||
| \       'suggested_filetypes': ['java'], | ||||
| @ -225,6 +240,16 @@ let s:default_registry = { | ||||
| \       'suggested_filetypes': ['dart'], | ||||
| \       'description': 'Fix Dart files with dartfmt.', | ||||
| \   }, | ||||
| \   'xmllint': { | ||||
| \       'function': 'ale#fixers#xmllint#Fix', | ||||
| \       'suggested_filetypes': ['xml'], | ||||
| \       'description': 'Fix XML files with xmllint.', | ||||
| \   }, | ||||
| \   'uncrustify': { | ||||
| \       'function': 'ale#fixers#uncrustify#Fix', | ||||
| \       'suggested_filetypes': ['c', 'cpp', 'cs', 'objc', 'objcpp', 'd', 'java', 'p', 'vala' ], | ||||
| \       'description': 'Fix C, C++, C#, ObjectiveC, ObjectiveC++, D, Java, Pawn, and VALA files with uncrustify.', | ||||
| \   }, | ||||
| \} | ||||
|  | ||||
| " Reset the function registry to the default entries. | ||||
|  | ||||
| @ -25,7 +25,7 @@ endfunction | ||||
| function! ale#fixers#eslint#ProcessEslintDOutput(buffer, output) abort | ||||
|     " If the output is an error message, don't use it. | ||||
|     for l:line in a:output[:10] | ||||
|         if l:line =~# '^Error:' | ||||
|         if l:line =~# '\v^Error:|^Could not connect' | ||||
|             return [] | ||||
|         endif | ||||
|     endfor | ||||
|  | ||||
| @ -17,6 +17,7 @@ function! ale#fixers#fixjson#Fix(buffer) abort | ||||
|     let l:command = l:executable . ' --stdin-filename ' . l:filename | ||||
|  | ||||
|     let l:options = ale#Var(a:buffer, 'json_fixjson_options') | ||||
|  | ||||
|     if l:options isnot# '' | ||||
|         let l:command .= ' ' . l:options | ||||
|     endif | ||||
|  | ||||
							
								
								
									
										10
									
								
								sources_non_forked/ale/autoload/ale/fixers/gomod.vim
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										10
									
								
								sources_non_forked/ale/autoload/ale/fixers/gomod.vim
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,10 @@ | ||||
| call ale#Set('go_go_executable', 'go') | ||||
|  | ||||
| function! ale#fixers#gomod#Fix(buffer) abort | ||||
|     let l:executable = ale#Var(a:buffer, 'go_go_executable') | ||||
|  | ||||
|     return { | ||||
|     \   'command': ale#Escape(l:executable) . ' mod edit -fmt %t', | ||||
|     \   'read_temporary_file': 1, | ||||
|     \} | ||||
| endfunction | ||||
| @ -5,6 +5,7 @@ call ale#Set('javascript_importjs_executable', 'importjs') | ||||
|  | ||||
| function! ale#fixers#importjs#ProcessOutput(buffer, output) abort | ||||
|     let l:result = ale#util#FuzzyJSONDecode(a:output, []) | ||||
|  | ||||
|     return split(get(l:result, 'fileContent', ''), "\n") | ||||
| endfunction | ||||
|  | ||||
|  | ||||
							
								
								
									
										18
									
								
								sources_non_forked/ale/autoload/ale/fixers/ocamlformat.vim
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										18
									
								
								sources_non_forked/ale/autoload/ale/fixers/ocamlformat.vim
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,18 @@ | ||||
| " Author: Stephen Lumenta <@sbl> | ||||
| " Description: Integration of ocamlformat with ALE. | ||||
|  | ||||
| call ale#Set('ocaml_ocamlformat_executable', 'ocamlformat') | ||||
| call ale#Set('ocaml_ocamlformat_options', '') | ||||
|  | ||||
| function! ale#fixers#ocamlformat#Fix(buffer) abort | ||||
|     let l:executable = ale#Var(a:buffer, 'ocaml_ocamlformat_executable') | ||||
|     let l:options = ale#Var(a:buffer, 'ocaml_ocamlformat_options') | ||||
|  | ||||
|     return { | ||||
|     \   'command': ale#Escape(l:executable) | ||||
|     \       . (empty(l:options) ? '' : ' ' . l:options) | ||||
|     \       . ' --inplace' | ||||
|     \       . ' %t', | ||||
|     \   'read_temporary_file': 1, | ||||
|     \} | ||||
| endfunction | ||||
| @ -14,6 +14,7 @@ endfunction | ||||
|  | ||||
| function! ale#fixers#php_cs_fixer#Fix(buffer) abort | ||||
|     let l:executable = ale#fixers#php_cs_fixer#GetExecutable(a:buffer) | ||||
|  | ||||
|     return { | ||||
|     \   'command': ale#Escape(l:executable) | ||||
|     \       . ' ' . ale#Var(a:buffer, 'php_cs_fixer_options') | ||||
|  | ||||
| @ -18,6 +18,7 @@ function! ale#fixers#phpcbf#Fix(buffer) abort | ||||
|     let l:standard_option = !empty(l:standard) | ||||
|     \   ? '--standard=' . l:standard | ||||
|     \   : '' | ||||
|  | ||||
|     return { | ||||
|     \   'command': ale#Escape(l:executable) . ' --stdin-path=%s ' . l:standard_option . ' -' | ||||
|     \} | ||||
|  | ||||
| @ -4,6 +4,7 @@ | ||||
| if !exists('g:ale_puppet_puppetlint_executable') | ||||
|     let g:ale_puppet_puppetlint_executable = 'puppet-lint' | ||||
| endif | ||||
|  | ||||
| if !exists('g:ale_puppet_puppetlint_options') | ||||
|     let g:ale_puppet_puppetlint_options = '' | ||||
| endif | ||||
|  | ||||
| @ -1,16 +1,15 @@ | ||||
| call ale#Set('ruby_rubocop_options', '') | ||||
| call ale#Set('ruby_rubocop_executable', 'rubocop') | ||||
|  | ||||
| function! ale#fixers#rubocop#GetCommand(buffer) abort | ||||
|     let l:executable = ale#handlers#rubocop#GetExecutable(a:buffer) | ||||
|     let l:exec_args = l:executable =~? 'bundle$' | ||||
|     \   ? ' exec rubocop' | ||||
|     \   : '' | ||||
|     let l:executable = ale#Var(a:buffer, 'ruby_rubocop_executable') | ||||
|     let l:config = ale#path#FindNearestFile(a:buffer, '.rubocop.yml') | ||||
|     let l:options = ale#Var(a:buffer, 'ruby_rubocop_options') | ||||
|  | ||||
|     return ale#Escape(l:executable) . l:exec_args | ||||
|     return ale#handlers#ruby#EscapeExecutable(l:executable, 'rubocop') | ||||
|     \   . (!empty(l:config) ? ' --config ' . ale#Escape(l:config) : '') | ||||
|     \   . (!empty(l:options) ? ' ' . l:options : '') | ||||
|     \   . ' --auto-correct %t' | ||||
|  | ||||
| endfunction | ||||
|  | ||||
| function! ale#fixers#rubocop#Fix(buffer) abort | ||||
|  | ||||
| @ -15,7 +15,6 @@ function! ale#fixers#scalafmt#GetCommand(buffer) abort | ||||
|     return ale#Escape(l:executable) . l:exec_args | ||||
|     \   . (empty(l:options) ? '' : ' ' . l:options) | ||||
|     \   . ' %t' | ||||
|  | ||||
| endfunction | ||||
|  | ||||
| function! ale#fixers#scalafmt#Fix(buffer) abort | ||||
|  | ||||
| @ -5,13 +5,27 @@ scriptencoding utf-8 | ||||
| call ale#Set('sh_shfmt_executable', 'shfmt') | ||||
| call ale#Set('sh_shfmt_options', '') | ||||
|  | ||||
| function! s:DefaultOption(buffer) abort | ||||
|     if getbufvar(a:buffer, '&expandtab') == 0 | ||||
|         " Tab is used by default | ||||
|         return '' | ||||
|     endif | ||||
|  | ||||
|     let l:tabsize = getbufvar(a:buffer, '&shiftwidth') | ||||
|  | ||||
|     if l:tabsize == 0 | ||||
|         let l:tabsize = getbufvar(a:buffer, '&tabstop') | ||||
|     endif | ||||
|  | ||||
|     return ' -i ' . l:tabsize | ||||
| endfunction | ||||
|  | ||||
| function! ale#fixers#shfmt#Fix(buffer) abort | ||||
|     let l:executable = ale#Var(a:buffer, 'sh_shfmt_executable') | ||||
|     let l:options = ale#Var(a:buffer, 'sh_shfmt_options') | ||||
|  | ||||
|     return { | ||||
|     \   'command': ale#Escape(l:executable) | ||||
|     \       . (empty(l:options) ? '' : ' ' . l:options) | ||||
|     \       . (empty(l:options) ? s:DefaultOption(a:buffer) : ' ' . l:options) | ||||
|     \} | ||||
|  | ||||
| endfunction | ||||
|  | ||||
							
								
								
									
										13
									
								
								sources_non_forked/ale/autoload/ale/fixers/sqlfmt.vim
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										13
									
								
								sources_non_forked/ale/autoload/ale/fixers/sqlfmt.vim
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,13 @@ | ||||
| call ale#Set('sql_sqlfmt_executable', 'sqlfmt') | ||||
| call ale#Set('sql_sqlfmt_options', '') | ||||
|  | ||||
| function! ale#fixers#sqlfmt#Fix(buffer) abort | ||||
|     let l:executable = ale#Var(a:buffer, 'sql_sqlfmt_executable') | ||||
|     let l:options = ale#Var(a:buffer, 'sql_sqlfmt_options') | ||||
|  | ||||
|     return { | ||||
|     \   'command': ale#Escape(l:executable) | ||||
|     \       . ' -w' | ||||
|     \       . (empty(l:options) ? '' : ' ' . l:options), | ||||
|     \} | ||||
| endfunction | ||||
							
								
								
									
										16
									
								
								sources_non_forked/ale/autoload/ale/fixers/uncrustify.vim
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										16
									
								
								sources_non_forked/ale/autoload/ale/fixers/uncrustify.vim
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,16 @@ | ||||
| " Author: Derek P Sifford <dereksifford@gmail.com> | ||||
| " Description: Fixer for C, C++, C#, ObjectiveC, D, Java, Pawn, and VALA. | ||||
|  | ||||
| call ale#Set('c_uncrustify_executable', 'uncrustify') | ||||
| call ale#Set('c_uncrustify_options', '') | ||||
|  | ||||
| function! ale#fixers#uncrustify#Fix(buffer) abort | ||||
|     let l:executable = ale#Var(a:buffer, 'c_uncrustify_executable') | ||||
|     let l:options = ale#Var(a:buffer, 'c_uncrustify_options') | ||||
|  | ||||
|     return { | ||||
|     \   'command': ale#Escape(l:executable) | ||||
|     \       . ' --no-backup' | ||||
|     \       . (empty(l:options) ? '' : ' ' . l:options) | ||||
|     \} | ||||
| endfunction | ||||
							
								
								
									
										29
									
								
								sources_non_forked/ale/autoload/ale/fixers/xmllint.vim
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										29
									
								
								sources_non_forked/ale/autoload/ale/fixers/xmllint.vim
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,29 @@ | ||||
| " Author: Cyril Roelandt <tipecaml@gmail.com> | ||||
| " Description: Integration of xmllint with ALE. | ||||
|  | ||||
| call ale#Set('xml_xmllint_executable', 'xmllint') | ||||
| call ale#Set('xml_xmllint_options', '') | ||||
| call ale#Set('xml_xmllint_indentsize', 2) | ||||
|  | ||||
| function! ale#fixers#xmllint#Fix(buffer) abort | ||||
|     let l:executable = ale#Escape(ale#Var(a:buffer, 'xml_xmllint_executable')) | ||||
|     let l:filename = ale#Escape(bufname(a:buffer)) | ||||
|     let l:command = l:executable . ' --format ' . l:filename | ||||
|  | ||||
|     let l:indent = ale#Var(a:buffer, 'xml_xmllint_indentsize') | ||||
|  | ||||
|     if l:indent isnot# '' | ||||
|         let l:env = ale#Env('XMLLINT_INDENT', repeat(' ', l:indent)) | ||||
|         let l:command = l:env . l:command | ||||
|     endif | ||||
|  | ||||
|     let l:options = ale#Var(a:buffer, 'xml_xmllint_options') | ||||
|  | ||||
|     if l:options isnot# '' | ||||
|         let l:command .= ' ' . l:options | ||||
|     endif | ||||
|  | ||||
|     return { | ||||
|     \   'command': l:command | ||||
|     \} | ||||
| endfunction | ||||
							
								
								
									
										27
									
								
								sources_non_forked/ale/autoload/ale/go.vim
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										27
									
								
								sources_non_forked/ale/autoload/ale/go.vim
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,27 @@ | ||||
| " Author: Horacio Sanson https://github.com/hsanson | ||||
| " Description: Functions for integrating with Go tools | ||||
|  | ||||
| " Find the nearest dir listed in GOPATH and assume it the root of the go | ||||
| " project. | ||||
| function! ale#go#FindProjectRoot(buffer) abort | ||||
|     let l:sep = has('win32') ? ';' : ':' | ||||
|  | ||||
|     let l:filename = ale#path#Simplify(expand('#' . a:buffer . ':p')) | ||||
|  | ||||
|     for l:name in split($GOPATH, l:sep) | ||||
|       let l:path_dir = ale#path#Simplify(l:name) | ||||
|  | ||||
|       " Use the directory from GOPATH if the current filename starts with it. | ||||
|       if l:filename[: len(l:path_dir) - 1] is? l:path_dir | ||||
|           return l:path_dir | ||||
|       endif | ||||
|     endfor | ||||
|  | ||||
|     let l:default_go_path = ale#path#Simplify(expand('~/go')) | ||||
|  | ||||
|     if isdirectory(l:default_go_path) | ||||
|       return l:default_go_path | ||||
|     endif | ||||
|  | ||||
|     return '' | ||||
| endfunction | ||||
| @ -99,6 +99,13 @@ function! ale#handlers#eslint#Handle(buffer, lines) abort | ||||
|         \}] | ||||
|     endif | ||||
|  | ||||
|     if a:lines == ['Could not connect'] | ||||
|         return [{ | ||||
|         \   'lnum': 1, | ||||
|         \   'text': 'Could not connect to eslint_d. Try updating eslint_d or killing it.', | ||||
|         \}] | ||||
|     endif | ||||
|  | ||||
|     " Matches patterns line the following: | ||||
|     " | ||||
|     " /path/to/some-filename.js:47:14: Missing trailing comma. [Warning/comma-dangle] | ||||
|  | ||||
| @ -9,9 +9,11 @@ function! ale#handlers#gawk#HandleGawkFormat(buffer, lines) abort | ||||
|  | ||||
|     for l:match in ale#util#GetMatches(a:lines, l:pattern) | ||||
|         let l:ecode = 'E' | ||||
|  | ||||
|         if l:match[2] is? 'warning:' | ||||
|             let l:ecode = 'W' | ||||
|         endif | ||||
|  | ||||
|         call add(l:output, { | ||||
|         \   'lnum': l:match[1] + 0, | ||||
|         \   'col': 0, | ||||
|  | ||||
| @ -21,5 +21,6 @@ function! ale#handlers#go#Handler(buffer, lines) abort | ||||
|         \   'type': 'E', | ||||
|         \}) | ||||
|     endfor | ||||
|  | ||||
|     return l:output | ||||
| endfunction | ||||
|  | ||||
| @ -3,6 +3,7 @@ | ||||
|  | ||||
| function! ale#handlers#ols#GetExecutable(buffer) abort | ||||
|     let l:ols_setting = ale#handlers#ols#GetLanguage(a:buffer) . '_ols' | ||||
|  | ||||
|     return ale#node#FindExecutable(a:buffer, l:ols_setting, [ | ||||
|     \   'node_modules/.bin/ocaml-language-server', | ||||
|     \]) | ||||
|  | ||||
| @ -14,7 +14,6 @@ endfunction | ||||
| function! ale#handlers#pony#HandlePonycFormat(buffer, lines) abort | ||||
|     " Look for lines like the following. | ||||
|     " /home/code/pony/classes/Wombat.pony:22:30: can't lookup private fields from outside the type | ||||
|  | ||||
|     let l:pattern = '\v^([^:]+):(\d+):(\d+)?:? (.+)$' | ||||
|     let l:output = [] | ||||
|  | ||||
|  | ||||
| @ -6,15 +6,18 @@ function! ale#handlers#redpen#HandleRedpenOutput(buffer, lines) abort | ||||
|     " element. | ||||
|     let l:res = json_decode(join(a:lines))[0] | ||||
|     let l:output = [] | ||||
|  | ||||
|     for l:err in l:res.errors | ||||
|         let l:item = { | ||||
|         \   'text': l:err.message, | ||||
|         \   'type': 'W', | ||||
|         \   'code': l:err.validator, | ||||
|         \} | ||||
|  | ||||
|         if has_key(l:err, 'startPosition') | ||||
|             let l:item.lnum = l:err.startPosition.lineNum | ||||
|             let l:item.col = l:err.startPosition.offset + 1 | ||||
|  | ||||
|             if has_key(l:err, 'endPosition') | ||||
|                 let l:item.end_lnum = l:err.endPosition.lineNum | ||||
|                 let l:item.end_col = l:err.endPosition.offset | ||||
| @ -28,29 +31,35 @@ function! ale#handlers#redpen#HandleRedpenOutput(buffer, lines) abort | ||||
|  | ||||
|         " 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) | ||||
|     endfor | ||||
|  | ||||
|     return l:output | ||||
| endfunction | ||||
|  | ||||
|  | ||||
| @ -1,6 +0,0 @@ | ||||
| call ale#Set('ruby_rubocop_options', '') | ||||
| call ale#Set('ruby_rubocop_executable', 'rubocop') | ||||
|  | ||||
| function! ale#handlers#rubocop#GetExecutable(buffer) abort | ||||
|     return ale#Var(a:buffer, 'ruby_rubocop_executable') | ||||
| endfunction | ||||
| @ -13,8 +13,10 @@ function! s:HandleSyntaxError(buffer, lines) abort | ||||
|  | ||||
|     for l:line in a:lines | ||||
|         let l:match = matchlist(l:line, l:pattern) | ||||
|  | ||||
|         if len(l:match) == 0 | ||||
|             let l:match = matchlist(l:line, l:column) | ||||
|  | ||||
|             if len(l:match) != 0 | ||||
|                 let l:output[len(l:output) - 1]['col'] = len(l:match[1]) | ||||
|             endif | ||||
| @ -35,3 +37,10 @@ function! ale#handlers#ruby#HandleSyntaxErrors(buffer, lines) abort | ||||
|     return s:HandleSyntaxError(a:buffer, a:lines) | ||||
| endfunction | ||||
|  | ||||
| function! ale#handlers#ruby#EscapeExecutable(executable, bundle_exec) abort | ||||
|     let l:exec_args = a:executable =~? 'bundle' | ||||
|     \   ? ' exec ' . a:bundle_exec | ||||
|     \   : '' | ||||
|  | ||||
|     return ale#Escape(a:executable) . l:exec_args | ||||
| endfunction | ||||
|  | ||||
| @ -11,8 +11,10 @@ function! ale#handlers#sml#GetCmFile(buffer) abort | ||||
|     let l:as_list = 1 | ||||
|  | ||||
|     let l:cmfile = '' | ||||
|  | ||||
|     for l:path in ale#path#Upwards(expand('#' . a:buffer . ':p:h')) | ||||
|         let l:results = glob(l:path . '/' . l:pattern, 0, l:as_list) | ||||
|  | ||||
|         if len(l:results) > 0 | ||||
|             " If there is more than one CM file, we take the first one | ||||
|             " See :help ale-sml-smlnj for how to configure this. | ||||
| @ -46,6 +48,7 @@ endfunction | ||||
| function! ale#handlers#sml#GetExecutableSmlnjCm(buffer) abort | ||||
|     return s:GetExecutable(a:buffer, 'smlnj-cm') | ||||
| endfunction | ||||
|  | ||||
| function! ale#handlers#sml#GetExecutableSmlnjFile(buffer) abort | ||||
|     return s:GetExecutable(a:buffer, 'smlnj-file') | ||||
| endfunction | ||||
| @ -53,7 +56,6 @@ endfunction | ||||
| function! ale#handlers#sml#Handle(buffer, lines) abort | ||||
|     " Try to match basic sml errors | ||||
|     " TODO(jez) We can get better errorfmt strings from Syntastic | ||||
|  | ||||
|     let l:out = [] | ||||
|     let l:pattern = '^.*\:\([0-9\.]\+\)\ \(\w\+\)\:\ \(.*\)' | ||||
|     let l:pattern2 = '^.*\:\([0-9]\+\)\.\?\([0-9]\+\).* \(\(Warning\|Error\): .*\)' | ||||
| @ -83,7 +85,6 @@ function! ale#handlers#sml#Handle(buffer, lines) abort | ||||
|           \}) | ||||
|           continue | ||||
|         endif | ||||
|  | ||||
|     endfor | ||||
|  | ||||
|     return l:out | ||||
|  | ||||
| @ -23,6 +23,7 @@ function! ale#handlers#vale#Handle(buffer, lines) abort | ||||
|     endif | ||||
|  | ||||
|     let l:output = [] | ||||
|  | ||||
|     for l:error in l:errors[keys(l:errors)[0]] | ||||
|         call add(l:output, { | ||||
|         \   'lnum': l:error['Line'], | ||||
|  | ||||
							
								
								
									
										20
									
								
								sources_non_forked/ale/autoload/ale/java.vim
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										20
									
								
								sources_non_forked/ale/autoload/ale/java.vim
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,20 @@ | ||||
| " Author: Horacio Sanson https://github.com/hsanson | ||||
| " Description: Functions for integrating with Java tools | ||||
|  | ||||
| " Find the nearest dir contining a gradle or pom file and asume it | ||||
| " the root of a java app. | ||||
| function! ale#java#FindProjectRoot(buffer) abort | ||||
|     let l:gradle_root = ale#gradle#FindProjectRoot(a:buffer) | ||||
|  | ||||
|     if !empty(l:gradle_root) | ||||
|         return l:gradle_root | ||||
|     endif | ||||
|  | ||||
|     let l:maven_pom_file = ale#path#FindNearestFile(a:buffer, 'pom.xml') | ||||
|  | ||||
|     if !empty(l:maven_pom_file) | ||||
|         return fnamemodify(l:maven_pom_file, ':h') | ||||
|     endif | ||||
|  | ||||
|     return '' | ||||
| endfunction | ||||
| @ -249,6 +249,11 @@ function! ale#job#Start(command, options) abort | ||||
|             let l:job_options.exit_cb = function('s:VimExitCallback') | ||||
|         endif | ||||
|  | ||||
|         " Use non-blocking writes for Vim versions that support the option. | ||||
|         if has('patch-8.1.350') | ||||
|             let l:job_options.noblock = 1 | ||||
|         endif | ||||
|  | ||||
|         " Vim 8 will read the stdin from the file's buffer. | ||||
|         let l:job_info.job = job_start(a:command, l:job_options) | ||||
|         let l:job_id = ale#job#ParseVim8ProcessID(string(l:job_info.job)) | ||||
| @ -278,11 +283,13 @@ function! ale#job#IsRunning(job_id) abort | ||||
|         try | ||||
|             " In NeoVim, if the job isn't running, jobpid() will throw. | ||||
|             call jobpid(a:job_id) | ||||
|  | ||||
|             return 1 | ||||
|         catch | ||||
|         endtry | ||||
|     elseif has_key(s:job_map, a:job_id) | ||||
|         let l:job = s:job_map[a:job_id].job | ||||
|  | ||||
|         return job_status(l:job) is# 'run' | ||||
|     endif | ||||
|  | ||||
|  | ||||
							
								
								
									
										19
									
								
								sources_non_forked/ale/autoload/ale/julia.vim
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										19
									
								
								sources_non_forked/ale/autoload/ale/julia.vim
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,19 @@ | ||||
| " Author: Bartolomeo Stellato bartolomeo.stellato@gmail.com | ||||
| " Description: Functions for integrating with Julia tools | ||||
|  | ||||
| " Find the nearest dir containing a julia project | ||||
| let s:__ale_julia_project_filenames = ['REQUIRE', 'Manifest.toml', 'Project.toml'] | ||||
|  | ||||
| function! ale#julia#FindProjectRoot(buffer) abort | ||||
|     for l:project_filename in s:__ale_julia_project_filenames | ||||
|         let l:full_path = ale#path#FindNearestFile(a:buffer, l:project_filename) | ||||
|  | ||||
|         if !empty(l:full_path) | ||||
|             let l:path = fnamemodify(l:full_path, ':p:h') | ||||
|  | ||||
|             return l:path | ||||
|         endif | ||||
|     endfor | ||||
|  | ||||
|     return '' | ||||
| endfunction | ||||
| @ -99,7 +99,7 @@ function! ale#linter#PreProcess(filetype, linter) abort | ||||
|     endif | ||||
|  | ||||
|     if index(['', 'socket', 'stdio', 'tsserver'], l:obj.lsp) < 0 | ||||
|         throw '`lsp` must be either `''lsp''` or `''tsserver''` if defined' | ||||
|         throw '`lsp` must be either `''lsp''`, `''stdio''`, `''socket''` or `''tsserver''` if defined' | ||||
|     endif | ||||
|  | ||||
|     if !l:needs_executable | ||||
|  | ||||
| @ -25,6 +25,7 @@ function! ale#list#IsQuickfixOpen() abort | ||||
|             return 1 | ||||
|         endif | ||||
|     endfor | ||||
|  | ||||
|     return 0 | ||||
| endfunction | ||||
|  | ||||
| @ -112,9 +113,11 @@ function! s:SetListsImpl(timer_id, buffer, loclist) abort | ||||
|  | ||||
|         " open windows vertically instead of default horizontally | ||||
|         let l:open_type = '' | ||||
|  | ||||
|         if ale#Var(a:buffer, 'list_vertical') == 1 | ||||
|             let l:open_type = 'vert ' | ||||
|         endif | ||||
|  | ||||
|         if g:ale_set_quickfix | ||||
|             if !ale#list#IsQuickfixOpen() | ||||
|                 silent! execute l:open_type . 'copen ' . str2nr(ale#Var(a:buffer, 'list_window_size')) | ||||
|  | ||||
| @ -24,6 +24,7 @@ function! ale#lsp#Register(executable_or_address, project, init_options) abort | ||||
|         " capabilities_queue: The list of callbacks to call with capabilities. | ||||
|         " capabilities: Features the server supports. | ||||
|         let s:connections[l:conn_id] = { | ||||
|         \   'id': l:conn_id, | ||||
|         \   'is_tsserver': 0, | ||||
|         \   'data': '', | ||||
|         \   'root': a:project, | ||||
| @ -98,6 +99,7 @@ function! s:CreateTSServerMessageData(message) abort | ||||
|     endif | ||||
|  | ||||
|     let l:data = json_encode(l:obj) . "\n" | ||||
|  | ||||
|     return [l:is_notification ? 0 : l:obj.seq, l:data] | ||||
| endfunction | ||||
|  | ||||
|  | ||||
| @ -55,16 +55,29 @@ function! s:HandleTSServerDiagnostics(response, error_type) abort | ||||
|     endif | ||||
|  | ||||
|     let l:thislist = ale#lsp#response#ReadTSServerDiagnostics(a:response) | ||||
|     let l:no_changes = 0 | ||||
|  | ||||
|     " tsserver sends syntax and semantic errors in separate messages, so we | ||||
|     " have to collect the messages separately for each buffer and join them | ||||
|     " back together again. | ||||
|     if a:error_type is# 'syntax' | ||||
|         if len(l:thislist) is 0 && len(get(l:info, 'syntax_loclist', [])) is 0 | ||||
|             let l:no_changes = 1 | ||||
|         endif | ||||
|  | ||||
|         let l:info.syntax_loclist = l:thislist | ||||
|     else | ||||
|         if len(l:thislist) is 0 && len(get(l:info, 'semantic_loclist', [])) is 0 | ||||
|             let l:no_changes = 1 | ||||
|         endif | ||||
|  | ||||
|         let l:info.semantic_loclist = l:thislist | ||||
|     endif | ||||
|  | ||||
|     if l:no_changes | ||||
|         return | ||||
|     endif | ||||
|  | ||||
|     let l:loclist = get(l:info, 'semantic_loclist', []) | ||||
|     \   + get(l:info, 'syntax_loclist', []) | ||||
|  | ||||
| @ -99,9 +112,10 @@ endfunction | ||||
|  | ||||
| function! ale#lsp_linter#HandleLSPResponse(conn_id, response) abort | ||||
|     let l:method = get(a:response, 'method', '') | ||||
|     let l:linter_name = get(s:lsp_linter_map, a:conn_id, '') | ||||
|  | ||||
|     if get(a:response, 'jsonrpc', '') is# '2.0' && has_key(a:response, 'error') | ||||
|         let l:linter_name = get(s:lsp_linter_map, a:conn_id, '') | ||||
|  | ||||
|         call s:HandleLSPErrorMessage(l:linter_name, a:response) | ||||
|     elseif l:method is# 'textDocument/publishDiagnostics' | ||||
|         call s:HandleLSPDiagnostics(a:conn_id, a:response) | ||||
|  | ||||
| @ -15,13 +15,13 @@ function! ale#preview#Show(lines, ...) abort | ||||
|     setlocal modifiable | ||||
|     setlocal noreadonly | ||||
|     setlocal nobuflisted | ||||
|     let &l:filetype = get(l:options, 'filetype', 'ale-preview') | ||||
|     setlocal buftype=nofile | ||||
|     setlocal bufhidden=wipe | ||||
|     :%d | ||||
|     call setline(1, a:lines) | ||||
|     setlocal nomodifiable | ||||
|     setlocal readonly | ||||
|     let &l:filetype = get(l:options, 'filetype', 'ale-preview') | ||||
|  | ||||
|     if get(l:options, 'stay_here') | ||||
|         wincmd p | ||||
|  | ||||
Some files were not shown because too many files have changed in this diff Show More
		Reference in New Issue
	
	Block a user
	 Amir Salihefendic
					Amir Salihefendic