2022-05-20 05:05:00 -04:00
|
|
|
|
|
|
|
"
|
|
|
|
" This file contains default settings and all format program definitions and links these to filetypes
|
|
|
|
"
|
|
|
|
|
|
|
|
|
|
|
|
" Vim-autoformat configuration variables
|
|
|
|
if !exists('g:autoformat_autoindent')
|
|
|
|
let g:autoformat_autoindent = 1
|
|
|
|
endif
|
|
|
|
|
|
|
|
if !exists('g:autoformat_retab')
|
|
|
|
let g:autoformat_retab = 1
|
|
|
|
endif
|
|
|
|
|
|
|
|
if !exists('g:autoformat_remove_trailing_spaces')
|
|
|
|
let g:autoformat_remove_trailing_spaces = 1
|
|
|
|
endif
|
|
|
|
|
|
|
|
if !exists('g:autoformat_verbosemode')
|
|
|
|
let g:autoformat_verbosemode = 0
|
|
|
|
endif
|
|
|
|
|
|
|
|
|
|
|
|
" Ada
|
|
|
|
if !exists('g:formatdef_gnatpp')
|
|
|
|
let g:formatdef_gnatpp = "'cat > /tmp/adafile; gnatpp --pipe /tmp/adafile; rm -f /tmp/adafile'"
|
|
|
|
endif
|
|
|
|
|
|
|
|
if !exists('g:formatters_ada')
|
|
|
|
let g:formatters_ada = ['gnatpp']
|
|
|
|
endif
|
|
|
|
|
|
|
|
" Python
|
|
|
|
if !exists('g:formatdef_autopep8')
|
|
|
|
" Autopep8 will not do indentation fixes when a range is specified, so we
|
|
|
|
" only pass a range when there is a visual selection that is not the
|
|
|
|
" entire file. See #125.
|
|
|
|
let g:formatdef_autopep8 = '"autopep8 -".(g:DoesRangeEqualBuffer(a:firstline, a:lastline) ? " --range ".a:firstline." ".a:lastline : "")." ".(&textwidth ? "--max-line-length=".&textwidth : "")'
|
|
|
|
endif
|
|
|
|
|
|
|
|
" There doesn't seem to be a reliable way to detect if are in some kind of visual mode,
|
|
|
|
" so we use this as a workaround. We compare the length of the file against
|
|
|
|
" the range arguments. If there is no range given, the range arguments default
|
|
|
|
" to the entire file, so we return false if the range comprises the entire file.
|
|
|
|
function! g:DoesRangeEqualBuffer(first, last)
|
|
|
|
return line('$') != a:last - a:first + 1
|
|
|
|
endfunction
|
|
|
|
|
|
|
|
" Yapf supports multiple formatter styles: pep8, google, chromium, or facebook
|
|
|
|
if !exists('g:formatter_yapf_style')
|
|
|
|
let g:formatter_yapf_style = 'pep8'
|
|
|
|
endif
|
|
|
|
if !exists('g:formatdef_yapf')
|
|
|
|
let s:configfile_def = "'yapf -l '.a:firstline.'-'.a:lastline"
|
|
|
|
let s:noconfigfile_def = "'yapf --style=\"{based_on_style:'.g:formatter_yapf_style.',indent_width:'.shiftwidth().(&textwidth ? ',column_limit:'.&textwidth : '').'}\" -l '.a:firstline.'-'.a:lastline"
|
|
|
|
let g:formatdef_yapf = "g:YAPFFormatConfigFileExists() ? (" . s:configfile_def . ") : (" . s:noconfigfile_def . ")"
|
|
|
|
endif
|
|
|
|
|
|
|
|
function! g:YAPFFormatConfigFileExists()
|
|
|
|
return len(findfile(".style.yapf", expand("%:p:h").";")) || len(findfile("setup.cfg", expand("%:p:h").";")) || filereadable(exists('$XDG_CONFIG_HOME') ? expand('$XDG_CONFIG_HOME/yapf/style') : expand('~/.config/yapf/style'))
|
|
|
|
endfunction
|
|
|
|
|
|
|
|
if !exists('g:formatdef_black')
|
|
|
|
let g:formatdef_black = '"black -q ".(&textwidth ? "-l".&textwidth : "")." -"'
|
|
|
|
endif
|
|
|
|
|
|
|
|
if !exists('g:formatters_python')
|
|
|
|
let g:formatters_python = ['autopep8','yapf', 'black']
|
|
|
|
endif
|
|
|
|
|
|
|
|
|
|
|
|
" C#
|
|
|
|
if !exists('g:formatdef_astyle_cs')
|
|
|
|
if filereadable('.astylerc')
|
|
|
|
let g:formatdef_astyle_cs = '"astyle --mode=cs --options=.astylerc"'
|
|
|
|
elseif filereadable(expand('~/.astylerc')) || exists('$ARTISTIC_STYLE_OPTIONS')
|
|
|
|
let g:formatdef_astyle_cs = '"astyle --mode=cs"'
|
|
|
|
else
|
|
|
|
let g:formatdef_astyle_cs = '"astyle --mode=cs --style=ansi --indent-namespaces -pcH".(&expandtab ? "s".shiftwidth() : "t")'
|
|
|
|
endif
|
|
|
|
endif
|
|
|
|
|
|
|
|
if !exists('g:formatters_cs')
|
|
|
|
let g:formatters_cs = ['astyle_cs']
|
|
|
|
endif
|
|
|
|
|
|
|
|
if !exists('g:formatters_bzl')
|
|
|
|
let g:formatters_bzl = ['buildifier']
|
|
|
|
endif
|
|
|
|
|
|
|
|
|
|
|
|
" Generic C, C++, Objective-C
|
|
|
|
if !exists('g:formatdef_clangformat')
|
|
|
|
let s:configfile_def = "'clang-format -lines='.a:firstline.':'.a:lastline.' --assume-filename=\"'.expand('%:p').'\" -style=file'"
|
|
|
|
let s:noconfigfile_def = "'clang-format -lines='.a:firstline.':'.a:lastline.' --assume-filename=\"'.expand('%:p').'\" -style=\"{BasedOnStyle: WebKit, AlignTrailingComments: true, '.(&textwidth ? 'ColumnLimit: '.&textwidth.', ' : '').'IndentWidth: '.shiftwidth().', TabWidth: '.&tabstop.', '.(&expandtab ? 'UseTab: Never' : 'UseTab: Always').'}\"'"
|
|
|
|
let g:formatdef_clangformat = "g:ClangFormatConfigFileExists() ? (" . s:configfile_def . ") : (" . s:noconfigfile_def . ")"
|
|
|
|
endif
|
|
|
|
|
|
|
|
function! g:ClangFormatConfigFileExists()
|
|
|
|
return len(findfile(".clang-format", expand("%:p:h").";")) || len(findfile("_clang-format", expand("%:p:h").";")) || len(findfile("~/.clang-format", expand("%:p:h").";")) || len(findfile("~/_clang-format", expand("%:p:h").";"))
|
|
|
|
endfunction
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
" C
|
|
|
|
if !exists('g:formatdef_astyle_c')
|
|
|
|
if filereadable('.astylerc')
|
|
|
|
let g:formatdef_astyle_c = '"astyle --mode=c --options=.astylerc"'
|
|
|
|
elseif filereadable(expand('~/.astylerc')) || exists('$ARTISTIC_STYLE_OPTIONS')
|
|
|
|
let g:formatdef_astyle_c = '"astyle --mode=c"'
|
|
|
|
else
|
|
|
|
let g:formatdef_astyle_c = '"astyle --mode=c --style=ansi -pcH".(&expandtab ? "s".shiftwidth() : "t")'
|
|
|
|
endif
|
|
|
|
endif
|
|
|
|
|
|
|
|
if !exists('g:formatters_c')
|
|
|
|
let g:formatters_c = ['clangformat', 'astyle_c']
|
|
|
|
endif
|
|
|
|
|
|
|
|
|
|
|
|
" C++
|
|
|
|
if !exists('g:formatdef_astyle_cpp')
|
|
|
|
if filereadable('.astylerc')
|
|
|
|
let g:formatdef_astyle_cpp = '"astyle --mode=c --options=.astylerc"'
|
|
|
|
elseif filereadable(expand('~/.astylerc')) || exists('$ARTISTIC_STYLE_OPTIONS')
|
|
|
|
let g:formatdef_astyle_cpp = '"astyle --mode=c"'
|
|
|
|
else
|
|
|
|
let g:formatdef_astyle_cpp = '"astyle --mode=c --style=ansi -pcH".(&expandtab ? "s".shiftwidth() : "t")'
|
|
|
|
endif
|
|
|
|
endif
|
|
|
|
|
|
|
|
if !exists('g:formatters_cpp')
|
|
|
|
let g:formatters_cpp = ['clangformat', 'astyle_cpp']
|
|
|
|
endif
|
|
|
|
|
|
|
|
|
|
|
|
" Objective C
|
|
|
|
if !exists('g:formatters_objc')
|
|
|
|
let g:formatters_objc = ['clangformat']
|
|
|
|
endif
|
|
|
|
|
|
|
|
|
|
|
|
" D
|
|
|
|
if !exists('g:formatdef_dfmt')
|
|
|
|
if executable('dfmt')
|
|
|
|
let s:dfmt_command = 'dfmt'
|
|
|
|
else
|
|
|
|
let s:dfmt_command = 'dub run -q dfmt --'
|
|
|
|
endif
|
|
|
|
|
|
|
|
let s:configfile_def = '"' . s:dfmt_command . '"'
|
|
|
|
let s:noconfigfile_def = '"' . s:dfmt_command . ' -t " . (&expandtab ? "space" : "tab") . " --indent_size " . shiftwidth() . (&textwidth ? " --soft_max_line_length " . &textwidth : "")'
|
|
|
|
|
|
|
|
let g:formatdef_dfmt = 'g:EditorconfigFileExists() ? (' . s:configfile_def . ') : (' . s:noconfigfile_def . ')'
|
|
|
|
let g:formatters_d = ['dfmt']
|
|
|
|
endif
|
|
|
|
|
|
|
|
function! g:EditorconfigFileExists()
|
|
|
|
return len(findfile(".editorconfig", expand("%:p:h").";"))
|
|
|
|
endfunction
|
|
|
|
|
|
|
|
|
|
|
|
" Protobuf
|
|
|
|
if !exists('g:formatters_proto')
|
|
|
|
let g:formatters_proto = ['clangformat']
|
|
|
|
endif
|
|
|
|
|
|
|
|
|
|
|
|
" Java
|
|
|
|
if !exists('g:formatdef_astyle_java')
|
|
|
|
if filereadable('.astylerc')
|
|
|
|
let g:formatdef_astyle_java = '"astyle --mode=java --options=.astylerc"'
|
|
|
|
elseif filereadable(expand('~/.astylerc')) || exists('$ARTISTIC_STYLE_OPTIONS')
|
|
|
|
let g:formatdef_astyle_java = '"astyle --mode=java"'
|
|
|
|
else
|
|
|
|
let g:formatdef_astyle_java = '"astyle --mode=java --style=java -pcH".(&expandtab ? "s".shiftwidth() : "t")'
|
|
|
|
endif
|
|
|
|
endif
|
|
|
|
|
|
|
|
if !exists('g:formatters_java')
|
|
|
|
let g:formatters_java = ['astyle_java']
|
|
|
|
endif
|
|
|
|
|
|
|
|
|
|
|
|
" Javascript
|
|
|
|
if !exists('g:formatdef_jsbeautify_javascript')
|
|
|
|
if filereadable('.jsbeautifyrc')
|
|
|
|
let g:formatdef_jsbeautify_javascript = '"js-beautify"'
|
|
|
|
elseif filereadable(expand('~/.jsbeautifyrc'))
|
|
|
|
let g:formatdef_jsbeautify_javascript = '"js-beautify"'
|
|
|
|
else
|
|
|
|
let g:formatdef_jsbeautify_javascript = '"js-beautify -X -".(&expandtab ? "s ".shiftwidth() : "t").(&textwidth ? " -w ".&textwidth : "")'
|
|
|
|
endif
|
|
|
|
endif
|
|
|
|
|
|
|
|
if !exists('g:formatdef_jscs')
|
|
|
|
let g:formatdef_jscs = '"jscs -x"'
|
|
|
|
endif
|
|
|
|
|
|
|
|
if !exists('g:formatdef_standard_javascript')
|
|
|
|
let g:formatdef_standard_javascript = '"standard --fix --stdin"'
|
|
|
|
endif
|
|
|
|
|
|
|
|
|
|
|
|
if !exists('g:formatdef_prettier')
|
|
|
|
let g:formatdef_prettier = '"prettier --stdin-filepath ".expand("%:p").(&textwidth ? " --print-width ".&textwidth : "")." --tab-width=".shiftwidth()'
|
|
|
|
endif
|
|
|
|
|
|
|
|
|
|
|
|
" This is an xo formatter (inspired by the above eslint formatter)
|
|
|
|
" To support ignore and overrides options, we need to use a tmp file
|
|
|
|
" So we create a tmp file here and then remove it afterwards
|
|
|
|
if !exists('g:formatdef_xo_javascript')
|
|
|
|
function! g:BuildXOLocalCmd()
|
2022-08-08 04:25:51 -04:00
|
|
|
return "npx xo --fix --stdin --stdin-filename ".bufname('%')
|
2022-05-20 05:05:00 -04:00
|
|
|
endfunction
|
|
|
|
let g:formatdef_xo_javascript = "g:BuildXOLocalCmd()"
|
|
|
|
endif
|
|
|
|
|
|
|
|
function! s:NodeJsFindPathToExecFile(exec_name)
|
|
|
|
let l:path = fnamemodify(expand('%'), ':p')
|
|
|
|
" find formatter & config file
|
|
|
|
let l:prog = findfile('node_modules/.bin/'.a:exec_name, l:path.";")
|
|
|
|
if empty(l:prog)
|
|
|
|
let l:prog = findfile('~/.npm-global/bin/'.a:exec_name)
|
|
|
|
if empty(l:prog)
|
|
|
|
let l:prog = findfile('/usr/local/bin/'.a:exec_name)
|
|
|
|
endif
|
|
|
|
else
|
|
|
|
let l:prog = getcwd()."/".l:prog
|
|
|
|
endif
|
|
|
|
return l:prog
|
|
|
|
endfunction
|
|
|
|
|
|
|
|
" Setup ESLint local. Setup is done on formatter execution if ESLint and
|
|
|
|
" corresponding config is found they are used, otherwiese the formatter fails.
|
|
|
|
" No windows support at the moment.
|
|
|
|
if !exists('g:formatdef_eslint_local')
|
|
|
|
" returns unique file name near original
|
|
|
|
function! g:BuildESLintTmpFile(path, ext)
|
|
|
|
let l:i = 0
|
|
|
|
let l:result = a:path.'_eslint_tmp_'.l:i.a:ext
|
|
|
|
while filereadable(l:result) && l:i < 100000
|
|
|
|
let l:i = l:i + 1
|
|
|
|
let l:result = a:path.'_eslint_tmp_'.l:i.a:ext
|
|
|
|
endwhile
|
|
|
|
if filereadable(l:result)
|
|
|
|
echoerr "Temporary file could not be created for ".a:path
|
|
|
|
echoerr "Tried from ".a:path.'_eslint_tmp_0'.a:ext." to ".a:path.'_eslint_tmp_'.l:i.a:ext
|
|
|
|
return ''
|
|
|
|
endif
|
|
|
|
return l:result
|
|
|
|
endfunction
|
|
|
|
|
|
|
|
function! g:BuildESLintLocalCmd()
|
|
|
|
let l:path = fnamemodify(expand('%'), ':p')
|
|
|
|
let l:ext = ".".expand('%:p:e')
|
|
|
|
let verbose = &verbose || g:autoformat_verbosemode == 1
|
|
|
|
if has('win32')
|
|
|
|
return "(>&2 echo 'ESLint not supported on win32')"
|
|
|
|
endif
|
|
|
|
" find formatter & config file
|
|
|
|
let l:prog = s:NodeJsFindPathToExecFile('eslint')
|
|
|
|
|
|
|
|
"initial
|
|
|
|
let l:cfg = findfile('.eslintrc.js', l:path.";")
|
|
|
|
|
|
|
|
if empty(l:cfg)
|
|
|
|
let l:cfg_fallbacks = [
|
|
|
|
\'.eslintrc.yaml',
|
|
|
|
\'.eslintrc.yml',
|
|
|
|
\'.eslintrc.json',
|
|
|
|
\'.eslintrc',
|
|
|
|
\]
|
|
|
|
|
|
|
|
for i in l:cfg_fallbacks
|
|
|
|
let l:tcfg = findfile(i, l:path.";")
|
|
|
|
if !empty(l:tcfg)
|
|
|
|
break
|
|
|
|
endif
|
|
|
|
endfor
|
|
|
|
|
|
|
|
if !empty(l:tcfg)
|
|
|
|
let l:cfg = fnamemodify(l:tcfg, ":p")
|
|
|
|
else
|
|
|
|
let l:cfg = findfile('~/.eslintrc.js')
|
|
|
|
for i in l:cfg_fallbacks
|
|
|
|
if !empty(l:cfg)
|
|
|
|
break
|
|
|
|
endif
|
|
|
|
let l:cfg = findfile("~/".i)
|
|
|
|
endfor
|
|
|
|
endif
|
|
|
|
endif
|
|
|
|
|
|
|
|
if (empty(l:cfg) || empty(l:prog))
|
|
|
|
if verbose > 0
|
|
|
|
return "(>&2 echo 'No local or global ESLint program and/or config found')"
|
|
|
|
endif
|
|
|
|
return
|
|
|
|
endif
|
|
|
|
|
|
|
|
" This formatter uses a temporary file as ESLint has not option to print
|
|
|
|
" the formatted source to stdout without modifieing the file.
|
|
|
|
let l:eslint_tmp_file = g:BuildESLintTmpFile(l:path, l:ext)
|
|
|
|
let content = getline('1', '$')
|
|
|
|
call writefile(content, l:eslint_tmp_file)
|
2022-08-08 04:25:51 -04:00
|
|
|
return l:prog." -c ".l:cfg." --fix ".l:eslint_tmp_file." 1> /dev/null; exit_code=$?;
|
2022-05-20 05:05:00 -04:00
|
|
|
\ cat ".l:eslint_tmp_file."; rm -f ".l:eslint_tmp_file."; exit $exit_code"
|
|
|
|
endfunction
|
|
|
|
let g:formatdef_eslint_local = "g:BuildESLintLocalCmd()"
|
|
|
|
endif
|
|
|
|
|
|
|
|
if !exists('g:formatters_javascript')
|
|
|
|
let g:formatters_javascript = [
|
|
|
|
\ 'eslint_local',
|
|
|
|
\ 'jsbeautify_javascript',
|
|
|
|
\ 'jscs',
|
|
|
|
\ 'standard_javascript',
|
|
|
|
\ 'prettier',
|
|
|
|
\ 'xo_javascript',
|
|
|
|
\ 'stylelint',
|
|
|
|
\ ]
|
|
|
|
endif
|
|
|
|
|
|
|
|
" Vue
|
|
|
|
if !exists('g:formatters_vue')
|
|
|
|
let g:formatters_vue = [
|
|
|
|
\ 'eslint_local',
|
|
|
|
\ 'stylelint',
|
|
|
|
\ ]
|
|
|
|
endif
|
|
|
|
|
|
|
|
" JSON
|
|
|
|
if !exists('g:formatdef_jsbeautify_json')
|
|
|
|
if filereadable('.jsbeautifyrc')
|
|
|
|
let g:formatdef_jsbeautify_json = '"js-beautify"'
|
|
|
|
elseif filereadable(expand('~/.jsbeautifyrc'))
|
|
|
|
let g:formatdef_jsbeautify_json = '"js-beautify"'
|
|
|
|
else
|
|
|
|
let g:formatdef_jsbeautify_json = '"js-beautify -".(&expandtab ? "s ".shiftwidth() : "t")'
|
|
|
|
endif
|
|
|
|
endif
|
|
|
|
|
|
|
|
if !exists('g:formatdef_fixjson')
|
|
|
|
let g:formatdef_fixjson = '"fixjson"'
|
|
|
|
endif
|
|
|
|
|
|
|
|
if !exists('g:formatters_json')
|
|
|
|
let g:formatters_json = [
|
|
|
|
\ 'jsbeautify_json',
|
|
|
|
\ 'fixjson',
|
|
|
|
\ 'prettier',
|
|
|
|
\ ]
|
|
|
|
endif
|
|
|
|
|
|
|
|
|
|
|
|
" Julia
|
|
|
|
if !exists('g:formatdef_juliaformatter')
|
|
|
|
function! g:BuildJuliaCmd()
|
|
|
|
return 'julia -e "using JuliaFormatter; print(format_text(read(\"' . expand("%:p") . '\", String)))"'
|
|
|
|
endfunction
|
|
|
|
let g:formatdef_juliaformatter = 'g:BuildJuliaCmd()'
|
|
|
|
endif
|
|
|
|
|
|
|
|
if !exists('g:formatters_julia')
|
|
|
|
let g:formatters_julia = ['juliaformatter']
|
|
|
|
endif
|
|
|
|
|
|
|
|
|
|
|
|
" HTML
|
|
|
|
if !exists('g:formatdef_htmlbeautify')
|
|
|
|
let g:formatdef_htmlbeautify = '"html-beautify - -".(&expandtab ? "s ".shiftwidth() : "t").(&textwidth ? " -w ".&textwidth : "")'
|
|
|
|
endif
|
|
|
|
|
|
|
|
if !exists('g:formatdef_tidy_html')
|
|
|
|
let g:formatdef_tidy_html = '"tidy -q --show-errors 0 --show-warnings 0 --force-output --indent auto --indent-spaces ".shiftwidth()." --vertical-space yes --tidy-mark no -wrap ".&textwidth'
|
|
|
|
endif
|
|
|
|
|
|
|
|
if !exists('g:formatters_html')
|
|
|
|
let g:formatters_html = ['htmlbeautify', 'tidy_html', 'stylelint']
|
|
|
|
endif
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
" XML
|
|
|
|
if !exists('g:formatdef_tidy_xml')
|
|
|
|
let g:formatdef_tidy_xml = '"tidy -q -xml --show-errors 0 --show-warnings 0 --force-output --indent auto --indent-spaces ".shiftwidth()." --vertical-space yes --tidy-mark no -wrap ".&textwidth'
|
|
|
|
endif
|
|
|
|
|
|
|
|
if !exists('g:formatters_xml')
|
|
|
|
let g:formatters_xml = ['tidy_xml']
|
|
|
|
endif
|
|
|
|
|
|
|
|
" SVG
|
|
|
|
if !exists('g:formatters_svg')
|
|
|
|
let g:formatters_svg = ['tidy_xml']
|
|
|
|
endif
|
|
|
|
|
|
|
|
" XHTML
|
|
|
|
if !exists('g:formatdef_tidy_xhtml')
|
|
|
|
let g:formatdef_tidy_xhtml = '"tidy -q --show-errors 0 --show-warnings 0 --force-output --indent auto --indent-spaces ".shiftwidth()." --vertical-space yes --tidy-mark no -asxhtml -wrap ".&textwidth'
|
|
|
|
endif
|
|
|
|
|
|
|
|
if !exists('g:formatters_xhtml')
|
|
|
|
let g:formatters_xhtml = ['tidy_xhtml']
|
|
|
|
endif
|
|
|
|
|
|
|
|
" Ruby
|
|
|
|
if !exists('g:formatdef_rbeautify')
|
|
|
|
let g:formatdef_rbeautify = '"rbeautify ".(&expandtab ? "-s -c ".shiftwidth() : "-t")'
|
|
|
|
endif
|
|
|
|
|
|
|
|
if !exists('g:formatdef_rubocop')
|
|
|
|
" The pipe to sed is required to remove some rubocop output that could not
|
|
|
|
" be suppressed.
|
|
|
|
let g:formatdef_rubocop = "'rubocop --auto-correct -o /dev/null -s '.bufname('%').' \| sed -n 2,\\$p'"
|
|
|
|
endif
|
|
|
|
|
|
|
|
if !exists('g:formatters_ruby')
|
|
|
|
let g:formatters_ruby = ['rbeautify', 'rubocop']
|
|
|
|
endif
|
|
|
|
|
|
|
|
|
|
|
|
" CSS
|
|
|
|
|
|
|
|
" Setup stylelint. Setup is done on formatter execution
|
|
|
|
" if stylelint is found, otherwise the formatter fails.
|
|
|
|
" No windows support at the moment.
|
|
|
|
if !exists('g:formatdef_stylelint')
|
|
|
|
function! g:BuildStyleLintCmd()
|
|
|
|
let verbose = &verbose || g:autoformat_verbosemode == 1
|
|
|
|
if has('win32')
|
|
|
|
return "(>&2 echo 'stylelint not supported on win32')"
|
|
|
|
endif
|
|
|
|
" find formatter
|
|
|
|
let l:prog = s:NodeJsFindPathToExecFile('stylelint')
|
|
|
|
|
|
|
|
if (empty(l:prog))
|
|
|
|
if verbose > 0
|
|
|
|
return "(>&2 echo 'No local or global stylelint program found')"
|
|
|
|
endif
|
|
|
|
return
|
|
|
|
endif
|
|
|
|
|
|
|
|
return l:prog." --fix --stdin --stdin-filename ".bufname('%')
|
|
|
|
endfunction
|
|
|
|
let g:formatdef_stylelint = "g:BuildStyleLintCmd()"
|
|
|
|
endif
|
|
|
|
|
|
|
|
|
|
|
|
if !exists('g:formatdef_cssbeautify')
|
|
|
|
let g:formatdef_cssbeautify = '"css-beautify -f - -s ".shiftwidth()'
|
|
|
|
endif
|
|
|
|
|
|
|
|
if !exists('g:formatters_css')
|
|
|
|
let g:formatters_css = ['cssbeautify', 'prettier', 'stylelint']
|
|
|
|
endif
|
|
|
|
|
|
|
|
" SCSS
|
|
|
|
if !exists('g:formatdef_sassconvert')
|
|
|
|
let g:formatdef_sassconvert = '"sass-convert -F scss -T scss --indent " . (&expandtab ? shiftwidth() : "t")'
|
|
|
|
endif
|
|
|
|
|
|
|
|
if !exists('g:formatters_scss')
|
|
|
|
let g:formatters_scss = ['sassconvert', 'prettier', 'stylelint']
|
|
|
|
endif
|
|
|
|
|
|
|
|
" Less
|
|
|
|
if !exists('g:formatters_less')
|
|
|
|
let g:formatters_less = ['prettier', 'stylelint']
|
|
|
|
endif
|
|
|
|
|
|
|
|
" Typescript
|
|
|
|
if !exists('g:formatdef_tsfmt')
|
|
|
|
let g:formatdef_tsfmt = "'tsfmt --stdin '.bufname('%')"
|
|
|
|
endif
|
|
|
|
|
|
|
|
if !exists('g:formatters_typescript')
|
|
|
|
let g:formatters_typescript = ['tsfmt', 'prettier']
|
|
|
|
endif
|
|
|
|
|
|
|
|
" Haxe
|
|
|
|
if !exists('g:formatdef_haxe_formatter')
|
|
|
|
let g:formatdef_haxe_formatter = "'haxelib run formatter --stdin --source " . fnamemodify("%", ":p:h") . "'"
|
|
|
|
endif
|
|
|
|
|
|
|
|
if !exists('g:formatters_haxe')
|
|
|
|
let g:formatters_haxe = ["haxe_formatter"]
|
|
|
|
endif
|
|
|
|
|
|
|
|
" Golang
|
|
|
|
" Two definitions are provided for two versions of gofmt.
|
|
|
|
" See issue #59
|
|
|
|
if !exists('g:formatdef_gofmt_1')
|
|
|
|
let g:formatdef_gofmt_1 = '"gofmt -tabs=".(&expandtab ? "false" : "true")." -tabwidth=".shiftwidth()'
|
|
|
|
endif
|
|
|
|
|
|
|
|
if !exists('g:formatdef_gofmt_2')
|
|
|
|
let g:formatdef_gofmt_2 = '"gofmt"'
|
|
|
|
endif
|
|
|
|
|
|
|
|
if !exists('g:formatdef_goimports')
|
|
|
|
let g:formatdef_goimports = '"goimports"'
|
|
|
|
endif
|
|
|
|
|
|
|
|
if !exists('g:formatdef_gofumpt')
|
|
|
|
let g:formatdef_gofumpt = '"gofumpt"'
|
|
|
|
endif
|
|
|
|
|
|
|
|
if !exists('g:formatters_go')
|
|
|
|
let g:formatters_go = ['gofmt_1', 'goimports', 'gofmt_2', 'gofumpt']
|
|
|
|
endif
|
|
|
|
|
|
|
|
" Rust
|
|
|
|
if !exists('g:formatdef_rustfmt')
|
|
|
|
let g:formatdef_rustfmt = '"rustfmt --edition 2018"'
|
|
|
|
endif
|
|
|
|
|
|
|
|
if !exists('g:formatters_rust')
|
|
|
|
let g:formatters_rust = ['rustfmt']
|
|
|
|
endif
|
|
|
|
|
|
|
|
" Zig
|
|
|
|
if !exists('g:formatdef_zigfmt')
|
|
|
|
let g:formatdef_zigfmt = '"zig fmt --stdin"'
|
|
|
|
endif
|
|
|
|
|
|
|
|
if !exists('g:formatters_zig')
|
|
|
|
let g:formatters_zig = ['zigfmt']
|
|
|
|
endif
|
|
|
|
|
|
|
|
" Dart
|
|
|
|
if !exists('g:formatdef_dart_format')
|
|
|
|
let g:formatdef_dart_format = '"dart format"'
|
|
|
|
endif
|
|
|
|
|
|
|
|
if !exists('g:formatters_dart')
|
|
|
|
let g:formatters_dart = ['dart_format']
|
|
|
|
endif
|
|
|
|
|
|
|
|
" Perl
|
|
|
|
if !exists('g:formatdef_perltidy')
|
|
|
|
" use perltidyrc file if readable
|
|
|
|
if (has("win32") && (filereadable("perltidy.ini") ||
|
|
|
|
\ filereadable($HOMEPATH."/perltidy.ini"))) ||
|
|
|
|
\ ((has("unix") ||
|
|
|
|
\ has("mac")) && (filereadable(".perltidyrc") ||
|
|
|
|
\ filereadable(expand("~/.perltidyrc")) ||
|
|
|
|
\ filereadable("/usr/local/etc/perltidyrc") ||
|
|
|
|
\ filereadable("/etc/perltidyrc")))
|
|
|
|
let g:formatdef_perltidy = '"perltidy -q -st"'
|
|
|
|
else
|
|
|
|
let g:formatdef_perltidy = '"perltidy --perl-best-practices --format-skipping -q "'
|
|
|
|
endif
|
|
|
|
endif
|
|
|
|
|
|
|
|
if !exists('g:formatters_perl')
|
|
|
|
let g:formatters_perl = ['perltidy']
|
|
|
|
endif
|
|
|
|
|
|
|
|
" Haskell
|
|
|
|
if !exists('g:formatdef_stylish_haskell')
|
|
|
|
let g:formatdef_stylish_haskell = '"stylish-haskell"'
|
|
|
|
endif
|
|
|
|
|
|
|
|
if !exists('g:formatters_haskell')
|
|
|
|
let g:formatters_haskell = ['stylish_haskell']
|
|
|
|
endif
|
|
|
|
|
|
|
|
" Purescript
|
|
|
|
if !exists('g:formatdef_purty')
|
|
|
|
let g:formatdef_purty = '"purty -"'
|
|
|
|
endif
|
|
|
|
|
|
|
|
if !exists('g:formatters_purescript')
|
|
|
|
let g:formatters_purescript = ['purty']
|
|
|
|
endif
|
|
|
|
|
|
|
|
" Markdown
|
|
|
|
if !exists('g:formatdef_remark_markdown')
|
|
|
|
let g:formatdef_remark_markdown = '"remark --silent --no-color"'
|
|
|
|
endif
|
|
|
|
|
|
|
|
if !exists('g:formatters_markdown')
|
|
|
|
let g:formatters_markdown = ['remark_markdown', 'prettier', 'stylelint']
|
|
|
|
endif
|
|
|
|
|
|
|
|
" Graphql
|
|
|
|
if !exists('g:formatters_graphql')
|
|
|
|
let g:formatters_graphql = ['prettier']
|
|
|
|
endif
|
|
|
|
|
|
|
|
" Fortran
|
|
|
|
if !exists('g:formatdef_fprettify')
|
|
|
|
let g:formatdef_fprettify = '"fprettify --no-report-errors --indent=".shiftwidth()'
|
|
|
|
endif
|
|
|
|
|
|
|
|
if !exists('g:formatters_fortran')
|
|
|
|
let g:formatters_fortran = ['fprettify']
|
|
|
|
endif
|
|
|
|
|
|
|
|
" Elixir
|
|
|
|
|
|
|
|
if !exists('g:formatters_elixir')
|
|
|
|
let s:configfile_def = '"mix format --dot-formatter " . findfile(".formatter.exs", expand("%:p:h").";") . " -"'
|
|
|
|
let s:noconfigfile_def = '"mix format -"'
|
|
|
|
|
|
|
|
let g:formatdef_mix_format = 'g:ElixirconfigFileExists() ? (' . s:configfile_def . ') : (' . s:noconfigfile_def . ')'
|
|
|
|
let g:formatters_elixir = ['mix_format']
|
|
|
|
endif
|
|
|
|
|
|
|
|
|
|
|
|
function! g:ElixirconfigFileExists()
|
|
|
|
return len(findfile(".formatter.exs", expand("%:p:h").";"))
|
|
|
|
endfunction
|
|
|
|
|
|
|
|
" Shell
|
|
|
|
if !exists('g:formatdef_shfmt')
|
|
|
|
let g:formatdef_shfmt = '"shfmt -i ".(&expandtab ? shiftwidth() : "0")'
|
|
|
|
endif
|
|
|
|
|
|
|
|
if !exists('g:formatters_sh')
|
|
|
|
let g:formatters_sh = ['shfmt']
|
|
|
|
endif
|
|
|
|
|
|
|
|
" Fish shell
|
|
|
|
if !exists('g:formatdef_fish_indent')
|
|
|
|
let g:formatdef_fish_indent = '"fish_indent"'
|
|
|
|
endif
|
|
|
|
|
|
|
|
if !exists('g:formatters_fish')
|
|
|
|
let g:formatters_fish = ['fish_indent']
|
|
|
|
endif
|
|
|
|
|
|
|
|
" Lua
|
|
|
|
if !exists('g:formatdef_luafmt')
|
|
|
|
let g:formatdef_luafmt = "'luafmt --stdin '.bufname('%')"
|
|
|
|
endif
|
|
|
|
if !exists('g:formatdef_stylua')
|
|
|
|
let g:formatdef_stylua = "'stylua --search-parent-directories --stdin-filepath ' . expand('%:p') .' -- -'"
|
|
|
|
endif
|
|
|
|
if !exists('g:formatters_lua')
|
|
|
|
let g:formatters_lua = ['luafmt', 'stylua']
|
|
|
|
endif
|
|
|
|
|
|
|
|
" SQL
|
|
|
|
if !exists('g:formatdef_sqlformat')
|
|
|
|
let g:formatdef_sqlformat = '"sqlformat --reindent --indent_width ".shiftwidth()." --keywords upper --identifiers lower -"'
|
|
|
|
endif
|
|
|
|
if !exists('g:formatters_sql')
|
|
|
|
let g:formatters_sql = ['sqlformat']
|
|
|
|
endif
|
|
|
|
|
|
|
|
" CMake
|
|
|
|
if !exists('g:formatdef_cmake_format')
|
|
|
|
let g:formatdef_cmake_format = '"cmake-format - --tab-size ".shiftwidth()." ".(&textwidth ? "--line-width=".&textwidth : "")'
|
|
|
|
endif
|
|
|
|
|
|
|
|
if !exists('g:formatters_cmake')
|
|
|
|
let g:formatters_cmake = ['cmake_format']
|
|
|
|
endif
|
|
|
|
|
|
|
|
" Latex
|
|
|
|
if !exists('g:formatdef_latexindent')
|
|
|
|
let g:formatdef_latexindent = '"latexindent.pl -"'
|
|
|
|
endif
|
|
|
|
|
|
|
|
if !exists('g:formatters_latex')
|
|
|
|
let g:formatters_tex = ['latexindent']
|
|
|
|
endif
|
|
|
|
|
|
|
|
" OCaml
|
|
|
|
if !exists('g:formatdef_ocp_indent')
|
|
|
|
let g:formatdef_ocp_indent = '"ocp-indent"'
|
|
|
|
endif
|
|
|
|
|
|
|
|
if !exists('g:formatdef_ocamlformat')
|
|
|
|
if filereadable('.ocamlformat')
|
|
|
|
let g:formatdef_ocamlformat = '"ocamlformat --enable-outside-detected-project --name " . expand("%:p") . " -"'
|
|
|
|
else
|
|
|
|
let g:formatdef_ocamlformat = '"ocamlformat --profile=ocamlformat --enable-outside-detected-project --name " . expand("%:p") . " -"'
|
|
|
|
endif
|
|
|
|
endif
|
|
|
|
|
|
|
|
if !exists('g:formatters_ocaml')
|
|
|
|
let g:formatters_ocaml = ['ocamlformat', 'ocp_indent']
|
|
|
|
endif
|
|
|
|
|
|
|
|
" Assembly
|
|
|
|
if !exists('g:formatdef_asm_format')
|
|
|
|
let g:formatdef_asm_format = '"asmfmt"'
|
|
|
|
endif
|
|
|
|
|
|
|
|
if !exists('g:formatters_asm')
|
|
|
|
let g:formatters_asm = ['asm_format']
|
|
|
|
endif
|
|
|
|
|
|
|
|
" Nix
|
|
|
|
if !exists('g:formatdef_nix_format')
|
|
|
|
let g:formatdef_nix_format = '"nixfmt"'
|
|
|
|
endif
|
|
|
|
|
|
|
|
if !exists('g:formatters_nix')
|
|
|
|
let g:formatters_nix = ['nix_format']
|
|
|
|
endif
|
|
|
|
|
|
|
|
" Dhall
|
|
|
|
if !exists('g:formatdef_dhall_format')
|
|
|
|
let g:formatdef_dhall_format = '"dhall --ascii format"'
|
|
|
|
endif
|
|
|
|
|
|
|
|
if !exists('g:formatters_dhall')
|
|
|
|
let g:formatters_dhall = ['dhall_format']
|
|
|
|
endif
|
|
|
|
|
|
|
|
" Terraform
|
|
|
|
if !exists('g:formatdef_terraform_format')
|
|
|
|
let g:formatdef_terraform_format = '"terraform fmt -"'
|
|
|
|
endif
|
|
|
|
|
|
|
|
if !exists('g:formatters_terraform')
|
|
|
|
let g:formatters_terraform = ['terraform_format']
|
|
|
|
endif
|
|
|
|
|
|
|
|
" Packer
|
|
|
|
if !exists('g:formatdef_packer_format')
|
|
|
|
let g:formatdef_packer_format = '"packer fmt -"'
|
|
|
|
endif
|
|
|
|
|
|
|
|
if !exists('g:formatters_packer')
|
|
|
|
let g:formatters_packer = ['packer_format']
|
|
|
|
endif
|
|
|
|
|
|
|
|
" Nginx
|
|
|
|
if !exists('g:formatdef_nginxfmt')
|
|
|
|
let g:formatdef_nginxfmt = '"nginxfmt.py -i ".shiftwidth()." -"'
|
|
|
|
endif
|
|
|
|
|
|
|
|
if !exists('g:formatters_nginx')
|
|
|
|
let g:formatters_nginx = ['nginxfmt']
|
|
|
|
endif
|