Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 3 additions & 0 deletions .codespellignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
connectd
crate
mut
Comment on lines +1 to +3
Copy link
Copy Markdown
Collaborator

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?

Copy link
Copy Markdown
Contributor Author

@s373nZ s373nZ Dec 9, 2025

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?

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

codespell.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?

Does this also run on all files, or all C files?

This runs on all files submitted with the changeset (during a commit) and all files in total when using pre-commit run --all-files. The mut in the ignore list is actually for Rust code.

4 changes: 4 additions & 0 deletions .codespellrc
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
[codespell]

count = true
ignore-words = .codespellignore
115 changes: 105 additions & 10 deletions .pre-commit-config.yaml
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
Comment thread
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
Comment thread
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
5 changes: 5 additions & 0 deletions Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -546,6 +546,11 @@ SRC_TO_CHECK := $(filter-out $(ALL_TEST_PROGRAMS:=.c), $(ALL_NONGEN_SOURCES))
check-src-includes: $(SRC_TO_CHECK:%=check-src-include-order/%)
check-hdr-includes: $(ALL_NONGEN_HEADERS:%=check-hdr-include-order/%)

print-src-to-check:
@echo $(SRC_TO_CHECK)
print-hdr-to-check:
@echo $(ALL_NONGEN_HEADERS)

# If you want to check a specific variant of quotes use:
# make check-source-bolt BOLTVERSION=xxx
ifeq ($(BOLTVERSION),$(DEFAULT_BOLTVERSION))
Expand Down
56 changes: 56 additions & 0 deletions commitlint.config.js
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']],
},
};
1 change: 0 additions & 1 deletion common/htlc_state.c
Original file line number Diff line number Diff line change
Expand Up @@ -138,4 +138,3 @@ int htlc_state_flags(enum htlc_state state)
assert(per_state_bits[state]);
return per_state_bits[state];
}

18 changes: 18 additions & 0 deletions devtools/fix-style-errors
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
Loading
Loading