Compare commits

..

4 Commits

Author SHA1 Message Date
copilot-swe-agent[bot]
c849345a8d Add defensive ale#Set for c_build_dir_names in FindCompileCommands
Mirror the existing s:CanParseMakefile pattern to ensure the
g:ale_c_build_dir_names variable always exists when ale#Var is
called, even if test Save/Restore cycles delete it.

Co-authored-by: w0rp <3518142+w0rp@users.noreply.github.com>
2026-02-17 20:28:19 +00:00
copilot-swe-agent[bot]
014c959fee Improve comment clarity in FindCompileCommands
Co-authored-by: w0rp <3518142+w0rp@users.noreply.github.com>
2026-02-12 00:25:08 +00:00
copilot-swe-agent[bot]
520c775c6a Fix FindCompileCommands to handle absolute paths in c_build_dir_names
Use ale#path#GetAbsPath to resolve build directory paths, which correctly
handles both absolute and relative paths. When the dirname is absolute,
derive the project root from the parent of the build directory.

Co-authored-by: w0rp <3518142+w0rp@users.noreply.github.com>
2026-02-12 00:24:39 +00:00
copilot-swe-agent[bot]
7f79d30fb9 Initial plan 2026-02-12 00:20:49 +00:00
5 changed files with 55 additions and 15 deletions

View File

@@ -8,10 +8,7 @@ call ale#Set('ruby_solargraph_executable', 'solargraph')
call ale#Set('ruby_solargraph_options', {})
function! ale_linters#ruby#solargraph#GetCommand(buffer) abort
let l:executable = ale#Var(a:buffer, 'ruby_solargraph_executable')
return ale#ruby#EscapeExecutable(l:executable, 'solargraph')
\ . ale#Pad('stdio')
return '%e' . ale#Pad('stdio')
endfunction
call ale#linter#Define('ruby', {

View File

@@ -246,14 +246,31 @@ function! ale#c#FindCompileCommands(buffer) abort
return [fnamemodify(l:json_file, ':h'), l:json_file]
endif
" Something somewhere seems to delete this setting in tests, so ensure
" we always have a default value.
call ale#Set('c_build_dir_names', [
\ 'build',
\ 'build/Debug',
\ 'build/Release',
\ 'bin',
\])
" Search in build directories if we can't find it in the project.
for l:path in ale#path#Upwards(expand('#' . a:buffer . ':p:h'))
for l:dirname in ale#Var(a:buffer, 'c_build_dir_names')
let l:c_build_dir = l:path . s:sep . l:dirname
let l:c_build_dir = ale#path#GetAbsPath(l:path, l:dirname)
let l:json_file = l:c_build_dir . s:sep . 'compile_commands.json'
if filereadable(l:json_file)
return [l:path, l:json_file]
" For absolute build dir paths, use the parent
" of the build dir as the project root. For
" relative paths, use the directory found by
" searching upwards from the file.
let l:root = ale#path#IsAbsolute(l:dirname)
\ ? fnamemodify(l:c_build_dir, ':h')
\ : l:path
return [l:root, l:json_file]
endif
endfor
endfor

View File

@@ -227,8 +227,8 @@ g:ale_ruby_solargraph_executable
Type: |String|
Default: `'solargraph'`
Override the invoked solargraph binary. Set this to `'bundle'` to invoke
`'bundle` `exec` solargraph'.
Override the invoked solargraph binary. This is useful for running solargraph
from binstubs or a bundle.
===============================================================================

View File

@@ -13,13 +13,6 @@ Execute(command callback executable can be overridden):
let g:ale_ruby_solargraph_executable = 'foobar'
AssertLinter 'foobar', ale#Escape('foobar') . ' stdio'
Execute(Setting bundle appends 'exec solargraph'):
let g:ale_ruby_solargraph_executable = 'path to/bundle'
AssertLinter 'path to/bundle', ale#Escape('path to/bundle')
\ . ' exec solargraph'
\ . ' stdio'
Execute(should set solargraph for rails app):
call ale#test#SetFilename('../test-files/ruby/valid_rails_app/app/models/thing.rb')
AssertLSPLanguage 'ruby'

View File

@@ -0,0 +1,33 @@
Before:
Save g:ale_c_build_dir_names
call ale#test#SetDirectory('/testplugin/test')
After:
Restore
call ale#test#RestoreDirectory()
Execute(FindCompileCommands should find compile_commands.json with relative build dir names):
call ale#test#SetFilename('test-files/c/json_project/subdir/dummy')
let g:ale_c_build_dir_names = ['build']
AssertEqual
\ [
\ ale#path#Simplify(g:dir . '/test-files/c/json_project'),
\ ale#path#Simplify(g:dir . '/test-files/c/json_project/build/compile_commands.json'),
\ ],
\ ale#c#FindCompileCommands(bufnr(''))
Execute(FindCompileCommands should find compile_commands.json with absolute build dir names):
call ale#test#SetFilename('test-files/c/json_project/subdir/dummy')
let g:ale_c_build_dir_names = [ale#path#Simplify(g:dir . '/test-files/c/json_project/build')]
AssertEqual
\ [
\ ale#path#Simplify(g:dir . '/test-files/c/json_project'),
\ ale#path#Simplify(g:dir . '/test-files/c/json_project/build/compile_commands.json'),
\ ],
\ ale#c#FindCompileCommands(bufnr(''))