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 {