diff --git a/.clang-tidy b/.clang-tidy index 49e2d7458..aaeb3710b 100644 --- a/.clang-tidy +++ b/.clang-tidy @@ -1,5 +1,5 @@ --- -Checks: '*,-abseil-*,-altera-*,-android-*,-boost-*,-cert-*,-cppcoreguidelines-*,-darwin-*,-fuchsia-*,-google-*,-hicpp-*,-linuxkernel-*,-llvm-*,-llvmlibc-*,-mpi-*,-objc-*,-openmp-*,-zircon-*,-readability-braces-around-statements,-readability-magic-numbers,-bugprone-macro-parentheses,-readability-isolate-declaration,-readability-function-size,-modernize-use-trailing-return-type,-readability-implicit-bool-conversion,-readability-uppercase-literal-suffix,-modernize-use-auto,-readability-else-after-return,-modernize-use-default-member-init,-readability-named-parameter,-readability-redundant-member-init,-performance-faster-string-find,-modernize-avoid-c-arrays,-modernize-use-equals-default,-readability-container-size-empty,-readability-simplify-boolean-expr,-bugprone-branch-clone,-bugprone-narrowing-conversions,-modernize-raw-string-literal,-readability-convert-member-functions-to-static,-modernize-loop-convert,-readability-const-return-type,-modernize-return-braced-init-list,-performance-inefficient-string-concatenation,-misc-throw-by-value-catch-by-reference,-readability-avoid-const-params-in-decls,-misc-non-private-member-variables-in-classes,-clang-analyzer-*,-bugprone-signed-char-misuse,-misc-no-recursion,-readability-use-anyofallof,-performance-no-automatic-move,-bugprone-suspicious-include,-readability-function-cognitive-complexity,-readability-redundant-access-specifiers,-performance-noexcept-move-constructor,-concurrency-mt-unsafe,-bugprone-easily-swappable-parameters,-readability-suspicious-call-argument,-readability-identifier-length,-readability-container-data-pointer,-bugprone-assignment-in-if-condition,-misc-const-correctness,-portability-std-allocator-const,-modernize-deprecated-ios-base-aliases,-bugprone-unchecked-optional-access,-modernize-replace-auto-ptr,-readability-identifier-naming,-portability-simd-intrinsics' +Checks: '*,-abseil-*,-altera-*,-android-*,-boost-*,-cert-*,-cppcoreguidelines-*,-darwin-*,-fuchsia-*,-google-*,-hicpp-*,-linuxkernel-*,-llvm-*,-llvmlibc-*,-mpi-*,-objc-*,-openmp-*,-zircon-*,-readability-braces-around-statements,-readability-magic-numbers,-bugprone-macro-parentheses,-readability-isolate-declaration,-readability-function-size,-modernize-use-trailing-return-type,-readability-implicit-bool-conversion,-readability-uppercase-literal-suffix,-modernize-use-auto,-readability-else-after-return,-modernize-use-default-member-init,-readability-redundant-member-init,-performance-faster-string-find,-modernize-avoid-c-arrays,-modernize-use-equals-default,-readability-container-size-empty,-readability-simplify-boolean-expr,-bugprone-branch-clone,-bugprone-narrowing-conversions,-modernize-raw-string-literal,-readability-convert-member-functions-to-static,-modernize-loop-convert,-readability-const-return-type,-modernize-return-braced-init-list,-performance-inefficient-string-concatenation,-misc-throw-by-value-catch-by-reference,-readability-avoid-const-params-in-decls,-misc-non-private-member-variables-in-classes,-clang-analyzer-*,-bugprone-signed-char-misuse,-misc-no-recursion,-readability-use-anyofallof,-performance-no-automatic-move,-bugprone-suspicious-include,-readability-function-cognitive-complexity,-readability-redundant-access-specifiers,-performance-noexcept-move-constructor,-concurrency-mt-unsafe,-bugprone-easily-swappable-parameters,-readability-suspicious-call-argument,-readability-identifier-length,-readability-container-data-pointer,-bugprone-assignment-in-if-condition,-misc-const-correctness,-portability-std-allocator-const,-modernize-deprecated-ios-base-aliases,-bugprone-unchecked-optional-access,-modernize-replace-auto-ptr,-readability-identifier-naming,-portability-simd-intrinsics' WarningsAsErrors: '*' CheckOptions: - key: misc-non-private-member-variables-in-classes.IgnoreClassesWithAllMemberVariablesBeingPublic diff --git a/.github/workflows/clang-tidy.yml b/.github/workflows/clang-tidy.yml index 8ad6bcb8c..0b86684f9 100644 --- a/.github/workflows/clang-tidy.yml +++ b/.github/workflows/clang-tidy.yml @@ -46,6 +46,10 @@ jobs: modules: 'qtcharts' cached: ${{ steps.cache-qt.outputs.cache-hit }} + - name: Verify clang-tidy configuration + run: | + clang-tidy-15 --verify-config + - name: Prepare CMake run: | cmake -S . -B cmake.output -G "Unix Makefiles" -DHAVE_RULES=On -DBUILD_TESTS=On -DBUILD_GUI=On -DWITH_QCHART=On -DENABLE_CHECK_INTERNAL=On -DCMAKE_GLOBAL_AUTOGEN_TARGET=On -DCPPCHK_GLIBCXX_DEBUG=Off diff --git a/clang-tidy.md b/clang-tidy.md index 4671ca9d1..094ef36c3 100644 --- a/clang-tidy.md +++ b/clang-tidy.md @@ -55,7 +55,6 @@ These do not (always) increase readability. `bugprone-macro-parentheses`
`readability-implicit-bool-conversion`
-`readability-named-parameter`
To be documented. diff --git a/gui/codeeditor.h b/gui/codeeditor.h index f896e6a2f..f5e340b3c 100644 --- a/gui/codeeditor.h +++ b/gui/codeeditor.h @@ -123,7 +123,7 @@ protected: private slots: void updateLineNumberAreaWidth(int newBlockCount); void highlightErrorLine(); - void updateLineNumberArea(const QRect &, int); + void updateLineNumberArea(const QRect & /*rect*/, int /*dy*/); private: QString generateStyleString(); diff --git a/gui/librarydialog.h b/gui/librarydialog.h index 42e46a70d..e81614a7b 100644 --- a/gui/librarydialog.h +++ b/gui/librarydialog.h @@ -46,10 +46,10 @@ private slots: void addFunction(); void changeFunction(); void editArg(); - void editFunctionName(QListWidgetItem*); - void filterFunctions(const QString&); + void editFunctionName(QListWidgetItem* /*item*/); + void filterFunctions(const QString& /*filter*/); void selectFunction(); - void sortFunctions(bool); + void sortFunctions(bool /*sort*/); private: Ui::LibraryDialog *mUi; diff --git a/gui/libraryeditargdialog.cpp b/gui/libraryeditargdialog.cpp index 8d42a0ac7..065eeba75 100644 --- a/gui/libraryeditargdialog.cpp +++ b/gui/libraryeditargdialog.cpp @@ -110,7 +110,7 @@ CppcheckLibraryData::Function::Arg LibraryEditArgDialog::getArg() const return ret; } -void LibraryEditArgDialog::minsizeChanged(int) +void LibraryEditArgDialog::minsizeChanged() { mUi->minsize1arg->setEnabled(mUi->minsize1type->currentIndex() != 0); mUi->minsize1arg2->setEnabled(mUi->minsize1type->currentText() == "mul"); diff --git a/gui/libraryeditargdialog.h b/gui/libraryeditargdialog.h index 7d97aa4fd..641309920 100644 --- a/gui/libraryeditargdialog.h +++ b/gui/libraryeditargdialog.h @@ -41,7 +41,7 @@ public: CppcheckLibraryData::Function::Arg getArg() const; private slots: - void minsizeChanged(int); + void minsizeChanged(); private: Ui::LibraryEditArgDialog *mUi; diff --git a/gui/libraryeditargdialog.ui b/gui/libraryeditargdialog.ui index 49a57ba78..6994c7829 100644 --- a/gui/libraryeditargdialog.ui +++ b/gui/libraryeditargdialog.ui @@ -366,7 +366,7 @@ minsize1type currentIndexChanged(int) LibraryEditArgDialog - minsizeChanged(int) + minsizeChanged() 413 @@ -382,7 +382,7 @@ minsize2type currentIndexChanged(int) LibraryEditArgDialog - minsizeChanged(int) + minsizeChanged() 436 @@ -396,6 +396,6 @@ - minsizeChanged(int) + minsizeChanged() diff --git a/gui/newsuppressiondialog.cpp b/gui/newsuppressiondialog.cpp index c8a9d5ba6..fe7cc8f6b 100644 --- a/gui/newsuppressiondialog.cpp +++ b/gui/newsuppressiondialog.cpp @@ -38,7 +38,7 @@ NewSuppressionDialog::NewSuppressionDialog(QWidget *parent) : class QErrorLogger : public ErrorLogger { public: - void reportOut(const std::string & /*outmsg*/, Color) override {} + void reportOut(const std::string & /*outmsg*/, Color /*c*/) override {} void reportErr(const ErrorMessage &msg) override { errorIds << QString::fromStdString(msg.id); } diff --git a/gui/projectfiledialog.cpp b/gui/projectfiledialog.cpp index 835233aeb..95449dd8f 100644 --- a/gui/projectfiledialog.cpp +++ b/gui/projectfiledialog.cpp @@ -878,7 +878,7 @@ void ProjectFileDialog::removeSuppression() delete item; } -void ProjectFileDialog::editSuppression(const QModelIndex &) +void ProjectFileDialog::editSuppression(const QModelIndex & /*index*/) { const int row = mUI->mListSuppressions->currentRow(); QListWidgetItem *item = mUI->mListSuppressions->item(row); diff --git a/gui/threadresult.cpp b/gui/threadresult.cpp index b478c54d5..ecc945445 100644 --- a/gui/threadresult.cpp +++ b/gui/threadresult.cpp @@ -35,7 +35,7 @@ ThreadResult::~ThreadResult() //dtor } -void ThreadResult::reportOut(const std::string &outmsg, Color) +void ThreadResult::reportOut(const std::string &outmsg, Color /*c*/) { emit log(QString::fromStdString(outmsg)); } diff --git a/lib/utils.h b/lib/utils.h index 396b44485..173b91b8d 100644 --- a/lib/utils.h +++ b/lib/utils.h @@ -161,7 +161,7 @@ CPPCHECKLIB void strTolower(std::string& str); * \return size of array * */ template -std::size_t getArrayLength(const T (&)[size]) +std::size_t getArrayLength(const T (& /*unused*/)[size]) { return size; } diff --git a/lib/valueflow.cpp b/lib/valueflow.cpp index 923ba9ef0..1516f7d46 100644 --- a/lib/valueflow.cpp +++ b/lib/valueflow.cpp @@ -1987,7 +1987,7 @@ static void valueFlowReverse(TokenList* tokenlist, ValueFlow::Value val, const ValueFlow::Value& val2, ErrorLogger* /*errorLogger*/, - const Settings* = nullptr, + const Settings* /*settings*/ = nullptr, SourceLocation loc = SourceLocation::current()) { std::list values = {std::move(val)}; @@ -2052,7 +2052,7 @@ static void assignValueIfMutable(T& x, const U& y) } template -static void assignValueIfMutable(const T&, const U&) +static void assignValueIfMutable(const T& /*unused*/, const U& /*unused*/) {} template )> @@ -2262,7 +2262,7 @@ struct ValueFlowAnalyzer : Analyzer { virtual bool match(const Token* tok) const = 0; - virtual bool internalMatch(const Token*) const { + virtual bool internalMatch(const Token* /*tok*/) const { return false; } @@ -2806,7 +2806,7 @@ struct ValueFlowAnalyzer : Analyzer { makeConditional(); } - virtual void internalUpdate(Token*, const ValueFlow::Value&, Direction) + virtual void internalUpdate(Token* /*tok*/, const ValueFlow::Value& /*v*/, Direction /*d*/) { assert(false && "Internal update unimplemented."); } @@ -2837,7 +2837,7 @@ struct ValueFlowAnalyzer : Analyzer { setTokenValue(tok, *value, getSettings()); } - ValuePtr reanalyze(Token*, const std::string&) const override { + ValuePtr reanalyze(Token* /*tok*/, const std::string& /*msg*/) const override { return {}; } }; @@ -2859,10 +2859,10 @@ struct SingleValueFlowAnalyzer : ValueFlowAnalyzer { return aliases; } - const ValueFlow::Value* getValue(const Token*) const override { + const ValueFlow::Value* getValue(const Token* /*tok*/) const override { return &value; } - ValueFlow::Value* getValue(const Token*) override { + ValueFlow::Value* getValue(const Token* /*tok*/) override { return &value; } @@ -2945,7 +2945,7 @@ struct SingleValueFlowAnalyzer : ValueFlowAnalyzer { return cs.isUnknownDependent(); } - bool updateScope(const Token* endBlock, bool) const override { + bool updateScope(const Token* endBlock, bool /*modified*/) const override { const Scope* scope = endBlock->scope(); if (!scope) return false; @@ -3124,13 +3124,13 @@ struct SubExpressionAnalyzer : ExpressionAnalyzer { { return tok->exprId() == expr->exprId() && !(astIsLHS(tok) && submatch(tok->astParent(), false)); } - void internalUpdate(Token* tok, const ValueFlow::Value& v, Direction) override + void internalUpdate(Token* tok, const ValueFlow::Value& v, Direction /*d*/) override { partialReads->emplace_back(tok, v); } // No reanalysis for subexression - ValuePtr reanalyze(Token*, const std::string&) const override { + ValuePtr reanalyze(Token* /*tok*/, const std::string& /*msg*/) const override { return {}; } }; @@ -4491,7 +4491,7 @@ static bool isConvertedToView(const Token* tok, const Settings* settings) }); } -static void valueFlowLifetime(TokenList *tokenlist, SymbolDatabase*, ErrorLogger *errorLogger, const Settings *settings) +static void valueFlowLifetime(TokenList *tokenlist, SymbolDatabase* /*db*/, ErrorLogger *errorLogger, const Settings *settings) { for (Token *tok = tokenlist->front(); tok; tok = tok->next()) { if (!tok->scope()) @@ -5322,7 +5322,7 @@ static void valueFlowForwardConst(Token* start, const Variable* var, const ContainerOfValue& values, const Settings* const settings, - int = 0) + int /*unused*/ = 0) { for (Token* tok = start; tok != end; tok = tok->next()) { if (tok->varId() == var->declarationId()) { @@ -5472,7 +5472,7 @@ static void valueFlowForwardAssign(Token* const tok, static void valueFlowForwardAssign(Token* const tok, const Variable* const var, const std::list& values, - const bool, + const bool /*unused*/, const bool init, TokenList* const tokenlist, ErrorLogger* const errorLogger, @@ -6352,7 +6352,7 @@ static void valueFlowCondition(const ValuePtr& handler, } struct SimpleConditionHandler : ConditionHandler { - std::vector parse(const Token* tok, const Settings*) const override { + std::vector parse(const Token* tok, const Settings* /*settings*/) const override { std::vector conds; parseCompareEachInt(tok, [&](const Token* vartok, ValueFlow::Value true_value, ValueFlow::Value false_value) { @@ -6939,11 +6939,11 @@ struct MultiValueFlowAnalyzer : ValueFlowAnalyzer { return false; } - bool stopOnCondition(const Token*) const override { + bool stopOnCondition(const Token* /*condTok*/) const override { return isConditional(); } - bool updateScope(const Token* endBlock, bool) const override { + bool updateScope(const Token* endBlock, bool /*modified*/) const override { const Scope* scope = endBlock->scope(); if (!scope) return false; @@ -7953,7 +7953,7 @@ static std::list getIteratorValues(std::list } struct IteratorConditionHandler : SimpleConditionHandler { - std::vector parse(const Token* tok, const Settings*) const override { + std::vector parse(const Token* tok, const Settings* /*settings*/) const override { Condition cond; if (Token::Match(tok, "==|!=")) { diff --git a/oss-fuzz/main.cpp b/oss-fuzz/main.cpp index 0a07db407..51720cc11 100644 --- a/oss-fuzz/main.cpp +++ b/oss-fuzz/main.cpp @@ -23,11 +23,11 @@ enum class Color; class DummyErrorLogger : public ErrorLogger { public: - void reportOut(const std::string&, Color) override {} - void reportErr(const ErrorMessage&) override {} - void reportProgress(const std::string&, - const char[], - const std::size_t) override {} + void reportOut(const std::string& /*outmsg*/, Color /*c*/) override {} + void reportErr(const ErrorMessage& /*msg*/) override {} + void reportProgress(const std::string& /*filename*/, + const char /*stage*/[], + const std::size_t /*value*/) override {} // FN }; extern "C" int LLVMFuzzerTestOneInput(const uint8_t *data, size_t dataSize); diff --git a/test/testcppcheck.cpp b/test/testcppcheck.cpp index 7ee19b370..ab8b1e360 100644 --- a/test/testcppcheck.cpp +++ b/test/testcppcheck.cpp @@ -38,7 +38,7 @@ private: public: std::list id; - void reportOut(const std::string & /*outmsg*/, Color = Color::Reset) override {} + void reportOut(const std::string & /*outmsg*/, Color /*c*/ = Color::Reset) override {} void reportErr(const ErrorMessage &msg) override { id.push_back(msg.id); diff --git a/test/teststl.cpp b/test/teststl.cpp index 1b560132a..bc4ed403b 100644 --- a/test/teststl.cpp +++ b/test/teststl.cpp @@ -22,6 +22,7 @@ #include "standards.h" #include "testsuite.h" #include "tokenize.h" +#include "utils.h" #include #include // IWYU pragma: keep @@ -3028,17 +3029,12 @@ private: ASSERT_EQUALS("", errout.str()); } - template - static size_t getArraylength(const T (&)[n]) { - return n; - } - void stlBoundaries1() { const std::string stlCont[] = { "list", "set", "multiset", "map", "multimap" }; - for (size_t i = 0; i < getArraylength(stlCont); ++i) { + for (size_t i = 0; i < getArrayLength(stlCont); ++i) { check("void f()\n" "{\n" " std::" + stlCont[i] + "::iterator it;\n" diff --git a/test/testsuite.cpp b/test/testsuite.cpp index c084b7424..f536d88ea 100644 --- a/test/testsuite.cpp +++ b/test/testsuite.cpp @@ -374,7 +374,7 @@ std::size_t TestFixture::runTests(const options& args) return fails_counter; } -void TestFixture::reportOut(const std::string & outmsg, Color) +void TestFixture::reportOut(const std::string & outmsg, Color /*c*/) { output << outmsg << std::endl; } diff --git a/test/testutils.h b/test/testutils.h index dc1dbee95..6320d8fae 100644 --- a/test/testutils.h +++ b/test/testutils.h @@ -60,7 +60,7 @@ class SimpleSuppressor : public ErrorLogger { public: SimpleSuppressor(Settings &settings, ErrorLogger *next) : settings(settings), next(next) {} - void reportOut(const std::string &outmsg, Color = Color::Reset) override { + void reportOut(const std::string &outmsg, Color /*c*/ = Color::Reset) override { next->reportOut(outmsg); } void reportErr(const ErrorMessage &msg) override {