diff options
| author | Mitermayer Reis <mitermayer.reis@gmail.com> | 2017-06-07 11:16:22 -0700 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2017-06-07 11:16:22 -0700 |
| commit | 524a03cf3ddd8b98d8e631330b336f9aae4cfaed (patch) | |
| tree | ff4fe2d636b6026523352881e317eaa29dfd017c | |
| parent | c28004d9c616a3599e8d0622c87fa071aa2342e8 (diff) | |
| parent | e063d0ca656a7413da3cc6b543adde58a09f8c01 (diff) | |
| download | vim-prettier-524a03cf3ddd8b98d8e631330b336f9aae4cfaed.tar.xz | |
Merge pull request #12 from mitermayer/adding-async-command-and-configuration-controls
Adding async command and configuration controls
| -rw-r--r-- | README.md | 57 | ||||
| -rw-r--r-- | autoload/prettier.vim | 21 | ||||
| -rw-r--r-- | doc/prettier.txt | 33 | ||||
| -rw-r--r-- | plugin/prettier.vim | 42 |
4 files changed, 120 insertions, 33 deletions
@@ -10,7 +10,7 @@ By default it will auto format **javascript**, **typescript**, **less**, **scss* Install with [vim-plug](https://github.com/junegunn/vim-plug), assumes node and yarn|npm installed globally. -``` +```vim " post install (yarn install | npm install) then load plugin only for editing supported files plug 'mitermayer/vim-prettier', { \ 'do': 'yarn install', @@ -19,7 +19,7 @@ plug 'mitermayer/vim-prettier', { If using other vim plugin managers or doing manual setup make sure to have `prettier` installed globally or go to your vim-prettier directory and either do `npm install` or `yarn install` -## Prettier Executable resolution +### Prettier Executable resolution When installed via vim-plug, a default prettier executable is installed inside vim-prettier. @@ -29,42 +29,75 @@ vim-prettier executable resolution: 2. Look for a global prettier installation 3. Use locally installed vim-prettier prettier executable -## USAGE +### USAGE Prettier by default will run on auto save but can also be manualy triggered by: -``` +```vim <Leader>p ``` or -``` +```vim :Prettier ``` -## Configuration +If your are on vim 8+ you can also trigger async formatting by: + +```vim +:PrettierAsync +``` + +### Configuration Disable auto formatting of files that have "@format" tag -``` +```vim let g:prettier#autoformat = 0 ``` -The command `:Prettier` by default is synchronous but can be forced to be async +The command `:Prettier` by default is synchronous but can also be forced async -``` +```vim let g:prettier#exec_cmd_async = 1 ``` -Enable vim-prettier to run in files without requiring the "@format" doc tag +By default parsing errors will open the quickfix but can also be disabled + +```vim +let g:prettier#quickfix_enabled = 0 +``` + +To enable vim-prettier to run in files without requiring the "@format" doc tag. +First disable the default autoformat, then update to your own custom behaviour + +Running before saving sync: +```vim +let g:prettier#autoformat = 0 +autocmd BufWritePre *.js,*.css,*.scss,*.less Prettier ``` - autocmd BufWritePre *.js,*.css,*.scss,*.less call prettier#Prettier() + +Running before saving async (vim 8+): + +```vim +let g:prettier#autoformat = 0 +autocmd BufWritePre *.js,*.css,*.scss,*.less PrettierAsync ``` -Overwrite default configuration +Running before saving, changing text or leaving insert mode: + +```vim +" when running at every change you may want to disable quickfix +let g:prettier#quickfix_enabled = 0 +let g:prettier#autoformat = 0 +autocmd BufWritePre,TextChanged,InsertLeave *.js,*.css,*.scss,*.less PrettierAsync ``` + +### Overwrite default prettier configuration + +```vim " max line lengh that prettier will wrap on g:prettier#config#print_width = 80 diff --git a/autoload/prettier.vim b/autoload/prettier.vim index 66166f4..6c655d2 100644 --- a/autoload/prettier.vim +++ b/autoload/prettier.vim @@ -1,4 +1,5 @@ let s:root_dir = fnamemodify(resolve(expand('<sfile>:p')), ':h') +let s:prettier_job_running = 0 function! prettier#Prettier(...) abort let l:execCmd = s:Get_Prettier_Exec() @@ -55,11 +56,14 @@ function! s:Prettier_Exec_Sync(cmd) abort endfunction function! s:Prettier_Exec_Async(cmd) abort - call job_start(a:cmd, { - \ 'in_io': 'buffer', - \ 'in_name': bufname('%'), - \ 'err_cb': 'Prettier_Job_Error', - \ 'close_cb': 'Prettier_Job_Close' }) + if s:prettier_job_running != 1 + let s:prettier_job_running = 1 + call job_start(a:cmd, { + \ 'in_io': 'buffer', + \ 'in_name': bufname('%'), + \ 'err_cb': 'Prettier_Job_Error', + \ 'close_cb': 'Prettier_Job_Close' }) + endif endfunction function! Prettier_Job_Close(channel) abort @@ -71,17 +75,20 @@ function! Prettier_Job_Close(channel) abort " nothing to update if (getbufline(bufnr('%'), 1, '$') == l:out) + let s:prettier_job_running = 0 return endif if len(l:out) call s:Apply_Prettier_Format(l:out) write + let s:prettier_job_running = 0 endif endfunction function! Prettier_Job_Error(channel, msg) abort call s:Prettier_Parse_Error(split(a:msg, '\n')) + let s:prettier_job_running = 0 endfunction function! s:Handle_Parsing_Errors(out) abort @@ -225,7 +232,9 @@ endfunction function! s:Prettier_Parse_Error(errors) abort echohl WarningMsg | echom 'Prettier: failed to parse buffer.' | echohl NONE - call s:Handle_Parsing_Errors(a:errors) + if g:prettier#quickfix_enabled + call s:Handle_Parsing_Errors(a:errors) + endif endfunction " If we can't find any prettier installing we then suggest where to get it from diff --git a/doc/prettier.txt b/doc/prettier.txt index 08550ed..e60dc22 100644 --- a/doc/prettier.txt +++ b/doc/prettier.txt @@ -52,6 +52,10 @@ or > :Prettier < +If your are on vim 8+ you can also trigger async formatting by: +> + :PrettierAsync +< ============================================================================== CONFIGURATION *vim-prettier-configuration* @@ -59,15 +63,36 @@ Disable auto formatting of files that have "@format" tag > let g:prettier#autoformat = 0 < -The command `:Prettier` by default is synchronous but can be forced to be async +The command `:Prettier` by default is synchronous but can also be forced async > let g:prettier#exec_cmd_async = 1 < -Enable vim-prettier to run in files without requiring the "@format" doc tag +By default parsing errors will open the quickfix but can also be disabled +> + let g:prettier#exec_cmd_async = 1 +< +To enable vim-prettier to run in files without requiring the "@format" doc tag. +First disable the default autoformat, then update to your own custom behaviour + +Running before saving sync: +> + let g:prettier#autoformat = 0 + autocmd BufWritePre *.js,*.css,*.scss,*.less Prettier +< +Running before saving async (vim 8+): > - autocmd BufWritePre *.js,*.css,*.scss,*.less call prettier#Prettier() + let g:prettier#autoformat = 0 + autocmd BufWritePre *.js,*.css,*.scss,*.less PrettierAsync +< +Running before saving, changing text or leaving insert mode: +> + let g:prettier#autoformat = 0 + " when running at every change you may want to disable quickfix + let g:prettier#quickfix_enabled = 0 + + autocmd BufWritePre,TextChanged,InsertLeave *.js,*.css,*.scss,*.less PrettierAsync < -Overwrite default configuration +Overwrite default prettier configuration > " max line lengh that prettier will wrap on g:prettier#config#print_width = 80 diff --git a/plugin/prettier.vim b/plugin/prettier.vim index 729ec2e..53bb4ed 100644 --- a/plugin/prettier.vim +++ b/plugin/prettier.vim @@ -1,3 +1,16 @@ +" vim-prettier: A vim plugin wrapper for prettier, pre-configured with custom default prettier settings. +" +" Script Info {{{ +"========================================================================================================== +" Name Of File: prettier.vim +" Description: A vim plugin wrapper for prettier, pre-configured with custom default prettier settings. +" Maintainer: Mitermayer Reis <mitermayer.reis at gmail.com> +" Version: 0.0.5 +" Usage: Use :help vim-prettier-usage, or visit https://github.com/mitermayer/vim-prettier +" +"========================================================================================================== +" }}} + if exists('g:loaded_prettier') finish endif @@ -5,44 +18,51 @@ let g:loaded_prettier = 1 " => Plugin config " autoformating enabled by default upon saving -let g:prettier#autoformat = get(g:, 'g:prettier#autoformat', 1) +let g:prettier#autoformat = get(g:, 'prettier#autoformat', 1) " calling :Prettier by default runs synchronous -let g:prettier#exec_cmd_async = get(g:, 'g:prettier#exec_cmd_async', 0) +let g:prettier#exec_cmd_async = get(g:, 'prettier#exec_cmd_async', 0) + +" when having formatting errors will open the quickfix by default +let g:prettier#quickfix_enabled = get(g:, 'prettier#quickfix_enabled', 1) " => Prettier CLI config " max line lengh that prettier will wrap on -let g:prettier#config#print_width = get(g:, 'g:prettier#config#print_width', 80) +let g:prettier#config#print_width = get(g:, 'prettier#config#print_width', 80) " number of spaces per indentation level -let g:prettier#config#tab_width = get(g:,'g:prettier#config#tab_width', 2) +let g:prettier#config#tab_width = get(g:,'prettier#config#tab_width', 2) " use tabs over spaces -let g:prettier#config#use_tabs = get(g:,'g:prettier#config#use_tabs', 'false') +let g:prettier#config#use_tabs = get(g:,'prettier#config#use_tabs', 'false') " print semicolons -let g:prettier#config#semi = get(g:,'g:prettier#config#semi', 'true') +let g:prettier#config#semi = get(g:,'prettier#config#semi', 'true') " single quotes over double quotes -let g:prettier#config#single_quote = get(g:,'g:prettier#config#single_quote', 'true') +let g:prettier#config#single_quote = get(g:,'prettier#config#single_quote', 'true') " print spaces between brackets -let g:prettier#config#bracket_spacing = get(g:,'g:prettier#config#bracket_spacing', 'false') +let g:prettier#config#bracket_spacing = get(g:,'prettier#config#bracket_spacing', 'false') " put > on the last line instead of new line -let g:prettier#config#jsx_bracket_same_line = get(g:,'g:prettier#config#jsx_bracket_same_line', 'true') +let g:prettier#config#jsx_bracket_same_line = get(g:,'prettier#config#jsx_bracket_same_line', 'true') " none|es5|all -let g:prettier#config#trailing_comma = get(g:,'g:prettier#config#trailing_comma', 'all') +let g:prettier#config#trailing_comma = get(g:,'prettier#config#trailing_comma', 'all') " flow|babylon|typescript|postcss -let g:prettier#config#parser = get(g:,'g:prettier#config#parser', 'flow') +let g:prettier#config#parser = get(g:,'prettier#config#parser', 'flow') " synchronous by default command! Prettier call prettier#Prettier(g:prettier#exec_cmd_async) +" prettier async +command! PrettierAsync call prettier#Prettier(1) + " map command if !hasmapto('<Plug>(Prettier)') && maparg('<Leader>p', 'n') ==# '' nmap <unique> <Leader>p <Plug>(Prettier) endif nnoremap <silent> <Plug>(Prettier) :Prettier<CR> +nnoremap <silent> <Plug>(PrettierAsync) :PrettierAsync<CR> |
