diff --git a/runtime/doc/filetype.txt b/runtime/doc/filetype.txt index 63d7b030ef..c5549e291e 100644 --- a/runtime/doc/filetype.txt +++ b/runtime/doc/filetype.txt @@ -794,6 +794,13 @@ To enable the recognition of Markdown comments each time after removing re-source "javaformat.vim" for Vim versions greater than `8.2.1397`: > runtime autoload/javaformat.vim < +JAVASCRIPT *ft-javascript-plugin* + +To enable prettier formatting of JavaScript files, set the following variable +in your vimrc: > + + let g:javascript_formatter = 'prettier' + JSON-FORMAT *ft-json-plugin* JSON filetype can be extended to use 'formatexpr' and "json.FormatExpr()" diff --git a/runtime/doc/tags b/runtime/doc/tags index 6b363dbaa9..10fa6a6bf8 100644 --- a/runtime/doc/tags +++ b/runtime/doc/tags @@ -7452,6 +7452,7 @@ ft-inform-syntax syntax.txt /*ft-inform-syntax* ft-java-plugin filetype.txt /*ft-java-plugin* ft-java-syntax syntax.txt /*ft-java-syntax* ft-javascript-omni insert.txt /*ft-javascript-omni* +ft-javascript-plugin filetype.txt /*ft-javascript-plugin* ft-jq-syntax syntax.txt /*ft-jq-syntax* ft-json-plugin filetype.txt /*ft-json-plugin* ft-json-syntax syntax.txt /*ft-json-syntax* diff --git a/runtime/ftplugin/javascript.vim b/runtime/ftplugin/javascript.vim index 455b794cf0..f893fcc926 100644 --- a/runtime/ftplugin/javascript.vim +++ b/runtime/ftplugin/javascript.vim @@ -70,8 +70,23 @@ let &l:define = \ .. '\|^\s*\(export\s\+\|export\s\+default\s\+\)*\(var\|let\|const\|function\|class\)' \ .. '\|\' +if !empty(get(g:,'javascript_formatprg', '')) +augroup formatprgsJavaScript + autocmd! * + autocmd ShellFilterPost if v:shell_error | execute 'echom "shell filter returned error " . v:shell_error . ", undoing changes"' | undo | endif + if g:javascript_formatprg ==# 'prettier' + autocmd BufWinEnter ++once let &l:formatprg = + \ executable('prettier') ? 'prettier' : 'npx prettier' . + \ ' --stdin-filepath=%:S --parser=javascript ' . + \ (&textwidth > 0 ? '--print-width=' . &textwidth : '') . + \ ' --tab-width=' . &l:shiftwidth . (&expandtab ? '' : '--use-tabs') . ' --' + endif +augroup END +endif + let b:undo_ftplugin = \ "setl fo< ofu< com< cms< sua< su< def< pa<" + \ .. !empty(g:javascript_formatprg) ? " fp<" : "" \ .. "| unlet! b:browsefilter b:match_ignorecase b:match_words" let &cpo = s:cpo_save