From c211c98ab7118be61873d0fe9897e5986c6f6441 Mon Sep 17 00:00:00 2001 From: mitermayer Date: Wed, 7 Jun 2017 10:45:48 -0700 Subject: 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 --- README.md | 49 +++++++++++++++++++++++++++++++++++++++++-------- autoload/prettier.vim | 21 +++++++++++++++------ doc/prettier.txt | 9 ++++++++- plugin/prettier.vim | 42 +++++++++++++++++++++++++++++++----------- 4 files changed, 95 insertions(+), 26 deletions(-) diff --git a/README.md b/README.md index 37fc501..0a87d7e 100644 --- a/README.md +++ b/README.md @@ -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 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(':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 +" 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('(Prettier)') && maparg('p', 'n') ==# '' nmap p (Prettier) endif nnoremap (Prettier) :Prettier +nnoremap (PrettierAsync) :PrettierAsync -- cgit v1.3 From e063d0ca656a7413da3cc6b543adde58a09f8c01 Mon Sep 17 00:00:00 2001 From: mitermayer Date: Wed, 7 Jun 2017 11:11:43 -0700 Subject: Updating docs --- README.md | 22 +++++++++++----------- doc/prettier.txt | 32 +++++++++++++++++++++++++------- plugin/prettier.vim | 2 +- 3 files changed, 37 insertions(+), 19 deletions(-) diff --git a/README.md b/README.md index 0a87d7e..33573ea 100644 --- a/README.md +++ b/README.md @@ -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,7 +29,7 @@ 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: @@ -48,7 +48,7 @@ If your are on vim 8+ you can also trigger async formatting by: :PrettierAsync ``` -## Configuration +### Configuration Disable auto formatting of files that have "@format" tag @@ -56,13 +56,13 @@ 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 ```vim let g:prettier#exec_cmd_async = 1 ``` -By default parsing errors will open the quickfix, that behaviour can be controlled by +By default parsing errors will open the quickfix but can also be disabled ```vim let g:prettier#quickfix_enabled = 0 @@ -74,28 +74,28 @@ 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 +let g:prettier#autoformat = 0 +autocmd BufWritePre *.js,*.css,*.scss,*.less Prettier ``` Running before saving async (vim 8+): ```vim - let g:prettier#autoformat = 0 - autocmd BufWritePre *.js,*.css,*.scss,*.less PrettierAsync +let g:prettier#autoformat = 0 +autocmd BufWritePre *.js,*.css,*.scss,*.less PrettierAsync ``` 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 +" 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 configuration +### Overwrite default prettier configuration ```vim " max line lengh that prettier will wrap on diff --git a/doc/prettier.txt b/doc/prettier.txt index d26a299..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,22 +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 > - " => for older vim you can run it synchronous before saving - autocmd BufWritePre *.js,*.css,*.scss,*.less Prettier + 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 - " => vim greater than 8.0 has async support +Running before saving sync: +> + let g:prettier#autoformat = 0 + autocmd BufWritePre *.js,*.css,*.scss,*.less Prettier +< +Running before saving async (vim 8+): +> + 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 - " => if you want prettier to run when changes happen 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 9ad1ae7..53bb4ed 100644 --- a/plugin/prettier.vim +++ b/plugin/prettier.vim @@ -6,7 +6,7 @@ " Description: A vim plugin wrapper for prettier, pre-configured with custom default prettier settings. " Maintainer: Mitermayer Reis " Version: 0.0.5 -" Usage: Use :help vim-prettier, or visit the Github page https://github.com/mitermayer/vim-prettier +" Usage: Use :help vim-prettier-usage, or visit https://github.com/mitermayer/vim-prettier " "========================================================================================================== " }}} -- cgit v1.3