diff --git a/.cppcheck.rule b/.cppcheck.rule new file mode 100644 index 000000000..d8f67a83a --- /dev/null +++ b/.cppcheck.rule @@ -0,0 +1,18 @@ + + + wcwidth \( + + wcwidthForbidden + warning + Always use fish_wcwidth rather than wcwidth. + + + + + wcswidth \( + + wcswidthForbidden + warning + Always use fish_wcswidth rather than wcswidth. + + diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 2e7733ab2..bac0e4677 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -30,6 +30,8 @@ Ultimately we want lint free code. However, at the moment a lot of cleanup is re To make linting the code easy there are two make targets: `lint` and `lint-all`. The latter does just what the name implies. The former will lint any modified but not committed `*.cpp` files. If there is no uncommitted work it will lint the files in the most recent commit. +Fish has custom cppcheck rules in the file `.cppcheck.rule`. These help catch mistakes such as using `wcwidth()` rather than `fish_wcwidth()`. Please add a new rule if you find similar mistakes being made. + ### Dealing With Lint Warnings You are strongly encouraged to address a lint warning by refactoring the code, changing variable names, or whatever action is implied by the warning. diff --git a/build_tools/lint.fish b/build_tools/lint.fish index 2b21402c6..f3350aee4 100755 --- a/build_tools/lint.fish +++ b/build_tools/lint.fish @@ -92,7 +92,7 @@ if set -q c_files[1] # The stderr to stdout redirection is because cppcheck, incorrectly IMHO, writes its # diagnostic messages to stderr. Anyone running this who wants to capture its output will # expect those messages to be written to stdout. - cppcheck -q --verbose --std=posix --std=c11 --language=c++ --template "[{file}:{line}]: {severity} ({id}): {message}" --suppress=missingIncludeSystem --inline-suppr --enable=$cppchecks $cppcheck_args $c_files 2>&1 + cppcheck -q --verbose --std=posix --std=c11 --language=c++ --template "[{file}:{line}]: {severity} ({id}): {message}" --suppress=missingIncludeSystem --inline-suppr --enable=$cppchecks --rule-file=.cppcheck.rule $cppcheck_args $c_files 2>&1 end if type -q oclint