From 1e1604be56f8545099c2d667085a7080f21d4cb3 Mon Sep 17 00:00:00 2001 From: Bea Hughes <108035665+beahues@users.noreply.github.com> Date: Mon, 18 Nov 2024 18:40:56 -0800 Subject: [PATCH] When using `actionlint` look for & use a config file (#4858) Actionlint supports a config file and it lives in a very searchable path, as the only files it acts on are in the `.github` directory already. Look for an `actionlint.yml` and `.yaml` in that path, and use the config if its there. --- ale_linters/yaml/actionlint.vim | 23 +++++++++++++++++++++++ 1 file changed, 23 insertions(+) diff --git a/ale_linters/yaml/actionlint.vim b/ale_linters/yaml/actionlint.vim index 5afe6d48..902da729 100644 --- a/ale_linters/yaml/actionlint.vim +++ b/ale_linters/yaml/actionlint.vim @@ -20,9 +20,32 @@ function! ale_linters#yaml#actionlint#GetCommand(buffer) abort let l:options .= ale#Pad('-oneline') endif + let l:configfile = ale_linters#yaml#actionlint#GitRepoHasConfig(a:buffer) + + if !empty(l:configfile) + let l:options .= ale#Pad('-config-file ' . l:configfile) + endif + return '%e' . ale#Pad(l:options) . ' - ' endfunction +" If we have a actionlint.yml or actionlint.yaml in our github directory +" use that as our config file. +function! ale_linters#yaml#actionlint#GitRepoHasConfig(buffer) abort + let l:filename = expand('#' . a:buffer . ':p') + let l:configfilebase = substitute(l:filename, '\.github/.*', '.github/actionlint.','') + + for l:ext in ['yml', 'yaml'] + let l:configfile = l:configfilebase . l:ext + + if filereadable(l:configfile) + return l:configfile + endif + endfor + + return '' +endfunction + function! ale_linters#yaml#actionlint#Handle(buffer, lines) abort " Matches patterns line the following: ".github/workflows/main.yml:19:0: could not parse as YAML: yaml: line 19: mapping values are not allowed in this context [yaml-syntax]