diff options
| author | mitermayer <mitermayer.reis@gmail.com> | 2017-06-07 10:45:48 -0700 |
|---|---|---|
| committer | mitermayer <mitermayer.reis@gmail.com> | 2017-06-07 10:46:20 -0700 |
| commit | c211c98ab7118be61873d0fe9897e5986c6f6441 (patch) | |
| tree | fc18e666a6f7446ca8021119f16eb28b729e4e04 | |
| parent | c28004d9c616a3599e8d0622c87fa071aa2342e8 (diff) | |
| download | vim-prettier-c211c98ab7118be61873d0fe9897e5986c6f6441.tar.xz | |
Adding async command and user configurations
- Adding configuration toggle for controlling error quick fix parsing
- Adding PrettierAsync command
- Fixing configuration bug where boolean values where not correctly
parsed
- Making sure that async jobs do not execute if already in progress
| -rw-r--r-- | README.md | 49 | ||||
| -rw-r--r-- | autoload/prettier.vim | 21 | ||||
| -rw-r--r-- | doc/prettier.txt | 9 | ||||
| -rw-r--r-- | plugin/prettier.vim | 42 |
4 files changed, 95 insertions, 26 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', @@ -33,38 +33,71 @@ vim-prettier executable resolution: Prettier by default will run on auto save but can also be manualy triggered by: -``` +```vim <Leader>p ``` or -``` +```vim :Prettier ``` +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 -``` +```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, that behaviour can be controlled by + +```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 error parsing to reduce noise +let g:prettier#quickfix_enabled = 0 + +let g:prettier#autoformat = 0 +autocmd BufWritePre,TextChanged,InsertLeave *.js,*.css,*.scss,*.less PrettierAsync ``` + +Overwrite default 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..d26a299 100644 --- a/doc/prettier.txt +++ b/doc/prettier.txt @@ -65,7 +65,14 @@ The command `:Prettier` by default is synchronous but can be forced to be async < Enable vim-prettier to run in files without requiring the "@format" doc tag > - autocmd BufWritePre *.js,*.css,*.scss,*.less call prettier#Prettier() + " => for older vim you can run it synchronous before saving + autocmd BufWritePre *.js,*.css,*.scss,*.less Prettier + + " => vim greater than 8.0 has async support + autocmd BufWritePre *.js,*.css,*.scss,*.less PrettierAsync + + " => if you want prettier to run when changes happen + autocmd BufWritePre,TextChanged,InsertLeave *.js,*.css,*.scss,*.less PrettierAsync < Overwrite default configuration > diff --git a/plugin/prettier.vim b/plugin/prettier.vim index 729ec2e..9ad1ae7 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, or visit the Github page 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> |
