From c194baf8b30a27ed0075ca0eece270431bdaa913 Mon Sep 17 00:00:00 2001 From: Victor S Date: Wed, 4 Oct 2023 19:25:19 -0300 Subject: refactor: split range getter into two parts Split the function that returns the visual selection range into two parts that return the start and the end of the range respectively, and use them in the CLI-command composer. This is part of a plan to use a general object with details about flags to compose the CLI command. --- autoload/prettier/resolver/config.vim | 22 +++++++++++++++++----- 1 file changed, 17 insertions(+), 5 deletions(-) (limited to 'autoload/prettier/resolver/config.vim') diff --git a/autoload/prettier/resolver/config.vim b/autoload/prettier/resolver/config.vim index 9a18444..be36a7c 100644 --- a/autoload/prettier/resolver/config.vim +++ b/autoload/prettier/resolver/config.vim @@ -8,7 +8,8 @@ function! prettier#resolver#config#resolve(config, hasSelection, start, end) abo \ s:Flag_tab_width(a:config) . ' ' . \ s:Flag_print_width(a:config) . ' ' . \ s:Flag_parser(a:config) . ' ' . - \ s:Flag_range_delimiter(a:config, a:hasSelection, a:start, a:end) . ' ' . + \ s:Flag_range_start(a:config, a:hasSelection, a:start) . ' ' . + \ s:Flag_range_end(a:config, a:hasSelection, a:end) . ' ' . \ ' --semi=' . \ get(a:config, 'semi', g:prettier#config#semi) . \ ' --single-quote=' . @@ -38,15 +39,26 @@ function! prettier#resolver#config#resolve(config, hasSelection, start, end) abo return l:cmd endfunction -" Returns either '--range-start X --range-end Y' or an empty string. -function! s:Flag_range_delimiter(config, partialFormatEnabled, start, end) abort +" Returns either '--range-start X' or an empty string. +function! s:Flag_range_start(config, partialFormatEnabled, start) abort if (!a:partialFormatEnabled) return '' endif - let l:range = prettier#utils#buffer#getCharRange(a:start, a:end) + let l:rangeStart = prettier#utils#buffer#getCharRangeStart(a:start) - return '--range-start=' . l:range[0] . ' --range-end=' . l:range[1] + return '--range-start=' . l:rangeStart +endfunction + +" Returns either '--range-end Y' or an empty string. +function! s:Flag_range_end(config, partialFormatEnabled, end) abort + if (!a:partialFormatEnabled) + return '' + endif + + let l:rangeEnd = prettier#utils#buffer#getCharRangeEnd(a:end) + + return '--range-end=' . l:rangeEnd endfunction " Returns '--tab-width=NN' -- cgit v1.3 From 3cfe7aa460fba552cd1b5ca4e1c772bb20889ba3 Mon Sep 17 00:00:00 2001 From: Victor S Date: Wed, 4 Oct 2023 21:38:32 -0300 Subject: refactor: use function to get --stdin-filepath Added a new function to get the command part of the --stdin-filepath flag. This is part of a plan to compose the CLI command from an object with flag details. --- autoload/prettier/resolver/config.vim | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) (limited to 'autoload/prettier/resolver/config.vim') diff --git a/autoload/prettier/resolver/config.vim b/autoload/prettier/resolver/config.vim index be36a7c..d790286 100644 --- a/autoload/prettier/resolver/config.vim +++ b/autoload/prettier/resolver/config.vim @@ -28,7 +28,7 @@ function! prettier#resolver#config#resolve(config, hasSelection, start, end) abo \ 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')).'"' . + \ ' ' . s:Flag_stdin_filepath() . \ ' --require-pragma=' . \ get(a:config, 'requirePragma', g:prettier#config#require_pragma) . \ ' --end-of-line=' . @@ -111,3 +111,10 @@ function! s:Flag_parser(config) abort return '' endif endfunction + +" Returns '--stdin-filepath=' concatenated with the full path of the opened +" file. +function! s:Flag_stdin_filepath() abort + let l:current_file = simplify(expand('%:p')) + return '--stdin-filepath="' . l:current_file . '"' +endfunction -- cgit v1.3 From a9b3db0626a267f6366294cc1434088c98c4b432 Mon Sep 17 00:00:00 2001 From: Victor S Date: Wed, 4 Oct 2023 23:01:27 -0300 Subject: refactor: use function to get --loglevel Added a new function to return the CLI command part for the --loglevel flag. This is part of a plan to compose the CLI command from a general object with flag details. --- autoload/prettier/resolver/config.vim | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) (limited to 'autoload/prettier/resolver/config.vim') diff --git a/autoload/prettier/resolver/config.vim b/autoload/prettier/resolver/config.vim index d790286..0abea0c 100644 --- a/autoload/prettier/resolver/config.vim +++ b/autoload/prettier/resolver/config.vim @@ -33,7 +33,7 @@ function! prettier#resolver#config#resolve(config, hasSelection, start, end) abo \ get(a:config, 'requirePragma', g:prettier#config#require_pragma) . \ ' --end-of-line=' . \ get(a:config, 'endOfLine', g:prettier#config#end_of_line) . - \ ' --loglevel error '. + \ ' ' . s:Flag_loglevel() . \ ' --stdin ' return l:cmd @@ -118,3 +118,9 @@ function! s:Flag_stdin_filepath() abort let l:current_file = simplify(expand('%:p')) return '--stdin-filepath="' . l:current_file . '"' endfunction + +" Returns '--loglevel error'. +function! s:Flag_loglevel() abort + let l:level = 'error' + return '--loglevel ' . l:level +endfunction -- cgit v1.3 From d512812ac78f8a1d98db469ffeefb99a368716a8 Mon Sep 17 00:00:00 2001 From: Victor S Date: Wed, 4 Oct 2023 23:29:51 -0300 Subject: refactor: use function to get --stdin Added a new function to return the CLI command part for the --stdin flag. This is part of a plan use an object with flag details to compose the CLI command. --- autoload/prettier/resolver/config.vim | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) (limited to 'autoload/prettier/resolver/config.vim') diff --git a/autoload/prettier/resolver/config.vim b/autoload/prettier/resolver/config.vim index 0abea0c..3b841aa 100644 --- a/autoload/prettier/resolver/config.vim +++ b/autoload/prettier/resolver/config.vim @@ -34,7 +34,7 @@ function! prettier#resolver#config#resolve(config, hasSelection, start, end) abo \ ' --end-of-line=' . \ get(a:config, 'endOfLine', g:prettier#config#end_of_line) . \ ' ' . s:Flag_loglevel() . - \ ' --stdin ' + \ ' ' . s:Flag_stdin() return l:cmd endfunction @@ -124,3 +124,8 @@ function! s:Flag_loglevel() abort let l:level = 'error' return '--loglevel ' . l:level endfunction + +" Returns '--stdin'. +function! s:Flag_stdin() abort + return '--stdin ' +endfunction -- cgit v1.3 From 067173cf302a4305a0f468910f47f7b008a42b1f Mon Sep 17 00:00:00 2001 From: Victor S Date: Wed, 4 Oct 2023 23:34:09 -0300 Subject: refactor: add flag-mapper functions Added general mapper functions that map flag names to parts of a CLI command. They are part a plan to use an object with flag details to compose the CLI command. --- autoload/prettier/resolver/config.vim | 15 +++++++++++++++ 1 file changed, 15 insertions(+) (limited to 'autoload/prettier/resolver/config.vim') diff --git a/autoload/prettier/resolver/config.vim b/autoload/prettier/resolver/config.vim index 3b841aa..2b66ede 100644 --- a/autoload/prettier/resolver/config.vim +++ b/autoload/prettier/resolver/config.vim @@ -129,3 +129,18 @@ endfunction function! s:Flag_stdin() abort return '--stdin ' endfunction + +" Returns a flag name concantenated with its value in the JSON config object or +" in the default global Prettier config. +function! s:Concat_value_to_flag(config_and_sel, flag, props) abort + let l:global_value = get(g:, 'prettier#config#' . a:props.global_name, "") + + let l:value = get(a:config_and_sel.config, a:props.json_name, l:global_value) + + return a:flag . '=' . l:value +endfunction + +" Maps a flag name to a part of a command. +function! s:Map_flag_to_cmd_part(config_and_sel, flag, props) abort + return a:props.mapper(a:config_and_sel, a:flag, a:props) +endfunction -- cgit v1.3 From dda5954fd6297f4c59bb5891e2641c7d9c3cbd20 Mon Sep 17 00:00:00 2001 From: Victor S Date: Thu, 5 Oct 2023 00:20:46 -0300 Subject: refactor: use common parameters in flag functions Adapted flag-mapper functions to use the same parameters. This is part of a plan to expose a common interface from planned objects with flags, to make code flexible to future changes, and to compose the CLI command from a general object with flag details. --- autoload/prettier/resolver/config.vim | 73 ++++++++++++++++++++++------------- 1 file changed, 47 insertions(+), 26 deletions(-) (limited to 'autoload/prettier/resolver/config.vim') diff --git a/autoload/prettier/resolver/config.vim b/autoload/prettier/resolver/config.vim index 2b66ede..abdbb46 100644 --- a/autoload/prettier/resolver/config.vim +++ b/autoload/prettier/resolver/config.vim @@ -4,12 +4,18 @@ function! prettier#resolver#config#resolve(config, hasSelection, start, end) abo " Allow params to be passed as json format " convert bellow usage of globals to a get function o the params defaulting to global " 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) . ' ' . - \ s:Flag_range_start(a:config, a:hasSelection, a:start) . ' ' . - \ s:Flag_range_end(a:config, a:hasSelection, a:end) . ' ' . + let l:config_and_sel = { + \ 'config': a:config, + \ 'hasSelection': a:hasSelection, + \ 'start': a:start, + \ 'end': a:end} + + let l:cmd = s:Flag_use_tabs(l:config_and_sel, '--use-tabs', {}) . ' ' . + \ s:Flag_tab_width(l:config_and_sel, '--tab-width', {}) . ' ' . + \ s:Flag_print_width(l:config_and_sel, '--print-width', {}) . ' ' . + \ s:Flag_parser(l:config_and_sel, '--parser', {}) . ' ' . + \ s:Flag_range_start(l:config_and_sel, '', {}) . ' ' . + \ s:Flag_range_end(l:config_and_sel, '', {}) . ' ' . \ ' --semi=' . \ get(a:config, 'semi', g:prettier#config#semi) . \ ' --single-quote=' . @@ -28,42 +34,47 @@ function! prettier#resolver#config#resolve(config, hasSelection, start, end) abo \ get(a:config, 'proseWrap', g:prettier#config#prose_wrap) . \ ' --html-whitespace-sensitivity ' . \ get(a:config, 'htmlWhitespaceSensitivity', g:prettier#config#html_whitespace_sensitivity) . - \ ' ' . s:Flag_stdin_filepath() . + \ ' ' . s:Flag_stdin_filepath(l:config_and_sel, '--stdin-filepath', {}) . \ ' --require-pragma=' . \ get(a:config, 'requirePragma', g:prettier#config#require_pragma) . \ ' --end-of-line=' . \ get(a:config, 'endOfLine', g:prettier#config#end_of_line) . - \ ' ' . s:Flag_loglevel() . - \ ' ' . s:Flag_stdin() + \ ' ' . s:Flag_loglevel(l:config_and_sel, '--loglevel', {}) . + \ ' ' . s:Flag_stdin(l:config_and_sel, '--stdin', {}) return l:cmd endfunction " Returns either '--range-start X' or an empty string. -function! s:Flag_range_start(config, partialFormatEnabled, start) abort - if (!a:partialFormatEnabled) +function! s:Flag_range_start(config_and_sel, ...) abort + if (!a:config_and_sel.hasSelection) return '' endif - let l:rangeStart = prettier#utils#buffer#getCharRangeStart(a:start) + let l:rangeStart = + \ prettier#utils#buffer#getCharRangeStart(a:config_and_sel.start) return '--range-start=' . l:rangeStart endfunction " Returns either '--range-end Y' or an empty string. -function! s:Flag_range_end(config, partialFormatEnabled, end) abort - if (!a:partialFormatEnabled) +function! s:Flag_range_end(config_and_sel, ...) abort + if (!a:config_and_sel.hasSelection) return '' endif - let l:rangeEnd = prettier#utils#buffer#getCharRangeEnd(a:end) + let l:rangeEnd = + \ prettier#utils#buffer#getCharRangeEnd(a:config_and_sel.end) return '--range-end=' . l:rangeEnd endfunction " Returns '--tab-width=NN' -function! s:Flag_tab_width(config) abort - let l:value = get(a:config, 'tabWidth', g:prettier#config#tab_width) +function! s:Flag_tab_width(config_and_sel, ...) abort + let l:value = get( + \ a:config_and_sel.config, + \ 'tabWidth', + \ g:prettier#config#tab_width) if (l:value ==# 'auto') let l:value = prettier#utils#shim#shiftwidth() @@ -73,8 +84,12 @@ function! s:Flag_tab_width(config) abort 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) +function! s:Flag_use_tabs(config_and_sel, ...) abort + let l:value = get( + \ a:config_and_sel.config, + \ 'useTabs', + \ g:prettier#config#use_tabs) + if (l:value ==# 'auto') let l:value = &expandtab ? 'false' : 'true' endif @@ -87,8 +102,11 @@ function! s:Flag_use_tabs(config) abort 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) +function! s:Flag_print_width(config_and_sel, ...) abort + let l:value = get( + \ a:config_and_sel.config, + \ 'printWidth', + \ g:prettier#config#print_width) if (l:value ==# 'auto') let l:value = &textwidth @@ -102,8 +120,11 @@ function! s:Flag_print_width(config) abort endfunction " Returns '--parser=PARSER' or '' -function! s:Flag_parser(config) abort - let l:value = get(a:config, 'parser', g:prettier#config#parser) +function! s:Flag_parser(config_and_sel, ...) abort + let l:value = get( + \ a:config_and_sel.config, + \ 'parser', + \ g:prettier#config#parser) if (l:value !=# '') return '--parser=' . l:value @@ -114,19 +135,19 @@ endfunction " Returns '--stdin-filepath=' concatenated with the full path of the opened " file. -function! s:Flag_stdin_filepath() abort +function! s:Flag_stdin_filepath(...) abort let l:current_file = simplify(expand('%:p')) return '--stdin-filepath="' . l:current_file . '"' endfunction " Returns '--loglevel error'. -function! s:Flag_loglevel() abort +function! s:Flag_loglevel(config_and_sel, flag, props) abort let l:level = 'error' return '--loglevel ' . l:level endfunction " Returns '--stdin'. -function! s:Flag_stdin() abort +function! s:Flag_stdin(...) abort return '--stdin ' endfunction -- cgit v1.3 From 8e7155479fa65bf120caece1a171bc8fc81e2e27 Mon Sep 17 00:00:00 2001 From: Victor S Date: Sat, 7 Oct 2023 23:26:40 -0300 Subject: refactor: make mapper function reusable Changed the function to make it reusable across versions of the CLI flag. This is part of a plan to compose the CLI command from an object with details about the flags. --- autoload/prettier/resolver/config.vim | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'autoload/prettier/resolver/config.vim') diff --git a/autoload/prettier/resolver/config.vim b/autoload/prettier/resolver/config.vim index abdbb46..32f5c28 100644 --- a/autoload/prettier/resolver/config.vim +++ b/autoload/prettier/resolver/config.vim @@ -140,10 +140,10 @@ function! s:Flag_stdin_filepath(...) abort return '--stdin-filepath="' . l:current_file . '"' endfunction -" Returns '--loglevel error'. +" Returns '--loglevel error' or '--log-level error'. function! s:Flag_loglevel(config_and_sel, flag, props) abort let l:level = 'error' - return '--loglevel ' . l:level + return a:flag . ' ' . l:level endfunction " Returns '--stdin'. -- cgit v1.3 From 6649ecfdae2169e8b76d446aa162ce705685807f Mon Sep 17 00:00:00 2001 From: Victor S Date: Sat, 7 Oct 2023 23:30:50 -0300 Subject: refactor: add object with Prettier flags Added an object with details about Prettier CLI flags. This is part of a plan to compose the flags of the CLI command from a general object with flag details. --- autoload/prettier/resolver/config.vim | 101 ++++++++++++++++++++++++++++++++++ 1 file changed, 101 insertions(+) (limited to 'autoload/prettier/resolver/config.vim') diff --git a/autoload/prettier/resolver/config.vim b/autoload/prettier/resolver/config.vim index 32f5c28..430d994 100644 --- a/autoload/prettier/resolver/config.vim +++ b/autoload/prettier/resolver/config.vim @@ -165,3 +165,104 @@ endfunction function! s:Map_flag_to_cmd_part(config_and_sel, flag, props) abort return a:props.mapper(a:config_and_sel, a:flag, a:props) endfunction +let s:concat_value = function('s:Concat_value_to_flag') + +let s:FLAGS = { + \ '--use-tabs': { + \ 'json_name': 'useTabs', + \ 'global_name': 'use_tabs', + \ 'mapper': function('s:Flag_use_tabs')}, + \ '--tab-width': { + \ 'json_name': 'tabWidth', + \ 'global_name': 'tab_width', + \ 'mapper': function('s:Flag_tab_width')}, + \ '--print-width': { + \ 'json_name': 'printWidth', + \ 'global_name': 'print_width', + \ 'mapper': function('s:Flag_print_width')}, + \ '--parser': { + \ 'json_name': 'parser', + \ 'global_name': 'parser', + \ 'mapper': function('s:Flag_parser')}, + \ '--range-start': { + \ 'json_name': '', + \ 'global_name': '', + \ 'mapper': function('s:Flag_range_start')}, + \ '--range-end': { + \ 'json_name': '', + \ 'global_name': '', + \ 'mapper': function('s:Flag_range_end')}, + \ '--semi': { + \ 'json_name': 'semi', + \ 'global_name': 'semi', + \ 'mapper': s:concat_value}, + \ '--single-quote': { + \ 'json_name': 'singleQuote', + \ 'global_name': 'single_quote', + \ 'mapper': s:concat_value}, + \ '--bracket-spacing': { + \ 'json_name': 'bracketSpacing', + \ 'global_name': 'bracket_spacing', + \ 'mapper': s:concat_value}, + \ '--bracket-same-line': { + \ 'json_name': 'bracketSameLine', + \ 'global_name': 'bracket_same_line', + \ 'mapper': s:concat_value, + \ 'since': '2.4.0'}, + \ '--jsx-bracket-same-line': { + \ 'json_name': 'jsxBracketSameLine', + \ 'global_name': 'jsx_bracket_same_line', + \ 'mapper': s:concat_value, + \ 'deprecated': '2.4.0'}, + \ '--arrow-parens': { + \ 'json_name': 'arrowParens', + \ 'global_name': 'arrow_parens', + \ 'mapper': s:concat_value, + \ 'since': '1.9.0'}, + \ '--trailing-comma': { + \ 'json_name': 'trailingComma', + \ 'global_name': 'trailing_comma', + \ 'mapper': s:concat_value}, + \ '--config-precedence': { + \ 'json_name': 'configPrecedence', + \ 'global_name': 'config_precedence', + \ 'mapper': s:concat_value}, + \ '--prose-wrap': { + \ 'json_name': 'proseWrap', + \ 'global_name': 'prose_wrap', + \ 'mapper': s:concat_value, + \ 'since': '1.8.2'}, + \ '--html-whitespace-sensitivity': { + \ 'json_name': 'htmlWhitespaceSensitivity', + \ 'global_name': 'html_whitespace_sensitivity', + \ 'mapper': s:concat_value, + \ 'since': '1.15.0'}, + \ '--stdin-filepath': { + \ 'json_name': '', + \ 'global_name': '', + \ 'mapper': function('s:Flag_stdin_filepath')}, + \ '--require-pragma': { + \ 'json_name': 'requirePragma', + \ 'global_name': 'require_pragma', + \ 'mapper': s:concat_value, + \ 'since': '1.7.0'}, + \ '--end-of-line': { + \ 'json_name': 'endOfLine', + \ 'global_name': 'end_of_line', + \ 'mapper': s:concat_value, + \ 'since': '1.15.0'}, + \ '--loglevel': { + \ 'json_name': '', + \ 'global_name': '', + \ 'mapper': function('s:Flag_loglevel'), + \ 'deprecated': '3.0.0'}, + \ '--log-level': { + \ 'json_name': '', + \ 'global_name': '', + \ 'mapper': function('s:Flag_loglevel'), + \ 'since': '3.0.0'}, + \ '--stdin': { + \ 'json_name': '', + \ 'global_name': '', + \ 'mapper': function('s:Flag_stdin'), + \ 'deprecated': '2.0.0'}} -- cgit v1.3 From 6dd9a0813b78158254987e5452455000aabd6b02 Mon Sep 17 00:00:00 2001 From: Victor S Date: Sat, 7 Oct 2023 23:57:33 -0300 Subject: refactor: add helper functions to get CLI version Added two helper functions to get the version of the Prettier CLI as a string. This is part of a plan to compose the CLI command from an object with flag details. --- autoload/prettier/resolver/config.vim | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) (limited to 'autoload/prettier/resolver/config.vim') diff --git a/autoload/prettier/resolver/config.vim b/autoload/prettier/resolver/config.vim index 430d994..84dc933 100644 --- a/autoload/prettier/resolver/config.vim +++ b/autoload/prettier/resolver/config.vim @@ -266,3 +266,23 @@ let s:FLAGS = { \ 'global_name': '', \ 'mapper': function('s:Flag_stdin'), \ 'deprecated': '2.0.0'}} + +" Returns the argument string with unprintable characters represented in Vim +" internal format removed from both ends. +function! s:Trim_internal_unprintable(text) abort + let l:char_patt = '\%(\%(\^\m.\)\|\%(<\x\x>\)\)\{}' + let l:patt_at_ends = '^' . l:char_patt . '\|' . l:char_patt . '$' + let l:trimmed_text = a:text->substitute(l:patt_at_ends, '', 'g') + return l:trimmed_text +endfunction + +" Returns the version of the Prettier CLI as a string. +function! s:Get_prettier_cli_version() abort + let l:output = '' + redir => l:output + silent call prettier#PrettierCli('--version') + redir END + " The shell sends the string with whitespaces at both ends. + let l:prettier_cli_version = s:Trim_internal_unprintable(trim(l:output)) + return l:prettier_cli_version +endfunction -- cgit v1.3 From 3dfc0efda164980d30495153024410c347d07da8 Mon Sep 17 00:00:00 2001 From: Victor S Date: Sun, 8 Oct 2023 10:13:06 -0300 Subject: refactor: add function to filter flags by version Added a function to filter flags that are uncompatible with a supplied version. This is part of a plan to compose the flags of the CLI command from an object with flag details. --- autoload/prettier/resolver/config.vim | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) (limited to 'autoload/prettier/resolver/config.vim') diff --git a/autoload/prettier/resolver/config.vim b/autoload/prettier/resolver/config.vim index 84dc933..4350fa4 100644 --- a/autoload/prettier/resolver/config.vim +++ b/autoload/prettier/resolver/config.vim @@ -286,3 +286,22 @@ function! s:Get_prettier_cli_version() abort let l:prettier_cli_version = s:Trim_internal_unprintable(trim(l:output)) return l:prettier_cli_version endfunction + +" Returns 1 if the version of the flag argument is compatible with the +" version argument, otherwise returns 0. +function! s:Filter_uncompatible_flag(version, _, flag) abort + let l:is_deprecated = exists('a:flag.deprecated') + \ && prettier#utils#version#Is_greater_or_equal_version( + \ a:version, a:flag.deprecated) + if l:is_deprecated + return 0 + endif + + let l:is_added = !exists('a:flag.since') + \ || prettier#utils#version#Is_greater_or_equal_version( + \ a:version, a:flag.since) + if !l:is_added + return 0 + endif + return 1 +endfunction -- cgit v1.3 From b2ad859a252ded6de298e08ded2e89d23caa12f7 Mon Sep 17 00:00:00 2001 From: Victor S Date: Sun, 8 Oct 2023 11:12:11 -0300 Subject: refactor: add function to select compatible flags Added a function that selects the flags that are compatible with the version of the Prettier CLI being used. This is part of a plan to compose the flags of the CLI command from an object with flag details. --- autoload/prettier/resolver/config.vim | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) (limited to 'autoload/prettier/resolver/config.vim') diff --git a/autoload/prettier/resolver/config.vim b/autoload/prettier/resolver/config.vim index 4350fa4..c0c9190 100644 --- a/autoload/prettier/resolver/config.vim +++ b/autoload/prettier/resolver/config.vim @@ -305,3 +305,22 @@ function! s:Filter_uncompatible_flag(version, _, flag) abort endif return 1 endfunction + +" Returns an object with the flags from the argument object that are compatible +" with the version of the Prettier CLI being used. +function! s:Get_current_version_flags(flags) abort + let l:prettier_version = s:Get_prettier_cli_version() + + let l:is_cached = exists('b:prettier_cached_flags') + \ && exists('b:prettier_last_used_cli_version') + \ && b:prettier_last_used_cli_version ==# l:prettier_version + if l:is_cached + return b:prettier_cached_flags->copy() + endif + + let l:compatible_flags = a:flags->copy()->filter( + \ function('s:Filter_uncompatible_flag', [l:prettier_version])) + let b:prettier_cached_flags = l:compatible_flags + let b:prettier_last_used_cli_version = l:prettier_version + return l:compatible_flags->copy() +endfunction -- cgit v1.3 From 680534fc54701f4958e88f325a58767d7c936fe5 Mon Sep 17 00:00:00 2001 From: Victor S Date: Sun, 8 Oct 2023 20:03:01 -0300 Subject: docs: add Vim foldings to config.vim Added Vim foldings to sections of the code in config.vim to improve file navigation. --- autoload/prettier/resolver/config.vim | 9 +++++++++ 1 file changed, 9 insertions(+) (limited to 'autoload/prettier/resolver/config.vim') diff --git a/autoload/prettier/resolver/config.vim b/autoload/prettier/resolver/config.vim index c0c9190..587ef14 100644 --- a/autoload/prettier/resolver/config.vim +++ b/autoload/prettier/resolver/config.vim @@ -45,6 +45,7 @@ function! prettier#resolver#config#resolve(config, hasSelection, start, end) abo return l:cmd endfunction +" Mapper functions: {{{ " Returns either '--range-start X' or an empty string. function! s:Flag_range_start(config_and_sel, ...) abort if (!a:config_and_sel.hasSelection) @@ -165,6 +166,9 @@ endfunction function! s:Map_flag_to_cmd_part(config_and_sel, flag, props) abort return a:props.mapper(a:config_and_sel, a:flag, a:props) endfunction +" }}} + +" Constants: {{{ let s:concat_value = function('s:Concat_value_to_flag') let s:FLAGS = { @@ -266,7 +270,9 @@ let s:FLAGS = { \ 'global_name': '', \ 'mapper': function('s:Flag_stdin'), \ 'deprecated': '2.0.0'}} +" }}} +" Flags selector: {{{ " Returns the argument string with unprintable characters represented in Vim " internal format removed from both ends. function! s:Trim_internal_unprintable(text) abort @@ -324,3 +330,6 @@ function! s:Get_current_version_flags(flags) abort let b:prettier_last_used_cli_version = l:prettier_version return l:compatible_flags->copy() endfunction +" }}} + +" vim:foldmethod=marker:foldmarker={{{,}}}: -- cgit v1.3 From ec8650d942d86d3b7cf5d9114f66a4aee4cd85a2 Mon Sep 17 00:00:00 2001 From: Victor S Date: Sun, 8 Oct 2023 11:24:05 -0300 Subject: fix: look option and CLI versions to form command Considered the addition and deprecation versions of each Prettier option contained in the object with details about the CLI flags when composing the CLI command. --- autoload/prettier/resolver/config.vim | 35 ++++------------------------------- 1 file changed, 4 insertions(+), 31 deletions(-) (limited to 'autoload/prettier/resolver/config.vim') diff --git a/autoload/prettier/resolver/config.vim b/autoload/prettier/resolver/config.vim index 587ef14..d609517 100644 --- a/autoload/prettier/resolver/config.vim +++ b/autoload/prettier/resolver/config.vim @@ -10,37 +10,10 @@ function! prettier#resolver#config#resolve(config, hasSelection, start, end) abo \ 'start': a:start, \ 'end': a:end} - let l:cmd = s:Flag_use_tabs(l:config_and_sel, '--use-tabs', {}) . ' ' . - \ s:Flag_tab_width(l:config_and_sel, '--tab-width', {}) . ' ' . - \ s:Flag_print_width(l:config_and_sel, '--print-width', {}) . ' ' . - \ s:Flag_parser(l:config_and_sel, '--parser', {}) . ' ' . - \ s:Flag_range_start(l:config_and_sel, '', {}) . ' ' . - \ s:Flag_range_end(l:config_and_sel, '', {}) . ' ' . - \ ' --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) . - \ ' --config-precedence=' . - \ get(a:config, 'configPrecedence', g:prettier#config#config_precedence) . - \ ' --prose-wrap=' . - \ get(a:config, 'proseWrap', g:prettier#config#prose_wrap) . - \ ' --html-whitespace-sensitivity ' . - \ get(a:config, 'htmlWhitespaceSensitivity', g:prettier#config#html_whitespace_sensitivity) . - \ ' ' . s:Flag_stdin_filepath(l:config_and_sel, '--stdin-filepath', {}) . - \ ' --require-pragma=' . - \ get(a:config, 'requirePragma', g:prettier#config#require_pragma) . - \ ' --end-of-line=' . - \ get(a:config, 'endOfLine', g:prettier#config#end_of_line) . - \ ' ' . s:Flag_loglevel(l:config_and_sel, '--loglevel', {}) . - \ ' ' . s:Flag_stdin(l:config_and_sel, '--stdin', {}) + let l:cmd = ' ' . s:Get_current_version_flags(s:FLAGS) + \ ->map(function('s:Map_flag_to_cmd_part', [l:config_and_sel])) + \ ->values() + \ ->join(' ') return l:cmd endfunction -- cgit v1.3 From c3340cdf1b7ab72c72fee2507beb91f0a4413226 Mon Sep 17 00:00:00 2001 From: Victor S Date: Sun, 8 Oct 2023 15:10:39 -0300 Subject: docs: remove TODO comment of completed task Removed TODO comment that reminded to compose the flags of the CLI command from a list using list methods. The task is completed. --- autoload/prettier/resolver/config.vim | 1 - 1 file changed, 1 deletion(-) (limited to 'autoload/prettier/resolver/config.vim') diff --git a/autoload/prettier/resolver/config.vim b/autoload/prettier/resolver/config.vim index d609517..7a9d813 100644 --- a/autoload/prettier/resolver/config.vim +++ b/autoload/prettier/resolver/config.vim @@ -3,7 +3,6 @@ function! prettier#resolver#config#resolve(config, hasSelection, start, end) abort " Allow params to be passed as json format " convert bellow usage of globals to a get function o the params defaulting to global - " TODO: Use a list, filter() and join() to get a nicer list of args. let l:config_and_sel = { \ 'config': a:config, \ 'hasSelection': a:hasSelection, -- cgit v1.3