From a01ba32bc24068b515a55a82510e8138fdafefa0 Mon Sep 17 00:00:00 2001 From: Filip Gospodinov Date: Wed, 10 Jan 2024 00:18:18 +0100 Subject: [PATCH] Add support for biome --- ale_linters/javascript/biome.vim | 10 ++++++++ ale_linters/typescript/biome.vim | 10 ++++++++ autoload/ale/fix/registry.vim | 5 ++++ autoload/ale/fixers/biome.vim | 10 ++++++++ autoload/ale/handlers/biome.vim | 31 +++++++++++++++++++++++ doc/ale-javascript.txt | 6 +++++ doc/ale-supported-languages-and-tools.txt | 2 ++ doc/ale-typescript.txt | 25 ++++++++++++++++++ doc/ale.txt | 2 ++ supported-tools.md | 2 ++ test/linter/test_typescript_biome.vader | 14 ++++++++++ 11 files changed, 117 insertions(+) create mode 100644 ale_linters/javascript/biome.vim create mode 100644 ale_linters/typescript/biome.vim create mode 100644 autoload/ale/fixers/biome.vim create mode 100644 autoload/ale/handlers/biome.vim create mode 100644 test/linter/test_typescript_biome.vader diff --git a/ale_linters/javascript/biome.vim b/ale_linters/javascript/biome.vim new file mode 100644 index 0000000000..71a081143b --- /dev/null +++ b/ale_linters/javascript/biome.vim @@ -0,0 +1,10 @@ +" Author: Filip Gospodinov +" Description: biome for JavaScript files + +call ale#linter#Define('javascript', { +\ 'name': 'biome', +\ 'lsp': 'stdio', +\ 'executable': function('ale#handlers#biome#GetExecutable'), +\ 'command': function('ale#handlers#biome#GetCommand'), +\ 'project_root': function('ale#handlers#biome#GetProjectRoot'), +\}) diff --git a/ale_linters/typescript/biome.vim b/ale_linters/typescript/biome.vim new file mode 100644 index 0000000000..763a254c99 --- /dev/null +++ b/ale_linters/typescript/biome.vim @@ -0,0 +1,10 @@ +" Author: Filip Gospodinov +" Description: biome for TypeScript files + +call ale#linter#Define('typescript', { +\ 'name': 'biome', +\ 'lsp': 'stdio', +\ 'executable': function('ale#handlers#biome#GetExecutable'), +\ 'command': function('ale#handlers#biome#GetCommand'), +\ 'project_root': function('ale#handlers#biome#GetProjectRoot'), +\}) diff --git a/autoload/ale/fix/registry.vim b/autoload/ale/fix/registry.vim index 050cc6c705..31865187de 100644 --- a/autoload/ale/fix/registry.vim +++ b/autoload/ale/fix/registry.vim @@ -37,6 +37,11 @@ let s:default_registry = { \ 'suggested_filetypes': ['bib'], \ 'description': 'Format bib files using bibclean.', \ }, +\ 'biome': { +\ 'function': 'ale#fixers#biome', +\ 'suggested_filetypes': ['javascript', 'typescript'], +\ 'description': 'Fix JavaScript and TypeScript using biome.', +\ }, \ 'black': { \ 'function': 'ale#fixers#black#Fix', \ 'suggested_filetypes': ['python'], diff --git a/autoload/ale/fixers/biome.vim b/autoload/ale/fixers/biome.vim new file mode 100644 index 0000000000..903d7f395c --- /dev/null +++ b/autoload/ale/fixers/biome.vim @@ -0,0 +1,10 @@ +function! ale#fixers#biome#Fix(buffer) abort + let l:executable = ale#handlers#biome#GetExecutable(a:buffer) + let l:options = ale#Var(a:buffer, 'biome_options') + + return { + \ 'command': '%e format' + \ . (!empty(l:options) ? ' ' . l:options : '') + \ . ' --stdin-file-path=%s', + \} +endfunction diff --git a/autoload/ale/handlers/biome.vim b/autoload/ale/handlers/biome.vim new file mode 100644 index 0000000000..cec984586b --- /dev/null +++ b/autoload/ale/handlers/biome.vim @@ -0,0 +1,31 @@ +" Author: Filip Gospodinov +" Description: Functions for working with biome, for checking or fixing files. + +call ale#Set('biome_executable', 'biome') +call ale#Set('biome_use_global', get(g:, 'ale_use_global_executables', 0)) +call ale#Set('biome_options', '') + +function! ale#handlers#biome#GetExecutable(buffer) abort + return ale#path#FindExecutable(a:buffer, 'biome', [ + \ 'node_modules/@biomejs/cli-linux-x64/biome', + \ 'node_modules/@biomejs/cli-linux-arm64/biome', + \ 'node_modules/@biomejs/cli-win32-x64/biome.exe', + \ 'node_modules/@biomejs/cli-win32-arm64/biome.exe', + \ 'node_modules/@biomejs/cli-darwin-x64/biome', + \ 'node_modules/@biomejs/cli-darwin-arm64/biome', + \ 'node_modules/.bin/biome', + \]) +endfunction + +function! ale#handlers#biome#GetCommand(buffer) abort + let l:options = ale#Var(a:buffer, 'biome_options') + + return '%e lsp-proxy' + \ . (!empty(l:options) ? ' ' . l:options : '') +endfunction + +function! ale#handlers#biome#GetProjectRoot(buffer) abort + let l:biome_file = ale#path#FindNearestFile(a:buffer, 'biome.json') + + return !empty(l:biome_file) ? fnamemodify(l:biome_file, ':h') : '' +endfunction diff --git a/doc/ale-javascript.txt b/doc/ale-javascript.txt index a55cd64398..7e594f2a04 100644 --- a/doc/ale-javascript.txt +++ b/doc/ale-javascript.txt @@ -25,6 +25,12 @@ To this: > < +=============================================================================== +biome *ale-javascript-biome* + +Check the docs over at |ale-typescript-biome|. + + =============================================================================== clang-format *ale-javascript-clangformat* diff --git a/doc/ale-supported-languages-and-tools.txt b/doc/ale-supported-languages-and-tools.txt index aa49a1b19e..670fa2b363 100644 --- a/doc/ale-supported-languages-and-tools.txt +++ b/doc/ale-supported-languages-and-tools.txt @@ -290,6 +290,7 @@ Notes: * `javalsp` * `uncrustify` * JavaScript + * `biome` * `clang-format` * `cspell` * `deno` @@ -650,6 +651,7 @@ Notes: * TOML * `dprint` * TypeScript + * `biome` * `cspell` * `deno` * `dprint` diff --git a/doc/ale-typescript.txt b/doc/ale-typescript.txt index ab3f17bd7f..96899a291a 100644 --- a/doc/ale-typescript.txt +++ b/doc/ale-typescript.txt @@ -2,6 +2,31 @@ ALE TypeScript Integration *ale-typescript-options* +=============================================================================== +biome *ale-typescript-biome* + +g:ale_biome_executable *g:ale_biome_executable* + *b:ale_biome_executable* + Type: |String| + Default: `'biome'` + + +g:ale_biome_options *g:ale_biome_options* + *b:ale_biome_options* + Type: |String| + Default: `''` + + This variable can be set to pass additional options to biome. + + +g:ale_biome_use_global *g:ale_biome_use_global* + *b:ale_biome_use_global* + Type: |Number| + Default: `get(g:, 'ale_use_global_executables', 0)` + + See |ale-integrations-local-executables| + + =============================================================================== cspell *ale-typescript-cspell* diff --git a/doc/ale.txt b/doc/ale.txt index 5f7999b865..c957db23ad 100644 --- a/doc/ale.txt +++ b/doc/ale.txt @@ -3114,6 +3114,7 @@ documented in additional help files. eclipselsp............................|ale-java-eclipselsp| uncrustify............................|ale-java-uncrustify| javascript..............................|ale-javascript-options| + biome.................................|ale-javascript-biome| clang-format..........................|ale-javascript-clangformat| cspell................................|ale-javascript-cspell| deno..................................|ale-javascript-deno| @@ -3436,6 +3437,7 @@ documented in additional help files. toml....................................|ale-toml-options| dprint................................|ale-toml-dprint| typescript..............................|ale-typescript-options| + biome.................................|ale-typescript-biome| cspell................................|ale-typescript-cspell| deno..................................|ale-typescript-deno| dprint................................|ale-typescript-dprint| diff --git a/supported-tools.md b/supported-tools.md index 6431cfe630..f0dfddf599 100644 --- a/supported-tools.md +++ b/supported-tools.md @@ -299,6 +299,7 @@ formatting. * [javalsp](https://github.com/georgewfraser/vscode-javac) * [uncrustify](https://github.com/uncrustify/uncrustify) * JavaScript + * [biome](https://biomejs.dev/) * [clang-format](https://clang.llvm.org/docs/ClangFormat.html) * [cspell](https://github.com/streetsidesoftware/cspell/tree/main/packages/cspell) * [deno](https://deno.land/) @@ -659,6 +660,7 @@ formatting. * TOML * [dprint](https://dprint.dev) * TypeScript + * [biome](https://biomejs.dev/) * [cspell](https://github.com/streetsidesoftware/cspell/tree/main/packages/cspell) * [deno](https://deno.land/) * [dprint](https://dprint.dev/) diff --git a/test/linter/test_typescript_biome.vader b/test/linter/test_typescript_biome.vader new file mode 100644 index 0000000000..ccc6584648 --- /dev/null +++ b/test/linter/test_typescript_biome.vader @@ -0,0 +1,14 @@ +Before: + call ale#assert#SetUpLinterTest('typescript', 'biome') + call ale#test#SetFilename('test.ts') + +After: + call ale#assert#TearDownLinterTest() + +Execute(The default biome command should be correct): + AssertLinter 'biome', ale#Escape('biome') . 'lsp-proxy' + +Execute(The biome command should accept options): + let b:ale_biome_options = '--foobar' + + AssertLinter 'biome', ale#Escape('biome') . 'lsp-proxy --foobar'