summaryrefslogtreecommitdiffstats
path: root/autoload
diff options
context:
space:
mode:
authorAdam Stankiewicz <sheerun@sher.pl>2021-03-01 13:44:50 +0100
committerAdam Stankiewicz <sheerun@sher.pl>2021-03-01 13:44:50 +0100
commitcc63193ce82c1e7b9ee2ad7d0ddd14e8394211ef (patch)
tree260360b1a32ca19635f8c8884b81fcec9ed51168 /autoload
parent4c10562d2cc9b084518284c49a158558da5180a7 (diff)
downloadvim-polyglot-cc63193ce82c1e7b9ee2ad7d0ddd14e8394211ef.tar.gz
vim-polyglot-cc63193ce82c1e7b9ee2ad7d0ddd14e8394211ef.zip
Update
Diffstat (limited to 'autoload')
-rw-r--r--autoload/go/config.vim4
-rw-r--r--autoload/polyglot/init.vim6
-rw-r--r--autoload/polyglot/sleuth.vim12
-rw-r--r--autoload/zig/config.vim43
-rw-r--r--autoload/zig/fmt.vim177
-rw-r--r--autoload/zig/list.vim162
-rw-r--r--autoload/zig/util.vim394
7 files changed, 60 insertions, 738 deletions
diff --git a/autoload/go/config.vim b/autoload/go/config.vim
index ca89b16f..cafba5f4 100644
--- a/autoload/go/config.vim
+++ b/autoload/go/config.vim
@@ -215,6 +215,10 @@ function! go#config#DebugWindows() abort
endfunction
+function! go#config#DebugPreserveLayout() abort
+ return get(g:, 'go_debug_preserve_layout', 0)
+endfunction
+
function! go#config#DebugAddress() abort
return get(g:, 'go_debug_address', '127.0.0.1:8181')
endfunction
diff --git a/autoload/polyglot/init.vim b/autoload/polyglot/init.vim
index 837515ee..d76343f0 100644
--- a/autoload/polyglot/init.vim
+++ b/autoload/polyglot/init.vim
@@ -2257,7 +2257,7 @@ if !has_key(g:polyglot_is_disabled, 'jq')
endif
if !has_key(g:polyglot_is_disabled, 'htmldjango')
- au BufNewFile,BufRead *.j2,*.jinja,*.jinja2,*.njk setf htmldjango
+ au BufNewFile,BufRead *.j2,*.jinja,*.jinja2 setf htmldjango
endif
if !has_key(g:polyglot_is_disabled, 'jenkins')
@@ -2473,7 +2473,7 @@ if !has_key(g:polyglot_is_disabled, 'coffee-script')
endif
if !has_key(g:polyglot_is_disabled, 'markdown')
- au BufNewFile,BufRead *.markdown,*.md,*.mdown,*.mdwn,*.mkd,*.mkdn,*.mkdown,*.ronn,*.workbook,contents.lr setf markdown
+ au BufNewFile,BufRead *.markdown,*.md,*.mdown,*.mdwn,*.mkd,*.mkdn,*.mkdown,*.ronn,*.scd,*.workbook,contents.lr setf markdown
endif
if !has_key(g:polyglot_is_disabled, 'cmake')
@@ -2592,7 +2592,7 @@ if !has_key(g:polyglot_is_disabled, 'ant')
endif
if !has_key(g:polyglot_is_disabled, 'xml')
- au BufNewFile,BufRead *.adml,*.admx,*.ant,*.axml,*.builds,*.ccproj,*.ccxml,*.cdxml,*.clixml,*.cproject,*.cscfg,*.csdef,*.csl,*.csproj,*.csproj.user,*.ct,*.depproj,*.dita,*.ditamap,*.ditaval,*.dll.config,*.dotsettings,*.filters,*.fsproj,*.fxml,*.glade,*.gml,*.gmx,*.grxml,*.gst,*.iml,*.ivy,*.jelly,*.jsproj,*.kml,*.launch,*.mdpolicy,*.mjml,*.mm,*.mod,*.mxml,*.natvis,*.ncl,*.ndproj,*.nproj,*.nuspec,*.odd,*.osm,*.pkgproj,*.pluginspec,*.proj,*.props,*.psc1,*.pt,*.rdf,*.res,*.resx,*.rss,*.sch,*.scxml,*.sfproj,*.shproj,*.srdf,*.storyboard,*.sublime-snippet,*.targets,*.tml,*.tpm,*.ui,*.urdf,*.ux,*.vbproj,*.vcxproj,*.vsixmanifest,*.vssettings,*.vstemplate,*.vxml,*.wixproj,*.workflow,*.wpl,*.wsdl,*.wsf,*.wxi,*.wxl,*.wxs,*.x3d,*.xacro,*.xaml,*.xib,*.xlf,*.xliff,*.xmi,*.xml,*.xml.dist,*.xproj,*.xsd,*.xspec,*.xul,*.zcml,*/etc/blkid.tab,*/etc/blkid.tab.old,*/etc/xdg/menus/*.menu,*fglrxrc,{.,}classpath,{.,}cproject,{.,}project,App.config,NuGet.config,Settings.StyleCop,Web.Debug.config,Web.Release.config,Web.config,packages.config setf xml
+ au BufNewFile,BufRead *.adml,*.admx,*.ant,*.axml,*.builds,*.ccproj,*.ccxml,*.cdxml,*.clixml,*.cproject,*.cscfg,*.csdef,*.csl,*.csproj,*.csproj.user,*.ct,*.depproj,*.dita,*.ditamap,*.ditaval,*.dll.config,*.dotsettings,*.filters,*.fsproj,*.fxml,*.glade,*.gml,*.gmx,*.grxml,*.gst,*.iml,*.ivy,*.jelly,*.jsproj,*.kml,*.launch,*.mdpolicy,*.mjml,*.mm,*.mod,*.mxml,*.natvis,*.ncl,*.ndproj,*.nproj,*.nuspec,*.odd,*.osm,*.pkgproj,*.pluginspec,*.proj,*.props,*.psc1,*.pt,*.rdf,*.res,*.resx,*.rs,*.rss,*.sch,*.scxml,*.sfproj,*.shproj,*.srdf,*.storyboard,*.sublime-snippet,*.targets,*.tml,*.tpm,*.ui,*.urdf,*.ux,*.vbproj,*.vcxproj,*.vsixmanifest,*.vssettings,*.vstemplate,*.vxml,*.wixproj,*.workflow,*.wpl,*.wsdl,*.wsf,*.wxi,*.wxl,*.wxs,*.x3d,*.xacro,*.xaml,*.xib,*.xlf,*.xliff,*.xmi,*.xml,*.xml.dist,*.xproj,*.xsd,*.xspec,*.xul,*.zcml,*/etc/blkid.tab,*/etc/blkid.tab.old,*/etc/xdg/menus/*.menu,*fglrxrc,{.,}classpath,{.,}cproject,{.,}project,App.config,NuGet.config,Settings.StyleCop,Web.Debug.config,Web.Release.config,Web.config,packages.config setf xml
endif
if !has_key(g:polyglot_is_disabled, 'csv')
diff --git a/autoload/polyglot/sleuth.vim b/autoload/polyglot/sleuth.vim
index f3df470a..5a7dd312 100644
--- a/autoload/polyglot/sleuth.vim
+++ b/autoload/polyglot/sleuth.vim
@@ -233,7 +233,7 @@ let s:globs = {
\ 'html.handlebars': '*.handlebars,*.hbs,*.hdbs,*.hb',
\ 'html.mustache': '*.mustache,*.hogan,*.hulk,*.hjs',
\ 'html.twig': '*.twig',
- \ 'htmldjango': '*.jinja,*.j2,*.jinja2,*.njk',
+ \ 'htmldjango': '*.jinja,*.j2,*.jinja2',
\ 'htmlm4': '*.html.m4',
\ 'httest': '*.htt,*.htb',
\ 'i3config': '*.i3.config,*.i3config,i3.config,i3config,.i3.config,.i3config',
@@ -263,7 +263,7 @@ let s:globs = {
\ 'jovial': '*.jov,*.j73,*.jovial',
\ 'jproperties': '*.properties,*.properties_??,*.properties_??_??,*.properties_??_??_*',
\ 'jq': '*.jq,.jqrc,.jqrc*',
- \ 'json': '*.json,*.avsc,*.geojson,*.gltf,*.har,*.ice,*.JSON-tmLanguage,*.jsonl,*.mcmeta,*.tfstate,*.tfstate.backup,*.topojson,*.webapp,*.webmanifest,*.yy,*.yyp,*.jsonp,*.template,.arcconfig,.htmlhintrc,.tern-config,.tern-project,.watchmanconfig,composer.lock,mcmod.info,Pipfile.lock',
+ \ 'json': '*.json,*.avsc,*.geojson,*.gltf,*.har,*.ice,*.JSON-tmLanguage,*.jsonl,*.mcmeta,*.tfstate,*.tfstate.backup,*.topojson,*.webapp,*.webmanifest,*.yy,*.yyp,*.jsonp,*.template,.arcconfig,.htmlhintrc,.tern-config,.tern-project,.watchmanconfig,Pipfile.lock,composer.lock,mcmod.info',
\ 'json5': '*.json5',
\ 'jsonc': '*.cjson,*.jsonc,coc-settings.json,.eslintrc.json,.babelrc,.jshintrc,.jslintrc,.mocharc.json,coffeelint.json,tsconfig.json,jsconfig.json',
\ 'jsonnet': '*.jsonnet,*.libsonnet',
@@ -321,7 +321,7 @@ let s:globs = {
\ 'manconf': 'man.config',
\ 'map': '*.map',
\ 'maple': '*.mv,*.mpl,*.mws',
- \ 'markdown': '*.md,*.markdown,*.mdown,*.mdwn,*.mkd,*.mkdn,*.mkdown,*.ronn,*.workbook,contents.lr',
+ \ 'markdown': '*.md,*.markdown,*.mdown,*.mdwn,*.mkd,*.mkdn,*.mkdown,*.ronn,*.scd,*.workbook,contents.lr',
\ 'markdown.mdx': '*.mdx',
\ 'mason': '*.mason,*.mhtml,*.comp',
\ 'master': '*.mas,*.master',
@@ -436,7 +436,7 @@ let s:globs = {
\ 'racket': '*.rkt,*.rktd,*.rktl,*.scrbl',
\ 'radiance': '*.rad,*.mat',
\ 'ragel': '*.rl',
- \ 'raku': '*.6pl,*.6pm,*.nqp,*.p6,*.p6l,*.p6m,*.pl,*.pl6,*.pm,*.pm6,*.t,*.rakudoc,*.rakutest,*.raku,*.rakumod,*.pod6,*.t6',
+ \ 'raku': '*.6pl,*.6pm,*.nqp,*.p6,*.p6l,*.p6m,*.pl,*.pl6,*.pm,*.pm6,*.raku,*.rakumod,*.t,*.rakudoc,*.rakutest,*.pod6,*.t6',
\ 'raml': '*.raml',
\ 'ratpoison': '.ratpoisonrc,ratpoisonrc',
\ 'razor': '*.cshtml,*.razor',
@@ -553,7 +553,7 @@ let s:globs = {
\ 'tilde': '*.t.html',
\ 'tli': '*.tli',
\ 'tmux': '.tmux*.conf',
- \ 'toml': '*.toml,Cargo.lock,Gopkg.lock,poetry.lock,Pipfile',
+ \ 'toml': '*.toml,Cargo.lock,Gopkg.lock,Pipfile,poetry.lock',
\ 'tpp': '*.tpp',
\ 'tptp': '*.p,*.tptp,*.ax',
\ 'trasys': '*.inp',
@@ -612,7 +612,7 @@ let s:globs = {
\ 'xhtml': '*.xhtml,*.xht',
\ 'xinetd': '',
\ 'xmath': '*.msc,*.msf',
- \ 'xml': '*.xml,*.adml,*.admx,*.ant,*.axml,*.builds,*.ccproj,*.ccxml,*.clixml,*.cproject,*.cscfg,*.csdef,*.csl,*.csproj,*.ct,*.depproj,*.dita,*.ditamap,*.ditaval,*.dll.config,*.dotsettings,*.filters,*.fsproj,*.fxml,*.glade,*.gml,*.gmx,*.grxml,*.gst,*.iml,*.ivy,*.jelly,*.jsproj,*.kml,*.launch,*.mdpolicy,*.mjml,*.mm,*.mod,*.mxml,*.natvis,*.ncl,*.ndproj,*.nproj,*.nuspec,*.odd,*.osm,*.pkgproj,*.pluginspec,*.proj,*.props,*.psc1,*.pt,*.rdf,*.res,*.resx,*.rss,*.sch,*.scxml,*.sfproj,*.shproj,*.srdf,*.storyboard,*.sublime-snippet,*.targets,*.tml,*.ui,*.urdf,*.ux,*.vbproj,*.vcxproj,*.vsixmanifest,*.vssettings,*.vstemplate,*.vxml,*.wixproj,*.workflow,*.wsdl,*.wsf,*.wxi,*.wxl,*.wxs,*.x3d,*.xacro,*.xaml,*.xib,*.xlf,*.xliff,*.xmi,*.xml.dist,*.xproj,*.xsd,*.xspec,*.xul,*.zcml,*.cdxml,*.tpm,*.csproj.user,*.wpl,.classpath,.cproject,.project,App.config,NuGet.config,Settings.StyleCop,Web.Debug.config,Web.Release.config,Web.config,packages.config,*fglrxrc',
+ \ 'xml': '*.xml,*.adml,*.admx,*.ant,*.axml,*.builds,*.ccproj,*.ccxml,*.clixml,*.cproject,*.cscfg,*.csdef,*.csl,*.csproj,*.ct,*.depproj,*.dita,*.ditamap,*.ditaval,*.dll.config,*.dotsettings,*.filters,*.fsproj,*.fxml,*.glade,*.gml,*.gmx,*.grxml,*.gst,*.iml,*.ivy,*.jelly,*.jsproj,*.kml,*.launch,*.mdpolicy,*.mjml,*.mm,*.mod,*.mxml,*.natvis,*.ncl,*.ndproj,*.nproj,*.nuspec,*.odd,*.osm,*.pkgproj,*.pluginspec,*.proj,*.props,*.psc1,*.pt,*.rdf,*.res,*.resx,*.rs,*.rss,*.sch,*.scxml,*.sfproj,*.shproj,*.srdf,*.storyboard,*.sublime-snippet,*.targets,*.tml,*.ui,*.urdf,*.ux,*.vbproj,*.vcxproj,*.vsixmanifest,*.vssettings,*.vstemplate,*.vxml,*.wixproj,*.workflow,*.wsdl,*.wsf,*.wxi,*.wxl,*.wxs,*.x3d,*.xacro,*.xaml,*.xib,*.xlf,*.xliff,*.xmi,*.xml.dist,*.xproj,*.xsd,*.xspec,*.xul,*.zcml,*.cdxml,*.tpm,*.csproj.user,*.wpl,.classpath,.cproject,.project,App.config,NuGet.config,Settings.StyleCop,Web.Debug.config,Web.Release.config,Web.config,packages.config,*fglrxrc',
\ 'xml.twig': '*.xml.twig',
\ 'xmodmap': '*Xmodmap,*xmodmap*',
\ 'xpm': '*.xpm,*.pm',
diff --git a/autoload/zig/config.vim b/autoload/zig/config.vim
deleted file mode 100644
index a96595aa..00000000
--- a/autoload/zig/config.vim
+++ /dev/null
@@ -1,43 +0,0 @@
-if polyglot#init#is_disabled(expand('<sfile>:p'), 'zig', 'autoload/zig/config.vim')
- finish
-endif
-
-function! zig#config#ListTypeCommands() abort
- return get(g:, 'zig_list_type_commands', {})
-endfunction
-
-function! zig#config#ListType() abort
- return get(g:, 'zig_list_type', '')
-endfunction
-
-function! zig#config#ListAutoclose() abort
- return get(g:, 'zig_list_autoclose', 1)
-endfunction
-
-function! zig#config#ListHeight() abort
- return get(g:, "zig_list_height", 0)
-endfunction
-
-function! zig#config#FmtAutosave() abort
- return get(g:, "zig_fmt_autosave", 0)
-endfunction
-
-function! zig#config#SetFmtAutosave(value) abort
- let g:zig_fmt_autosave = a:value
-endfunction
-
-function! zig#config#FmtCommand() abort
- return get(g:, "zig_fmt_command", ['zig', 'fmt', '--color', 'off'])
-endfunction
-
-function! zig#config#FmtFailSilently() abort
- return get(g:, "zig_fmt_fail_silently", 0)
-endfunction
-
-function! zig#config#FmtExperimental() abort
- return get(g:, "zig_fmt_experimental", 0)
-endfunction
-
-function! zig#config#Debug() abort
- return get(g:, 'zig_debug', [])
-endfunction
diff --git a/autoload/zig/fmt.vim b/autoload/zig/fmt.vim
index 2562be39..7b31febd 100644
--- a/autoload/zig/fmt.vim
+++ b/autoload/zig/fmt.vim
@@ -7,127 +7,70 @@ endif
" Copyright 2011 The Go Authors. All rights reserved.
" Use of this source code is governed by a BSD-style
" license that can be found in the LICENSE file.
-"
-function! zig#fmt#Format() abort
- if zig#config#FmtExperimental()
- " Using winsaveview to save/restore cursor state has the problem of
- " closing folds on save:
- " https://github.com/fatih/vim-go/issues/502
- " One fix is to use mkview instead. Unfortunately, this sometimes causes
- " other bad side effects:
- " https://github.com/fatih/vim-go/issues/728
- " and still closes all folds if foldlevel>0:
- " https://github.com/fatih/vim-go/issues/732
- let l:curw = {}
- try
- mkview!
- catch
- let l:curw = winsaveview()
- endtry
-
- " save our undo file to be restored after we are done. This is needed to
- " prevent an additional undo jump due to BufWritePre auto command and also
- " restore 'redo' history because it's getting being destroyed every
- " BufWritePre
- let tmpundofile = tempname()
- exe 'wundo! ' . tmpundofile
- else
- " Save cursor position and many other things.
- let l:curw = winsaveview()
- endif
+function! zig#fmt#Format() abort
" Save cursor position and many other things.
- let l:curw = winsaveview()
+ let view = winsaveview()
- let bin_name = zig#config#FmtCommand()
-
- " Get current position in file
- let current_col = col('.')
- let orig_line_count = line('$')
-
- " Save current buffer first, else fmt will run on the original file and we
- " will lose our changes.
- silent! execute 'write' expand('%')
-
- let [l:out, l:err] = zig#fmt#run(bin_name, expand('%'))
-
- if l:err == 0
- call zig#fmt#update_file(expand('%'))
- elseif !zig#config#FmtFailSilently()
- let errors = s:parse_errors(expand('%'), out)
- call s:show_errors(errors)
- endif
+ let current_buf = bufnr('')
- let diff_offset = line('$') - orig_line_count
+ let bin_path = get(g:, 'zig_bin_path', 'zig')
+ let stderr_file = tempname()
+ let cmdline = printf('%s fmt --stdin 2> %s', bin_path, stderr_file)
- if zig#config#FmtExperimental()
- " restore our undo history
- silent! exe 'rundo ' . tmpundofile
- call delete(tmpundofile)
-
- " Restore our cursor/windows positions, folds, etc.
- if empty(l:curw)
- silent! loadview
- else
- call winrestview(l:curw)
- endif
+ " The formatted code is output on stdout, the errors go on stderr.
+ if exists('*systemlist')
+ silent let out = systemlist(cmdline, current_buf)
else
- " Restore our cursor/windows positions.
- call winrestview(l:curw)
+ silent let out = split(system(cmdline, current_buf))
+ endif
+ let err = v:shell_error
+
+ if err == 0
+ " remove undo point caused via BufWritePre.
+ try | silent undojoin | catch | endtry
+
+ " Replace the file content with the formatted version.
+ call deletebufline(current_buf, len(out), line('$'))
+ call setline(1, out)
+
+ " No errors detected, close the loclist.
+ call setloclist(0, [], 'r')
+ lclose
+ elseif get(g:, 'zig_fmt_parse_errors', 1)
+ let errors = s:parse_errors(expand('%'), readfile(stderr_file))
+
+ call setloclist(0, [], 'r', {
+ \ 'title': 'Errors',
+ \ 'items': errors,
+ \ })
+
+ let max_win_height = get(g:, 'zig_fmt_max_window_height', 5)
+ " Prevent the loclist from becoming too long.
+ let win_height = min([max_win_height, len(errors)])
+ " Open the loclist, but only if there's at least one error to show.
+ execute 'lwindow ' . win_height
endif
- " be smart and jump to the line the new statement was added/removed
- call cursor(line('.') + diff_offset, current_col)
-
- " Syntax highlighting breaks less often.
- syntax sync fromstart
-endfunction
-
-" update_file updates the target file with the given formatted source
-function! zig#fmt#update_file(target)
- " remove undo point caused via BufWritePre
- try | silent undojoin | catch | endtry
-
- " reload buffer to reflect latest changes
- silent edit!
+ call delete(stderr_file)
- let l:listtype = zig#list#Type("ZigFmt")
+ call winrestview(view)
- " the title information was introduced with 7.4-2200
- " https://github.com/vim/vim/commit/d823fa910cca43fec3c31c030ee908a14c272640
- if has('patch-7.4.2200')
- " clean up previous list
- if l:listtype == "quickfix"
- let l:list_title = getqflist({'title': 1})
- else
- let l:list_title = getloclist(0, {'title': 1})
- endif
- else
- " can't check the title, so assume that the list was for go fmt.
- let l:list_title = {'title': 'Format'}
+ if err != 0
+ echohl Error | echomsg "zig fmt returned error" | echohl None
+ return
endif
- if has_key(l:list_title, "title") && l:list_title['title'] == "Format"
- call zig#list#Clean(l:listtype)
- endif
-endfunction
-
-" run runs the gofmt/goimport command for the given source file and returns
-" the output of the executed command. Target is the real file to be formatted.
-function! zig#fmt#run(bin_name, target)
- let l:cmd = []
- call extend(cmd, a:bin_name)
- call extend(cmd, [a:target])
- return zig#util#Exec(l:cmd)
+ " Run the syntax highlighter on the updated content and recompute the folds if
+ " needed.
+ syntax sync fromstart
endfunction
" parse_errors parses the given errors and returns a list of parsed errors
-function! s:parse_errors(filename, content) abort
- let splitted = split(a:content, '\n')
-
+function! s:parse_errors(filename, lines) abort
" list of errors to be put into location list
let errors = []
- for line in splitted
+ for line in a:lines
let tokens = matchlist(line, '^\(.\{-}\):\(\d\+\):\(\d\+\)\s*\(.*\)')
if !empty(tokens)
call add(errors,{
@@ -141,30 +84,4 @@ function! s:parse_errors(filename, content) abort
return errors
endfunction
-
-" show_errors opens a location list and shows the given errors. If the given
-" errors is empty, it closes the the location list
-function! s:show_errors(errors) abort
- let l:listtype = zig#list#Type("ZigFmt")
- if !empty(a:errors)
- call zig#list#Populate(l:listtype, a:errors, 'Format')
- echohl Error | echomsg "zig fmt returned error" | echohl None
- endif
-
- " this closes the window if there are no errors or it opens
- " it if there is any
- call zig#list#Window(l:listtype, len(a:errors))
-endfunction
-
-function! zig#fmt#ToggleFmtAutoSave() abort
- if zig#config#FmtAutosave()
- call zig#config#SetFmtAutosave(0)
- call zig#util#EchoProgress("auto fmt disabled")
- return
- end
-
- call zig#config#SetFmtAutosave(1)
- call zig#util#EchoProgress("auto fmt enabled")
-endfunction
-
" vim: sw=2 ts=2 et
diff --git a/autoload/zig/list.vim b/autoload/zig/list.vim
deleted file mode 100644
index 832ba107..00000000
--- a/autoload/zig/list.vim
+++ /dev/null
@@ -1,162 +0,0 @@
-if polyglot#init#is_disabled(expand('<sfile>:p'), 'zig', 'autoload/zig/list.vim')
- finish
-endif
-
-" Adapted from fatih/vim-go: autoload/go/list.vim
-"
-" Copyright 2011 The Go Authors. All rights reserved.
-" Use of this source code is governed by a BSD-style
-" license that can be found in the LICENSE file.
-"
-
-" Window opens the list with the given height up to 10 lines maximum.
-" Otherwise g:zig_loclist_height is used.
-"
-" If no or zero height is given it closes the window by default.
-" To prevent this, set g:zig_list_autoclose = 0
-function! zig#list#Window(listtype, ...) abort
- " we don't use lwindow to close the location list as we need also the
- " ability to resize the window. So, we are going to use lopen and lclose
- " for a better user experience. If the number of errors in a current
- " location list increases/decreases, cwindow will not resize when a new
- " updated height is passed. lopen in the other hand resizes the screen.
- if !a:0 || a:1 == 0
- call zig#list#Close(a:listtype)
- return
- endif
-
- let height = zig#config#ListHeight()
- if height == 0
- " prevent creating a large location height for a large set of numbers
- if a:1 > 10
- let height = 10
- else
- let height = a:1
- endif
- endif
-
- if a:listtype == "locationlist"
- exe 'lopen ' . height
- else
- exe 'copen ' . height
- endif
-endfunction
-
-
-" Get returns the current items from the list
-function! zig#list#Get(listtype) abort
- if a:listtype == "locationlist"
- return getloclist(0)
- else
- return getqflist()
- endif
-endfunction
-
-" Populate populate the list with the given items
-function! zig#list#Populate(listtype, items, title) abort
- if a:listtype == "locationlist"
- call setloclist(0, a:items, 'r')
-
- " The last argument ({what}) is introduced with 7.4.2200:
- " https://github.com/vim/vim/commit/d823fa910cca43fec3c31c030ee908a14c272640
- if has("patch-7.4.2200") | call setloclist(0, [], 'a', {'title': a:title}) | endif
- else
- call setqflist(a:items, 'r')
- if has("patch-7.4.2200") | call setqflist([], 'a', {'title': a:title}) | endif
- endif
-endfunction
-
-" Parse parses the given items based on the specified errorformat and
-" populates the list.
-function! zig#list#ParseFormat(listtype, errformat, items, title) abort
- " backup users errorformat, will be restored once we are finished
- let old_errorformat = &errorformat
-
- " parse and populate the location list
- let &errorformat = a:errformat
- try
- call zig#list#Parse(a:listtype, a:items, a:title)
- finally
- "restore back
- let &errorformat = old_errorformat
- endtry
-endfunction
-
-" Parse parses the given items based on the global errorformat and
-" populates the list.
-function! zig#list#Parse(listtype, items, title) abort
- if a:listtype == "locationlist"
- lgetexpr a:items
- if has("patch-7.4.2200") | call setloclist(0, [], 'a', {'title': a:title}) | endif
- else
- cgetexpr a:items
- if has("patch-7.4.2200") | call setqflist([], 'a', {'title': a:title}) | endif
- endif
-endfunction
-
-" JumpToFirst jumps to the first item in the location list
-function! zig#list#JumpToFirst(listtype) abort
- if a:listtype == "locationlist"
- ll 1
- else
- cc 1
- endif
-endfunction
-
-" Clean cleans and closes the location list
-function! zig#list#Clean(listtype) abort
- if a:listtype == "locationlist"
- lex []
- else
- cex []
- endif
-
- call zig#list#Close(a:listtype)
-endfunction
-
-" Close closes the location list
-function! zig#list#Close(listtype) abort
- let autoclose_window = zig#config#ListAutoclose()
- if !autoclose_window
- return
- endif
-
- if a:listtype == "locationlist"
- lclose
- else
- cclose
- endif
-endfunction
-
-function! s:listtype(listtype) abort
- let listtype = zig#config#ListType()
- if empty(listtype)
- return a:listtype
- endif
-
- return listtype
-endfunction
-
-" s:default_list_type_commands is the defaults that will be used for each of
-" the supported commands (see documentation for g:zig_list_type_commands). When
-" defining a default, quickfix should be used if the command operates on
-" multiple files, while locationlist should be used if the command operates on a
-" single file or buffer. Keys that begin with an underscore are not supported
-" in g:zig_list_type_commands.
-let s:default_list_type_commands = {
- \ "ZigFmt": "locationlist",
- \ }
-
-function! zig#list#Type(for) abort
- let l:listtype = s:listtype(get(s:default_list_type_commands, a:for))
- if l:listtype == "0"
- call zig#util#EchoError(printf(
- \ "unknown list type command value found ('%s'). Please open a bug report in the zig.vim repo.",
- \ a:for))
- let l:listtype = "quickfix"
- endif
-
- return get(zig#config#ListTypeCommands(), a:for, l:listtype)
-endfunction
-
-" vim: sw=2 ts=2 et
diff --git a/autoload/zig/util.vim b/autoload/zig/util.vim
deleted file mode 100644
index c886fb62..00000000
--- a/autoload/zig/util.vim
+++ /dev/null
@@ -1,394 +0,0 @@
-if polyglot#init#is_disabled(expand('<sfile>:p'), 'zig', 'autoload/zig/util.vim')
- finish
-endif
-
-" Adapted from vim-go: autoload/go/util.vim
-"
-" Copyright 2011 The Go Authors. All rights reserved.
-" Use of this source code is governed by a BSD-style
-" license that can be found in the LICENSE file.
-"
-
-" PathSep returns the appropriate OS specific path separator.
-function! zig#util#PathSep() abort
- if zig#util#IsWin()
- return '\'
- endif
- return '/'
-endfunction
-
-" PathListSep returns the appropriate OS specific path list separator.
-function! zig#util#PathListSep() abort
- if zig#util#IsWin()
- return ";"
- endif
- return ":"
-endfunction
-
-" LineEnding returns the correct line ending, based on the current fileformat
-function! zig#util#LineEnding() abort
- if &fileformat == 'dos'
- return "\r\n"
- elseif &fileformat == 'mac'
- return "\r"
- endif
-
- return "\n"
-endfunction
-
-" Join joins any number of path elements into a single path, adding a
-" Separator if necessary and returns the result
-function! zig#util#Join(...) abort
- return join(a:000, zig#util#PathSep())
-endfunction
-
-" IsWin returns 1 if current OS is Windows or 0 otherwise
-function! zig#util#IsWin() abort
- let win = ['win16', 'win32', 'win64', 'win95']
- for w in win
- if (has(w))
- return 1
- endif
- endfor
-
- return 0
-endfunction
-
-" IsMac returns 1 if current OS is macOS or 0 otherwise.
-function! zig#util#IsMac() abort
- return has('mac') ||
- \ has('macunix') ||
- \ has('gui_macvim') ||
- \ zig#util#Exec(['uname'])[0] =~? '^darwin'
-endfunction
-
- " Checks if using:
- " 1) Windows system,
- " 2) And has cygpath executable,
- " 3) And uses *sh* as 'shell'
-function! zig#util#IsUsingCygwinShell()
- return zig#util#IsWin() && executable('cygpath') && &shell =~ '.*sh.*'
-endfunction
-
-" Check if Vim jobs API is supported.
-"
-" The (optional) first paramter can be added to indicate the 'cwd' or 'env'
-" parameters will be used, which wasn't added until a later version.
-function! zig#util#has_job(...) abort
- " cwd and env parameters to job_start was added in this version.
- if a:0 > 0 && a:1 is 1
- return has('job') && has("patch-8.0.0902")
- endif
-
- " job was introduced in 7.4.xxx however there are multiple bug fixes and one
- " of the latest is 8.0.0087 which is required for a stable async API.
- return has('job') && has("patch-8.0.0087")
-endfunction
-
-let s:env_cache = {}
-
-" env returns the go environment variable for the given key. Where key can be
-" GOARCH, GOOS, GOROOT, etc... It caches the result and returns the cached
-" version.
-function! zig#util#env(key) abort
- let l:key = tolower(a:key)
- if has_key(s:env_cache, l:key)
- return s:env_cache[l:key]
- endif
-
- if executable('go')
- let l:var = call('zig#util#'.l:key, [])
- if zig#util#ShellError() != 0
- call zig#util#EchoError(printf("'go env %s' failed", toupper(l:key)))
- return ''
- endif
- else
- let l:var = eval("$".toupper(a:key))
- endif
-
- let s:env_cache[l:key] = l:var
- return l:var
-endfunction
-
-" Run a shell command.
-"
-" It will temporary set the shell to /bin/sh for Unix-like systems if possible,
-" so that we always use a standard POSIX-compatible Bourne shell (and not e.g.
-" csh, fish, etc.) See #988 and #1276.
-function! s:system(cmd, ...) abort
- " Preserve original shell and shellredir values
- let l:shell = &shell
- let l:shellredir = &shellredir
-
- if !zig#util#IsWin() && executable('/bin/sh')
- set shell=/bin/sh shellredir=>%s\ 2>&1
- endif
-
- try
- return call('system', [a:cmd] + a:000)
- finally
- " Restore original values
- let &shell = l:shell
- let &shellredir = l:shellredir
- endtry
-endfunction
-
-" System runs a shell command "str". Every arguments after "str" is passed to
-" stdin.
-function! zig#util#System(str, ...) abort
- return call('s:system', [a:str] + a:000)
-endfunction
-
-" Exec runs a shell command "cmd", which must be a list, one argument per item.
-" Every list entry will be automatically shell-escaped
-" Every other argument is passed to stdin.
-function! zig#util#Exec(cmd, ...) abort
- if len(a:cmd) == 0
- call zig#util#EchoError("zig#util#Exec() called with empty a:cmd")
- return ['', 1]
- endif
-
- let l:bin = a:cmd[0]
-
- if !executable(l:bin)
- call zig#util#EchoError(printf("could not find binary '%s'", a:cmd[0]))
- return ['', 1]
- endif
-
- return call('s:exec', [a:cmd] + a:000)
-endfunction
-
-function! s:exec(cmd, ...) abort
- let l:bin = a:cmd[0]
- let l:cmd = zig#util#Shelljoin([l:bin] + a:cmd[1:])
- if zig#util#HasDebug('shell-commands')
- call zig#util#EchoInfo('shell command: ' . l:cmd)
- endif
-
- let l:out = call('s:system', [l:cmd] + a:000)
- return [l:out, zig#util#ShellError()]
-endfunction
-
-function! zig#util#ShellError() abort
- return v:shell_error
-endfunction
-
-" StripPath strips the path's last character if it's a path separator.
-" example: '/foo/bar/' -> '/foo/bar'
-function! zig#util#StripPathSep(path) abort
- let last_char = strlen(a:path) - 1
- if a:path[last_char] == zig#util#PathSep()
- return strpart(a:path, 0, last_char)
- endif
-
- return a:path
-endfunction
-
-" StripTrailingSlash strips the trailing slash from the given path list.
-" example: ['/foo/bar/'] -> ['/foo/bar']
-function! zig#util#StripTrailingSlash(paths) abort
- return map(copy(a:paths), 'zig#util#StripPathSep(v:val)')
-endfunction
-
-" Shelljoin returns a shell-safe string representation of arglist. The
-" {special} argument of shellescape() may optionally be passed.
-function! zig#util#Shelljoin(arglist, ...) abort
- try
- let ssl_save = &shellslash
- set noshellslash
- if a:0
- return join(map(copy(a:arglist), 'shellescape(v:val, ' . a:1 . ')'), ' ')
- endif
-
- return join(map(copy(a:arglist), 'shellescape(v:val)'), ' ')
- finally
- let &shellslash = ssl_save
- endtry
-endfunction
-
-fu! zig#util#Shellescape(arg)
- try
- let ssl_save = &shellslash
- set noshellslash
- return shellescape(a:arg)
- finally
- let &shellslash = ssl_save
- endtry
-endf
-
-" Shelllist returns a shell-safe representation of the items in the given
-" arglist. The {special} argument of shellescape() may optionally be passed.
-function! zig#util#Shelllist(arglist, ...) abort
- try
- let ssl_save = &shellslash
- set noshellslash
- if a:0
- return map(copy(a:arglist), 'shellescape(v:val, ' . a:1 . ')')
- endif
- return map(copy(a:arglist), 'shellescape(v:val)')
- finally
- let &shellslash = ssl_save
- endtry
-endfunction
-
-" Returns the byte offset for line and column
-function! zig#util#Offset(line, col) abort
- if &encoding != 'utf-8'
- let sep = zig#util#LineEnding()
- let buf = a:line == 1 ? '' : (join(getline(1, a:line-1), sep) . sep)
- let buf .= a:col == 1 ? '' : getline('.')[:a:col-2]
- return len(iconv(buf, &encoding, 'utf-8'))
- endif
- return line2byte(a:line) + (a:col-2)
-endfunction
-"
-" Returns the byte offset for the cursor
-function! zig#util#OffsetCursor() abort
- return zig#util#Offset(line('.'), col('.'))
-endfunction
-
-" Windo is like the built-in :windo, only it returns to the window the command
-" was issued from
-function! zig#util#Windo(command) abort
- let s:currentWindow = winnr()
- try
- execute "windo " . a:command
- finally
- execute s:currentWindow. "wincmd w"
- unlet s:currentWindow
- endtry
-endfunction
-
-" snippetcase converts the given word to given preferred snippet setting type
-" case.
-function! zig#util#snippetcase(word) abort
- let l:snippet_case = zig#config#AddtagsTransform()
- if l:snippet_case == "snakecase"
- return zig#util#snakecase(a:word)
- elseif l:snippet_case == "camelcase"
- return zig#util#camelcase(a:word)
- else
- return a:word " do nothing
- endif
-endfunction
-
-" snakecase converts a string to snake case. i.e: FooBar -> foo_bar
-" Copied from tpope/vim-abolish
-function! zig#util#snakecase(word) abort
- let word = substitute(a:word, '::', '/', 'g')
- let word = substitute(word, '\(\u\+\)\(\u\l\)', '\1_\2', 'g')
- let word = substitute(word, '\(\l\|\d\)\(\u\)', '\1_\2', 'g')
- let word = substitute(word, '[.-]', '_', 'g')
- let word = tolower(word)
- return word
-endfunction
-
-" camelcase converts a string to camel case. e.g. FooBar or foo_bar will become
-" fooBar.
-" Copied from tpope/vim-abolish.
-function! zig#util#camelcase(word) abort
- let word = substitute(a:word, '-', '_', 'g')
- if word !~# '_' && word =~# '\l'
- return substitute(word, '^.', '\l&', '')
- else
- return substitute(word, '\C\(_\)\=\(.\)', '\=submatch(1)==""?tolower(submatch(2)) : toupper(submatch(2))','g')
- endif
-endfunction
-
-" pascalcase converts a string to 'PascalCase'. e.g. fooBar or foo_bar will
-" become FooBar.
-function! zig#util#pascalcase(word) abort
- let word = zig#util#camelcase(a:word)
- return toupper(word[0]) . word[1:]
-endfunction
-
-" Echo a message to the screen and highlight it with the group in a:hi.
-"
-" The message can be a list or string; every line with be :echomsg'd separately.
-function! s:echo(msg, hi)
- let l:msg = []
- if type(a:msg) != type([])
- let l:msg = split(a:msg, "\n")
- else
- let l:msg = a:msg
- endif
-
- " Tabs display as ^I or <09>, so manually expand them.
- let l:msg = map(l:msg, 'substitute(v:val, "\t", " ", "")')
-
- exe 'echohl ' . a:hi
- for line in l:msg
- echom "zig.vim: " . line
- endfor
- echohl None
-endfunction
-
-function! zig#util#EchoSuccess(msg)
- call s:echo(a:msg, 'Function')
-endfunction
-function! zig#util#EchoError(msg)
- call s:echo(a:msg, 'ErrorMsg')
-endfunction
-function! zig#util#EchoWarning(msg)
- call s:echo(a:msg, 'WarningMsg')
-endfunction
-function! zig#util#EchoProgress(msg)
- redraw
- call s:echo(a:msg, 'Identifier')
-endfunction
-function! zig#util#EchoInfo(msg)
- call s:echo(a:msg, 'Debug')
-endfunction
-
-" Get all lines in the buffer as a a list.
-function! zig#util#GetLines()
- let buf = getline(1, '$')
- if &encoding != 'utf-8'
- let buf = map(buf, 'iconv(v:val, &encoding, "utf-8")')
- endif
- if &l:fileformat == 'dos'
- " XXX: line2byte() depend on 'fileformat' option.
- " so if fileformat is 'dos', 'buf' must include '\r'.
- let buf = map(buf, 'v:val."\r"')
- endif
- return buf
-endfunction
-
-" Make a named temporary directory which starts with "prefix".
-"
-" Unfortunately Vim's tempname() is not portable enough across various systems;
-" see: https://github.com/mattn/vim-go/pull/3#discussion_r138084911
-function! zig#util#tempdir(prefix) abort
- " See :help tempfile
- if zig#util#IsWin()
- let l:dirs = [$TMP, $TEMP, 'c:\tmp', 'c:\temp']
- else
- let l:dirs = [$TMPDIR, '/tmp', './', $HOME]
- endif
-
- let l:dir = ''
- for l:d in dirs
- if !empty(l:d) && filewritable(l:d) == 2
- let l:dir = l:d
- break
- endif
- endfor
-
- if l:dir == ''
- call zig#util#EchoError('Unable to find directory to store temporary directory in')
- return
- endif
-
- " Not great randomness, but "good enough" for our purpose here.
- let l:rnd = sha256(printf('%s%s', localtime(), fnamemodify(bufname(''), ":p")))
- let l:tmp = printf("%s/%s%s", l:dir, a:prefix, l:rnd)
- call mkdir(l:tmp, 'p', 0700)
- return l:tmp
-endfunction
-
-" Report if the user enabled a debug flag in g:zig_debug.
-function! zig#util#HasDebug(flag)
- return index(zig#config#Debug(), a:flag) >= 0
-endfunction
-
-" vim: sw=2 ts=2 et