Skip to content

Commit e6d8616

Browse files
committed
astgrep: support its LSP
Fixes: #4974
1 parent ddba7a7 commit e6d8616

File tree

6 files changed

+78
-0
lines changed

6 files changed

+78
-0
lines changed

ale_linters/generic/astgrep.vim

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
" Author: Ben Boeckel <[email protected]>
2+
" Description: A CLI tool for code structural search, lint and rewriting
3+
4+
call ale#Set('astgrep_executable', 'ast-grep')
5+
6+
function! ale_linters#generic#astgrep#GetCommand(buffer) abort
7+
return '%e lsp'
8+
endfunction
9+
10+
function! ale_linters#generic#astgrep#GetProjectRoot(buffer) abort
11+
" Try to find nearest sgconfig.yml
12+
let l:sgconfig_file = ale#path#FindNearestFile(a:buffer, 'sgconfig.yml')
13+
14+
if !empty(l:sgconfig_file)
15+
return fnamemodify(l:sgconfig_file, ':h')
16+
endif
17+
18+
return ''
19+
endfunction
20+
21+
call ale#linter#Define('generic', {
22+
\ 'name': 'astgrep',
23+
\ 'lsp': 'stdio',
24+
\ 'executable': {b -> ale#Var(b, 'astgrep_executable')},
25+
\ 'command': function('ale_linters#generic#astgrep#GetCommand'),
26+
\ 'project_root': function('ale_linters#generic#astgrep#GetProjectRoot'),
27+
\})

doc/ale-generic.txt

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
===============================================================================
2+
ALE Generic Integration *ale-generic-options*
3+
*ale-integration-generic*
4+
5+
===============================================================================
6+
Integration Information
7+
8+
Some tools are not language specific. This document collects information on
9+
ale's support for these tools.
10+
11+
12+
===============================================================================
13+
astgrep *ale-generic-astgrep*
14+
15+
`'ast-grep'` is a tool which can detect code patterns and offer fixes based
16+
on various languages' abstract syntax trees (ASTs) using tree-sitter.
17+
18+
*ale-options.astgrep_executable*
19+
*g:ale_astgrep_executable*
20+
*b:ale_astgrep_executable*
21+
astgrep_executable
22+
g:ale_astgrep_executable
23+
Type: |String|
24+
Default: `'ast-grep'`
25+
26+
This variable can be modified to change the executable path for
27+
`ast-grep`.
28+
29+
30+
===============================================================================
31+
vim:tw=78:ts=2:sts=2:sw=2:ft=help:norl:

doc/ale.txt

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3485,6 +3485,8 @@ documented in additional help files.
34853485
fountain................................|ale-fountain-options|
34863486
fusionscript............................|ale-fuse-options|
34873487
fusion-lint...........................|ale-fuse-fusionlint|
3488+
generic.................................|ale-generic-options|
3489+
astgrep...............................|ale-generic-astgrep|
34883490
git commit..............................|ale-gitcommit-options|
34893491
gitlint...............................|ale-gitcommit-gitlint|
34903492
gleam...................................|ale-gleam-options|
Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
Before:
2+
call ale#assert#SetUpLinterTest('generic', 'astgrep')
3+
4+
After:
5+
call ale#assert#TearDownLinterTest()
6+
7+
Execute(The default executable path should be correct):
8+
AssertLinter 'ast-grep', ale#Escape('ast-grep')
9+
10+
Execute(The project root should be detected correctly in cargo projects):
11+
call ale#test#SetFilename('../test-files/generic/astgrep/subdir/file.ext')
12+
13+
AssertLSPProject ale#path#Simplify(g:dir . '/../test-files/generic/astgrep')
14+
15+
Execute(The project root should be empty when no project files can be detected):
16+
call ale#test#SetFilename('../test-files/dummy')
17+
18+
AssertLSPProject ''

test/test-files/generic/astgrep/sgconfig.yml

Whitespace-only changes.

test/test-files/generic/astgrep/subdir/file.ext

Whitespace-only changes.

0 commit comments

Comments
 (0)