-
Notifications
You must be signed in to change notification settings - Fork 997
pre-commit hooks demo
#8193
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Merged
Merged
pre-commit hooks demo
#8193
Changes from all commits
Commits
Show all changes
15 commits
Select commit
Hold shift + click to select a range
0ef39c6
devtools: Add shellcheck to pre-commit.
s373nZ bb8aae8
devtools: Add amount access check to pre-commit.
s373nZ 28077ef
devtools: Add discouraged function check to pre-commit.
s373nZ e5a00ad
devtools: Add codespell to pre-commit.
s373nZ 9c2efdd
devtools: Add doc JSON schema checks and formatting to pre-commit.
s373nZ 498b292
devtools: Add EOF fixer and trailing whitespace fix to pre-commit.
s373nZ baef60a
devtools: Add `fix-style-errors` script by @sangbida.
s373nZ a048dcb
devtools: Add pre-commit as a `dev` Python package.
s373nZ d070f9d
doc: Add pre-commit section to Contributor Workflow documentation.
s373nZ ae72a81
devtools: Add clang-format to pre-commit.
s373nZ 0e37f0c
build: Replace PLUGIN_RENEPAY_HDRS json.c with json.h in Makefile.
s373nZ 460c448
devtools: Add custom `include-order-fixer` to pre-commit.
s373nZ 59b4556
devtools: Add commitlint to pre-commit.
s373nZ f9ad52e
devtools: Replace Ruff with Flake8 in pre-commit.
s373nZ 2ba5581
devtools: Set pre-commit default versions for Python and NodeJS.
s373nZ File filter
Filter by extension
Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Some comments aren't visible on the classic Files Changed page.
There are no files selected for viewing
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,3 @@ | ||
| connectd | ||
| crate | ||
| mut | ||
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,4 @@ | ||
| [codespell] | ||
|
|
||
| count = true | ||
| ignore-words = .codespellignore |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -1,13 +1,108 @@ | ||
| default_language_version: | ||
| node: system | ||
| python: python3 | ||
|
|
||
| repos: | ||
| - repo: https://github.com/astral-sh/ruff-pre-commit | ||
| # Ruff version. | ||
| rev: v0.8.0 | ||
| - repo: https://github.com/pycqa/flake8 | ||
| rev: 7.3.0 | ||
| hooks: | ||
| # Run the linter. | ||
| - id: ruff | ||
| args: [ --diff ] | ||
| exclude: "contrib/pyln-grpc-proto/pyln/grpc/(primitives|node)_pb2(|_grpc).py" | ||
| # Run the formatter. | ||
| - id: ruff-format | ||
| args: [ --diff ] | ||
| - id: flake8 | ||
| args: [ "--ignore=E501,E731,E741,W503,F541,E275" ] | ||
| exclude: "contrib/pyln-grpc-proto/pyln/grpc/(primitives|node)_pb2(|_grpc).py" | ||
|
|
||
| - repo: https://github.com/shellcheck-py/shellcheck-py | ||
| rev: v0.11.0.1 | ||
| hooks: | ||
| - id: shellcheck | ||
| args: [ -fgcc ] | ||
|
|
||
| - repo: https://github.com/pre-commit/mirrors-clang-format | ||
| rev: v19.1.4 | ||
| hooks: | ||
| - id: clang-format | ||
| description: Runs formatting checks on the c code and and throws errors if suggestions | ||
| are detected, without modifying the code. Style is defined in `.clang-format`. When | ||
| encountering formatting-related errors, run `clang-format -i <path-to-file>` to make | ||
| (destructively) the suggestions and evalute the resulting diff for more context. | ||
| args: [ --dry-run, -Werror ] | ||
| entry: clang-format | ||
| types: [ c ] | ||
| stages: [ manual ] | ||
|
|
||
| - repo: https://github.com/python-jsonschema/check-jsonschema | ||
| rev: 0.30.0 | ||
| hooks: | ||
| - id: check-jsonschema | ||
| name: check doc JSON schemas | ||
| args: ["--schemafile", "doc/rpc-schema-draft.json"] | ||
| files: ^doc/schemas/.*\.json$ | ||
| types: [ json ] | ||
|
|
||
| - id: check-metaschema | ||
| name: check doc JSON metaschemas | ||
| args: ["--verbose"] | ||
| files: ^doc/schemas/.*\.json$ | ||
| types: [ json ] | ||
|
|
||
| - repo: https://github.com/pre-commit/pre-commit-hooks | ||
| rev: v5.0.0 | ||
| hooks: | ||
| - id: pretty-format-json | ||
|
s373nZ marked this conversation as resolved.
|
||
| args: [ "--indent", "2", "--no-sort-keys" ] | ||
| files: ^doc/schemas/.*\.json$ | ||
| types: [ json ] | ||
| - id: trailing-whitespace | ||
| args: [ "--markdown-linebreak-ext=md" ] | ||
| exclude: ccan|contrib|tests/fuzz/corpora | ||
| - id: end-of-file-fixer | ||
| exclude: ccan|contrib|tests/fuzz/corpora | ||
|
|
||
| - repo: https://github.com/codespell-project/codespell | ||
| rev: v2.3.0 | ||
| hooks: | ||
| - id: codespell | ||
| description: Checks for common misspellings. | ||
| exclude: ccan|contrib|tests/fuzz/corpora | ||
|
s373nZ marked this conversation as resolved.
|
||
| stages: [ manual ] | ||
|
|
||
| - repo: https://github.com/alessandrojcm/commitlint-pre-commit-hook | ||
| rev: v9.23.0 | ||
| hooks: | ||
| - id: commitlint | ||
| stages: [ commit-msg ] | ||
|
|
||
| - repo: local | ||
| hooks: | ||
| # Reimplementation of `make check-amount-access` for pygrep. | ||
| - id: check-amount-access | ||
| name: Check amount_msat and amount_sat members are not accessed directly | ||
| description: "Don't access amount_msat and amount_sat members directly without a good reason since it risks overflow." | ||
| language: pygrep | ||
| entry: (->|\.)(milli)?satoshis(?!.*\/\*\ Raw:)|(?<!sizeof)\(struct\ amount_(m)?sat\) | ||
| types: [ c ] | ||
| exclude: common/amount|.*/test/.* | ||
|
|
||
| # Reimplementation of `make check-discouraged-functions` for pygrep. | ||
| - id: check-discouraged-functions | ||
| name: Check for usage of discouraged funtions | ||
| language: pygrep | ||
| entry: '[^a-z_/](?:fgets|fputs|gets|scanf|sprintf)\(' | ||
| types: [ c ] | ||
| exclude: ccan|contrib | ||
|
|
||
| - id: include-order-fixer | ||
| name: Fix Include Order | ||
| language: python | ||
| description: Analyzes Core Lightning C source and header files, assesses the order of | ||
| their include directives according to the published Coding Style Guidelines | ||
| [here](https://docs.corelightning.org/docs/coding-style-guidelines), automatically | ||
| applying sorting them. Aims to conform with `make check-includes`. | ||
| entry: python devtools/include-order-fixer.py | ||
| stages: [ manual ] | ||
| pass_filenames: false | ||
|
|
||
| - id: check-includes | ||
| name: Check Includes | ||
| language: system | ||
| entry: make check-includes | ||
| pass_filenames: false | ||
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,56 @@ | ||
| module.exports = { | ||
|
|
||
| plugins: [ | ||
| { | ||
| rules: { | ||
| 'core-lightning': ({ type }) => { | ||
| // Allow standard Core Lightning types | ||
| const standardTypes = [ | ||
| // Daemons | ||
| 'channeld', 'closingd', 'connectd', 'gossipd', 'hsmd', 'lightningd', 'onchaind', | ||
| 'openingd', | ||
| // Related | ||
| 'bitcoin', 'cli', 'cln-grpc', 'cln-rpc', 'db', 'wallet', 'wire', | ||
| // Others | ||
| 'ci', 'common', 'contrib', 'devtools', 'docs', 'docker', 'github', 'global', | ||
| 'meta', 'nit', 'nix', 'release', 'script', 'tests', | ||
| ]; | ||
|
|
||
| // Extensions | ||
| const extensions = ['plugin-', 'pyln-', 'tool-'] | ||
| if (type) { | ||
| for (const prefix of extensions) { | ||
| if (type.startsWith(prefix)) { | ||
| return [true]; | ||
| } | ||
| } | ||
| } | ||
|
|
||
| // Otherwise, must be a standard type | ||
| if (standardTypes.includes(type)) { | ||
| return [true]; | ||
| } | ||
|
|
||
| return [ | ||
| false, | ||
| `Type must be one of [${standardTypes.join(', ')}] or match patterns [${extensions.join(', ')}]` | ||
| ]; | ||
| }, | ||
| }, | ||
| }, | ||
| ], | ||
|
|
||
| rules: { | ||
| // Disable the default type-enum rule since we're using custom validation | ||
| 'type-enum': [0], | ||
|
|
||
| // Enable our custom rule | ||
| 'core-lightning': [2, 'always'], | ||
|
|
||
| // Keep other standard rules | ||
| 'type-case': [2, 'always', 'lower-case'], | ||
| 'type-empty': [2, 'never'], | ||
| 'subject-empty': [2, 'never'], | ||
| 'subject-case': [2, 'never', ['upper-case']], | ||
| }, | ||
| }; |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Original file line number | Diff line number | Diff line change |
|---|---|---|
|
|
@@ -138,4 +138,3 @@ int htlc_state_flags(enum htlc_state state) | |
| assert(per_state_bits[state]); | ||
| return per_state_bits[state]; | ||
| } | ||
|
|
||
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,18 @@ | ||
| #!/bin/bash | ||
|
|
||
| # Takes a list of files and applies style fixes for Python using `ruff` and C using | ||
| # `clang-format`. Also corrects spelling using `codespell`. This tool is an auxiliary to the | ||
| # `pre-commit` hooks found in: | ||
| # `.pre-commit-config.yaml` | ||
| # | ||
| # WARNING: Changes are destructive. Ensure a clean working environment before running. | ||
| # | ||
| # By: @sangbida | ||
|
|
||
| for file in "$@"; do | ||
| case "$file" in | ||
| *.py) ruff check --fix "$file"; ruff format "$file" ;; | ||
| *.c|*.h) clang-format -i "$file" 2>/dev/null ;; | ||
| esac | ||
| codespell -w "$file" 2>/dev/null | ||
| done |
Oops, something went wrong.
Oops, something went wrong.
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Is this a comprehensive list based on what's triggered by codespell? Does this also run on all files, or all C files?
Uh oh!
There was an error while loading. Please reload this page.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Not by any means. This is just demo of how to add words to the ignore list. Attached is recent output for
pre-commit run --all-files codespell > codespell.txtcodespell.txt
I suggest going through these items to decide which typos to fix versus which to add to the ignore list is worth a separate PR?
This runs on all files submitted with the changeset (during a commit) and all files in total when using
pre-commit run --all-files. Themutin the ignore list is actually for Rust code.