Some checks failed
Detach Plugins / check (FlyGrep.vim) (push) Has been cancelled
Detach Plugins / check (GitHub.vim) (push) Has been cancelled
Detach Plugins / check (JavaUnit.vim) (push) Has been cancelled
Detach Plugins / check (SourceCounter.vim) (push) Has been cancelled
Detach Plugins / check (cpicker.nvim) (push) Has been cancelled
Detach Plugins / check (dein-ui.vim) (push) Has been cancelled
Detach Plugins / check (git.vim) (push) Has been cancelled
Detach Plugins / check (iedit.vim) (push) Has been cancelled
Detach Plugins / check (scrollbar.vim) (push) Has been cancelled
Detach Plugins / check (vim-chat) (push) Has been cancelled
Detach Plugins / check (vim-cheat) (push) Has been cancelled
Detach Plugins / check (vim-todo) (push) Has been cancelled
Detach Plugins / check (xmake.vim) (push) Has been cancelled
test / Linux (nvim, nightly) (push) Has been cancelled
test / Linux (nvim, v0.3.8) (push) Has been cancelled
test / Linux (nvim, v0.4.0) (push) Has been cancelled
test / Linux (nvim, v0.4.2) (push) Has been cancelled
test / Linux (nvim, v0.4.3) (push) Has been cancelled
test / Linux (nvim, v0.4.4) (push) Has been cancelled
test / Linux (nvim, v0.5.0) (push) Has been cancelled
test / Linux (nvim, v0.5.1) (push) Has been cancelled
test / Linux (nvim, v0.6.0) (push) Has been cancelled
test / Linux (nvim, v0.6.1) (push) Has been cancelled
test / Linux (nvim, v0.7.0) (push) Has been cancelled
test / Linux (nvim, v0.7.2) (push) Has been cancelled
test / Linux (nvim, v0.8.0) (push) Has been cancelled
test / Linux (nvim, v0.8.1) (push) Has been cancelled
test / Linux (nvim, v0.8.2) (push) Has been cancelled
test / Linux (nvim, v0.8.3) (push) Has been cancelled
test / Linux (nvim, v0.9.0) (push) Has been cancelled
test / Linux (nvim, v0.9.1) (push) Has been cancelled
test / Linux (true, vim, v7.4.052) (push) Has been cancelled
test / Linux (true, vim, v7.4.1689) (push) Has been cancelled
test / Linux (true, vim, v7.4.629) (push) Has been cancelled
test / Linux (true, vim, v8.0.0027) (push) Has been cancelled
test / Linux (true, vim, v8.0.0183) (push) Has been cancelled
test / Linux (vim, nightly) (push) Has been cancelled
test / Linux (vim, v8.0.0184) (push) Has been cancelled
test / Linux (vim, v8.0.1453) (push) Has been cancelled
test / Linux (vim, v8.1.2269) (push) Has been cancelled
test / Linux (vim, v8.2.2434) (push) Has been cancelled
test / Linux (vim, v8.2.3995) (push) Has been cancelled
test / Windows (nvim, nightly) (push) Has been cancelled
test / Windows (nvim, v0.3.8) (push) Has been cancelled
test / Windows (nvim, v0.4.2) (push) Has been cancelled
test / Windows (nvim, v0.4.3) (push) Has been cancelled
test / Windows (nvim, v0.4.4) (push) Has been cancelled
test / Windows (nvim, v0.5.0) (push) Has been cancelled
test / Windows (nvim, v0.5.1) (push) Has been cancelled
test / Windows (nvim, v0.6.0) (push) Has been cancelled
test / Windows (nvim, v0.6.1) (push) Has been cancelled
test / Windows (nvim, v0.7.0) (push) Has been cancelled
test / Windows (nvim, v0.7.2) (push) Has been cancelled
test / Windows (nvim, v0.8.0) (push) Has been cancelled
test / Windows (nvim, v0.8.1) (push) Has been cancelled
test / Windows (nvim, v0.8.2) (push) Has been cancelled
test / Windows (nvim, v0.8.3) (push) Has been cancelled
test / Windows (nvim, v0.9.0) (push) Has been cancelled
test / Windows (nvim, v0.9.1) (push) Has been cancelled
test / Windows (vim, nightly) (push) Has been cancelled
test / Windows (vim, v7.4.1185) (push) Has been cancelled
test / Windows (vim, v7.4.1689) (push) Has been cancelled
test / Windows (vim, v8.0.0027) (push) Has been cancelled
test / Windows (vim, v8.0.1453) (push) Has been cancelled
test / Windows (vim, v8.1.2269) (push) Has been cancelled
test / Windows (vim, v8.2.2434) (push) Has been cancelled
test / Windows (vim, v8.2.3995) (push) Has been cancelled
docker / docker (push) Has been cancelled
mirror / check (coding) (push) Has been cancelled
mirror / check (gitee) (push) Has been cancelled
mirror / check (gitlab) (push) Has been cancelled
126 lines
3.6 KiB
VimL
126 lines
3.6 KiB
VimL
|
|
|
|
" Options.
|
|
|
|
if !exists("g:jsonnet_command")
|
|
let g:jsonnet_command = "jsonnet"
|
|
endif
|
|
|
|
if !exists("g:jsonnet_fmt_command")
|
|
let g:jsonnet_fmt_command = "jsonnetfmt"
|
|
endif
|
|
|
|
if !exists('g:jsonnet_fmt_options')
|
|
let g:jsonnet_fmt_options = ''
|
|
endif
|
|
|
|
if !exists('g:jsonnet_fmt_fail_silently')
|
|
let g:jsonnet_fmt_fail_silently = 1
|
|
endif
|
|
|
|
|
|
" System runs a shell command. It will reset the shell to /bin/sh for Unix-like
|
|
" systems if it is executable.
|
|
function! jsonnet#System(str, ...)
|
|
let l:shell = &shell
|
|
if executable('/bin/sh')
|
|
let &shell = '/bin/sh'
|
|
endif
|
|
|
|
try
|
|
let l:output = call("system", [a:str] + a:000)
|
|
return l:output
|
|
finally
|
|
let &shell = l:shell
|
|
endtry
|
|
endfunction
|
|
|
|
|
|
" CheckBinPath checks whether the given binary exists or not and returns the
|
|
" path of the binary. It returns an empty string if it doesn't exists.
|
|
function! jsonnet#CheckBinPath(binName)
|
|
|
|
if executable(a:binName)
|
|
if exists('*exepath')
|
|
let binPath = exepath(a:binName)
|
|
return binPath
|
|
else
|
|
return a:binName
|
|
endif
|
|
else
|
|
echo "vim-jsonnet: could not find '" . a:binName . "'."
|
|
return ""
|
|
endif
|
|
|
|
endfunction
|
|
|
|
" Format calls `jsonnetfmt ... ` on the file and replaces the file with the
|
|
" auto formatted version. Does some primitive error checking of the
|
|
" jsonnetfmt command too.
|
|
function! jsonnet#Format()
|
|
|
|
" Save cursor position and many other things.
|
|
let l:curw = winsaveview()
|
|
|
|
" Write current unsaved buffer to a temp file
|
|
let l:tmpname = tempname()
|
|
call writefile(getline(1, '$'), l:tmpname)
|
|
|
|
" get the command first so we can test it
|
|
let l:binName = g:jsonnet_fmt_command
|
|
|
|
" check if the user has installed command binary.
|
|
let l:binPath = jsonnet#CheckBinPath(l:binName)
|
|
if empty(l:binPath)
|
|
return
|
|
endif
|
|
|
|
|
|
" Populate the final command.
|
|
let l:command = l:binPath
|
|
" The inplace modification is default. Makes file management easier
|
|
let l:command = l:command . ' -i '
|
|
let l:command = l:command . g:jsonnet_fmt_options
|
|
|
|
" Execute the compiled jsonnetfmt command and save the return value
|
|
let l:out = jsonnet#System(l:command . " " . l:tmpname)
|
|
let l:errorCode = v:shell_error
|
|
|
|
if l:errorCode == 0
|
|
" The format command succeeded Move the formatted temp file over the
|
|
" current file and restore other settings
|
|
|
|
" stop undo recording
|
|
try | silent undojoin | catch | endtry
|
|
|
|
let l:originalFileFormat = &fileformat
|
|
if exists("*getfperm")
|
|
" save old file permissions
|
|
let l:originalFPerm = getfperm(expand('%'))
|
|
endif
|
|
" Overwrite current file with the formatted temp file
|
|
call rename(l:tmpname, expand('%'))
|
|
|
|
if exists("*setfperm") && l:originalFPerm != ''
|
|
call setfperm(expand('%'), l:originalFPerm)
|
|
endif
|
|
" the file has been changed outside of vim, enable reedit
|
|
silent edit!
|
|
let &fileformat = l:originalFileFormat
|
|
let &syntax = &syntax
|
|
elseif g:jsonnet_fmt_fail_silently == 0
|
|
" FixMe: We could leverage the errors coming from the `jsonnetfmt` and
|
|
" give immediate feedback to the user at every save time.
|
|
" Our inspiration, vim-go, opens a new list below the current edit
|
|
" window and shows the errors (the output of the fmt command).
|
|
" We are not sure whether this is desired in the vim-jsonnet community
|
|
" or not. Nevertheless, this else block is a suitable place to benefit
|
|
" from the `jsonnetfmt` errors.
|
|
endif
|
|
|
|
" Restore our cursor/windows positions.
|
|
call winrestview(l:curw)
|
|
endfunction
|
|
|
|
|