Add yq support (#4861)

* Added jq support

Cleaned up yq.vim file

* Updated docs

* Updated supported-tools.md

* Added yq tests

* Fix python linting/formatting error when in virtual environment (#4865)

Python fixers and linters were failing when vim is running in a virtual
environment that's located in a path containing text `poetry`. The cause
of this was the regular expression `poetry\|pipenv\|uv$` which matches
`poetry` and `pipenv` if they appear anywhere in the virtualenv path.

* Add cljfmt fixer for clojure files (#4860)

* 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.

* Fix linting with jq (#4765) (#4862)

With the 1.6 version of jq the error message start with "parse error".
With the last version of jq the error message start with "jq: parse error".
Fix it by using a regular expression that works in both cases.

* Properly handle optional end_line_no/end_line_pos in sqlfluff (#4867)

end_line_no/end_line_pos are optional. Example SQL:
`SELECT NULL FROM {{ a_jinja_templated_table }};`

`sqlfluff lint --dialect ansi --format json` gives the following error
among others:
```
{"start_line_no": 1, "start_line_pos": 21, "code": "TMP", "description":
"Undefined jinja template variable: 'a_jinja_templated_table'", "name":
"", "warning": false}
```

As one can see there is no end_line_no/end_line_pos.

* Add golangci-lint fixer (#4853)

Closes #4616

* Fixed copy-paste misstakes and added filter to docs

* Added test vader file for yq

* Fixed and updated the test case

---------

Co-authored-by: Walter Kaunda <14844142+kwalter94@users.noreply.github.com>
Co-authored-by: rudolf ordoyne <49649789+casens5@users.noreply.github.com>
Co-authored-by: Bea Hughes <108035665+beahues@users.noreply.github.com>
Co-authored-by: benjos1234 <legrimlvl24@gmail.com>
Co-authored-by: Coacher <Coacher@users.noreply.github.com>
Co-authored-by: Ian Stapleton Cordasco <graffatcolmingov@gmail.com>
This commit is contained in:
axhav
2024-12-29 05:36:18 +01:00
committed by GitHub
parent 5b2e69ae61
commit e82fd24943
9 changed files with 117 additions and 0 deletions

22
ale_linters/yaml/yq.vim Normal file
View File

@@ -0,0 +1,22 @@
" Author: axhav <william@axhav.se>
call ale#Set('yaml_yq_executable', 'yq')
call ale#Set('yaml_yq_options', '')
call ale#Set('yaml_yq_filters', '.')
" Matches patterns like the following:
let s:pattern = '^Error\:.* line \(\d\+\)\: \(.\+\)$'
function! ale_linters#yaml#yq#Handle(buffer, lines) abort
return ale#util#MapMatches(a:lines, s:pattern, {match -> {
\ 'lnum': match[1] + 0,
\ 'text': match[2],
\}})
endfunction
call ale#linter#Define('yaml', {
\ 'name': 'yq',
\ 'executable': {b -> ale#Var(b, 'yaml_yq_executable')},
\ 'output_stream': 'stderr',
\ 'command': '%e',
\ 'callback': 'ale_linters#yaml#yq#Handle',
\})

View File

@@ -207,6 +207,11 @@ let s:default_registry = {
\ 'suggested_filetypes': ['python'], \ 'suggested_filetypes': ['python'],
\ 'description': 'Fix Python files with yapf.', \ 'description': 'Fix Python files with yapf.',
\ }, \ },
\ 'yq': {
\ 'function': 'ale#fixers#yq#Fix',
\ 'suggested_filetypes': ['yaml'],
\ 'description': 'Fix YAML files with yq.',
\ },
\ 'rubocop': { \ 'rubocop': {
\ 'function': 'ale#fixers#rubocop#Fix', \ 'function': 'ale#fixers#rubocop#Fix',
\ 'suggested_filetypes': ['ruby'], \ 'suggested_filetypes': ['ruby'],

View File

@@ -0,0 +1,22 @@
call ale#Set('yaml_yq_executable', 'yq')
call ale#Set('yaml_yq_options', '')
call ale#Set('yaml_yq_filters', '.')
function! ale#fixers#yq#GetExecutable(buffer) abort
return ale#Var(a:buffer, 'yaml_yq_executable')
endfunction
function! ale#fixers#yq#Fix(buffer) abort
let l:options = ale#Var(a:buffer, 'yaml_yq_options')
let l:filters = ale#Var(a:buffer, 'yaml_yq_filters')
if empty(l:filters)
return 0
endif
return {
\ 'command': ale#Escape(ale#fixers#yq#GetExecutable(a:buffer))
\ . ' ' . l:filters . ' '
\ . l:options,
\}
endfunction

View File

@@ -729,6 +729,7 @@ Notes:
* `yamlfix` * `yamlfix`
* `yamlfmt` * `yamlfmt`
* `yamllint` * `yamllint`
* `yq`
* YANG * YANG
* `yang-lsp` * `yang-lsp`
* Zeek * Zeek

View File

@@ -366,5 +366,43 @@ g:ale_yaml_gitlablint_options *g:ale_yaml_gitlablint_options
This variable can be set to pass additional options to gll. This variable can be set to pass additional options to gll.
===============================================================================
yq *ale-yaml-yq*
Website: https://github.com/mikefarah/yq
Installation
-------------------------------------------------------------------------------
Install yq: >
wget https://github.com/mikefarah/yq/releases/download/${VERSION}/${BINARY}.tar.gz -O - | tar xz && mv ${BINARY} /usr/bin/yq
Options
-------------------------------------------------------------------------------
g:ale_yaml_yq_executable *g:ale_yaml_yq_executable*
*b:ale_yaml_yq_executable*
Type: |String|
Default: `'yq'`
This variable can be set to change the path to yq.
g:ale_yaml_yq_options *g:ale_yaml_yq_options*
*b:ale_yaml_yq_options*
Type: |String|
Default: `''`
This variable can be set to pass additional options to yq.
g:ale_yaml_yq_filters *g:ale_yaml_yq_filters
*b:ale_yaml_yq_filters*
Type: |String|
Default: `'.'`
This option can be changed to pass additional filters to yq
=============================================================================== ===============================================================================
vim:tw=78:ts=2:sts=2:sw=2:ft=help:norl: vim:tw=78:ts=2:sts=2:sw=2:ft=help:norl:

View File

@@ -3517,6 +3517,7 @@ documented in additional help files.
yamlfmt...............................|ale-yaml-yamlfmt| yamlfmt...............................|ale-yaml-yamlfmt|
yamllint..............................|ale-yaml-yamllint| yamllint..............................|ale-yaml-yamllint|
gitlablint............................|ale-yaml-gitlablint| gitlablint............................|ale-yaml-gitlablint|
yq....................................|ale-yaml-yq|
yang....................................|ale-yang-options| yang....................................|ale-yang-options|
yang-lsp..............................|ale-yang-lsp| yang-lsp..............................|ale-yang-lsp|
zeek....................................|ale-zeek-options| zeek....................................|ale-zeek-options|

View File

@@ -738,6 +738,7 @@ formatting.
* [yamlfix](https://lyz-code.github.io/yamlfix) * [yamlfix](https://lyz-code.github.io/yamlfix)
* [yamlfmt](https://github.com/google/yamlfmt) * [yamlfmt](https://github.com/google/yamlfmt)
* [yamllint](https://yamllint.readthedocs.io/) * [yamllint](https://yamllint.readthedocs.io/)
* [yq](https://github.com/mikefarah/yq)
* YANG * YANG
* [yang-lsp](https://github.com/theia-ide/yang-lsp) * [yang-lsp](https://github.com/theia-ide/yang-lsp)
* Zeek * Zeek

View File

@@ -0,0 +1,19 @@
Before:
runtime ale_linters/yaml/yq.vim
After:
call ale#linter#Reset()
Execute (Should parse error correctly):
AssertEqual
\ [
\ {
\ 'lnum': 2,
\ 'text': "did not find expected ',' or ']'",
\ }
\ ],
\ ale_linters#yaml#yq#Handle(bufnr(''), [
\ "Error: bad file '-': yaml: line 2: did not find expected ',' or ']'"
\ ])

View File

@@ -0,0 +1,8 @@
Before:
call ale#assert#SetUpLinterTest('yaml', 'yq')
After:
call ale#assert#TearDownLinterTest()
Execute(The default command should be correct):
AssertLinter 'yq', ale#Escape('yq')