aboutsummaryrefslogtreecommitdiff
path: root/test/lint/lint-spelling.py
diff options
context:
space:
mode:
authorMarcoFalke <falke.marco@gmail.com>2022-04-06 09:12:38 +0200
committerMarcoFalke <falke.marco@gmail.com>2022-04-06 09:12:45 +0200
commit70c522004fc02ba442310f628c78fbed9beae025 (patch)
treef9f0e26fb2ac3b7b71c262f852059b094a591c56 /test/lint/lint-spelling.py
parentd3ff02688a50293efc0d13e9709de481225b1aa7 (diff)
parent4685463301a1c64c1be07725059cc94d69db104b (diff)
downloadbitcoin-70c522004fc02ba442310f628c78fbed9beae025.tar.xz
Merge bitcoin/bitcoin#24766: lint: convert spellchecking lint test to python
4685463301a1c64c1be07725059cc94d69db104b doc: Update lint test docs (Fabian Jahr) 77f98df41f032d6846f8309c0b1f239e9dbc0da3 lint: convert spell check lint test to python (Fabian Jahr) Pull request description: The new python version should produce the exact same output as the bash version but be easier to maintain. ACKs for top commit: MarcoFalke: cr ACK 4685463301a1c64c1be07725059cc94d69db104b Tree-SHA512: 242b802b750b42b299b93d1de4bcf17d92ad0a633d31894145d8590782a1db1041de59a283f133a4f75898d95444eb3c842005a6aa5cb919543625addad596d8
Diffstat (limited to 'test/lint/lint-spelling.py')
-rwxr-xr-xtest/lint/lint-spelling.py40
1 files changed, 40 insertions, 0 deletions
diff --git a/test/lint/lint-spelling.py b/test/lint/lint-spelling.py
new file mode 100755
index 0000000000..5da1b243f7
--- /dev/null
+++ b/test/lint/lint-spelling.py
@@ -0,0 +1,40 @@
+#!/usr/bin/env python3
+#
+# Copyright (c) 2022 The Bitcoin Core developers
+# Distributed under the MIT software license, see the accompanying
+# file COPYING or http://www.opensource.org/licenses/mit-license.php.
+
+"""
+Warn in case of spelling errors.
+Note: Will exit successfully regardless of spelling errors.
+"""
+
+from subprocess import check_output, STDOUT, CalledProcessError
+
+IGNORE_WORDS_FILE = 'test/lint/spelling.ignore-words.txt'
+FILES_ARGS = ['git', 'ls-files', '--', ":(exclude)build-aux/m4/", ":(exclude)contrib/seeds/*.txt", ":(exclude)depends/", ":(exclude)doc/release-notes/", ":(exclude)src/leveldb/", ":(exclude)src/crc32c/", ":(exclude)src/qt/locale/", ":(exclude)src/qt/*.qrc", ":(exclude)src/secp256k1/", ":(exclude)src/minisketch/", ":(exclude)src/univalue/", ":(exclude)contrib/builder-keys/keys.txt", ":(exclude)contrib/guix/patches"]
+
+
+def check_codespell_install():
+ try:
+ check_output(["codespell", "--version"])
+ except FileNotFoundError:
+ print("Skipping spell check linting since codespell is not installed.")
+ exit(0)
+
+
+def main():
+ check_codespell_install()
+
+ files = check_output(FILES_ARGS).decode("utf-8").splitlines()
+ codespell_args = ['codespell', '--check-filenames', '--disable-colors', '--quiet-level=7', '--ignore-words={}'.format(IGNORE_WORDS_FILE)] + files
+
+ try:
+ check_output(codespell_args, stderr=STDOUT)
+ except CalledProcessError as e:
+ print(e.output.decode("utf-8"), end="")
+ print('^ Warning: codespell identified likely spelling errors. Any false positives? Add them to the list of ignored words in {}'.format(IGNORE_WORDS_FILE))
+
+
+if __name__ == "__main__":
+ main()