A code linter for alidist packages
Project description
alidistlint
- code linter for alidist recipes
alidistlint
runs shellcheck on the scripts in alidist recipes and yamllint on their YAML headers, in addition to its own validation and checks on the YAML header.
Usage
Run alidistlint -h
to get more information about its arguments.
usage: alidistlint [-h] [-S] [-Y] [-H] [-f FORMAT] RECIPE [RECIPE ...]
You can disable individual checkers using -S
/--no-shellcheck
, -Y
/--no-yamllint
and -H
/--no-headerlint
(internal YAML header linting).
By default, all checkers are run.
Optionally, select the output format of errors using -f
/--format
.
Finally, pass one or multiple files to be checked to alidistlint
. You can use -
for the standard input here.
Errors and warnings will be printed to standard output in the format you selected.
If any messages with "error" severity were produced, alidistlint
exits with a non-zero exit code.
Shellcheck validation
The main build recipe (after the ---
line) is passed to shellcheck
.
Currently, toplevel keys ending in _recipe
or _check
(such as incremental_recipe
) are also checked using shellcheck
.
This does not work for such keys specified in overrides
yet.
There is a known issue with the checking of the above keys: if they do not start on a new line (using e.g. key: |
), the reported line numbers for shellcheck errors will be off by one.
Internal YAML header validation
The following error codes are produced by the internal linter (which can be switched off using -H
/--no-headerlint
).
There is currently no way to disable individual checks.
ali:empty
: The YAML header was not found. It must be terminated by a\n
-terminated line containing nothing but three dashes (---
).ali:parse
: The YAML header could not be parsed as YAML. This is produced when PyYAML'syaml.load
raises an error.ali:toplevel-nondict
: The YAML header was not parsed as a dictionary.key: value
pairs should be provided.ali:schema
: The YAML header did not conform to its schema. See the error message for more details.ali:key-order
: Thepackage
,version
andtag
keys were not found in the correct order. These keys should be the first in the file, in the above order (if present). Additionally, therequires
key must come beforebuild_requires
.
GitHub Actions integration
You can run alidistlint
as part of a GitHub Action using -f github
. In that case, alidistlint
will annotate files with the errors found in them.
alidistlint
will exit with a non-zero exit code if any errors were found, which will cause the Action to fail.
Vim integration
Put the following in your .vimrc
:
autocmd BufNewFile,BufRead *alidist/*.sh set makeprg=alidistlint\ -f\ gcc\ % errorformat=%f:%l:%c:\ %t%*[a-z]:\ %m
" If you want to automatically re-run the linter on every save:
autocmd BufWritePost *alidist/*.sh make
Then you can use :make
to run the linter, :cl
to see the error list, and navigate from one error to another using :cp
(previous), :cc
(current) and :cn
(next).
Emacs integration
Here is a simple Flycheck checker using alidistlint
.
You can set this to check alidist recipes.
(require 'flycheck)
(flycheck-def-executable-var alidist "alidistlint")
(flycheck-define-checker alidist
"A syntax checker and linter for alidist recipes."
;; `flycheck-alidist-executable' automatically overrides the car of the
;; :command list if set and non-nil.
:command ("alidistlint" "--format=gcc" source)
:error-patterns
((error line-start (file-name) ":" line ":" column ": error: " (message)
" [" (id (minimal-match (one-or-more not-newline))) "]" line-end)
(warning line-start (file-name) ":" line ":" column ": warning: " (message)
" [" (id (minimal-match (one-or-more not-newline))) "]" line-end)
(info line-start (file-name) ":" line ":" column ": note: " (message)
" [" (id (minimal-match (one-or-more not-newline))) "]" line-end)))
(add-to-list 'flycheck-checkers 'alidist)
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
File details
Details for the file alidistlint-1.1.0.tar.gz
.
File metadata
- Download URL: alidistlint-1.1.0.tar.gz
- Upload date:
- Size: 25.0 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/4.0.1 CPython/3.9.15
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 41da6a71ac54edc03ae28224e283f87e22e3f3594e837ff39001c812facc3006 |
|
MD5 | e22c8de556f4049e97f2e47b6fe26cd2 |
|
BLAKE2b-256 | c26cfa7c90c7738f3e97e2bf0549c28fb4197f70a0f3e3fa69f20b441fa27dc0 |
File details
Details for the file alidistlint-1.1.0-py3-none-any.whl
.
File metadata
- Download URL: alidistlint-1.1.0-py3-none-any.whl
- Upload date:
- Size: 25.6 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/4.0.1 CPython/3.9.15
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 65b14d3856080412e4c97782a2084ad2941a1af9f0c7afeb53b8ae8b22651167 |
|
MD5 | d0c76c804d87dfba988806c88c0daf07 |
|
BLAKE2b-256 | 9ef76cc1bcca3fd97c3da8753013e121a5704774894653900e09c76360745636 |