summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNathan <me@nathanherald.com>2022-01-04 13:49:03 +0100
committerGitHub <noreply@github.com>2022-01-04 21:49:03 +0900
commitac0495df6ef44deff556ed450f503875370f0812 (patch)
tree698e7d781c176843afaebe7b6d4a0865ca68a089
parent48f68598cb49c5711f31d9ed204a4f0fdc390330 (diff)
downloadale-ac0495df6ef44deff556ed450f503875370f0812.zip
Add dprint fixer (#4024)
* Add dprint fixer * Fix windows tests * dd dprint documentation
-rw-r--r--autoload/ale/fix/registry.vim5
-rw-r--r--autoload/ale/fixers/dprint.vim29
-rw-r--r--doc/ale-dockerfile.txt6
-rw-r--r--doc/ale-javascript.txt6
-rw-r--r--doc/ale-json.txt6
-rw-r--r--doc/ale-markdown.txt6
-rw-r--r--doc/ale-sql.txt7
-rw-r--r--doc/ale-supported-languages-and-tools.txt7
-rw-r--r--doc/ale-toml.txt12
-rw-r--r--doc/ale-typescript.txt6
-rw-r--r--doc/ale.txt57
-rw-r--r--supported-tools.md7
-rw-r--r--test/fixers/test_dprint_fixer_callback.vader44
-rw-r--r--test/test-files/dprint/blank.ts0
-rw-r--r--test/test-files/dprint/dprint.json0
15 files changed, 195 insertions, 3 deletions
diff --git a/autoload/ale/fix/registry.vim b/autoload/ale/fix/registry.vim
index 7be730f4..f9b94843 100644
--- a/autoload/ale/fix/registry.vim
+++ b/autoload/ale/fix/registry.vim
@@ -496,6 +496,11 @@ let s:default_registry = {
\ 'suggested_filetypes': ['lua'],
\ 'description': 'Fix Lua files with luafmt.',
\ },
+\ 'dprint': {
+\ 'function': 'ale#fixers#dprint#Fix',
+\ 'suggested_filetypes': ['javascript', 'typescript', 'json', 'markdown'],
+\ 'description': 'Pluggable and configurable code formatting platform',
+\ },
\ 'stylua': {
\ 'function': 'ale#fixers#stylua#Fix',
\ 'suggested_filetypes': ['lua'],
diff --git a/autoload/ale/fixers/dprint.vim b/autoload/ale/fixers/dprint.vim
new file mode 100644
index 00000000..99e590df
--- /dev/null
+++ b/autoload/ale/fixers/dprint.vim
@@ -0,0 +1,29 @@
+call ale#Set('dprint_executable', 'dprint')
+call ale#Set('dprint_executable_override', 0)
+call ale#Set('dprint_use_global', get(g:, 'ale_use_global_executables', 0))
+call ale#Set('dprint_options', '')
+call ale#Set('dprint_config', 'dprint.json')
+
+function! ale#fixers#dprint#Fix(buffer) abort
+ let l:executable = ale#path#FindExecutable(a:buffer, 'dprint', ['dprint'])
+ let l:executable_override = ale#Var(a:buffer, 'dprint_executable_override')
+
+ if !executable(l:executable) && !l:executable_override
+ return 0
+ endif
+
+ let l:options = ale#Var(a:buffer, 'dprint_options')
+ let l:config = ale#path#FindNearestFile(a:buffer, ale#Var(a:buffer, 'dprint_config'))
+
+ if !empty(l:config)
+ let l:options = l:options . ' -c ' . ale#Escape(l:config)
+ endif
+
+ let l:options = l:options . ' --stdin %s'
+
+ return {
+ \ 'command': ale#Escape(l:executable)
+ \ . ' fmt '
+ \ . l:options
+ \}
+endfunction
diff --git a/doc/ale-dockerfile.txt b/doc/ale-dockerfile.txt
index 284c6a10..b6e87623 100644
--- a/doc/ale-dockerfile.txt
+++ b/doc/ale-dockerfile.txt
@@ -26,6 +26,12 @@ g:ale_dockerfile_dockerfile_lint_options
===============================================================================
+dprint *ale-dockerfile-dprint*
+
+See |ale-dprint-options| and https://dprint.dev/plugins/dockerfile
+
+
+===============================================================================
hadolint *ale-dockerfile-hadolint*
hadolint can be found at: https://github.com/hadolint/hadolint
diff --git a/doc/ale-javascript.txt b/doc/ale-javascript.txt
index 087909c8..7d626efe 100644
--- a/doc/ale-javascript.txt
+++ b/doc/ale-javascript.txt
@@ -36,6 +36,12 @@ Check the docs over at |ale-typescript-deno|.
===============================================================================
+dprint *ale-javascript-dprint*
+
+See |ale-dprint-options| and https://dprint.dev/plugins/typescript
+
+
+===============================================================================
eslint *ale-javascript-eslint*
g:ale_javascript_eslint_executable *g:ale_javascript_eslint_executable*
diff --git a/doc/ale-json.txt b/doc/ale-json.txt
index a79add81..67db0b74 100644
--- a/doc/ale-json.txt
+++ b/doc/ale-json.txt
@@ -9,6 +9,12 @@ See |ale-cspell-options|
===============================================================================
+dprint *ale-json-dprint*
+
+See |ale-dprint-options| and https://dprint.dev/plugins/json
+
+
+===============================================================================
eslint *ale-json-eslint*
The `eslint` linter for JSON uses the JavaScript options for `eslint`; see:
diff --git a/doc/ale-markdown.txt b/doc/ale-markdown.txt
index 25065b55..6ba78ff0 100644
--- a/doc/ale-markdown.txt
+++ b/doc/ale-markdown.txt
@@ -9,6 +9,12 @@ See |ale-cspell-options|
===============================================================================
+dprint *ale-markdown-dprint*
+
+See |ale-dprint-options| and https://dprint.dev/plugins/markdown
+
+
+===============================================================================
markdownlint *ale-markdown-markdownlint*
g:ale_markdown_markdownlint_options *g:ale_markdown_markdownlint_options*
diff --git a/doc/ale-sql.txt b/doc/ale-sql.txt
index 398e24d3..80929264 100644
--- a/doc/ale-sql.txt
+++ b/doc/ale-sql.txt
@@ -3,6 +3,13 @@ ALE SQL Integration *ale-sql-options*
===============================================================================
+dprint *ale-sql-dprint*
+
+See |ale-dprint-options|
+and https://github.com/dprint/dprint-plugin-sql/releases
+
+
+===============================================================================
pgformatter *ale-sql-pgformatter*
g:ale_sql_pgformatter_executable *g:ale_sql_pgformatter_executable*
diff --git a/doc/ale-supported-languages-and-tools.txt b/doc/ale-supported-languages-and-tools.txt
index f12e0c87..16f18074 100644
--- a/doc/ale-supported-languages-and-tools.txt
+++ b/doc/ale-supported-languages-and-tools.txt
@@ -147,6 +147,7 @@ Notes:
* `dhall-lint`
* Dockerfile
* `dockerfile_lint`
+ * `dprint`
* `hadolint`
* Elixir
* `credo`
@@ -267,6 +268,7 @@ Notes:
* JavaScript
* `cspell`
* `deno`
+ * `dprint`
* `eslint`
* `fecs`
* `flow`
@@ -280,6 +282,7 @@ Notes:
* `xo`
* JSON
* `cspell`
+ * `dprint`
* `eslint`
* `fixjson`
* `jq`
@@ -537,6 +540,7 @@ Notes:
* `solhint`
* `solium`
* SQL
+ * `dprint`
* `pgformatter`
* `sql-lint`
* `sqlfmt`
@@ -583,9 +587,12 @@ Notes:
* Thrift
* `thrift`
* `thriftcheck`
+* TOML
+ * `dprint`
* TypeScript
* `cspell`
* `deno`
+ * `dprint`
* `eslint`
* `fecs`
* `prettier`
diff --git a/doc/ale-toml.txt b/doc/ale-toml.txt
new file mode 100644
index 00000000..222a91f4
--- /dev/null
+++ b/doc/ale-toml.txt
@@ -0,0 +1,12 @@
+===============================================================================
+ALE TOML Integration *ale-toml-options*
+
+
+===============================================================================
+dprint *ale-toml-dprint*
+
+See |ale-dprint-options| and https://dprint.dev/plugins/toml
+
+
+===============================================================================
+ vim:tw=78:ts=2:sts=2:sw=2:ft=help:norl:
diff --git a/doc/ale-typescript.txt b/doc/ale-typescript.txt
index eefcfed1..788a7a5c 100644
--- a/doc/ale-typescript.txt
+++ b/doc/ale-typescript.txt
@@ -51,6 +51,12 @@ g:ale_deno_importMap *g:ale_deno_importMap*
===============================================================================
+dprint *ale-typescript-dprint*
+
+See |ale-dprint-options| and https://dprint.dev/plugins/typescript
+
+
+===============================================================================
eslint *ale-typescript-eslint*
Because of how TypeScript compiles code to JavaScript and how interrelated
diff --git a/doc/ale.txt b/doc/ale.txt
index 8d98d511..65439fb1 100644
--- a/doc/ale.txt
+++ b/doc/ale.txt
@@ -2597,7 +2597,50 @@ g:ale_cspell_use_global *g:ale_cspell_use_global*
-------------------------------------------------------------------------------
-7.3. Options for languagetool *ale-languagetool-options*
+7.3. Options for dprint *ale-dprint-options*
+
+`dprint` is a fixer for many file types, including: (java|type)script,
+json(c?), markdown, and more. See https://dprint.dev/plugins for an up-to-date
+list of supported plugins and their configuration options.
+
+g:ale_dprint_executable *g:ale_dprint_executable*
+ *b:ale_dprint_executable*
+ Type: |String|
+ Default: `'dprint'`
+
+ See |ale-integrations-local-executables|
+
+
+g:ale_dprint_config *g:ale_dprint_config*
+ *b:ale_dprint_config*
+ Type: |String|
+ Default: `'dprint.json'`
+
+ This variable can be changed to provide a config file to `dprint`. The
+ default is the nearest `dprint.json` searching upward from the current
+ buffer.
+
+ See https://dprint.dev/config and https://plugins.dprint.dev
+
+
+g:ale_dprint_options *g:ale_dprint_options*
+ *b:ale_dprint_options*
+ Type: |String|
+ Default: `''`
+
+ This variable can be set to pass additional options to `dprint`.
+
+
+g:ale_dprint_use_global *g:ale_dprint_use_global*
+ *b:ale_dprint_use_global*
+ Type: |Number|
+ Default: `get(g: 'ale_use_global_executables', 0)`
+
+ See |ale-integrations-local-executables|
+
+
+-------------------------------------------------------------------------------
+7.4. Options for languagetool *ale-languagetool-options*
g:ale_languagetool_executable *g:ale_languagetool_executable*
*b:ale_languagetool_executable*
@@ -2617,7 +2660,7 @@ g:ale_languagetool_options *g:ale_languagetool_options*
-------------------------------------------------------------------------------
-7.4. Options for write-good *ale-write-good-options*
+7.5. Options for write-good *ale-write-good-options*
The options for `write-good` are shared between all filetypes, so options can
be configured once.
@@ -2647,7 +2690,7 @@ g:ale_writegood_use_global *g:ale_writegood_use_global*
-------------------------------------------------------------------------------
-7.5. Other Linter/Fixer Options *ale-other-integration-options*
+7.6. Other Linter/Fixer Options *ale-other-integration-options*
ALE supports a very wide variety of tools. Other linter or fixer options are
documented in additional help files.
@@ -2752,6 +2795,7 @@ documented in additional help files.
dhall-lint............................|ale-dhall-lint|
dockerfile..............................|ale-dockerfile-options|
dockerfile_lint.......................|ale-dockerfile-dockerfile_lint|
+ dprint................................|ale-dockerfile-dprint|
hadolint..............................|ale-dockerfile-hadolint|
elixir..................................|ale-elixir-options|
mix...................................|ale-elixir-mix|
@@ -2863,6 +2907,7 @@ documented in additional help files.
javascript..............................|ale-javascript-options|
cspell................................|ale-javascript-cspell|
deno..................................|ale-javascript-deno|
+ dprint................................|ale-javascript-dprint|
eslint................................|ale-javascript-eslint|
fecs..................................|ale-javascript-fecs|
flow..................................|ale-javascript-flow|
@@ -2876,6 +2921,7 @@ documented in additional help files.
xo....................................|ale-javascript-xo|
json....................................|ale-json-options|
cspell................................|ale-json-cspell|
+ dprint................................|ale-json-dprint|
eslint................................|ale-json-eslint|
fixjson...............................|ale-json-fixjson|
jsonlint..............................|ale-json-jsonlint|
@@ -2914,6 +2960,7 @@ documented in additional help files.
stylua................................|ale-lua-stylua|
markdown................................|ale-markdown-options|
cspell................................|ale-markdown-cspell|
+ dprint................................|ale-markdown-dprint|
markdownlint..........................|ale-markdown-markdownlint|
mdl...................................|ale-markdown-mdl|
pandoc................................|ale-markdown-pandoc|
@@ -3095,6 +3142,7 @@ documented in additional help files.
spec....................................|ale-spec-options|
rpmlint...............................|ale-spec-rpmlint|
sql.....................................|ale-sql-options|
+ dprint................................|ale-sql-dprint|
pgformatter...........................|ale-sql-pgformatter|
sqlfmt................................|ale-sql-sqlfmt|
sqlformat.............................|ale-sql-sqlformat|
@@ -3136,9 +3184,12 @@ documented in additional help files.
thrift..................................|ale-thrift-options|
thrift................................|ale-thrift-thrift|
thriftcheck...........................|ale-thrift-thriftcheck|
+ toml....................................|ale-toml-options|
+ dprint................................|ale-toml-dprint|
typescript..............................|ale-typescript-options|
cspell................................|ale-typescript-cspell|
deno..................................|ale-typescript-deno|
+ dprint................................|ale-typescript-dprint|
eslint................................|ale-typescript-eslint|
prettier..............................|ale-typescript-prettier|
standard..............................|ale-typescript-standard|
diff --git a/supported-tools.md b/supported-tools.md
index 9e03ddbb..8d3b41fb 100644
--- a/supported-tools.md
+++ b/supported-tools.md
@@ -156,6 +156,7 @@ formatting.
* [dhall-lint](https://github.com/dhall-lang/dhall-lang)
* Dockerfile
* [dockerfile_lint](https://github.com/projectatomic/dockerfile_lint)
+ * [dprint](https://dprint.dev)
* [hadolint](https://github.com/hadolint/hadolint)
* Elixir
* [credo](https://github.com/rrrene/credo)
@@ -276,6 +277,7 @@ formatting.
* JavaScript
* [cspell](https://github.com/streetsidesoftware/cspell/tree/main/packages/cspell)
* [deno](https://deno.land/)
+ * [dprint](https://dprint.dev/)
* [eslint](http://eslint.org/)
* [fecs](http://fecs.baidu.com/)
* [flow](https://flowtype.org/)
@@ -289,6 +291,7 @@ formatting.
* [xo](https://github.com/sindresorhus/xo)
* JSON
* [cspell](https://github.com/streetsidesoftware/cspell/tree/main/packages/cspell)
+ * [dprint](https://dprint.dev)
* [eslint](http://eslint.org/)
* [fixjson](https://github.com/rhysd/fixjson)
* [jq](https://stedolan.github.io/jq/)
@@ -546,6 +549,7 @@ formatting.
* [solhint](https://github.com/protofire/solhint)
* [solium](https://github.com/duaraghav8/Solium)
* SQL
+ * [dprint](https://dprint.dev)
* [pgformatter](https://github.com/darold/pgFormatter)
* [sql-lint](https://github.com/joereynolds/sql-lint)
* [sqlfmt](https://github.com/jackc/sqlfmt)
@@ -592,9 +596,12 @@ formatting.
* Thrift
* [thrift](http://thrift.apache.org/)
* [thriftcheck](https://github.com/pinterest/thriftcheck)
+* TOML
+ * [dprint](https://dprint.dev)
* TypeScript
* [cspell](https://github.com/streetsidesoftware/cspell/tree/main/packages/cspell)
* [deno](https://deno.land/)
+ * [dprint](https://dprint.dev/)
* [eslint](http://eslint.org/)
* [fecs](http://fecs.baidu.com/)
* [prettier](https://github.com/prettier/prettier)
diff --git a/test/fixers/test_dprint_fixer_callback.vader b/test/fixers/test_dprint_fixer_callback.vader
new file mode 100644
index 00000000..6a9d0118
--- /dev/null
+++ b/test/fixers/test_dprint_fixer_callback.vader
@@ -0,0 +1,44 @@
+Before:
+ call ale#assert#SetUpFixerTest('typescript', 'dprint')
+ call ale#test#SetFilename('../test-files/dprint/blank.ts')
+ let g:ale_dprint_executable_override = 0
+ let g:ale_dprint_executable = 'dprint'
+ let g:ale_dprint_config = ''
+
+After:
+ Restore
+ call ale#assert#TearDownFixerTest()
+
+Execute(The dprint callback should return 0 for a non-existent executable):
+ let g:ale_dprint_executable = 'foo'
+ AssertFixer 0
+
+Execute(The dprint callback should return the correct default values):
+ let g:ale_dprint_executable_override = 1
+ AssertFixer {
+ \ 'command': ale#Escape('dprint')
+ \ . ' fmt '
+ \ . ' --stdin %s'
+ \ }
+
+Execute(The dprint callback should include config):
+ let g:ale_dprint_executable_override = 1
+ let g:ale_dprint_config = 'dprint.json'
+
+ AssertFixer {
+ \ 'command': ale#Escape('dprint')
+ \ . ' fmt '
+ \ . ' -c '
+ \ . ale#Escape((has('win32') ? 'C:\testplugin\test\test-files\dprint\dprint.json' : '/testplugin/test/test-files/dprint/dprint.json'))
+ \ . ' --stdin %s'
+ \ }
+
+Execute(The dprint callback should include custom options):
+ let g:ale_dprint_executable_override = 1
+ let g:ale_dprint_options = '--verbose'
+
+ AssertFixer {
+ \ 'command': ale#Escape('dprint')
+ \ . ' fmt '
+ \ . '--verbose' . ' --stdin %s'
+ \ }
diff --git a/test/test-files/dprint/blank.ts b/test/test-files/dprint/blank.ts
new file mode 100644
index 00000000..e69de29b
--- /dev/null
+++ b/test/test-files/dprint/blank.ts
diff --git a/test/test-files/dprint/dprint.json b/test/test-files/dprint/dprint.json
new file mode 100644
index 00000000..e69de29b
--- /dev/null
+++ b/test/test-files/dprint/dprint.json