Created
February 2, 2017 22:29
-
-
Save marcusbuffett/fdcb92bde17f5117827fe26c55c89464 to your computer and use it in GitHub Desktop.
neomake prof
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
SCRIPT /Users/marcusbuffett/.vim/plugged/neomake/autoload/neomake/makers/ft/java.vim | |
Sourced 1 time | |
Total time: 0.000946 | |
Self time: 0.000946 | |
count total (s) self (s) | |
"============================================================================ | |
"File: java.vim | |
"Description: Syntax checking plugin for neomake | |
"Maintainer: Wang Shidong <wsdjeg at outlook dot com> | |
"License: This program is free software. It comes without any warranty, | |
" to the extent permitted by applicable law. You can redistribute | |
" it and/or modify it under the terms of the Do What The Fuck You | |
" Want To Public License, Version 2, as published by Sam Hocevar. | |
" See http://sam.zoy.org/wtfpl/COPYING for more details. | |
"============================================================================ | |
1 0.000007 let s:save_cpo = &cpoptions | |
1 0.000006 set cpoptions&vim | |
1 0.000006 if exists('g:neomake_java_javac_maker') | |
finish | |
endif | |
1 0.000002 let g:neomake_java_javac_maker = 1 | |
1 0.000003 let g:neomake_java_javac_maven_pom_tags = ['build', 'properties'] | |
1 0.000002 let g:neomake_java_javac_maven_pom_properties = {} | |
1 0.000012 let s:is_windows = has('win32') || has('win64') || has('win16') || has('dos32') || has('dos16') | |
1 0.000002 if s:is_windows | |
let s:fsep = ';' | |
let s:psep = '\' | |
else | |
1 0.000002 let s:fsep = ':' | |
1 0.000001 let s:psep = '/' | |
1 0.000001 endif | |
1 0.000019 let g:neomake_java_checker_home = fnamemodify(expand('<sfile>'), ':p:h:gs?\\?/?') | |
" custom options | |
1 0.000005 let g:neomake_java_javac_executable = | |
\ get(g:, 'neomake_java_javac_executable', 'javac') | |
1 0.000004 let g:neomake_java_maven_executable = | |
\ get(g:, 'neomake_java_maven_executable', 'mvn') | |
1 0.000005 let g:neomake_java_gradle_executable = | |
\ get(g:, 'neomake_java_gradle_executable', s:is_windows? '.\gradlew.bat' : './gradlew') | |
1 0.000004 let g:neomake_java_checkstyle_executable = | |
\ get(g:, 'neomake_java_checkstyle_executable', 'checkstyle') | |
1 0.000004 let g:neomake_java_javac_options = | |
\ get(g:, 'neomake_java_javac_options', ['-Xlint']) | |
1 0.000004 let g:neomake_java_maven_options = | |
\ get(g:, 'neomake_java_maven_options', '') | |
1 0.000003 let g:neomake_java_javac_classpath = | |
\ get(g:, 'neomake_java_javac_classpath', '') | |
1 0.000004 let g:neomake_java_javac_outputdir = | |
\ get(g:, 'neomake_java_javac_outputdir', '') | |
1 0.000004 let g:neomake_java_checkstyle_xml = | |
\ get(g:, 'neomake_java_checkstyle_xml', '/usr/share/checkstyle/google_checks.xml') | |
1 0.000003 let g:neomake_java_javac_delete_output = | |
\ get(g:, 'neomake_java_javac_delete_output', 1) | |
1 0.000004 let g:neomake_java_javac_autoload_maven_classpath = | |
\ get(g:, 'neomake_java_javac_autoload_maven_classpath', 1) | |
1 0.000004 let g:neomake_java_javac_autoload_gradle_classpath = | |
\ get(g:, 'neomake_java_javac_autoload_gradle_classpath', 1) | |
1 0.000004 let g:neomake_java_javac_autoload_eclipse_classpath = | |
\ get(g:, 'neomake_java_javac_autoload_eclipse_classpath', 1) | |
1 0.000003 let g:neomake_java_javac_maven_pom_ftime = | |
\ get(g:, 'neomake_java_javac_maven_pom_ftime', {}) | |
1 0.000004 let g:neomake_java_javac_maven_pom_classpath = | |
\ get(g:, 'neomake_java_javac_maven_pom_classpath', {}) | |
1 0.000004 let g:neomake_java_javac_gradle_ftime = | |
\ get(g:, 'neomake_java_javac_gradle_ftime', {}) | |
1 0.000004 let g:neomake_java_javac_gradle_classpath = | |
\ get(g:, 'neomake_java_javac_gradle_classpath', {}) | |
1 0.000061 let s:has_maven = executable(expand(g:neomake_java_maven_executable, 1)) | |
1 0.000010 let s:has_gradle = executable(expand(g:neomake_java_gradle_executable, 1)) | |
1 0.000003 function! s:tmpdir() abort | |
let tempdir = '' | |
if (has('unix') || has('mac')) && executable('mktemp') && !has('win32unix') | |
" TODO: option "-t" to mktemp(1) is not portable | |
let tmp = $TMPDIR !=# '' ? $TMPDIR : $TMP !=# '' ? $TMP : '/tmp' | |
let out = split(system('mktemp -q -d ' . tmp . '/neomake-java-' . getpid() . '-XXXXXXXX'), "\n") | |
if v:shell_error == 0 && len(out) == 1 | |
let tempdir = out[0] | |
endif | |
endif | |
if tempdir ==# '' | |
if has('win32') || has('win64') | |
let tempdir = $TEMP . s:psep . 'neomake-java-' . getpid() | |
elseif has('win32unix') | |
let tempdir = substitute(system('cygpath -m ' . s:shescape('/neomake-java-' . getpid())), "\n", '', 'g') | |
elseif $TMPDIR !=# '' | |
let tempdir = $TMPDIR . '/neomake-java-' . getpid() | |
else | |
let tempdir = '/tmp/neomake-java-' . getpid() | |
endif | |
try | |
call mkdir(tempdir, 'p', 0700) | |
catch /\m^Vim\%((\a\+)\)\=:E739/ | |
let tempdir = '.' | |
endtry | |
endif | |
return tempdir | |
endfunction | |
1 0.000005 function! s:ClassSep() abort | |
return (s:is_windows || has('win32unix')) ? ';' : ':' | |
endfunction | |
1 0.000002 function! s:shescape(string) abort | |
return a:string =~# '\m^[A-Za-z0-9_/.-]\+$' ? a:string : shellescape(a:string) | |
endfunction | |
1 0.000002 function! s:AddToClasspath(classpath, path) abort | |
if a:path ==# '' | |
return a:classpath | |
endif | |
return (a:classpath !=# '') ? a:classpath . s:ClassSep() . a:path : a:path | |
endfunction | |
" @vimlint(EVL103, 1, a:classpathFile) | |
1 0.000002 function! s:ReadClassPathFile(classpathFile) abort | |
let cp = '' | |
let file = g:neomake_java_checker_home. s:psep. 'java'. s:psep. 'classpath.py' | |
if has('python3') | |
execute 'py3file' file | |
py3 import vim | |
py3 vim.command("let cp = '%s'" % os.pathsep.join(ReadClasspathFile(vim.eval('a:classpathFile'))).replace('\\', '/')) | |
elseif has('python') | |
execute 'pyfile' file | |
py import vim | |
py vim.command("let cp = '%s'" % os.pathsep.join(ReadClasspathFile(vim.eval('a:classpathFile'))).replace('\\', '/')) | |
endif | |
return cp | |
endfunction | |
" @vimlint(EVL103, 0) | |
1 0.000004 function! neomake#makers#ft#java#EnabledMakers() abort | |
let makers = [] | |
if executable(expand(g:neomake_java_javac_executable, 1)) | |
call add(makers, g:neomake_java_javac_executable) | |
endif | |
if executable(expand(g:neomake_java_checkstyle_executable, 1)) | |
call add(makers, g:neomake_java_checkstyle_executable) | |
endif | |
return makers | |
endfunction | |
1 0.000003 function! neomake#makers#ft#java#javac() abort | |
let javac_opts = extend([], g:neomake_java_javac_options) | |
let output_dir = '' | |
if g:neomake_java_javac_delete_output | |
let output_dir = s:tmpdir() | |
let javac_opts = extend(javac_opts, ['-d', s:shescape(output_dir)]) | |
endif | |
let javac_classpath = get(g:, 'neomake_java_javac_classpath', '') | |
if s:has_maven && g:neomake_java_javac_autoload_maven_classpath && empty(javac_classpath) | |
if !g:neomake_java_javac_delete_output | |
let javac_opts = extend(javac_opts, ['-d', s:shescape(s:MavenOutputDirectory())]) | |
endif | |
let javac_classpath = s:AddToClasspath(javac_classpath, s:GetMavenClasspath()) | |
endif | |
if s:has_gradle && g:neomake_java_javac_autoload_gradle_classpath && empty(javac_classpath) | |
if !g:neomake_java_javac_delete_output | |
let javac_opts = extend(javac_opts, ['-d', s:shescape(s:GradleOutputDirectory())]) | |
endif | |
let javac_classpath = s:AddToClasspath(javac_classpath, s:GetGradleClasspath()) | |
endif | |
if (has('python') || has('python3')) && empty(javac_classpath) | |
let classpathFile = fnamemodify(findfile('.classpath', escape(expand('.'), '*[]?{}, ') . ';'), ':p') | |
if !empty(classpathFile) && filereadable(classpathFile) | |
let javac_classpath = s:ReadClassPathFile(classpathFile) | |
endif | |
endif | |
if javac_classpath !=# '' | |
let javac_opts = extend(javac_opts, ['-cp', javac_classpath]) | |
endif | |
return { | |
\ 'args': javac_opts, | |
\ 'exe': g:neomake_java_javac_executable, | |
\ 'errorformat': | |
\ '%E%f:%l: error: %m,'. | |
\ '%W%f:%l: warning: %m,'. | |
\ '%E%f:%l: %m,'. | |
\ '%Z%p^,'. | |
\ '%-G%.%#' | |
\ } | |
endfunction | |
1 0.000003 function! neomake#makers#ft#java#checkstyle() abort | |
return { | |
\ 'args': ['-c', g:neomake_java_checkstyle_xml], | |
\ 'exe': g:neomake_java_checkstyle_executable, | |
\ 'errorformat': | |
\ '[%t%*[^]]] %f:%l:%c: %m [%s]' | |
\ } | |
endfunction | |
1 0.000002 function! s:findFileInParent(what, where) abort " {{{2 | |
let old_suffixesadd = &suffixesadd | |
let &suffixesadd = '' | |
let file = findfile(a:what, escape(a:where, ' ') . ';') | |
let &suffixesadd = old_suffixesadd | |
return file | |
endfunction " }}}2 | |
1 0.000003 function! s:GetMavenProperties() abort " {{{2 | |
let mvn_properties = {} | |
let pom = s:findFileInParent('pom.xml', expand('%:p:h', 1)) | |
if s:has_maven && filereadable(pom) | |
if !has_key(g:neomake_java_javac_maven_pom_properties, pom) | |
let mvn_cmd = s:shescape(expand(g:neomake_java_maven_executable, 1)) . | |
\ ' -f ' . s:shescape(pom) . | |
\ ' ' . g:neomake_java_maven_options | |
let mvn_is_managed_tag = 1 | |
let mvn_settings_output = split(system(mvn_cmd . ' help:effective-pom'), "\n") | |
let current_path = 'project' | |
for line in mvn_settings_output | |
let matches = matchlist(line, '\m^\s*<\([a-zA-Z0-9\-\.]\+\)>\s*$') | |
if mvn_is_managed_tag && !empty(matches) | |
let mvn_is_managed_tag = index(g:neomake_java_javac_maven_pom_tags, matches[1]) >= 0 | |
let current_path .= '.' . matches[1] | |
else | |
let matches = matchlist(line, '\m^\s*</\([a-zA-Z0-9\-\.]\+\)>\s*$') | |
if !empty(matches) | |
let mvn_is_managed_tag = index(g:neomake_java_javac_maven_pom_tags, matches[1]) < 0 | |
let current_path = substitute(current_path, '\m\.' . matches[1] . '$', '', '') | |
else | |
let matches = matchlist(line, '\m^\s*<\([a-zA-Z0-9\-\.]\+\)>\(.\+\)</[a-zA-Z0-9\-\.]\+>\s*$') | |
if mvn_is_managed_tag && !empty(matches) | |
let mvn_properties[current_path . '.' . matches[1]] = matches[2] | |
endif | |
endif | |
endif | |
endfor | |
let g:neomake_java_javac_maven_pom_properties[pom] = mvn_properties | |
endif | |
return g:neomake_java_javac_maven_pom_properties[pom] | |
endif | |
return mvn_properties | |
endfunction " }}}2 | |
1 0.000002 function! s:GetMavenClasspath() abort " {{{2 | |
let pom = s:findFileInParent('pom.xml', expand('%:p:h', 1)) | |
if s:has_maven && filereadable(pom) | |
if !has_key(g:neomake_java_javac_maven_pom_ftime, pom) || g:neomake_java_javac_maven_pom_ftime[pom] != getftime(pom) | |
let mvn_cmd = s:shescape(expand(g:neomake_java_maven_executable, 1)) . | |
\ ' -f ' . s:shescape(pom) . | |
\ ' ' . g:neomake_java_maven_options | |
let mvn_classpath_output = split(system(mvn_cmd . ' dependency:build-classpath -DincludeScope=test'), "\n") | |
let mvn_classpath = '' | |
let class_path_next = 0 | |
for line in mvn_classpath_output | |
if class_path_next == 1 | |
let mvn_classpath = substitute(line, "\r", '', 'g') | |
break | |
endif | |
if stridx(line, 'Dependencies classpath:') >= 0 | |
let class_path_next = 1 | |
endif | |
endfor | |
let mvn_properties = s:GetMavenProperties() | |
let output_dir = get(mvn_properties, 'project.build.outputDirectory', join(['target', 'classes'], s:psep)) | |
let mvn_classpath = s:AddToClasspath(mvn_classpath, output_dir) | |
let test_output_dir = get(mvn_properties, 'project.build.testOutputDirectory', join(['target', 'test-classes'], s:psep)) | |
let mvn_classpath = s:AddToClasspath(mvn_classpath, test_output_dir) | |
let g:neomake_java_javac_maven_pom_ftime[pom] = getftime(pom) | |
let g:neomake_java_javac_maven_pom_classpath[pom] = mvn_classpath | |
endif | |
return g:neomake_java_javac_maven_pom_classpath[pom] | |
endif | |
return '' | |
endfunction " }}}2 | |
1 0.000002 function! s:MavenOutputDirectory() abort " {{{2 | |
let pom = s:findFileInParent('pom.xml', expand('%:p:h', 1)) | |
if s:has_maven && filereadable(pom) | |
let mvn_properties = s:GetMavenProperties() | |
let output_dir = get(mvn_properties, 'project.properties.build.dir', getcwd()) | |
let src_main_dir = get(mvn_properties, 'project.build.sourceDirectory', join(['src', 'main', 'java'], s:psep)) | |
let src_test_dir = get(mvn_properties, 'project.build.testsourceDirectory', join(['src', 'test', 'java'], s:psep)) | |
if stridx(expand('%:p:h', 1), src_main_dir) >= 0 | |
let output_dir = get(mvn_properties, 'project.build.outputDirectory', join ([output_dir, 'target', 'classes'], s:psep)) | |
endif | |
if stridx(expand('%:p:h', 1), src_test_dir) >= 0 | |
let output_dir = get(mvn_properties, 'project.build.testOutputDirectory', join([output_dir, 'target', 'test-classes'], s:psep)) | |
endif | |
if has('win32unix') | |
let output_dir = substitute(system('cygpath -m ' . s:shescape(output_dir)), "\n", '', 'g') | |
endif | |
return output_dir | |
endif | |
return '.' | |
endfunction " }}}2 | |
1 0.000005 function! s:GradleOutputDirectory() abort | |
let gradle_build = s:findFileInParent('build.gradle', expand('%:p:h', 1)) | |
let items = split(gradle_build, s:psep) | |
if len(items)==1 | |
return join(['build', 'intermediates', 'classes', 'debug'], s:psep) | |
endif | |
let outputdir = '' | |
for i in items | |
if i !=# 'build.gradle' | |
let outputdir .= i . s:psep | |
endif | |
endfor | |
return outputdir . join(['build', 'intermediates', 'classes', 'debug'], s:psep) | |
endf | |
1 0.000002 function! s:GetGradleClasspath() abort | |
let gradle = s:findFileInParent('build.gradle', expand('%:p:h', 1)) | |
if s:has_gradle && filereadable(gradle) | |
if !has_key(g:neomake_java_javac_gradle_ftime, gradle) || g:neomake_java_javac_gradle_ftime[gradle] != getftime(gradle) | |
try | |
let f = tempname() | |
if s:is_windows | |
let gradle_cmd = '.\gradlew.bat' | |
else | |
let gradle_cmd = './gradlew' | |
endif | |
call writefile(["allprojects{apply from: '" . g:neomake_java_checker_home . s:psep. 'java'. s:psep. "classpath.gradle'}"], f) | |
let ret = system(gradle_cmd . ' -q -I ' . shellescape(f) . ' classpath' ) | |
if v:shell_error == 0 | |
let cp = filter(split(ret, "\n"), "v:val =~# '^CLASSPATH:'")[0][10:] | |
if filereadable(getcwd() . s:psep . 'build.gradle') | |
let out_putdir = s:GlobPathList(getcwd(), join( | |
\ ['**', 'build', 'intermediates', 'classes', 'debug'], | |
\ s:psep), 0) | |
for classes in out_putdir | |
let cp .= s:ClassSep() . classes | |
endfor | |
endif | |
else | |
let cp = '' | |
endif | |
catch | |
finally | |
call delete(f) | |
endtry | |
let g:neomake_java_javac_gradle_ftime[gradle] = getftime(gradle) | |
let g:neomake_java_javac_gradle_classpath[gradle] = cp | |
endif | |
return g:neomake_java_javac_gradle_classpath[gradle] | |
endif | |
return '' | |
endf | |
1 0.000003 function! s:GlobPathList(path, pattern, suf) abort | |
if v:version >= 705 || (v:version == 704 && has('patch279')) | |
return globpath(a:path, a:pattern, a:suf, 1) | |
else | |
return split(globpath(a:path, a:pattern, a:suf), "\n") | |
endif | |
endfunction | |
1 0.000008 let &cpoptions = s:save_cpo | |
1 0.000004 unlet s:save_cpo | |
SCRIPT /usr/local/Cellar/neovim/0.1.7/share/nvim/runtime/autoload/provider/python.vim | |
Sourced 1 time | |
Total time: 0.049101 | |
Self time: 0.000461 | |
count total (s) self (s) | |
" The Python provider uses a Python host to emulate an environment for running | |
" python-vim plugins. See ":help provider". | |
" | |
" Associating the plugin with the Python host is the first step because plugins | |
" will be passed as command-line arguments | |
1 0.000006 if exists('g:loaded_python_provider') | |
finish | |
endif | |
1 0.000004 let g:loaded_python_provider = 1 | |
1 0.000088 let [s:prog, s:err] = provider#pythonx#Detect(2) | |
1 0.000004 function! provider#python#Prog() | |
return s:prog | |
endfunction | |
1 0.000002 function! provider#python#Error() | |
return s:err | |
endfunction | |
1 0.000002 if s:prog == '' | |
" Detection failed | |
finish | |
endif | |
" The Python provider plugin will run in a separate instance of the Python | |
" host. | |
1 0.000037 0.000017 call remote#host#RegisterClone('legacy-python-provider', 'python') | |
1 0.000086 0.000012 call remote#host#RegisterPlugin('legacy-python-provider', 'script_host.py', []) | |
1 0.000003 function! provider#python#Call(method, args) | |
if s:err != '' | |
return | |
endif | |
if !exists('s:host') | |
let s:rpcrequest = function('rpcrequest') | |
" Ensure that we can load the Python host before bootstrapping | |
try | |
let s:host = remote#host#Require('legacy-python-provider') | |
catch | |
let s:err = v:exception | |
echohl WarningMsg | |
echomsg v:exception | |
echohl None | |
return | |
endtry | |
endif | |
return call(s:rpcrequest, insert(insert(a:args, 'python_'.a:method), s:host)) | |
endfunction | |
SCRIPT /usr/local/Cellar/neovim/0.1.7/share/nvim/runtime/autoload/provider/pythonx.vim | |
Sourced 1 time | |
Total time: 0.000488 | |
Self time: 0.000488 | |
count total (s) self (s) | |
" The Python provider helper | |
1 0.000008 if exists('s:loaded_pythonx_provider') | |
finish | |
endif | |
1 0.000005 let s:loaded_pythonx_provider = 1 | |
1 0.000003 let s:stderr = {} | |
1 0.000005 let s:job_opts = {'rpc': v:true} | |
" TODO(bfredl): this logic is common and should be builtin | |
1 0.000005 function! s:job_opts.on_stderr(chan_id, data, event) | |
let stderr = get(s:stderr, a:chan_id, ['']) | |
let last = remove(stderr, -1) | |
let a:data[0] = last.a:data[0] | |
call extend(stderr, a:data) | |
let s:stderr[a:chan_id] = stderr | |
endfunction | |
1 0.000005 function! provider#pythonx#Require(host) abort | |
let ver = (a:host.orig_name ==# 'python') ? 2 : 3 | |
" Python host arguments | |
let prog = (ver == '2' ? provider#python#Prog() : provider#python3#Prog()) | |
let args = [prog, '-c', 'import sys; sys.path.remove(""); import neovim; neovim.start_host()'] | |
" Collect registered Python plugins into args | |
let python_plugins = remote#host#PluginsForHost(a:host.name) | |
for plugin in python_plugins | |
call add(args, plugin.path) | |
endfor | |
try | |
let channel_id = jobstart(args, s:job_opts) | |
if rpcrequest(channel_id, 'poll') ==# 'ok' | |
return channel_id | |
endif | |
catch | |
echomsg v:throwpoint | |
echomsg v:exception | |
for row in get(s:stderr, channel_id, []) | |
echomsg row | |
endfor | |
endtry | |
throw remote#host#LoadErrorForHost(a:host.orig_name, | |
\ '$NVIM_PYTHON_LOG_FILE') | |
endfunction | |
1 0.000004 function! provider#pythonx#Detect(major_ver) abort | |
let host_var = (a:major_ver == 2) ? | |
\ 'g:python_host_prog' : 'g:python3_host_prog' | |
let skip_var = (a:major_ver == 2) ? | |
\ 'g:python_host_skip_check' : 'g:python3_host_skip_check' | |
let skip = exists(skip_var) ? {skip_var} : 0 | |
if exists(host_var) | |
" Disable auto detection. | |
let [result, err] = s:check_interpreter({host_var}, a:major_ver, skip) | |
if result | |
return [{host_var}, err] | |
endif | |
return ['', 'provider/pythonx: Could not load Python ' . a:major_ver | |
\ . ' from ' . host_var . ': ' . err] | |
endif | |
let prog_suffixes = (a:major_ver == 2) ? | |
\ ['2', '2.7', '2.6', ''] | |
\ : ['3', '3.5', '3.4', '3.3', ''] | |
let errors = [] | |
for prog in map(prog_suffixes, "'python' . v:val") | |
let [result, err] = s:check_interpreter(prog, a:major_ver, skip) | |
if result | |
return [prog, err] | |
endif | |
" Accumulate errors in case we don't find | |
" any suitable Python interpreter. | |
call add(errors, err) | |
endfor | |
" No suitable Python interpreter found. | |
return ['', 'provider/pythonx: Could not load Python ' . a:major_ver | |
\ . ":\n" . join(errors, "\n")] | |
endfunction | |
1 0.000005 function! s:check_interpreter(prog, major_ver, skip) abort | |
let prog_path = exepath(a:prog) | |
if prog_path ==# '' | |
return [0, a:prog . ' not found in search path or not executable.'] | |
endif | |
if a:skip | |
return [1, ''] | |
endif | |
let min_version = (a:major_ver == 2) ? '2.6' : '3.3' | |
" Try to load neovim module, and output Python version. | |
" Return codes: | |
" 0 Neovim module can be loaded. | |
" 2 Neovim module cannot be loaded. | |
" Otherwise something else went wrong (e.g. 1 or 127). | |
let prog_ver = system([ a:prog , '-c' , | |
\ 'import sys; ' . | |
\ 'sys.path.remove(""); ' . | |
\ 'sys.stdout.write(str(sys.version_info[0]) + "." + str(sys.version_info[1])); ' . | |
\ 'import pkgutil; ' . | |
\ 'exit(2*int(pkgutil.get_loader("neovim") is None))' | |
\ ]) | |
if v:shell_error == 2 || v:shell_error == 0 | |
" Check version only for expected return codes. | |
if prog_ver !~ '^' . a:major_ver | |
return [0, prog_path . ' is Python ' . prog_ver . ' and cannot provide Python ' | |
\ . a:major_ver . '.'] | |
elseif prog_ver =~ '^' . a:major_ver && prog_ver < min_version | |
return [0, prog_path . ' is Python ' . prog_ver . ' and cannot provide Python >= ' | |
\ . min_version . '.'] | |
endif | |
endif | |
if v:shell_error == 2 | |
return [0, prog_path . ' does not have the neovim module installed. ' | |
\ . 'See ":help provider-python".'] | |
elseif v:shell_error == 127 | |
" This can happen with pyenv's shims. | |
return [0, prog_path . ' does not exist: ' . prog_ver] | |
elseif v:shell_error | |
return [0, 'Checking ' . prog_path . ' caused an unknown error. ' | |
\ . '(' . v:shell_error . ', output: ' . prog_ver . ')' | |
\ . ' Please report this at github.com/neovim/neovim.'] | |
endif | |
return [1, ''] | |
endfunction | |
SCRIPT /Users/marcusbuffett/.vim/plugged/neomake/autoload/neomake/compat.vim | |
Sourced 1 time | |
Total time: 0.000025 | |
Self time: 0.000025 | |
count total (s) self (s) | |
" Function to wrap Compatibility across different (Neo)Vim versions. | |
1 0.000004 if v:version >= 704 | |
1 0.000004 function! neomake#compat#getbufvar(buf, key, def) abort | |
return getbufvar(a:buf, a:key, a:def) | |
endfunction | |
1 0.000001 else | |
function! neomake#compat#getbufvar(buf, key, def) abort | |
return get(getbufvar(a:buf, ''), a:key, a:def) | |
endfunction | |
endif | |
SCRIPT /Users/marcusbuffett/.vim/plugged/neomake/autoload/neomake/statusline.vim | |
Sourced 1 time | |
Total time: 0.000097 | |
Self time: 0.000097 | |
count total (s) self (s) | |
let s:qflist_counts = {} | |
1 0.000002 let s:loclist_counts = {} | |
1 0.000004 function! s:setCount(counts, item, buf) abort | |
let type = toupper(a:item.type) | |
if len(type) && (!a:buf || a:item.bufnr ==# a:buf) | |
let a:counts[type] = get(a:counts, type, 0) + 1 | |
return 1 | |
endif | |
return 0 | |
endfunction | |
1 0.000003 function! neomake#statusline#ResetCountsForBuf(...) abort | |
let bufnr = a:0 ? a:1 : bufnr('%') | |
let r = (get(s:loclist_counts, bufnr, {}) != {}) | |
let s:loclist_counts[bufnr] = {} | |
if r | |
call neomake#utils#hook('NeomakeCountsChanged', { | |
\ 'file_mode': 1, | |
\ 'bufnr': bufnr}) | |
endif | |
return r | |
endfunction | |
1 0.000002 function! neomake#statusline#ResetCountsForProject(...) abort | |
let r = s:qflist_counts != {} | |
let s:qflist_counts = {} | |
if r | |
call neomake#utils#hook('NeomakeCountsChanged', { | |
\ 'file_mode': 0, | |
\ 'bufnr': bufnr('%')}) | |
endif | |
return r | |
endfunction | |
1 0.000002 function! neomake#statusline#ResetCounts() abort | |
let r = neomake#statusline#ResetCountsForProject() | |
for bufnr in keys(s:loclist_counts) | |
let r = neomake#statusline#ResetCountsForBuf(bufnr) || r | |
endfor | |
let s:loclist_counts = {} | |
return r | |
endfunction | |
1 0.000002 function! neomake#statusline#AddLoclistCount(buf, item) abort | |
let s:loclist_counts[a:buf] = get(s:loclist_counts, a:buf, {}) | |
return s:setCount(s:loclist_counts[a:buf], a:item, a:buf) | |
endfunction | |
1 0.000002 function! neomake#statusline#AddQflistCount(item) abort | |
return s:setCount(s:qflist_counts, a:item, 0) | |
endfunction | |
1 0.000002 function! neomake#statusline#LoclistCounts(...) abort | |
let buf = a:0 ? a:1 : bufnr('%') | |
if buf is# 'all' | |
return s:loclist_counts | |
endif | |
return get(s:loclist_counts, buf, {}) | |
endfunction | |
1 0.000002 function! neomake#statusline#QflistCounts() abort | |
return s:qflist_counts | |
endfunction | |
1 0.000002 function! s:showErrWarning(counts, prefix) abort | |
let w = get(a:counts, 'W', 0) | |
let e = get(a:counts, 'E', 0) | |
if w || e | |
let result = a:prefix | |
if e | |
let result .= 'E:'.e | |
endif | |
if w | |
if e | |
let result .= ',' | |
endif | |
let result .= 'W:'.w | |
endif | |
return result | |
else | |
return '' | |
endif | |
endfunction | |
1 0.000002 function! neomake#statusline#LoclistStatus(...) abort | |
return s:showErrWarning(neomake#statusline#LoclistCounts(), a:0 ? a:1 : '') | |
endfunction | |
1 0.000002 function! neomake#statusline#QflistStatus(...) abort | |
return s:showErrWarning(neomake#statusline#QflistCounts(), a:0 ? a:1 : '') | |
endfunction | |
FUNCTION <SNR>35_Make() | |
Called 1 time | |
Total time: 0.016088 | |
Self time: 0.000701 | |
count total (s) self (s) | |
1 0.000003 let options = copy(a:options) | |
1 0.000008 call extend(options, { 'file_mode': 0, 'enabled_makers': [], 'bufnr': bufnr('%'), 'ft': '', }, 'keep') | |
1 0.000002 let bufnr = options.bufnr | |
1 0.000001 let file_mode = options.file_mode | |
1 0.000001 let enabled_makers = options.enabled_makers | |
1 0.000001 let ft = options.ft | |
" Reset/clear on first run, but not when using 'serialize'. | |
1 0.000002 if !get(options, 'continuation', 0) | |
1 0.000001 if !len(enabled_makers) | |
if file_mode | |
call neomake#utils#DebugMessage('Nothing to make: no enabled makers.') | |
return [] | |
endif | |
let enabled_makers = ['makeprg'] | |
endif | |
1 0.000002 let s:make_id += 1 | |
1 0.000018 let s:make_options[s:make_id] = { 'cwd': getcwd(), } | |
1 0.000001 if file_mode | |
1 0.000485 0.000353 call neomake#statusline#ResetCountsForBuf(bufnr) | |
1 0.000001 else | |
call neomake#statusline#ResetCountsForProject() | |
endif | |
" Empty the quickfix/location list (using a valid 'errorformat' setting). | |
1 0.000003 let l:efm = &errorformat | |
1 0.000001 try | |
1 0.000008 let &errorformat = '%-G' | |
1 0.000001 if file_mode | |
1 0.000016 lgetexpr '' | |
1 0.000001 else | |
cgetexpr '' | |
endif | |
1 0.000001 finally | |
1 0.000005 let &errorformat = l:efm | |
1 0.000001 endtry | |
1 0.000026 0.000011 call s:HandleLoclistQflistDisplay(file_mode) | |
1 0.000001 if file_mode | |
1 0.000001 if g:neomake_place_signs | |
1 0.000040 0.000007 call neomake#signs#ResetFile(bufnr) | |
1 0.000001 endif | |
1 0.000003 let s:need_errors_cleaning['file'][bufnr] = 1 | |
1 0.000001 else | |
if g:neomake_place_signs | |
call neomake#signs#ResetProject() | |
endif | |
let s:need_errors_cleaning['project'] = 1 | |
endif | |
1 0.000038 0.000009 call s:AddMakeInfoForCurrentWin(s:make_id) | |
1 0.000001 endif | |
1 0.000001 let job_ids = [] | |
1 0.010926 0.000020 let enabled_makers = filter(map(copy(enabled_makers), 'neomake#GetMaker(v:val, ft)'), '!empty(v:val)') | |
1 0.000001 if !len(enabled_makers) | |
return [] | |
endif | |
1 0.000085 0.000018 call neomake#utils#DebugMessage(printf('Running makers: %s', join(map(copy(enabled_makers), 'v:val.name'), ', '))) | |
1 0.000001 let maker = {} | |
2 0.000004 while len(enabled_makers) | |
1 0.000002 let maker = remove(enabled_makers, 0) | |
1 0.000001 if empty(maker) | |
continue | |
endif | |
" call neomake#utils#DebugMessage('Maker: '.string(enabled_makers), {'make_id': s:make_id}) | |
" Check for already running job for the same maker (from other runs). | |
" This used to use this key: maker.name.',ft='.maker.ft.',buf='.maker.bufnr | |
1 0.000003 if len(s:jobs) | |
let running_already = values(filter(copy(s:jobs), 'v:val.make_id != s:make_id && v:val.maker == maker' ." && v:val.bufnr == bufnr && !get(v:val, 'restarting')")) | |
if len(running_already) | |
let jobinfo = running_already[0] | |
" let jobinfo.next = copy(options) | |
" TODO: required?! ( | |
" let jobinfo.next.enabled_makers = [maker] | |
call neomake#utils#LoudMessage(printf( 'Restarting already running job (%d.%d) for the same maker.', jobinfo.make_id, jobinfo.id), {'make_id': s:make_id}) | |
let jobinfo.restarting = 1 | |
call neomake#CancelJob(jobinfo.id) | |
continue | |
endif | |
endif | |
1 0.000010 0.000006 if neomake#has_async_support() | |
1 0.000104 0.000006 let serialize = neomake#utils#GetSetting('serialize', maker, 0, [ft], bufnr) | |
1 0.000001 else | |
let serialize = 1 | |
endif | |
1 0.000002 if serialize && len(enabled_makers) > 0 | |
let next_opts = copy(options) | |
let next_opts.enabled_makers = enabled_makers | |
let next_opts.continuation = 1 | |
call extend(next_opts, { 'file_mode': file_mode, 'bufnr': bufnr, 'serialize_abort_on_error': neomake#utils#GetSetting('serialize_abort_on_error', maker, 0, [ft], bufnr), }) | |
let options.next = next_opts | |
endif | |
1 0.000002 let options.maker = maker | |
1 0.000001 try | |
1 0.004131 0.000028 let job_id = s:MakeJob(s:make_id, options) | |
1 0.000002 catch /^Neomake: / | |
let error = substitute(v:exception, '^Neomake: ', '', '') | |
call neomake#utils#ErrorMessage(error, {'make_id': s:make_id}) | |
continue | |
endtry | |
1 0.000001 if job_id != -1 | |
1 0.000004 call add(job_ids, job_id) | |
1 0.000001 endif | |
" If we are serializing makers, stop after the first one. The | |
" remaining makers will be processed in turn when this one is done. | |
1 0.000001 if serialize | |
break | |
endif | |
1 0.000002 endwhile | |
1 0.000002 return job_ids | |
FUNCTION neomake#has_async_support() | |
Called 4 times | |
Total time: 0.000016 | |
Self time: 0.000016 | |
count total (s) self (s) | |
4 0.000015 return has('nvim') || has('channel') && has('job') && has('patch-8.0.0027') | |
FUNCTION remote#host#RegisterClone() | |
Called 1 time | |
Total time: 0.000020 | |
Self time: 0.000020 | |
count total (s) self (s) | |
1 0.000005 if !has_key(s:hosts, a:orig_name) | |
throw 'No host named "'.a:orig_name.'" is registered' | |
endif | |
1 0.000006 let Factory = s:hosts[a:orig_name].factory | |
1 0.000006 let s:hosts[a:name] = { 'factory': Factory, 'channel': 0, 'initialized': 0, 'orig_name': a:orig_name } | |
FUNCTION 2() | |
Called 1 time | |
Total time: 0.000360 | |
Self time: 0.000126 | |
count total (s) self (s) | |
1 0.000002 let bufnr = a:0 ? a:1 : 0 | |
" Resolve exe/args, which might be a function or dictionary. | |
1 0.000004 if type(self.exe) == type(function('tr')) | |
let exe = call(self.exe, []) | |
elseif type(self.exe) == type({}) | |
let exe = call(self.exe.fn, [], self.exe) | |
else | |
1 0.000001 let exe = self.exe | |
1 0.000001 endif | |
1 0.000003 if type(self.args) == type(function('tr')) | |
let args = call(self.args, []) | |
elseif type(self.args) == type({}) | |
let args = call(self.args.fn, [], self.args) | |
else | |
1 0.000005 let args = copy(self.args) | |
1 0.000001 endif | |
1 0.000002 let args_is_list = type(args) == type([]) | |
1 0.000001 if args_is_list | |
1 0.000137 0.000007 call neomake#utils#ExpandArgs(args) | |
1 0.000001 endif | |
1 0.000106 0.000006 if bufnr && neomake#utils#GetSetting('append_file', self, 1, [self.ft], bufnr) | |
1 0.000002 let bufname = bufname(bufnr) | |
1 0.000002 if !len(bufname) | |
throw 'Neomake: no file name' | |
endif | |
1 0.000024 let bufname = fnamemodify(bufname, ':p') | |
1 0.000005 if !filereadable(bufname) | |
throw 'Neomake: file is not readable ('.bufname.')' | |
endif | |
1 0.000001 if args_is_list | |
1 0.000003 call add(args, bufname) | |
1 0.000001 else | |
let args .= ' '.fnameescape(bufname) | |
endif | |
1 0.000001 endif | |
1 0.000007 0.000003 if neomake#has_async_support() | |
1 0.000001 if args_is_list | |
1 0.000006 let argv = [exe] + args | |
1 0.000001 else | |
let argv = exe . (len(args) ? ' ' . args : '') | |
endif | |
1 0.000002 if !has('nvim') | |
if !args_is_list | |
" Have to use a shell to handle argv properly (Vim splits it | |
" at spaces). | |
let argv = [&shell, &shellcmdflag, argv] | |
endif | |
endif | |
1 0.000001 else | |
let argv = exe | |
if len(args) | |
if args_is_list | |
if neomake#utils#IsRunningWindows() | |
let argv .= ' '.join(args) | |
else | |
let argv .= ' '.join(map(args, 'shellescape(v:val)')) | |
endif | |
else | |
let argv .= ' '.args | |
endif | |
endif | |
endif | |
1 0.000001 return argv | |
FUNCTION neomake#utils#GetSortedFiletypes() | |
Called 3 times | |
Total time: 0.000061 | |
Self time: 0.000061 | |
count total (s) self (s) | |
3 0.000008 function! CompareFiletypes(ft1, ft2) abort | |
if neomake#utils#GetSupersetOf(a:ft1) ==# a:ft2 | |
return -1 | |
elseif neomake#utils#GetSupersetOf(a:ft2) ==# a:ft1 | |
return 1 | |
else | |
return 0 | |
endif | |
endfunction | |
3 0.000030 return sort(split(a:ft, '\.'), function('CompareFiletypes')) | |
FUNCTION remote#host#PluginsForHost() | |
Called 1 time | |
Total time: 0.000009 | |
Self time: 0.000009 | |
count total (s) self (s) | |
1 0.000003 if !has_key(s:plugins_for_host, a:host) | |
1 0.000002 let s:plugins_for_host[a:host] = [] | |
1 0.000001 end | |
1 0.000002 return s:plugins_for_host[a:host] | |
FUNCTION <SNR>36_tmpdir() | |
Called 2 times | |
Total time: 0.019386 | |
Self time: 0.019386 | |
count total (s) self (s) | |
2 0.000003 let tempdir = '' | |
2 0.000045 if (has('unix') || has('mac')) && executable('mktemp') && !has('win32unix') | |
" TODO: option "-t" to mktemp(1) is not portable | |
2 0.000007 let tmp = $TMPDIR !=# '' ? $TMPDIR : $TMP !=# '' ? $TMP : '/tmp' | |
2 0.019212 let out = split(system('mktemp -q -d ' . tmp . '/neomake-java-' . getpid() . '-XXXXXXXX'), "\n") | |
2 0.000019 if v:shell_error == 0 && len(out) == 1 | |
2 0.000010 let tempdir = out[0] | |
2 0.000003 endif | |
2 0.000001 endif | |
2 0.000004 if tempdir ==# '' | |
if has('win32') || has('win64') | |
let tempdir = $TEMP . s:psep . 'neomake-java-' . getpid() | |
elseif has('win32unix') | |
let tempdir = substitute(system('cygpath -m ' . s:shescape('/neomake-java-' . getpid())), "\n", '', 'g') | |
elseif $TMPDIR !=# '' | |
let tempdir = $TMPDIR . '/neomake-java-' . getpid() | |
else | |
let tempdir = '/tmp/neomake-java-' . getpid() | |
endif | |
try | |
call mkdir(tempdir, 'p', 0700) | |
catch /\m^Vim\%((\a\+)\)\=:E739/ | |
let tempdir = '.' | |
endtry | |
endif | |
2 0.000010 return tempdir | |
FUNCTION neomake#Make() | |
Called 1 time | |
Total time: 73.057440 | |
Self time: 0.000072 | |
count total (s) self (s) | |
1 0.000007 let options = a:0 ? { 'exit_callback': a:1 } : {} | |
1 0.000003 let options.file_mode = a:file_mode | |
1 0.000002 if a:file_mode | |
1 0.000003 let options.ft = &filetype | |
1 0.000001 endif | |
1 73.041299 0.000020 let options.enabled_makers = len(a:enabled_makers) ? a:enabled_makers : neomake#GetEnabledMakers(a:file_mode ? &filetype : '') | |
1 0.016121 0.000033 return s:Make(options) | |
FUNCTION neomake#utils#DebugMessage() | |
Called 54 times | |
Total time: 0.003922 | |
Self time: 0.000479 | |
count total (s) self (s) | |
54 0.003901 0.000458 call call('neomake#utils#LogMessage', [3] + a:000) | |
FUNCTION neomake#signs#ResetFile() | |
Called 1 time | |
Total time: 0.000033 | |
Self time: 0.000021 | |
count total (s) self (s) | |
1 0.000003 let s:sign_queue.file[a:bufnr] = {} | |
1 0.000012 0.000007 call neomake#signs#CleanOldSigns(a:bufnr, 'file') | |
1 0.000013 0.000006 call neomake#signs#Reset(a:bufnr, 'file') | |
1 0.000002 if has_key(s:neomake_sign_id.file, a:bufnr) | |
unlet s:neomake_sign_id.file[a:bufnr] | |
endif | |
FUNCTION neomake#statusline#ResetCountsForBuf() | |
Called 1 time | |
Total time: 0.000018 | |
Self time: 0.000018 | |
count total (s) self (s) | |
1 0.000004 let bufnr = a:0 ? a:1 : bufnr('%') | |
1 0.000004 let r = (get(s:loclist_counts, bufnr, {}) != {}) | |
1 0.000003 let s:loclist_counts[bufnr] = {} | |
1 0.000001 if r | |
call neomake#utils#hook('NeomakeCountsChanged', { 'file_mode': 1, 'bufnr': bufnr}) | |
endif | |
1 0.000001 return r | |
FUNCTION neomake#utils#LogMessage() | |
Called 55 times | |
Total time: 0.003524 | |
Self time: 0.003524 | |
count total (s) self (s) | |
55 0.000163 let verbose = get(g:, 'neomake_verbose', 1) | |
55 0.000132 let logfile = get(g:, 'neomake_logfile') | |
55 0.000206 if exists(':Log') != 2 && verbose < a:level && logfile is# '' | |
return | |
endif | |
55 0.000048 if a:0 | |
51 0.000071 let jobinfo = a:1 | |
51 0.000100 if has_key(jobinfo, 'id') | |
50 0.000284 let msg = printf('[%s.%d] %s', get(jobinfo, 'make_id', '-'), jobinfo.id, a:msg) | |
50 0.000040 else | |
1 0.000030 let msg = printf('[%s] %s', get(jobinfo, 'make_id', '?'), a:msg) | |
1 0.000001 endif | |
51 0.000029 else | |
4 0.000004 let jobinfo = {} | |
4 0.000005 let msg = a:msg | |
4 0.000002 endif | |
" Use Vader's log for messages during tests. | |
55 0.000143 if exists('*vader#log') && exists('g:neomake_test_messages') | |
let test_msg = '['.s:level_to_name[a:level].'] ['.s:timestr().']: '.msg | |
call vader#log(test_msg) | |
" Only keep jobinfo entries that are relevant for / used in the message. | |
let g:neomake_test_messages += [[a:level, a:msg, filter(copy(jobinfo), "index(['id', 'make_id'], v:key) != -1")]] | |
elseif verbose >= a:level | |
redraw | |
if a:level ==# 0 | |
echohl ErrorMsg | |
endif | |
if verbose > 2 | |
echom 'Neomake ['.s:timestr().']: '.msg | |
else | |
echom 'Neomake: '.msg | |
endif | |
if a:level ==# 0 | |
echohl None | |
endif | |
endif | |
55 0.000157 if type(logfile) ==# type('') && len(logfile) | |
let date = strftime('%Y-%m-%dT%H:%M:%S%z') | |
call writefile(['['.date.' @'.s:timestr().', '.s:level_to_name[a:level].'] '.msg], logfile, 'a') | |
endif | |
FUNCTION neomake#utils#LoudMessage() | |
Called 1 time | |
Total time: 0.000096 | |
Self time: 0.000015 | |
count total (s) self (s) | |
1 0.000096 0.000014 call call('neomake#utils#LogMessage', [2] + a:000) | |
FUNCTION <SNR>36_AddToClasspath() | |
Called 4 times | |
Total time: 0.000046 | |
Self time: 0.000046 | |
count total (s) self (s) | |
4 0.000024 if a:path ==# '' | |
2 0.000004 return a:classpath | |
endif | |
2 0.000010 return (a:classpath !=# '') ? a:classpath . s:ClassSep() . a:path : a:path | |
FUNCTION neomake#signs#Reset() | |
Called 1 time | |
Total time: 0.000007 | |
Self time: 0.000007 | |
count total (s) self (s) | |
1 0.000003 if has_key(s:placed_signs[a:type], a:bufnr) | |
let s:last_placed_signs[a:type][a:bufnr] = s:placed_signs[a:type][a:bufnr] | |
unlet s:placed_signs[a:type][a:bufnr] | |
endif | |
FUNCTION <SNR>36_GetGradleClasspath() | |
Called 2 times | |
Total time: 72.978494 | |
Self time: 71.505160 | |
count total (s) self (s) | |
2 0.000546 0.000086 let gradle = s:findFileInParent('build.gradle', expand('%:p:h', 1)) | |
2 0.000020 if s:has_gradle && filereadable(gradle) | |
2 0.000015 if !has_key(g:neomake_java_javac_gradle_ftime, gradle) || g:neomake_java_javac_gradle_ftime[gradle] != getftime(gradle) | |
1 0.000002 try | |
1 0.000015 let f = tempname() | |
1 0.000002 if s:is_windows | |
let gradle_cmd = '.\gradlew.bat' | |
else | |
1 0.000002 let gradle_cmd = './gradlew' | |
1 0.000001 endif | |
1 0.000233 call writefile(["allprojects{apply from: '" . g:neomake_java_checker_home . s:psep. 'java'. s:psep. "classpath.gradle'}"], f) | |
1 71.503611 let ret = system(gradle_cmd . ' -q -I ' . shellescape(f) . ' classpath' ) | |
1 0.000013 if v:shell_error == 0 | |
1 0.000454 let cp = filter(split(ret, "\n"), "v:val =~# '^CLASSPATH:'")[0][10:] | |
1 0.000071 if filereadable(getcwd() . s:psep . 'build.gradle') | |
1 1.472909 0.000043 let out_putdir = s:GlobPathList(getcwd(), join( ['**', 'build', 'intermediates', 'classes', 'debug'], s:psep), 0) | |
2 0.000008 for classes in out_putdir | |
1 0.000052 0.000044 let cp .= s:ClassSep() . classes | |
1 0.000001 endfor | |
1 0.000001 endif | |
1 0.000001 else | |
let cp = '' | |
endif | |
1 0.000001 catch | |
finally | |
1 0.000414 call delete(f) | |
1 0.000002 endtry | |
1 0.000012 let g:neomake_java_javac_gradle_ftime[gradle] = getftime(gradle) | |
1 0.000007 let g:neomake_java_javac_gradle_classpath[gradle] = cp | |
1 0.000001 endif | |
2 0.000039 return g:neomake_java_javac_gradle_classpath[gradle] | |
endif | |
return '' | |
FUNCTION <SNR>35_nvim_output_handler() | |
Called 46 times | |
Total time: 0.001750 | |
Self time: 0.001750 | |
count total (s) self (s) | |
" @vimlint(EVL108, 1) | |
46 0.000204 if has('nvim-0.2.0') | |
call s:output_handler(a:job_id, a:data, a:event_type) | |
return | |
endif | |
" @vimlint(EVL108, 0) | |
46 0.000127 let jobinfo = s:jobs[a:job_id] | |
46 0.000126 let args = [a:job_id, a:data, a:event_type] | |
46 0.000126 call add(s:nvim_output_handler_queue, args) | |
46 0.000109 if !exists('jobinfo._nvim_in_handler') | |
43 0.000085 let jobinfo._nvim_in_handler = 1 | |
43 0.000031 else | |
3 0.000004 let jobinfo._nvim_in_handler += 1 | |
3 0.000002 endif | |
46 0.000115 if !exists('s:nvim_output_handler_timer') | |
43 0.000346 let s:nvim_output_handler_timer = timer_start(0, function('s:nvim_output_handler_cb')) | |
43 0.000033 endif | |
FUNCTION <SNR>15_Highlight_Matching_Pair() | |
Called 10 times | |
Total time: 0.000614 | |
Self time: 0.000614 | |
count total (s) self (s) | |
" Remove any previous match. | |
10 0.000025 if exists('w:paren_hl_on') && w:paren_hl_on | |
silent! call matchdelete(3) | |
let w:paren_hl_on = 0 | |
endif | |
" Avoid that we remove the popup menu. | |
" Return when there are no colors (looks like the cursor jumps). | |
10 0.000025 if pumvisible() || (&t_Co < 8 && !has("gui_running")) | |
return | |
endif | |
" Get the character under the cursor and check if it's in 'matchpairs'. | |
10 0.000019 let c_lnum = line('.') | |
10 0.000017 let c_col = col('.') | |
10 0.000011 let before = 0 | |
10 0.000019 let text = getline(c_lnum) | |
10 0.000123 let matches = matchlist(text, '\(.\)\=\%'.c_col.'c\(.\=\)') | |
10 0.000015 if empty(matches) | |
let [c_before, c] = ['', ''] | |
else | |
10 0.000034 let [c_before, c] = matches[1:2] | |
10 0.000007 endif | |
10 0.000087 let plist = split(&matchpairs, '.\zs[:,]') | |
10 0.000022 let i = index(plist, c) | |
10 0.000009 if i < 0 | |
" not found, in Insert mode try character before the cursor | |
10 0.000024 if c_col > 1 && (mode() == 'i' || mode() == 'R') | |
let before = strlen(c_before) | |
let c = c_before | |
let i = index(plist, c) | |
endif | |
10 0.000007 if i < 0 | |
" not found, nothing to do | |
10 0.000007 return | |
endif | |
endif | |
" Figure out the arguments for searchpairpos(). | |
if i % 2 == 0 | |
let s_flags = 'nW' | |
let c2 = plist[i + 1] | |
else | |
let s_flags = 'nbW' | |
let c2 = c | |
let c = plist[i - 1] | |
endif | |
if c == '[' | |
let c = '\[' | |
let c2 = '\]' | |
endif | |
" Find the match. When it was just before the cursor move it there for a | |
" moment. | |
if before > 0 | |
let has_getcurpos = exists("*getcurpos") | |
if has_getcurpos | |
" getcurpos() is more efficient but doesn't exist before 7.4.313. | |
let save_cursor = getcurpos() | |
else | |
let save_cursor = winsaveview() | |
endif | |
call cursor(c_lnum, c_col - before) | |
endif | |
" Build an expression that detects whether the current cursor position is in | |
" certain syntax types (string, comment, etc.), for use as searchpairpos()'s | |
" skip argument. | |
" We match "escape" for special items, such as lispEscapeSpecial. | |
let s_skip = '!empty(filter(map(synstack(line("."), col(".")), ''synIDattr(v:val, "name")''), ' . '''v:val =~? "string\\|character\\|singlequote\\|escape\\|comment"''))' | |
" If executing the expression determines that the cursor is currently in | |
" one of the syntax types, then we want searchpairpos() to find the pair | |
" within those syntax types (i.e., not skip). Otherwise, the cursor is | |
" outside of the syntax types and s_skip should keep its value so we skip any | |
" matching pair inside the syntax types. | |
execute 'if' s_skip '| let s_skip = 0 | endif' | |
" Limit the search to lines visible in the window. | |
let stoplinebottom = line('w$') | |
let stoplinetop = line('w0') | |
if i % 2 == 0 | |
let stopline = stoplinebottom | |
else | |
let stopline = stoplinetop | |
endif | |
" Limit the search time to 300 msec to avoid a hang on very long lines. | |
" This fails when a timeout is not supported. | |
if mode() == 'i' || mode() == 'R' | |
let timeout = exists("b:matchparen_insert_timeout") ? b:matchparen_insert_timeout : g:matchparen_insert_timeout | |
else | |
let timeout = exists("b:matchparen_timeout") ? b:matchparen_timeout : g:matchparen_timeout | |
endif | |
try | |
let [m_lnum, m_col] = searchpairpos(c, '', c2, s_flags, s_skip, stopline, timeout) | |
catch /E118/ | |
" Can't use the timeout, restrict the stopline a bit more to avoid taking | |
" a long time on closed folds and long lines. | |
" The "viewable" variables give a range in which we can scroll while | |
" keeping the cursor at the same position. | |
" adjustedScrolloff accounts for very large numbers of scrolloff. | |
let adjustedScrolloff = min([&scrolloff, (line('w$') - line('w0')) / 2]) | |
let bottom_viewable = min([line('$'), c_lnum + &lines - adjustedScrolloff - 2]) | |
let top_viewable = max([1, c_lnum-&lines+adjustedScrolloff + 2]) | |
" one of these stoplines will be adjusted below, but the current values are | |
" minimal boundaries within the current window | |
if i % 2 == 0 | |
if has("byte_offset") && has("syntax_items") && &smc > 0 | |
let stopbyte = min([line2byte("$"), line2byte(".") + col(".") + &smc * 2]) | |
let stopline = min([bottom_viewable, byte2line(stopbyte)]) | |
else | |
let stopline = min([bottom_viewable, c_lnum + 100]) | |
endif | |
let stoplinebottom = stopline | |
else | |
if has("byte_offset") && has("syntax_items") && &smc > 0 | |
let stopbyte = max([1, line2byte(".") + col(".") - &smc * 2]) | |
let stopline = max([top_viewable, byte2line(stopbyte)]) | |
else | |
let stopline = max([top_viewable, c_lnum - 100]) | |
endif | |
let stoplinetop = stopline | |
endif | |
let [m_lnum, m_col] = searchpairpos(c, '', c2, s_flags, s_skip, stopline) | |
endtry | |
if before > 0 | |
if has_getcurpos | |
call setpos('.', save_cursor) | |
else | |
call winrestview(save_cursor) | |
endif | |
endif | |
" If a match is found setup match highlighting. | |
if m_lnum > 0 && m_lnum >= stoplinetop && m_lnum <= stoplinebottom | |
if exists('*matchaddpos') | |
call matchaddpos('MatchParen', [[c_lnum, c_col - before], [m_lnum, m_col]], 10, 3) | |
else | |
exe '3match MatchParen /\(\%' . c_lnum . 'l\%' . (c_col - before) . 'c\)\|\(\%' . m_lnum . 'l\%' . m_col . 'c\)/' | |
endif | |
let w:paren_hl_on = 1 | |
endif | |
FUNCTION <SNR>36_shescape() | |
Called 2 times | |
Total time: 0.000062 | |
Self time: 0.000062 | |
count total (s) self (s) | |
2 0.000059 return a:string =~# '\m^[A-Za-z0-9_/.-]\+$' ? a:string : shellescape(a:string) | |
FUNCTION neomake#highlights#ResetFile() | |
Called 1 time | |
Total time: 0.000066 | |
Self time: 0.000025 | |
count total (s) self (s) | |
1 0.000047 0.000008 call s:InitBufHighlights('file', a:buf) | |
1 0.000005 0.000003 call neomake#highlights#ShowHighlights() | |
FUNCTION <SNR>36_ClassSep() | |
Called 1 time | |
Total time: 0.000008 | |
Self time: 0.000008 | |
count total (s) self (s) | |
1 0.000007 return (s:is_windows || has('win32unix')) ? ';' : ':' | |
FUNCTION <SNR>35_ProcessJobOutput() | |
Called 1 time | |
Total time: 0.004275 | |
Self time: 0.004041 | |
count total (s) self (s) | |
1 0.000002 let maker = a:jobinfo.maker | |
1 0.000002 let file_mode = a:jobinfo.file_mode | |
1 0.000068 0.000007 call neomake#utils#DebugMessage(printf( '%s: processing %d lines of output.', maker.name, len(a:lines)), a:jobinfo) | |
1 0.000002 if has_key(maker, 'mapexpr') | |
let l:neomake_bufname = bufname(a:jobinfo.bufnr) | |
" @vimlint(EVL102, 1, l:neomake_bufdir) | |
let l:neomake_bufdir = fnamemodify(neomake_bufname, ':h') | |
" @vimlint(EVL102, 1, l:neomake_output_source) | |
let l:neomake_output_source = a:source | |
call map(a:lines, maker.mapexpr) | |
endif | |
1 0.000003 let olderrformat = &errorformat | |
1 0.000009 let &errorformat = maker.errorformat | |
1 0.000001 try | |
1 0.000001 if file_mode | |
1 0.000003 let prev_list = getloclist(0) | |
1 0.003959 laddexpr a:lines | |
1 0.000001 else | |
let prev_list = getqflist() | |
caddexpr a:lines | |
endif | |
1 0.000127 0.000012 let counts_changed = s:AddExprCallback(a:jobinfo, len(prev_list)) | |
1 0.000001 if !counts_changed | |
1 0.000004 let counts_changed = (file_mode && getloclist(0) != prev_list) || (!file_mode && getqflist() != prev_list) | |
1 0.000001 endif | |
1 0.000001 if counts_changed | |
call neomake#utils#hook('NeomakeCountsChanged', { 'file_mode': file_mode, 'bufnr': a:jobinfo.bufnr, }, a:jobinfo) | |
endif | |
1 0.000001 finally | |
1 0.000004 let &errorformat = olderrformat | |
1 0.000001 endtry | |
1 0.000021 0.000006 call s:HandleLoclistQflistDisplay(a:jobinfo.file_mode) | |
1 0.000048 0.000004 call neomake#EchoCurrentError() | |
FUNCTION <SNR>35_GetTabWinForMakeId() | |
Called 1 time | |
Total time: 0.000040 | |
Self time: 0.000028 | |
count total (s) self (s) | |
1 0.000011 for t in [tabpagenr()] + range(1, tabpagenr()-1) + range(tabpagenr()+1, tabpagenr('$')) | |
1 0.000004 for w in range(1, tabpagewinnr(t, '$')) | |
1 0.000020 0.000008 if index(s:gettabwinvar(t, w, 'neomake_make_ids', []), a:make_id) != -1 | |
1 0.000002 return [t, w] | |
endif | |
endfor | |
endfor | |
return [-1, -1] | |
FUNCTION remote#host#RegisterPlugin() | |
Called 1 time | |
Total time: 0.000074 | |
Self time: 0.000059 | |
count total (s) self (s) | |
1 0.000019 0.000011 let plugins = remote#host#PluginsForHost(a:host) | |
1 0.000002 for plugin in plugins | |
if plugin.path == a:path | |
throw 'Plugin "'.a:path.'" is already registered' | |
endif | |
endfor | |
1 0.000013 0.000007 if has_key(s:hosts, a:host) && remote#host#IsRunning(a:host) | |
" For now we won't allow registration of plugins when the host is already | |
" running. | |
throw 'Host "'.a:host.'" is already running' | |
endif | |
1 0.000001 for spec in a:specs | |
let type = spec.type | |
let name = spec.name | |
let sync = spec.sync | |
let opts = spec.opts | |
let rpc_method = a:path | |
if type == 'command' | |
let rpc_method .= ':command:'.name | |
call remote#define#CommandOnHost(a:host, rpc_method, sync, name, opts) | |
elseif type == 'autocmd' | |
" Since multiple handlers can be attached to the same autocmd event by a | |
" single plugin, we need a way to uniquely identify the rpc method to | |
" call. The solution is to append the autocmd pattern to the method | |
" name(This still has a limit: one handler per event/pattern combo, but | |
" there's no need to allow plugins define multiple handlers in that case) | |
let rpc_method .= ':autocmd:'.name.':'.get(opts, 'pattern', '*') | |
call remote#define#AutocmdOnHost(a:host, rpc_method, sync, name, opts) | |
elseif type == 'function' | |
let rpc_method .= ':function:'.name | |
call remote#define#FunctionOnHost(a:host, rpc_method, sync, name, opts) | |
else | |
echoerr 'Invalid declaration type: '.type | |
endif | |
endfor | |
1 0.000004 call add(plugins, {'path': a:path, 'specs': a:specs}) | |
FUNCTION provider#pythonx#Detect() | |
Called 1 time | |
Total time: 0.048033 | |
Self time: 0.000098 | |
count total (s) self (s) | |
1 0.000010 let host_var = (a:major_ver == 2) ? 'g:python_host_prog' : 'g:python3_host_prog' | |
1 0.000004 let skip_var = (a:major_ver == 2) ? 'g:python_host_skip_check' : 'g:python3_host_skip_check' | |
1 0.000007 let skip = exists(skip_var) ? {skip_var} : 0 | |
1 0.000004 if exists(host_var) | |
" Disable auto detection. | |
let [result, err] = s:check_interpreter({host_var}, a:major_ver, skip) | |
if result | |
return [{host_var}, err] | |
endif | |
return ['', 'provider/pythonx: Could not load Python ' . a:major_ver . ' from ' . host_var . ': ' . err] | |
endif | |
1 0.000006 let prog_suffixes = (a:major_ver == 2) ? ['2', '2.7', '2.6', ''] : ['3', '3.5', '3.4', '3.3', ''] | |
1 0.000002 let errors = [] | |
1 0.000013 for prog in map(prog_suffixes, "'python' . v:val") | |
1 0.047958 0.000024 let [result, err] = s:check_interpreter(prog, a:major_ver, skip) | |
1 0.000001 if result | |
1 0.000003 return [prog, err] | |
endif | |
" Accumulate errors in case we don't find | |
" any suitable Python interpreter. | |
call add(errors, err) | |
endfor | |
" No suitable Python interpreter found. | |
return ['', 'provider/pythonx: Could not load Python ' . a:major_ver . ":\n" . join(errors, "\n")] | |
FUNCTION neomake#makers#ft#java#javac() | |
Called 2 times | |
Total time: 73.048697 | |
Self time: 0.000783 | |
count total (s) self (s) | |
2 0.000007 let javac_opts = extend([], g:neomake_java_javac_options) | |
2 0.000003 let output_dir = '' | |
2 0.000003 if g:neomake_java_javac_delete_output | |
2 0.019416 0.000030 let output_dir = s:tmpdir() | |
2 0.000133 0.000071 let javac_opts = extend(javac_opts, ['-d', s:shescape(output_dir)]) | |
2 0.000002 endif | |
2 0.000009 let javac_classpath = get(g:, 'neomake_java_javac_classpath', '') | |
2 0.000008 if s:has_maven && g:neomake_java_javac_autoload_maven_classpath && empty(javac_classpath) | |
2 0.000003 if !g:neomake_java_javac_delete_output | |
let javac_opts = extend(javac_opts, ['-d', s:shescape(s:MavenOutputDirectory())]) | |
endif | |
2 0.000850 0.000057 let javac_classpath = s:AddToClasspath(javac_classpath, s:GetMavenClasspath()) | |
2 0.000002 endif | |
2 0.000008 if s:has_gradle && g:neomake_java_javac_autoload_gradle_classpath && empty(javac_classpath) | |
2 0.000003 if !g:neomake_java_javac_delete_output | |
let javac_opts = extend(javac_opts, ['-d', s:shescape(s:GradleOutputDirectory())]) | |
endif | |
2 72.978596 0.000070 let javac_classpath = s:AddToClasspath(javac_classpath, s:GetGradleClasspath()) | |
2 0.000001 endif | |
2 0.049512 0.000364 if (has('python') || has('python3')) && empty(javac_classpath) | |
let classpathFile = fnamemodify(findfile('.classpath', escape(expand('.'), '*[]?{}, ') . ';'), ':p') | |
if !empty(classpathFile) && filereadable(classpathFile) | |
let javac_classpath = s:ReadClassPathFile(classpathFile) | |
endif | |
endif | |
2 0.000006 if javac_classpath !=# '' | |
2 0.000034 let javac_opts = extend(javac_opts, ['-cp', javac_classpath]) | |
2 0.000001 endif | |
2 0.000023 return { 'args': javac_opts, 'exe': g:neomake_java_javac_executable, 'errorformat': '%E%f:%l: error: %m,'. '%W%f:%l: warning: %m,'. '%E%f:%l: %m,'. '%Z%p^,'. '%-G%.%#' } | |
FUNCTION <SNR>35_nvim_output_handler_cb() | |
Called 43 times | |
Total time: 0.009534 | |
Self time: 0.002788 | |
count total (s) self (s) | |
89 0.000229 while len(s:nvim_output_handler_queue) | |
46 0.000149 let args = remove(s:nvim_output_handler_queue, 0) | |
46 0.000106 let job_id = args[0] | |
46 0.000099 let jobinfo = s:jobs[job_id] | |
46 0.007312 0.000566 call call('s:output_handler', args) | |
46 0.000082 let jobinfo._nvim_in_handler -= 1 | |
46 0.000056 if !jobinfo._nvim_in_handler | |
" Trigger previously delayed exit handler. | |
43 0.000063 unlet jobinfo._nvim_in_handler | |
43 0.000126 if exists('jobinfo._exited_while_in_handler') | |
call neomake#utils#DebugMessage('Trigger delayed exit', jobinfo) | |
call s:exit_handler(jobinfo.id, jobinfo._exited_while_in_handler, 'exit') | |
endif | |
43 0.000028 endif | |
46 0.000045 endwhile | |
43 0.000076 unlet! s:nvim_output_handler_timer | |
FUNCTION <SNR>35_MakeJob() | |
Called 1 time | |
Total time: 0.004102 | |
Self time: 0.003643 | |
count total (s) self (s) | |
1 0.000002 let job_id = s:job_id | |
1 0.000001 let s:job_id += 1 | |
1 0.000002 let maker = a:options.maker | |
1 0.000008 let jobinfo = { 'name': 'neomake_'.job_id, 'bufnr': a:options.bufnr, 'file_mode': a:options.file_mode, 'maker': maker, 'make_id': a:make_id, 'next': get(a:options, 'next', {}), } | |
" Call .fn function in maker object, if any. | |
1 0.000002 if has_key(maker, 'fn') | |
" TODO: Allow to throw and/or return 0 to abort/skip?! | |
let maker = call(maker.fn, [jobinfo], maker) | |
endif | |
1 0.000005 let cwd = get(maker, 'cwd', s:make_options[a:make_id].cwd) | |
1 0.000001 if len(cwd) | |
1 0.000012 let old_wd = getcwd() | |
1 0.000007 let cwd = expand(cwd, 1) | |
1 0.000001 try | |
1 0.000043 exe 'cd' fnameescape(cwd) | |
" Tests fail with E344, but in reality it is E472?! | |
" If uncaught, both are shown. Let's just catch every error here. | |
1 0.000001 catch | |
call neomake#utils#ErrorMessage( maker.name.": could not change to maker's cwd (".cwd.'): ' .v:exception, jobinfo) | |
return -1 | |
endtry | |
1 0.000001 endif | |
1 0.000001 try | |
1 0.000001 let error = '' | |
1 0.000369 0.000009 let argv = maker.get_argv(jobinfo.file_mode ? jobinfo.bufnr : 0) | |
1 0.000006 0.000002 if neomake#has_async_support() | |
1 0.000002 if has('nvim') | |
1 0.000009 let opts = { 'on_stdout': function('s:nvim_output_handler'), 'on_stderr': function('s:nvim_output_handler'), 'on_exit': function('s:exit_handler') } | |
1 0.000001 try | |
1 0.000253 0.000157 call neomake#utils#LoudMessage(printf( 'Starting async job: %s', string(argv)), jobinfo) | |
1 0.003212 let job = jobstart(argv, opts) | |
1 0.000005 catch | |
let error = printf('Failed to start Neovim job: %s: %s', string(argv), v:exception) | |
endtry | |
1 0.000006 if empty(error) | |
1 0.000001 if job == 0 | |
let error = printf('Failed to start Neovim job: %s: %s', 'Job table is full or invalid arguments given', string(argv)) | |
elseif job == -1 | |
let error = printf('Failed to start Neovim job: %s: %s', 'Executable not found', string(argv)) | |
else | |
1 0.000002 let jobinfo.id = job | |
1 0.000007 let s:jobs[jobinfo.id] = jobinfo | |
1 0.000001 endif | |
1 0.000001 endif | |
1 0.000001 else | |
" vim-async. | |
let opts = { 'out_cb': function('s:vim_output_handler_stdout'), 'err_cb': function('s:vim_output_handler_stderr'), 'close_cb': function('s:vim_exit_handler'), 'mode': 'raw', } | |
try | |
call neomake#utils#LoudMessage(printf( 'Starting async job: %s', string(argv)), jobinfo) | |
let job = job_start(argv, opts) | |
" Get this as early as possible! | |
let jobinfo.id = ch_info(job)['id'] | |
let jobinfo.vim_job = job | |
let s:jobs[jobinfo.id] = jobinfo | |
catch | |
let error = printf('Failed to start Vim job: %s: %s', argv, v:exception) | |
endtry | |
if empty(error) | |
call neomake#utils#DebugMessage(printf('Vim job: %s', string(job_info(job))), jobinfo) | |
call neomake#utils#DebugMessage(printf('Vim channel: %s', string(ch_info(job))), jobinfo) | |
endif | |
endif | |
" Bail out on errors. | |
1 0.000002 if len(error) | |
call neomake#utils#ErrorMessage(error, jobinfo) | |
call s:handle_next_makers(jobinfo, 122) | |
return -1 | |
endif | |
1 0.000002 let r = jobinfo.id | |
1 0.000001 else | |
call neomake#utils#DebugMessage('Running synchronously') | |
call neomake#utils#LoudMessage('Starting: '.argv, jobinfo) | |
let jobinfo.id = job_id | |
let s:jobs[job_id] = jobinfo | |
call s:output_handler(job_id, split(system(argv), '\r\?\n', 1), 'stdout') | |
call s:exit_handler(job_id, v:shell_error, 'exit') | |
let r = -1 | |
endif | |
1 0.000001 finally | |
1 0.000002 if exists('old_wd') | |
1 0.000050 exe 'cd' fnameescape(old_wd) | |
1 0.000001 endif | |
1 0.000001 endtry | |
1 0.000002 return r | |
FUNCTION <SNR>29_InitBufHighlights() | |
Called 1 time | |
Total time: 0.000039 | |
Self time: 0.000039 | |
count total (s) self (s) | |
1 0.000001 if s:nvim_api | |
1 0.000002 if !bufexists(a:buf) | |
" The buffer might be wiped by now: prevent 'Invalid buffer id'. | |
return | |
endif | |
1 0.000003 if has_key(s:highlights[a:type], a:buf) | |
call nvim_buf_clear_highlight(a:buf, s:highlights[a:type][a:buf], 0, -1) | |
endif | |
1 0.000024 let s:highlights[a:type][a:buf] = nvim_buf_add_highlight(a:buf, 0, '', 0, 0, -1) | |
1 0.000001 else | |
let s:highlights[a:type][a:buf] = { 'NeomakeError': [], 'NeomakeWarning': [], 'NeomakeInfo': [], 'NeomakeMessage': [] } | |
endif | |
FUNCTION neomake#utils#AvailableMakers() | |
Called 1 time | |
Total time: 73.039677 | |
Self time: 0.000032 | |
count total (s) self (s) | |
1 73.039676 0.000032 return filter(copy(a:makers), 'neomake#utils#MakerIsAvailable(a:ft, v:val)') | |
FUNCTION <SNR>35_has_pending_output() | |
Called 1 time | |
Total time: 0.000010 | |
Self time: 0.000010 | |
count total (s) self (s) | |
1 0.000004 if index(get(s:buffer_job_output, a:jobinfo.bufnr, []), a:jobinfo.id) != -1 | |
return 1 | |
endif | |
1 0.000002 if has_key(s:project_job_output, a:jobinfo.id) | |
return 1 | |
endif | |
1 0.000001 return 0 | |
FUNCTION neomake#ProcessPendingOutput() | |
Called 1 time | |
Total time: 0.000155 | |
Self time: 0.000065 | |
count total (s) self (s) | |
1 0.000065 0.000030 if !s:CanProcessJobOutput() | |
return | |
endif | |
1 0.000063 0.000012 call neomake#ProcessCurrentWindow() | |
1 0.000003 if len(s:project_job_output) | |
call s:ProcessPendingOutput(s:project_job_output) | |
if g:neomake_place_signs | |
call neomake#signs#PlaceVisibleSigns() | |
endif | |
endif | |
1 0.000009 0.000005 call neomake#highlights#ShowHighlights() | |
FUNCTION <SNR>35_gettabwinvar() | |
Called 4 times | |
Total time: 0.000038 | |
Self time: 0.000038 | |
count total (s) self (s) | |
" Wrapper around gettabwinvar that has no default (Vim in Travis). | |
4 0.000013 let r = gettabwinvar(a:t, a:w, a:v) | |
4 0.000005 if r is# '' | |
2 0.000002 unlet r | |
2 0.000002 let r = a:d | |
2 0.000001 endif | |
4 0.000004 return r | |
FUNCTION <SNR>35_handle_next_makers() | |
Called 1 time | |
Total time: 0.000774 | |
Self time: 0.000023 | |
count total (s) self (s) | |
1 0.000001 if len(a:jobinfo.next) | |
let next = a:jobinfo.next | |
let next_makers = '['.join(map(copy(next.enabled_makers), 'v:val.name'), ', ').']' | |
if (a:status != 0 && index([122, 127], a:status) == -1 && next.serialize_abort_on_error) | |
call neomake#utils#LoudMessage('Aborting next makers '.next_makers.' (status '.a:status.')') | |
else | |
call neomake#utils#DebugMessage(printf('next makers: %s', next_makers), a:jobinfo) | |
call s:Make(next) | |
endif | |
endif | |
1 0.000002 if !get(a:jobinfo, 'pending_output', 0) | |
1 0.000758 0.000007 call s:CleanJobinfo(a:jobinfo) | |
1 0.000001 endif | |
FUNCTION neomake#utils#ExpandArgs() | |
Called 1 time | |
Total time: 0.000130 | |
Self time: 0.000130 | |
count total (s) self (s) | |
" Expand args that start with '%' only. | |
" It handles '%:r.o', by splitting it into '%:r' and '.o', and only | |
" expanding the first part. | |
1 0.000128 call map(a:args, "v:val =~# '\\(^%$\\|^%:\\l\\+\\)' ? join(map(split(v:val, '^%:\\l\\+\\zs'), 'v:key == 0 ? expand(v:val) : v:val'), '') : v:val") | |
FUNCTION neomake#CleanOldFileSignsAndErrors() | |
Called 1 time | |
Total time: 0.000205 | |
Self time: 0.000078 | |
count total (s) self (s) | |
1 0.000008 let bufnr = a:0 ? a:1 : bufnr('%') | |
1 0.000010 if get(s:need_errors_cleaning['file'], bufnr, 0) | |
1 0.000004 if has_key(s:current_errors['file'], bufnr) | |
unlet s:current_errors['file'][bufnr] | |
endif | |
1 0.000004 unlet s:need_errors_cleaning['file'][bufnr] | |
1 0.000100 0.000034 call neomake#highlights#ResetFile(bufnr) | |
1 0.000061 0.000004 call neomake#utils#DebugMessage('File-level errors cleaned in buffer '.bufnr) | |
1 0.000001 endif | |
1 0.000001 if g:neomake_place_signs | |
1 0.000008 0.000004 call neomake#signs#CleanOldSigns(bufnr, 'file') | |
1 0.000001 endif | |
FUNCTION neomake#ProcessCurrentWindow() | |
Called 1 time | |
Total time: 0.000051 | |
Self time: 0.000029 | |
count total (s) self (s) | |
1 0.000031 0.000009 if s:CanProcessJobOutput() | |
1 0.000008 let outputs = get(w:, 'neomake_jobs_output', {}) | |
1 0.000003 if len(outputs) | |
unlet w:neomake_jobs_output | |
call s:ProcessPendingOutput(outputs) | |
endif | |
1 0.000001 endif | |
FUNCTION neomake#compat#getbufvar() | |
Called 42 times | |
Total time: 0.000100 | |
Self time: 0.000100 | |
count total (s) self (s) | |
42 0.000088 return getbufvar(a:buf, a:key, a:def) | |
FUNCTION neomake#utils#GetSetting() | |
Called 12 times | |
Total time: 0.001497 | |
Self time: 0.001335 | |
count total (s) self (s) | |
12 0.000041 let maker_name = has_key(a:maker, 'name') ? a:maker.name : '' | |
36 0.000059 for ft in a:fts + [''] | |
" Look through the override vars for a filetype maker, like | |
" neomake_scss_sasslint_exe (should be a string), and | |
" neomake_scss_sasslint_args (should be a list). | |
24 0.000164 let part = join(filter([ft, maker_name], 'len(v:val)'), '_') | |
24 0.000032 if !len(part) | |
break | |
endif | |
24 0.000065 let config_var = 'neomake_'.part.'_'.a:key | |
24 0.000581 0.000458 if has_key(g:, config_var) || neomake#compat#getbufvar(a:bufnr, config_var, s:unset) isnot s:unset | |
break | |
endif | |
24 0.000016 endfor | |
12 0.000023 if exists('config_var') | |
12 0.000068 0.000042 let bufcfgvar = neomake#compat#getbufvar(a:bufnr, config_var, s:unset) | |
12 0.000013 if bufcfgvar isnot s:unset | |
return copy(bufcfgvar) | |
elseif has_key(g:, config_var) | |
return copy(get(g:, config_var)) | |
endif | |
12 0.000006 endif | |
12 0.000019 if has_key(a:maker, a:key) | |
6 0.000009 return a:maker[a:key] | |
endif | |
" Look for 'neomake_'.key in the buffer and global namespace. | |
6 0.000035 0.000023 let bufvar = neomake#compat#getbufvar(a:bufnr, 'neomake_'.a:key, s:unset) | |
6 0.000006 if bufvar isnot s:unset | |
return bufvar | |
endif | |
6 0.000011 if has_key(g:, 'neomake_'.a:key) | |
return get(g:, 'neomake_'.a:key) | |
endif | |
6 0.000006 return a:default | |
FUNCTION neomake#highlights#ShowHighlights() | |
Called 3 times | |
Total time: 0.000009 | |
Self time: 0.000009 | |
count total (s) self (s) | |
3 0.000004 if s:nvim_api | |
3 0.000003 return | |
endif | |
call s:ResetHighlights() | |
let l:buf = bufnr('%') | |
for l:type in ['file', 'project'] | |
for l:hi in keys(get(s:highlights[l:type], l:buf, {})) | |
if exists('*matchaddpos') | |
call add(w:current_highlights, matchaddpos(l:hi, s:highlights[l:type][l:buf][l:hi])) | |
else | |
for l:loc in s:highlights[l:type][l:buf][l:hi] | |
if len(l:loc) == 1 | |
call add(w:current_highlights, matchadd(l:hi, '\%' . l:loc[0] . 'l')) | |
else | |
call add(w:current_highlights, matchadd(l:hi, '\%' . l:loc[0] . 'l\%' . l:loc[1] . 'c.\{' . l:loc[2] . '}')) | |
endif | |
endfor | |
endif | |
endfor | |
endfor | |
FUNCTION remote#host#IsRunning() | |
Called 1 time | |
Total time: 0.000006 | |
Self time: 0.000006 | |
count total (s) self (s) | |
1 0.000002 if !has_key(s:hosts, a:name) | |
throw 'No host named "'.a:name.'" is registered' | |
endif | |
1 0.000002 return s:hosts[a:name].channel != 0 | |
FUNCTION neomake#EchoCurrentError() | |
Called 2 times | |
Total time: 0.000117 | |
Self time: 0.000117 | |
count total (s) self (s) | |
" a:1 might be a timer from the VimResized event. | |
2 0.000004 let force = a:0 ? a:1 : 0 | |
2 0.000005 if !force && !get(g:, 'neomake_echo_current_error', 1) | |
return | |
endif | |
2 0.000004 let buf = bufnr('%') | |
2 0.000003 let ln = line('.') | |
2 0.000003 let ln_errors = [] | |
6 0.000010 for maker_type in ['file', 'project'] | |
4 0.000018 let buf_errors = get(s:current_errors[maker_type], buf, {}) | |
4 0.000012 let ln_errors += get(buf_errors, ln, []) | |
4 0.000004 endfor | |
2 0.000005 if empty(ln_errors) | |
2 0.000005 if exists('s:neomake_last_echoed_error') | |
echon '' | |
unlet s:neomake_last_echoed_error | |
endif | |
2 0.000002 return | |
endif | |
if len(ln_errors) > 1 | |
let ln_errors = copy(ln_errors) | |
call sort(ln_errors, function('neomake#utils#sort_by_col')) | |
endif | |
let error_entry = ln_errors[0] | |
if !force && exists('s:neomake_last_echoed_error') && s:neomake_last_echoed_error == error_entry | |
return | |
endif | |
let s:neomake_last_echoed_error = error_entry | |
let message = error_entry.maker_name.': '.error_entry.text | |
call neomake#utils#WideMessage(message) | |
FUNCTION neomake#utils#hook() | |
Called 2 times | |
Total time: 0.000252 | |
Self time: 0.000086 | |
count total (s) self (s) | |
2 0.000006 if exists('#User#'.a:event) | |
let jobinfo = a:0 ? a:1 : ( has_key(a:context, 'jobinfo') ? a:context.jobinfo : {}) | |
let g:neomake_hook_context = a:context | |
let args = ['Calling User autocmd '.a:event .' with context: '.string(map(copy(a:context), "v:key == 'jobinfo' ? '…' : v:val"))] | |
if len(jobinfo) | |
let args += [jobinfo] | |
endif | |
call call('neomake#utils#LoudMessage', args) | |
if v:version >= 704 || (v:version == 703 && has('patch442')) | |
exec 'doautocmd <nomodeline> User ' . a:event | |
else | |
exec 'doautocmd User ' . a:event | |
endif | |
unlet g:neomake_hook_context | |
else | |
2 0.000195 0.000028 call neomake#utils#DebugMessage(printf( 'Skipping User autocmd %s: no hooks.', a:event)) | |
2 0.000001 endif | |
FUNCTION <SNR>35_cursormoved_delayed_cb() | |
Called 1 time | |
Total time: 0.000852 | |
Self time: 0.000049 | |
count total (s) self (s) | |
1 0.000025 if getpos('.') == s:cursormoved_last_pos | |
1 0.000824 0.000021 call neomake#CursorMoved() | |
1 0.000001 endif | |
FUNCTION <SNR>35_HandleLoclistQflistDisplay() | |
Called 2 times | |
Total time: 0.000029 | |
Self time: 0.000029 | |
count total (s) self (s) | |
2 0.000006 let open_val = get(g:, 'neomake_open_list') | |
2 0.000002 if open_val | |
let height = get(g:, 'neomake_list_height', 10) | |
let win_val = winnr() | |
if a:file_mode | |
exe 'lwindow' height | |
else | |
exe 'cwindow' height | |
endif | |
if open_val == 2 && win_val != winnr() | |
wincmd p | |
endif | |
endif | |
FUNCTION neomake#CursorMoved() | |
Called 1 time | |
Total time: 0.000803 | |
Self time: 0.000052 | |
count total (s) self (s) | |
1 0.000005 let l:line = line('.') | |
1 0.000004 if s:last_cursormoved[0] != l:line || s:last_cursormoved[1] != bufnr('%') | |
1 0.000015 let s:last_cursormoved = [l:line, bufnr('%')] | |
1 0.000002 if g:neomake_place_signs | |
1 0.000691 0.000012 call neomake#signs#PlaceVisibleSigns() | |
1 0.000001 endif | |
1 0.000001 endif | |
1 0.000083 0.000010 call neomake#EchoCurrentError() | |
FUNCTION neomake#GetMaker() | |
Called 2 times | |
Total time: 73.050476 | |
Self time: 0.000444 | |
count total (s) self (s) | |
2 0.000002 if a:0 | |
2 0.000003 let real_ft = a:1 | |
2 0.000044 0.000008 let fts = neomake#utils#GetSortedFiletypes(real_ft) | |
2 0.000002 else | |
let fts = [] | |
endif | |
2 0.000006 if type(a:name_or_maker) == type({}) | |
let maker = a:name_or_maker | |
elseif a:name_or_maker ==# 'makeprg' | |
let maker = neomake#utils#MakerFromCommand(&makeprg) | |
elseif a:name_or_maker !~# '\v^\w+$' | |
call neomake#utils#ErrorMessage('Invalid maker name: '.a:name_or_maker) | |
return {} | |
else | |
2 0.000003 if len(fts) | |
4 0.000006 for ft in fts | |
2 0.000010 let m = get(g:, 'neomake_'.ft.'_'.a:name_or_maker.'_maker') | |
2 0.000004 if type(m) == type({}) | |
let maker = m | |
break | |
endif | |
2 0.000002 unlet m | |
2 0.000002 endfor | |
2 0.000003 elseif exists('g:neomake_'.a:name_or_maker.'_maker') | |
let maker = get(g:, 'neomake_'.a:name_or_maker.'_maker') | |
endif | |
2 0.000004 if !exists('maker') | |
2 0.000003 if len(fts) | |
2 0.000003 for ft in fts | |
2 0.000002 try | |
2 73.048734 0.000037 let maker = eval('neomake#makers#ft#'.ft.'#'.a:name_or_maker.'()') | |
2 0.000002 break | |
catch /^Vim\%((\a\+)\)\=:E117/ | |
endtry | |
endfor | |
2 0.000001 else | |
try | |
let maker = eval('neomake#makers#'.a:name_or_maker.'#'.a:name_or_maker.'()') | |
catch /^Vim\%((\a\+)\)\=:E117/ | |
endtry | |
endif | |
2 0.000001 endif | |
2 0.000004 if !exists('maker') | |
call neomake#utils#ErrorMessage('Maker not found: '.a:name_or_maker) | |
return {} | |
endif | |
2 0.000001 endif | |
" Create the maker object. | |
2 0.000026 let maker = deepcopy(maker) | |
2 0.000004 if !has_key(maker, 'name') | |
2 0.000006 if type(a:name_or_maker) == type('') | |
2 0.000004 let maker.name = a:name_or_maker | |
2 0.000001 else | |
let maker.name = 'unnamed_maker' | |
endif | |
2 0.000001 endif | |
2 0.000008 let maker.get_argv = s:maker_base.get_argv | |
2 0.000009 let defaults = copy(s:maker_defaults) | |
2 0.000016 call extend(defaults, { 'exe': maker.name, 'args': [], 'errorformat': &errorformat, }) | |
2 0.000005 let bufnr = bufnr('%') | |
12 0.000032 for [key, default] in items(defaults) | |
10 0.001371 0.000070 let maker[key] = neomake#utils#GetSetting(key, maker, default, fts, bufnr) | |
10 0.000012 unlet! default " workaround for old Vim (7.3.429) | |
10 0.000007 endfor | |
2 0.000004 if exists('real_ft') | |
2 0.000003 let maker.ft = real_ft | |
2 0.000001 endif | |
2 0.000009 return maker | |
FUNCTION neomake#signs#CleanOldSigns() | |
Called 2 times | |
Total time: 0.000010 | |
Self time: 0.000010 | |
count total (s) self (s) | |
2 0.000007 if !has_key(s:last_placed_signs[a:type], a:bufnr) | |
2 0.000002 return | |
endif | |
call neomake#utils#DebugObject('Cleaning old signs in buffer '.a:bufnr.': ', s:last_placed_signs[a:type]) | |
if bufexists(str2nr(a:bufnr)) | |
for ln in keys(s:last_placed_signs[a:type][a:bufnr]) | |
let cmd = 'sign unplace '.s:last_placed_signs[a:type][a:bufnr][ln].' buffer='.a:bufnr | |
call neomake#utils#DebugMessage('Unplacing sign: '.cmd) | |
exe cmd | |
endfor | |
endif | |
unlet s:last_placed_signs[a:type][a:bufnr] | |
FUNCTION neomake#signs#PlaceVisibleSigns() | |
Called 2 times | |
Total time: 0.000714 | |
Self time: 0.000714 | |
count total (s) self (s) | |
6 0.000012 for type in ['file', 'project'] | |
4 0.000009 let buf = bufnr('%') | |
4 0.000015 if !has_key(s:sign_queue[type], buf) | |
3 0.000003 continue | |
endif | |
1 0.000003 let topline = line('w0') | |
1 0.000002 let botline = line('w$') | |
82 0.000074 for ln in range(topline, botline) | |
81 0.000215 if has_key(s:sign_queue[type][buf], ln) | |
call neomake#signs#PlaceSign(s:sign_queue[type][buf][ln], type) | |
unlet s:sign_queue[type][buf][ln] | |
endif | |
81 0.000050 endfor | |
1 0.000002 if empty(s:sign_queue[type][buf]) | |
1 0.000004 unlet s:sign_queue[type][buf] | |
1 0.000001 endif | |
1 0.000001 endfor | |
FUNCTION <SNR>36_findFileInParent() | |
Called 4 times | |
Total time: 0.000967 | |
Self time: 0.000967 | |
count total (s) self (s) | |
4 0.000017 let old_suffixesadd = &suffixesadd | |
4 0.000025 let &suffixesadd = '' | |
4 0.000886 let file = findfile(a:what, escape(a:where, ' ') . ';') | |
4 0.000027 let &suffixesadd = old_suffixesadd | |
4 0.000006 return file | |
FUNCTION <SNR>35_CanProcessJobOutput() | |
Called 3 times | |
Total time: 0.000072 | |
Self time: 0.000072 | |
count total (s) self (s) | |
" We can only process output (change the location/quickfix list) in | |
" certain modes, otherwise e.g. the visual selection gets lost. | |
3 0.000021 if index(['n', 'i'], mode()) == -1 | |
call neomake#utils#DebugMessage('Not processing output for mode '.mode()) | |
elseif exists('*getcmdwintype') && getcmdwintype() !=# '' | |
call neomake#utils#DebugMessage('Not processing output from command-line window '.getcmdwintype()) | |
else | |
3 0.000004 return 1 | |
endif | |
return 0 | |
FUNCTION neomake#makers#ft#java#EnabledMakers() | |
Called 1 time | |
Total time: 0.000102 | |
Self time: 0.000102 | |
count total (s) self (s) | |
1 0.000003 let makers = [] | |
1 0.000044 if executable(expand(g:neomake_java_javac_executable, 1)) | |
1 0.000005 call add(makers, g:neomake_java_javac_executable) | |
1 0.000001 endif | |
1 0.000043 if executable(expand(g:neomake_java_checkstyle_executable, 1)) | |
call add(makers, g:neomake_java_checkstyle_executable) | |
endif | |
1 0.000001 return makers | |
FUNCTION neomake#GetEnabledMakers() | |
Called 1 time | |
Total time: 73.041280 | |
Self time: 0.000502 | |
count total (s) self (s) | |
1 0.000004 if !a:0 || type(a:1) !=# type('') | |
" If we have no filetype, use the global default makers. | |
" This variable is also used for project jobs, so it has no | |
" buffer local ('b:') counterpart for now. | |
return get(g:, 'neomake_enabled_makers', []) | |
endif | |
" If a filetype was passed, get the makers that are enabled for each of | |
" the filetypes represented. | |
1 0.000002 let makers = [] | |
1 0.000002 let makers_count = {} | |
1 0.000040 0.000014 let fts = neomake#utils#GetSortedFiletypes(a:1) | |
2 0.000005 for ft in fts | |
1 0.000010 let ft = substitute(ft, '\W', '_', 'g') | |
1 0.000002 unlet! l:enabled_makers | |
3 0.000008 for l:varname in [ 'b:neomake_'.ft.'_enabled_makers', 'g:neomake_'.ft.'_enabled_makers'] | |
2 0.000006 if exists(l:varname) | |
let l:enabled_makers = eval(l:varname) | |
break | |
endif | |
2 0.000002 endfor | |
" Use plugin's defaults if not customized. | |
1 0.000002 if !exists('l:enabled_makers') | |
1 0.000001 try | |
1 0.000003 let fnname = 'neomake#makers#ft#'.ft.'#EnabledMakers' | |
1 0.001405 0.000330 let default_makers = eval(fnname . '()') | |
1 0.000002 catch /^Vim\%((\a\+)\)\=:E117/ | |
let default_makers = [] | |
endtry | |
1 73.039693 0.000017 let l:enabled_makers = neomake#utils#AvailableMakers(ft, default_makers) | |
1 0.000002 endif | |
" @vimlint(EVL104, 1, l:enabled_makers) | |
2 0.000003 for maker_name in l:enabled_makers | |
1 0.000003 let c = get(makers_count, maker_name, 0) | |
1 0.000003 let makers_count[maker_name] = c + 1 | |
" Add each maker only once, but keep the order. | |
1 0.000001 if c == 0 | |
1 0.000002 let makers += [maker_name] | |
1 0.000001 endif | |
1 0.000001 endfor | |
1 0.000001 endfor | |
1 0.000002 let l = len(fts) | |
1 0.000008 return filter(makers, 'makers_count[v:val] ==# l') | |
FUNCTION <SNR>35_exit_handler() | |
Called 1 time | |
Total time: 0.005499 | |
Self time: 0.000183 | |
count total (s) self (s) | |
1 0.000012 if !has_key(s:jobs, a:job_id) | |
call neomake#utils#QuietMessage('exit: job not found: '.string(a:job_id)) | |
return | |
endif | |
1 0.000004 let jobinfo = s:jobs[a:job_id] | |
1 0.000002 if get(jobinfo, 'restarting') | |
call neomake#utils#DebugMessage('exit: job is restarting.', jobinfo) | |
call s:MakeJob(jobinfo.make_id, jobinfo) | |
call remove(s:jobs, jobinfo.id) | |
return | |
endif | |
1 0.000002 if get(jobinfo, 'canceled') | |
call neomake#utils#DebugMessage('exit: job was canceled.', jobinfo) | |
call s:CleanJobinfo(jobinfo) | |
return | |
endif | |
1 0.000002 let maker = jobinfo.maker | |
1 0.000004 if exists('jobinfo._vim_in_handler') || exists('jobinfo._nvim_in_handler') | |
let jobinfo._exited_while_in_handler = a:data | |
call neomake#utils#DebugMessage(printf('exit (delayed): %s: %s', maker.name, string(a:data)), jobinfo) | |
return | |
endif | |
1 0.000081 0.000010 call neomake#utils#DebugMessage(printf('%s: %s: %s', a:event_type, maker.name, string(a:data)), jobinfo) | |
" Handle any unfinished lines from stdout/stderr callbacks. | |
1 0.000002 let has_pending_output = 0 | |
3 0.000005 for event_type in ['stdout', 'stderr'] | |
2 0.000004 if has_key(jobinfo, event_type) | |
1 0.000002 let lines = jobinfo[event_type] | |
1 0.000002 if len(lines) | |
1 0.000002 if lines[-1] ==# '' | |
1 0.000003 call remove(lines, -1) | |
1 0.000001 endif | |
1 0.000001 if len(lines) | |
1 0.004395 0.000012 if s:RegisterJobOutput(jobinfo, lines, event_type) | |
let has_pending_output = 1 | |
endif | |
1 0.000001 endif | |
1 0.000002 unlet jobinfo[event_type] | |
1 0.000001 endif | |
1 0.000001 endif | |
2 0.000002 endfor | |
1 0.000002 let status = a:data | |
1 0.000002 if has_key(maker, 'exit_callback') && !get(jobinfo, 'failed_to_start') | |
let callback_dict = { 'status': status, 'name': maker.name, 'has_next': has_key(maker, 'next') } | |
if type(maker.exit_callback) == type('') | |
let l:ExitCallback = function(maker.exit_callback) | |
else | |
let l:ExitCallback = maker.exit_callback | |
endif | |
try | |
call call(l:ExitCallback, [callback_dict], jobinfo) | |
catch /^Vim\%((\a\+)\)\=:E117/ | |
endtry | |
endif | |
1 0.000009 0.000004 if neomake#has_async_support() && (has('nvim') || status != 122) | |
1 0.000082 0.000007 call neomake#utils#DebugMessage(printf( '%s: completed with exit code %d.', maker.name, status), jobinfo) | |
1 0.000001 endif | |
1 0.000016 0.000007 if has_pending_output || s:has_pending_output(jobinfo) | |
call neomake#utils#DebugMessage( 'Output left to be processed, not cleaning job yet.', jobinfo) | |
let jobinfo.pending_output = 1 | |
let jobinfo.finished = 1 | |
endif | |
1 0.000781 0.000008 call s:handle_next_makers(jobinfo, status) | |
FUNCTION <SNR>38_check_interpreter() | |
Called 1 time | |
Total time: 0.047934 | |
Self time: 0.047934 | |
count total (s) self (s) | |
1 0.000065 let prog_path = exepath(a:prog) | |
1 0.000004 if prog_path ==# '' | |
return [0, a:prog . ' not found in search path or not executable.'] | |
endif | |
1 0.000001 if a:skip | |
return [1, ''] | |
endif | |
1 0.000003 let min_version = (a:major_ver == 2) ? '2.6' : '3.3' | |
" Try to load neovim module, and output Python version. | |
" Return codes: | |
" 0 Neovim module can be loaded. | |
" 2 Neovim module cannot be loaded. | |
" Otherwise something else went wrong (e.g. 1 or 127). | |
1 0.047781 let prog_ver = system([ a:prog , '-c' , 'import sys; ' . 'sys.path.remove(""); ' . 'sys.stdout.write(str(sys.version_info[0]) + "." + str(sys.version_info[1])); ' . 'import pkgutil; ' . 'exit(2*int(pkgutil.get_loader("neovim") is None))' ]) | |
1 0.000006 if v:shell_error == 2 || v:shell_error == 0 | |
" Check version only for expected return codes. | |
1 0.000028 if prog_ver !~ '^' . a:major_ver | |
return [0, prog_path . ' is Python ' . prog_ver . ' and cannot provide Python ' . a:major_ver . '.'] | |
elseif prog_ver =~ '^' . a:major_ver && prog_ver < min_version | |
return [0, prog_path . ' is Python ' . prog_ver . ' and cannot provide Python >= ' . min_version . '.'] | |
endif | |
1 0.000001 endif | |
1 0.000001 if v:shell_error == 2 | |
return [0, prog_path . ' does not have the neovim module installed. ' . 'See ":help provider-python".'] | |
elseif v:shell_error == 127 | |
" This can happen with pyenv's shims. | |
return [0, prog_path . ' does not exist: ' . prog_ver] | |
elseif v:shell_error | |
return [0, 'Checking ' . prog_path . ' caused an unknown error. ' . '(' . v:shell_error . ', output: ' . prog_ver . ')' . ' Please report this at github.com/neovim/neovim.'] | |
endif | |
1 0.000003 return [1, ''] | |
FUNCTION <SNR>36_GlobPathList() | |
Called 1 time | |
Total time: 1.472866 | |
Self time: 1.472866 | |
count total (s) self (s) | |
1 0.000009 if v:version >= 705 || (v:version == 704 && has('patch279')) | |
1 1.472852 return globpath(a:path, a:pattern, a:suf, 1) | |
else | |
return split(globpath(a:path, a:pattern, a:suf), "\n") | |
endif | |
FUNCTION neomake#CursorMovedDelayed() | |
Called 10 times | |
Total time: 0.000195 | |
Self time: 0.000195 | |
count total (s) self (s) | |
10 0.000029 if exists('s:cursormoved_timer') | |
10 0.000024 call timer_stop(s:cursormoved_timer) | |
10 0.000008 endif | |
10 0.000085 let s:cursormoved_timer = timer_start(get(g:, 'neomake_cursormoved_delay', 100), function('s:cursormoved_delayed_cb')) | |
10 0.000038 let s:cursormoved_last_pos = getpos('.') | |
FUNCTION <SNR>35_RegisterJobOutput() | |
Called 1 time | |
Total time: 0.004382 | |
Self time: 0.000054 | |
count total (s) self (s) | |
1 0.000002 if !a:jobinfo.file_mode | |
if s:CanProcessJobOutput() | |
call s:ProcessJobOutput(a:jobinfo, a:lines, a:source) | |
if g:neomake_place_signs | |
call neomake#signs#PlaceVisibleSigns() | |
endif | |
return 0 | |
else | |
if !exists('s:project_job_output[a:jobinfo.id]') | |
let s:project_job_output[a:jobinfo.id] = {} | |
endif | |
if !exists('s:project_job_output[a:jobinfo.id][a:source]') | |
let s:project_job_output[a:jobinfo.id][a:source] = [] | |
endif | |
let s:project_job_output[a:jobinfo.id][a:source] += a:lines | |
endif | |
return 1 | |
endif | |
" Process the window directly if we can. | |
1 0.000026 0.000011 if s:CanProcessJobOutput() && index(get(w:, 'neomake_make_ids', []), a:jobinfo.make_id) != -1 | |
1 0.004284 0.000009 call s:ProcessJobOutput(a:jobinfo, a:lines, a:source) | |
1 0.000039 0.000003 call neomake#signs#PlaceVisibleSigns() | |
1 0.000011 0.000008 call neomake#highlights#ShowHighlights() | |
1 0.000001 return 0 | |
endif | |
" file mode: append lines to jobs's window's output. | |
let [t, w] = s:GetTabWinForMakeId(a:jobinfo.make_id) | |
if w == -1 | |
call neomake#utils#LoudMessage('No window found for output!', a:jobinfo) | |
return 0 | |
endif | |
let w_output = s:gettabwinvar(t, w, 'neomake_jobs_output', {}) | |
if !has_key(w_output, a:jobinfo.id) | |
let w_output[a:jobinfo.id] = {} | |
endif | |
if !has_key(w_output[a:jobinfo.id], a:source) | |
let w_output[a:jobinfo.id][a:source] = [] | |
if !exists('s:buffer_job_output[a:jobinfo.bufnr]') | |
let s:buffer_job_output[a:jobinfo.bufnr] = [] | |
endif | |
let s:buffer_job_output[a:jobinfo.bufnr] += [a:jobinfo.id] | |
endif | |
let w_output[a:jobinfo.id][a:source] += a:lines | |
call settabwinvar(t, w, 'neomake_jobs_output', w_output) | |
return 1 | |
FUNCTION <SNR>35_CleanJobinfo() | |
Called 1 time | |
Total time: 0.000751 | |
Self time: 0.000108 | |
count total (s) self (s) | |
1 0.000135 0.000004 call neomake#utils#DebugMessage('Cleaning jobinfo', a:jobinfo) | |
1 0.000003 if has_key(a:jobinfo, 'id') | |
1 0.000004 call remove(s:jobs, a:jobinfo.id) | |
1 0.000051 0.000010 let [t, w] = s:GetTabWinForMakeId(a:jobinfo.make_id) | |
1 0.000016 0.000007 let jobs_output = s:gettabwinvar(t, w, 'neomake_jobs_output', {}) | |
1 0.000002 if has_key(jobs_output, a:jobinfo.id) | |
unlet jobs_output[a:jobinfo.id] | |
endif | |
1 0.000002 if has_key(s:project_job_output, a:jobinfo.id) | |
unlet s:project_job_output[a:jobinfo.id] | |
endif | |
" If signs were not cleared before this point, then the maker did not return | |
" any errors, so all signs must be removed | |
1 0.000001 if a:jobinfo.file_mode | |
1 0.000226 0.000022 call neomake#CleanOldFileSignsAndErrors(a:jobinfo.bufnr) | |
1 0.000001 else | |
call neomake#CleanOldProjectSignsAndErrors() | |
endif | |
1 0.000000 endif | |
1 0.000149 0.000009 call neomake#utils#hook('NeomakeJobFinished', {'jobinfo': a:jobinfo}) | |
" Trigger autocmd if all jobs for a s:Make instance have finished. | |
1 0.000006 if !len(filter(copy(s:jobs), 'v:val.make_id == a:jobinfo.make_id')) | |
" Remove make_id from its window. | |
1 0.000002 if !exists('l:t') | |
let [t, w] = s:GetTabWinForMakeId(a:jobinfo.make_id) | |
endif | |
" @vimlint(EVL104, 1, l:t) | |
" @vimlint(EVL104, 1, l:w) | |
1 0.000011 0.000004 let make_ids = s:gettabwinvar(t, w, 'neomake_make_ids', []) | |
1 0.000002 let idx = index(make_ids, a:jobinfo.make_id) | |
1 0.000001 if idx != -1 | |
1 0.000002 call remove(make_ids, idx) | |
1 0.000003 call settabwinvar(t, w, 'neomake_make_ids', make_ids) | |
1 0.000001 endif | |
1 0.000118 0.000006 call neomake#utils#hook('NeomakeFinished', { 'file_mode': a:jobinfo.file_mode, 'make_id': a:jobinfo.make_id}, a:jobinfo) | |
1 0.000001 endif | |
FUNCTION <SNR>35_AddExprCallback() | |
Called 1 time | |
Total time: 0.000115 | |
Self time: 0.000115 | |
count total (s) self (s) | |
1 0.000002 let maker = a:jobinfo.maker | |
1 0.000002 let file_mode = a:jobinfo.file_mode | |
1 0.000003 let highlight_columns = get(g:, 'neomake_highlight_columns', 1) | |
1 0.000003 let highlight_lines = get(g:, 'neomake_highlight_lines', 0) | |
1 0.000002 let list = file_mode ? getloclist(0) : getqflist() | |
1 0.000001 let list_modified = 0 | |
1 0.000001 let counts_changed = 0 | |
1 0.000001 let index = a:prev_index | |
1 0.000002 let maker_type = file_mode ? 'file' : 'project' | |
1 0.000001 let cleaned_signs = 0 | |
1 0.000001 let ignored_signs = 0 | |
1 0.000005 let s:postprocess = get(maker, 'postprocess', function('neomake#utils#CompressWhitespace')) | |
1 0.000002 let debug = get(g:, 'neomake_verbose', 0) >= 3 | |
1 0.000002 while index < len(list) | |
let entry = list[index] | |
let entry.maker_name = has_key(maker, 'name') ? maker.name : 'makeprg' | |
let index += 1 | |
let before = copy(entry) | |
call call(s:postprocess, [entry], maker) | |
if entry != before | |
let list_modified = 1 | |
if debug | |
call neomake#utils#DebugMessage(printf( 'Modified list entry (postprocess): %s', join(values(map(neomake#utils#diff_dict(before, entry)[0], "v:key.': '.string(v:val[0]).' => '.string(v:val[1])"))))) | |
endif | |
endif | |
if !entry.valid | |
if maker.remove_invalid_entries | |
let index -= 1 | |
call remove(list, index) | |
let list_modified = 1 | |
let entry_copy = copy(entry) | |
call neomake#utils#DebugMessage(printf( 'Removing invalid entry: %s (%s)', remove(entry_copy, 'text'), string(entry_copy)), a:jobinfo) | |
endif | |
continue | |
endif | |
if !file_mode | |
if neomake#statusline#AddQflistCount(entry) | |
let counts_changed = 1 | |
endif | |
endif | |
if !entry.bufnr | |
continue | |
endif | |
if file_mode | |
if neomake#statusline#AddLoclistCount(entry.bufnr, entry) | |
let counts_changed = 1 | |
endif | |
endif | |
if !cleaned_signs | |
if file_mode | |
call neomake#CleanOldFileSignsAndErrors(entry.bufnr) | |
else | |
call neomake#CleanOldProjectSignsAndErrors() | |
endif | |
let cleaned_signs = 1 | |
endif | |
" Track all errors by buffer and line | |
let s:current_errors[maker_type][entry.bufnr] = get(s:current_errors[maker_type], entry.bufnr, {}) | |
let s:current_errors[maker_type][entry.bufnr][entry.lnum] = get( s:current_errors[maker_type][entry.bufnr], entry.lnum, []) | |
call add(s:current_errors[maker_type][entry.bufnr][entry.lnum], entry) | |
if g:neomake_place_signs | |
if entry.lnum is 0 | |
let ignored_signs += 1 | |
else | |
call neomake#signs#RegisterSign(entry, maker_type) | |
endif | |
endif | |
if highlight_columns || highlight_lines | |
call neomake#highlights#AddHighlight(entry, maker_type) | |
endif | |
endwhile | |
1 0.000001 if list_modified | |
if file_mode | |
call setloclist(0, list, 'r') | |
else | |
call setqflist(list, 'r') | |
endif | |
endif | |
1 0.000001 if ignored_signs | |
call neomake#utils#DebugMessage(printf( 'Could not place signs for %d entries without line number.', ignored_signs)) | |
endif | |
1 0.000001 return counts_changed | |
FUNCTION <SNR>35_output_handler() | |
Called 46 times | |
Total time: 0.006746 | |
Self time: 0.003451 | |
count total (s) self (s) | |
46 0.000099 let jobinfo = s:jobs[a:job_id] | |
46 0.003825 0.000530 call neomake#utils#DebugMessage(printf('%s: %s: %s', a:event_type, jobinfo.maker.name, string(a:data)), jobinfo) | |
46 0.000159 let last_event_type = get(jobinfo, 'event_type', a:event_type) | |
" a:data is a list of 'lines' read. Each element *after* the first | |
" element represents a newline. | |
46 0.000094 if has_key(jobinfo, a:event_type) | |
45 0.000093 let lines = jobinfo[a:event_type] | |
" As per https://github.com/neovim/neovim/issues/3555 | |
45 0.001650 let jobinfo[a:event_type] = lines[:-2] + [lines[-1] . get(a:data, 0, '')] + a:data[1:] | |
45 0.000038 else | |
1 0.000002 let jobinfo[a:event_type] = a:data | |
1 0.000001 endif | |
46 0.000127 if !jobinfo.maker.buffer_output || last_event_type !=# a:event_type | |
let lines = jobinfo[a:event_type][:-2] | |
let jobinfo[a:event_type] = jobinfo[a:event_type][-1:] | |
if len(lines) | |
call s:RegisterJobOutput(jobinfo, lines, a:event_type) | |
endif | |
endif | |
FUNCTION neomake#utils#MakerIsAvailable() | |
Called 1 time | |
Total time: 73.039644 | |
Self time: 0.000074 | |
count total (s) self (s) | |
1 0.000003 if a:maker_name ==# 'makeprg' | |
" makeprg refers to the actual makeprg, which we don't need to check | |
" for our purposes | |
return 1 | |
endif | |
1 73.039590 0.000020 let maker = neomake#GetMaker(a:maker_name, a:ft) | |
1 0.000002 if empty(maker) | |
return 0 | |
endif | |
1 0.000002 if !has_key(s:available_makers, maker.exe) | |
1 0.000033 let s:available_makers[maker.exe] = executable(maker.exe) | |
1 0.000001 endif | |
1 0.000007 return s:available_makers[maker.exe] | |
FUNCTION <SNR>36_GetMavenClasspath() | |
Called 2 times | |
Total time: 0.000779 | |
Self time: 0.000273 | |
count total (s) self (s) | |
2 0.000636 0.000130 let pom = s:findFileInParent('pom.xml', expand('%:p:h', 1)) | |
2 0.000006 if s:has_maven && filereadable(pom) | |
if !has_key(g:neomake_java_javac_maven_pom_ftime, pom) || g:neomake_java_javac_maven_pom_ftime[pom] != getftime(pom) | |
let mvn_cmd = s:shescape(expand(g:neomake_java_maven_executable, 1)) . ' -f ' . s:shescape(pom) . ' ' . g:neomake_java_maven_options | |
let mvn_classpath_output = split(system(mvn_cmd . ' dependency:build-classpath -DincludeScope=test'), "\n") | |
let mvn_classpath = '' | |
let class_path_next = 0 | |
for line in mvn_classpath_output | |
if class_path_next == 1 | |
let mvn_classpath = substitute(line, "\r", '', 'g') | |
break | |
endif | |
if stridx(line, 'Dependencies classpath:') >= 0 | |
let class_path_next = 1 | |
endif | |
endfor | |
let mvn_properties = s:GetMavenProperties() | |
let output_dir = get(mvn_properties, 'project.build.outputDirectory', join(['target', 'classes'], s:psep)) | |
let mvn_classpath = s:AddToClasspath(mvn_classpath, output_dir) | |
let test_output_dir = get(mvn_properties, 'project.build.testOutputDirectory', join(['target', 'test-classes'], s:psep)) | |
let mvn_classpath = s:AddToClasspath(mvn_classpath, test_output_dir) | |
let g:neomake_java_javac_maven_pom_ftime[pom] = getftime(pom) | |
let g:neomake_java_javac_maven_pom_classpath[pom] = mvn_classpath | |
endif | |
return g:neomake_java_javac_maven_pom_classpath[pom] | |
endif | |
2 0.000003 return '' | |
FUNCTION <SNR>35_AddMakeInfoForCurrentWin() | |
Called 1 time | |
Total time: 0.000030 | |
Self time: 0.000020 | |
count total (s) self (s) | |
" Add jobinfo.make_id to current window. | |
1 0.000002 let tabpagenr = tabpagenr() | |
1 0.000002 let winnr = winnr() | |
1 0.000017 0.000007 let w_ids = s:gettabwinvar(tabpagenr, winnr, 'neomake_make_ids', []) | |
1 0.000003 let w_ids += [a:job_id] | |
1 0.000005 call settabwinvar(tabpagenr, winnr, 'neomake_make_ids', w_ids) | |
FUNCTIONS SORTED ON TOTAL TIME | |
count total (s) self (s) function | |
1 73.057440 0.000072 neomake#Make() | |
2 73.050476 0.000444 neomake#GetMaker() | |
2 73.048697 0.000783 neomake#makers#ft#java#javac() | |
1 73.041280 0.000502 neomake#GetEnabledMakers() | |
1 73.039677 0.000032 neomake#utils#AvailableMakers() | |
1 73.039644 0.000074 neomake#utils#MakerIsAvailable() | |
2 72.978494 71.505160 <SNR>36_GetGradleClasspath() | |
1 1.472866 <SNR>36_GlobPathList() | |
1 0.048033 0.000098 provider#pythonx#Detect() | |
1 0.047934 <SNR>38_check_interpreter() | |
2 0.019386 <SNR>36_tmpdir() | |
1 0.016088 0.000701 <SNR>35_Make() | |
43 0.009534 0.002788 <SNR>35_nvim_output_handler_cb() | |
46 0.006746 0.003451 <SNR>35_output_handler() | |
1 0.005499 0.000183 <SNR>35_exit_handler() | |
1 0.004382 0.000054 <SNR>35_RegisterJobOutput() | |
1 0.004275 0.004041 <SNR>35_ProcessJobOutput() | |
1 0.004102 0.003643 <SNR>35_MakeJob() | |
54 0.003922 0.000479 neomake#utils#DebugMessage() | |
55 0.003524 neomake#utils#LogMessage() | |
FUNCTIONS SORTED ON SELF TIME | |
count total (s) self (s) function | |
2 72.978494 71.505160 <SNR>36_GetGradleClasspath() | |
1 1.472866 <SNR>36_GlobPathList() | |
1 0.047934 <SNR>38_check_interpreter() | |
2 0.019386 <SNR>36_tmpdir() | |
1 0.004275 0.004041 <SNR>35_ProcessJobOutput() | |
1 0.004102 0.003643 <SNR>35_MakeJob() | |
55 0.003524 neomake#utils#LogMessage() | |
46 0.006746 0.003451 <SNR>35_output_handler() | |
43 0.009534 0.002788 <SNR>35_nvim_output_handler_cb() | |
46 0.001750 <SNR>35_nvim_output_handler() | |
12 0.001497 0.001335 neomake#utils#GetSetting() | |
4 0.000967 <SNR>36_findFileInParent() | |
2 73.048697 0.000783 neomake#makers#ft#java#javac() | |
2 0.000714 neomake#signs#PlaceVisibleSigns() | |
1 0.016088 0.000701 <SNR>35_Make() | |
10 0.000614 <SNR>15_Highlight_Matching_Pair() | |
1 73.041280 0.000502 neomake#GetEnabledMakers() | |
54 0.003922 0.000479 neomake#utils#DebugMessage() | |
2 73.050476 0.000444 neomake#GetMaker() | |
2 0.000779 0.000273 <SNR>36_GetMavenClasspath() | |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment