From fc25ce1a3c1ca0b8128c5c745c87932aba9fc32a Mon Sep 17 00:00:00 2001 From: Christian Höltje Date: Fri, 13 Apr 2018 00:22:37 -0400 Subject: Start using prettier default arguments This is one approach for handling default prettier arguments. It is a little verbose, but I think ejecting the flags that don't have to be set by the editor (in favor of .prettierrc files) is a win. --- README.md | 55 +++++++-------------- autoload/prettier.vim | 130 ++++++++++++++++++++++++++++++++------------------ doc/prettier.txt | 45 +++++++---------- plugin/prettier.vim | 45 +++++++---------- 4 files changed, 137 insertions(+), 138 deletions(-) diff --git a/README.md b/README.md index c5cbeeb..f56174e 100644 --- a/README.md +++ b/README.md @@ -198,50 +198,31 @@ autocmd BufWritePre,TextChanged,InsertLeave *.js,*.jsx,*.mjs,*.ts,*.tsx,*.css,*. However they can be configured by: ```vim -" max line length that prettier will wrap on -" Prettier default: 80 -let g:prettier#config#print_width = 80 +" Max line length that prettier will wrap on: a number or 'auto' (use +" textwidth). +" default: 'auto' +let g:prettier#config#print_width = 'auto' -" number of spaces per indentation level -" Prettier default: 2 -let g:prettier#config#tab_width = 2 +" number of spaces per indentation level: a number or 'auto' (use +" softtabstop) +" default: 'auto' +let g:prettier#config#tab_width = 'auto' -" use tabs over spaces -" Prettier default: false -let g:prettier#config#use_tabs = 'false' +" use tabs instead of spaces: true, false, or auto (use the expandtab setting). +" default: 'auto' +let g:prettier#config#use_tabs = 'auto' -" print semicolons -" Prettier default: true -let g:prettier#config#semi = 'true' - -" single quotes over double quotes -" Prettier default: false -let g:prettier#config#single_quote = 'true' - -" print spaces between brackets -" Prettier default: true -let g:prettier#config#bracket_spacing = 'false' - -" put > on the last line instead of new line -" Prettier default: false -let g:prettier#config#jsx_bracket_same_line = 'true' - -" avoid|always -" Prettier default: avoid -let g:prettier#config#arrow_parens = 'always' - -" none|es5|all -" Prettier default: none -let g:prettier#config#trailing_comma = 'all' - -" flow|babylon|typescript|css|less|scss|json|graphql|markdown -" Prettier default: babylon -let g:prettier#config#parser = 'flow' +" flow|babylon|typescript|css|less|scss|json|graphql|markdown or empty string +" (let prettier choose). +" default: '' +let g:prettier#config#parser = '' " cli-override|file-override|prefer-file -let g:prettier#config#config_precedence = 'prefer-file' +" default: 'cli-override' +let g:prettier#config#config_precedence = 'cli-override' " always|never|preserve +" default: 'preserve' let g:prettier#config#prose_wrap = 'preserve' " css|strict|ignore diff --git a/autoload/prettier.vim b/autoload/prettier.vim index 52e9ea8..7cf9cca 100644 --- a/autoload/prettier.vim +++ b/autoload/prettier.vim @@ -5,7 +5,7 @@ " Name Of File: prettier.vim " Description: A vim plugin wrapper for prettier, pre-configured with custom default prettier settings. " Maintainer: Mitermayer Reis -" Version: 0.2.7 +" Version: 0.2.6 " Usage: Use :help vim-prettier-usage, or visit https://github.com/prettier/vim-prettier " "========================================================================================================== @@ -168,14 +168,14 @@ function! s:Prettier_Exec_Async(cmd, startSelection, endSelection) abort if s:prettier_job_running != 1 let s:prettier_job_running = 1 - let l:job = job_start([&shell, &shellcmdflag, l:async_cmd], { - \ 'out_io': 'buffer', + call job_start([&shell, &shellcmdflag, l:async_cmd], { + \ 'in_io': 'buffer', + \ 'in_top': a:startSelection, + \ 'in_bot': a:endSelection, + \ 'in_name': l:bufferName, \ 'err_cb': {channel, msg -> s:Prettier_Job_Error(msg)}, \ 'close_cb': {channel -> s:Prettier_Job_Close(channel, a:startSelection, a:endSelection, l:bufferName)}}) - let l:stdin = job_getchannel(l:job) - call ch_sendraw(l:stdin, join(getbufline(bufnr(l:bufferName), a:startSelection,a:endSelection), "\n")) - call ch_close_in(l:stdin) - endif + endif endfunction function! s:Prettier_Job_Close(channel, startSelection, endSelection, bufferName) abort @@ -183,14 +183,13 @@ function! s:Prettier_Job_Close(channel, startSelection, endSelection, bufferName let l:currentBufferName = bufname('%') let l:isInsideAnotherBuffer = a:bufferName != l:currentBufferName ? 1 : 0 - let l:buff = ch_getbufnr(a:channel, 'out') - let l:out = getbufline(l:buff, 2, '$') - execute 'bd!' . l:buff + while ch_status(a:channel) ==# 'buffered' + call add(l:out, ch_read(a:channel)) + endwhile " nothing to update if (s:Has_Content_Changed(l:out, a:startSelection, a:endSelection) == 0) let s:prettier_job_running = 0 - redraw! return endif @@ -279,55 +278,92 @@ function! s:Apply_Prettier_Format(lines, startSelection, endSelection) abort endif " delete all lines on the current buffer - silent! execute '%delete _' + silent! execute len(l:newBuffer) . ',' . line('$') . 'delete _' " replace all lines from the current buffer with output from prettier - let l:idx = 0 - for l:line in l:newBuffer - silent! call append(l:idx, l:line) - let l:idx += 1 - endfor - - " delete trailing newline introduced by the above append procedure - silent! execute '$delete _' - + call setline(1, l:newBuffer) + " Restore view call winrestview(l:winview) endfunction +" Returns either '--use-tabs' or an empty string. +function! s:Flag_use_tabs(config) abort + let l:value = get(a:config, 'useTabs', g:prettier#config#use_tabs) + if (l:value ==# 'auto') + let l:value = &expandtab ? 'false' : 'true' + endif + + if ( l:value ==# 'true' ) + return '--use-tabs' + else + return '' + endif +endfunction + +" Backwards compatable version of shiftwidth() +function! s:sw() abort + if exists('*shiftwidth') + return shiftwidth() + else + return &shiftwidth + endif +endfunction + +" Returns '--tab-width=NN' +function! s:Flag_tab_width(config) abort + let l:value = get(a:config, 'tabWidth', g:prettier#config#tab_width) + + if (l:value ==# 'auto') + let l:value = s:sw() + endif + + return '--tab-width=' . l:value +endfunction + +" Returns '--print-width=NN' or '' +function! s:Flag_print_width(config) abort + let l:value = get(a:config, 'printWidth', g:prettier#config#print_width) + + if (l:value ==# 'auto') + let l:value = &textwidth + endif + + if (l:value > 0) + return '--print-width=' . l:value + else + return '' + endif +endfunction + +" Returns '--parser=PARSER' or '' +function! s:Flag_parser(config) abort + let l:value = get(a:config, 'parser', g:prettier#config#parser) + + if (l:value !=# '') + return '--parser=' . l:value + else + return '' + endif +endfunction + " By default we will default to our internal " configuration settings for prettier function! s:Get_Prettier_Exec_Args(config) abort " Allow params to be passed as json format " convert bellow usage of globals to a get function o the params defaulting to global - let l:cmd = ' --print-width ' . - \ get(a:config, 'printWidth', g:prettier#config#print_width) . - \ ' --tab-width ' . - \ get(a:config, 'tabWidth', g:prettier#config#tab_width) . - \ ' --use-tabs ' . - \ get(a:config, 'useTabs', g:prettier#config#use_tabs) . - \ ' --semi ' . - \ get(a:config, 'semi', g:prettier#config#semi) . - \ ' --single-quote ' . - \ get(a:config, 'singleQuote', g:prettier#config#single_quote) . - \ ' --bracket-spacing ' . - \ get(a:config, 'bracketSpacing', g:prettier#config#bracket_spacing) . - \ ' --jsx-bracket-same-line ' . - \ get(a:config, 'jsxBracketSameLine', g:prettier#config#jsx_bracket_same_line) . - \ ' --arrow-parens ' . - \ get(a:config, 'arrowParens', g:prettier#config#arrow_parens) . - \ ' --trailing-comma ' . - \ get(a:config, 'trailingComma', g:prettier#config#trailing_comma) . - \ ' --parser ' . - \ get(a:config, 'parser', g:prettier#config#parser) . - \ ' --config-precedence ' . + " TODO: Use a list, filter() and join() to get a nicer list of args. + let l:cmd = s:Flag_use_tabs(a:config) . ' ' . + \ s:Flag_tab_width(a:config) . ' ' . + \ s:Flag_print_width(a:config) . ' ' . + \ s:Flag_parser(a:config) . ' ' . + \ ' --config-precedence=' . \ get(a:config, 'configPrecedence', g:prettier#config#config_precedence) . - \ ' --prose-wrap ' . + \ ' --prose-wrap=' . \ get(a:config, 'proseWrap', g:prettier#config#prose_wrap) . - \ ' --html-whitespace-sensitivity ' . - \ get(a:config, 'htmlWhitespaceSensitivity', g:prettier#config#html_whitespace_sensitivity) . - \ ' --stdin-filepath "' . - \ simplify(expand('%:p')) . '"' . + \ ' --stdin-filepath=' . + \ simplify(expand('%:p')) . + \ ' --no-editorconfig '. \ ' --loglevel error '. \ ' --stdin ' return l:cmd diff --git a/doc/prettier.txt b/doc/prettier.txt index 67ba8d0..386da33 100644 --- a/doc/prettier.txt +++ b/doc/prettier.txt @@ -139,40 +139,31 @@ Overwrite default prettier configuration **Note:** vim-prettier default settings differ from prettier intentionally. However they can be configured by: > - " max line length that prettier will wrap on - let g:prettier#config#print_width = 80 + " Max line length that prettier will wrap on: a number or 'auto' (use + " textwidth). + " default: 'auto' + let g:prettier#config#print_width = 'auto' - " number of spaces per indentation level - let g:prettier#config#tab_width = 2 + " number of spaces per indentation level: a number or 'auto' (use + " softtabstop) + " default: 'auto' + let g:prettier#config#tab_width = 'auto' - " use tabs over spaces - let g:prettier#config#use_tabs = 'false' + " use tabs instead of spaces: true, false, or auto (use the expandtab setting). + " default: 'auto' + let g:prettier#config#use_tabs = 'auto' - " print semicolons - let g:prettier#config#semi = 'true' - - " single quotes over double quotes - let g:prettier#config#single_quote = 'true' - - " print spaces between brackets - let g:prettier#config#bracket_spacing = 'false' - - " put > on the last line instead of new line - let g:prettier#config#jsx_bracket_same_line = 'true' - - " avoid|always - let g:prettier#config#arrow_parens = 'always' - - " none|es5|all - let g:prettier#config#trailing_comma = 'all' - - " flow|babylon|typescript|css|less|scss|json|graphql|markdown - let g:prettier#config#parser = 'flow' + " flow|babylon|typescript|css|less|scss|json|graphql|markdown or empty string + " (let prettier choose). + " default: '' + let g:prettier#config#parser = '' " cli-override|file-override|prefer-file - let g:prettier#config#config_precedence = 'prefer-file' + " default: 'cli-override' + let g:prettier#config#config_precedence = 'cli-override' " always|never|preserve + " default: 'preserve' let g:prettier#config#prose_wrap = 'preserve' " css|strict|ignore diff --git a/plugin/prettier.vim b/plugin/prettier.vim index 84b2485..3fc333a 100644 --- a/plugin/prettier.vim +++ b/plugin/prettier.vim @@ -33,40 +33,31 @@ let g:prettier#exec_cmd_async = get(g:, 'prettier#exec_cmd_async', 0) 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:, 'prettier#config#print_width', 80) +" Max line length that prettier will wrap on: a number or 'auto' (use +" textwidth). +" default: 'auto' +let g:prettier#config#print_width = get(g:, 'prettier#config#print_width', 'auto') -" number of spaces per indentation level -let g:prettier#config#tab_width = get(g:,'prettier#config#tab_width', 2) +" number of spaces per indentation level: a number or 'auto' (use +" softtabstop) +" default: 'auto' +let g:prettier#config#tab_width = get(g:,'prettier#config#tab_width', 'auto') -" use tabs over spaces -let g:prettier#config#use_tabs = get(g:,'prettier#config#use_tabs', 'false') +" use tabs instead of spaces: true, false, or auto (use the expandtab setting). +" default: 'auto' +let g:prettier#config#use_tabs = get(g:,'prettier#config#use_tabs', 'auto') -" print semicolons -let g:prettier#config#semi = get(g:,'prettier#config#semi', 'true') - -" single quotes over double quotes -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:,'prettier#config#bracket_spacing', 'false') - -" put > on the last line instead of new line -let g:prettier#config#jsx_bracket_same_line = get(g:,'prettier#config#jsx_bracket_same_line', 'true') - -" avoid wrapping a single arrow function param in parens -let g:prettier#config#arrow_parens = get(g:,'prettier#config#arrow_parens', 'avoid') - -" none|es5|all -let g:prettier#config#trailing_comma = get(g:,'prettier#config#trailing_comma', 'all') - -" flow|babylon|typescript|postcss|json|graphql -let g:prettier#config#parser = get(g:,'prettier#config#parser', 'flow') +" flow|babylon|typescript|css|less|scss|json|graphql|markdown or empty string +" (let prettier choose). +" default: '' +let g:prettier#config#parser = get(g:,'prettier#config#parser', '') " cli-override|file-override|prefer-file -let g:prettier#config#config_precedence = get(g:, 'prettier#config#config_precedence', 'prefer-file') +" default: 'cli-override' +let g:prettier#config#config_precedence = get(g:, 'prettier#config#config_precedence', 'cli-override') " always|never|preserve +" default: 'preserve' let g:prettier#config#prose_wrap = get(g:, 'prettier#config#prose_wrap', 'preserve') " css|strict|ignore -- cgit v1.3