summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--autoload/ale/fix/registry.vim5
-rw-r--r--autoload/ale/fixers/dfmt.vim18
-rw-r--r--doc/ale-d.txt9
-rw-r--r--doc/ale-supported-languages-and-tools.txt1
-rw-r--r--doc/ale.txt1
-rw-r--r--supported-tools.md1
-rw-r--r--test/d_files/test.d0
-rw-r--r--test/fixers/test_dfmt_fixer_callback.vader40
8 files changed, 75 insertions, 0 deletions
diff --git a/autoload/ale/fix/registry.vim b/autoload/ale/fix/registry.vim
index 7a553ccc..d21cb227 100644
--- a/autoload/ale/fix/registry.vim
+++ b/autoload/ale/fix/registry.vim
@@ -27,6 +27,11 @@ let s:default_registry = {
\ 'suggested_filetypes': ['python'],
\ 'description': 'Fix PEP8 issues with black.',
\ },
+\ 'dfmt': {
+\ 'function': 'ale#fixers#dfmt#Fix',
+\ 'suggested_filetypes': ['d'],
+\ 'description': 'Fix D files with dfmt.',
+\ },
\ 'fecs': {
\ 'function': 'ale#fixers#fecs#Fix',
\ 'suggested_filetypes': ['javascript', 'css', 'html'],
diff --git a/autoload/ale/fixers/dfmt.vim b/autoload/ale/fixers/dfmt.vim
new file mode 100644
index 00000000..0072e045
--- /dev/null
+++ b/autoload/ale/fixers/dfmt.vim
@@ -0,0 +1,18 @@
+" Author: theoldmoon0602
+" Description: Integration of dfmt with ALE.
+
+call ale#Set('d_dfmt_executable', 'dfmt')
+call ale#Set('d_dfmt_options', '')
+
+function! ale#fixers#dfmt#Fix(buffer) abort
+ let l:executable = ale#Var(a:buffer, 'd_dfmt_executable')
+ let l:options = ale#Var(a:buffer, 'd_dfmt_options')
+
+ return {
+ \ 'command': ale#Escape(l:executable)
+ \ . ' -i'
+ \ . (empty(l:options) ? '' : ' ' . l:options)
+ \ . ' %t',
+ \ 'read_temporary_file': 1,
+ \}
+endfunction
diff --git a/doc/ale-d.txt b/doc/ale-d.txt
index 55596062..72349a20 100644
--- a/doc/ale-d.txt
+++ b/doc/ale-d.txt
@@ -1,6 +1,15 @@
===============================================================================
ALE D Integration *ale-d-options*
+===============================================================================
+dfmt *ale-d-dfmt*
+
+g:ale_d_dfmt_options *g:ale_d_dfmt_options*
+ *b:ale_d_dfmt_options*
+ Type: |String|
+ Default: `''`
+
+This variable can be set to pass additional options to the dfmt fixer.
===============================================================================
dls *ale-d-dls*
diff --git a/doc/ale-supported-languages-and-tools.txt b/doc/ale-supported-languages-and-tools.txt
index 37345f7b..1b1202b9 100644
--- a/doc/ale-supported-languages-and-tools.txt
+++ b/doc/ale-supported-languages-and-tools.txt
@@ -103,6 +103,7 @@ Notes:
* Cython (pyrex filetype)
* `cython`
* D
+ * `dfmt`
* `dls`
* `dmd`
* `uncrustify`
diff --git a/doc/ale.txt b/doc/ale.txt
index 142f1a70..9b81727d 100644
--- a/doc/ale.txt
+++ b/doc/ale.txt
@@ -2066,6 +2066,7 @@ documented in additional help files.
nvcc..................................|ale-cuda-nvcc|
clang-format..........................|ale-cuda-clangformat|
d.......................................|ale-d-options|
+ dfmt..................................|ale-d-dfmt|
dls...................................|ale-d-dls|
uncrustify............................|ale-d-uncrustify|
dart....................................|ale-dart-options|
diff --git a/supported-tools.md b/supported-tools.md
index c933f510..d94da030 100644
--- a/supported-tools.md
+++ b/supported-tools.md
@@ -112,6 +112,7 @@ formatting.
* Cython (pyrex filetype)
* [cython](http://cython.org/)
* D
+ * [dfmt](https://github.com/dlang-community/dfmt)
* [dls](https://github.com/d-language-server/dls)
* [dmd](https://dlang.org/dmd-linux.html)
* [uncrustify](https://github.com/uncrustify/uncrustify)
diff --git a/test/d_files/test.d b/test/d_files/test.d
new file mode 100644
index 00000000..e69de29b
--- /dev/null
+++ b/test/d_files/test.d
diff --git a/test/fixers/test_dfmt_fixer_callback.vader b/test/fixers/test_dfmt_fixer_callback.vader
new file mode 100644
index 00000000..5ecb56e6
--- /dev/null
+++ b/test/fixers/test_dfmt_fixer_callback.vader
@@ -0,0 +1,40 @@
+Before:
+ Save g:ale_d_dfmt_executable
+ Save g:ale_d_dfmt_options
+
+ " Use an invalid global executable, so we don't match it.
+ let g:ale_d_dfmt_executable = 'xxxinvalid'
+ let g:ale_d_dfmt_options = ''
+
+ call ale#test#SetDirectory('/testplugin/test/fixers')
+
+After:
+ Restore
+
+ call ale#test#RestoreDirectory()
+
+Execute(The dfmt callback should return the correct default values):
+ call ale#test#SetFilename('../d_files/test.d')
+
+ AssertEqual
+ \ {
+ \ 'read_temporary_file': 1,
+ \ 'command': ale#Escape('xxxinvalid')
+ \ . ' -i'
+ \ . ' %t',
+ \ },
+ \ ale#fixers#dfmt#Fix(bufnr(''))
+
+Execute(The dfmt callback should include custom dfmt options):
+ let g:ale_d_dfmt_options = "--space-after-cast"
+ call ale#test#SetFilename('../d_files/test.d')
+
+ AssertEqual
+ \ {
+ \ 'read_temporary_file': 1,
+ \ 'command': ale#Escape('xxxinvalid')
+ \ . ' -i'
+ \ . ' ' . g:ale_d_dfmt_options
+ \ . ' %t',
+ \ },
+ \ ale#fixers#dfmt#Fix(bufnr(''))