aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--README.md49
-rw-r--r--autoload/prettier.vim21
-rw-r--r--doc/prettier.txt9
-rw-r--r--plugin/prettier.vim42
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
<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>