2022-04-04 23:39:49 +02:00
#!/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
2024-02-26 11:36:10 +01:00
from lint_ignore_dirs import SHARED_EXCLUDED_SUBTREES
2022-04-04 23:39:49 +02:00
IGNORE_WORDS_FILE = ' test/lint/spelling.ignore-words.txt '
2024-09-12 01:58:55 +02:00
FILES_ARGS = [ ' git ' , ' ls-files ' , ' -- ' , " :(exclude)contrib/seeds/*.txt " , " :(exclude)depends/ " , " :(exclude)doc/release-notes/ " , " :(exclude)src/qt/locale/ " , " :(exclude)src/qt/*.qrc " , " :(exclude)contrib/guix/patches " ]
2024-02-26 11:36:10 +01:00
FILES_ARGS + = [ f " :(exclude) { dir } " for dir in SHARED_EXCLUDED_SUBTREES ]
2022-04-04 23:39:49 +02:00
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 ( )