aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMitermayer Reis <mitermayer.reis@gmail.com>2017-06-07 11:16:22 -0700
committerGitHub <noreply@github.com>2017-06-07 11:16:22 -0700
commit524a03cf3ddd8b98d8e631330b336f9aae4cfaed (patch)
treeff4fe2d636b6026523352881e317eaa29dfd017c
parentc28004d9c616a3599e8d0622c87fa071aa2342e8 (diff)
parente063d0ca656a7413da3cc6b543adde58a09f8c01 (diff)
downloadvim-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.md57
-rw-r--r--autoload/prettier.vim21
-rw-r--r--doc/prettier.txt33
-rw-r--r--plugin/prettier.vim42
4 files changed, 120 insertions, 33 deletions
diff --git a/README.md b/README.md
index 37fc501..33573ea 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',
@@ -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>