summaryrefslogtreecommitdiffstats
path: root/clang-tools-extra/clang-tidy/readability
diff options
context:
space:
mode:
Diffstat (limited to 'clang-tools-extra/clang-tidy/readability')
-rw-r--r--clang-tools-extra/clang-tidy/readability/FunctionSizeCheck.cpp15
-rw-r--r--clang-tools-extra/clang-tidy/readability/FunctionSizeCheck.h3
2 files changed, 16 insertions, 2 deletions
diff --git a/clang-tools-extra/clang-tidy/readability/FunctionSizeCheck.cpp b/clang-tools-extra/clang-tidy/readability/FunctionSizeCheck.cpp
index d02972dde18..138240a3d87 100644
--- a/clang-tools-extra/clang-tidy/readability/FunctionSizeCheck.cpp
+++ b/clang-tools-extra/clang-tidy/readability/FunctionSizeCheck.cpp
@@ -72,12 +72,14 @@ FunctionSizeCheck::FunctionSizeCheck(StringRef Name, ClangTidyContext *Context)
: ClangTidyCheck(Name, Context),
LineThreshold(Options.get("LineThreshold", -1U)),
StatementThreshold(Options.get("StatementThreshold", 800U)),
- BranchThreshold(Options.get("BranchThreshold", -1U)) {}
+ BranchThreshold(Options.get("BranchThreshold", -1U)),
+ ParameterThreshold(Options.get("ParameterThreshold", 6)) {}
void FunctionSizeCheck::storeOptions(ClangTidyOptions::OptionMap &Opts) {
Options.store(Opts, "LineThreshold", LineThreshold);
Options.store(Opts, "StatementThreshold", StatementThreshold);
Options.store(Opts, "BranchThreshold", BranchThreshold);
+ Options.store(Opts, "ParameterThreshold", ParameterThreshold);
}
void FunctionSizeCheck::registerMatchers(MatchFinder *Finder) {
@@ -103,8 +105,11 @@ void FunctionSizeCheck::check(const MatchFinder::MatchResult &Result) {
}
}
+ unsigned ActualNumberParameters = Func->getNumParams();
+
if (FI.Lines > LineThreshold || FI.Statements > StatementThreshold ||
- FI.Branches > BranchThreshold) {
+ FI.Branches > BranchThreshold ||
+ ActualNumberParameters > ParameterThreshold) {
diag(Func->getLocation(),
"function %0 exceeds recommended size/complexity thresholds")
<< Func;
@@ -127,6 +132,12 @@ void FunctionSizeCheck::check(const MatchFinder::MatchResult &Result) {
diag(Func->getLocation(), "%0 branches (threshold %1)", DiagnosticIDs::Note)
<< FI.Branches << BranchThreshold;
}
+
+ if (ActualNumberParameters > ParameterThreshold) {
+ diag(Func->getLocation(), "%0 parameters (threshold %1)",
+ DiagnosticIDs::Note)
+ << ActualNumberParameters << ParameterThreshold;
+ }
}
} // namespace readability
diff --git a/clang-tools-extra/clang-tidy/readability/FunctionSizeCheck.h b/clang-tools-extra/clang-tidy/readability/FunctionSizeCheck.h
index ed40330c3cd..905a0d79e84 100644
--- a/clang-tools-extra/clang-tidy/readability/FunctionSizeCheck.h
+++ b/clang-tools-extra/clang-tidy/readability/FunctionSizeCheck.h
@@ -27,6 +27,8 @@ namespace readability {
/// macro-heavy code. The default is `800`.
/// * `BranchThreshold` - flag functions exceeding this number of control
/// statements. The default is `-1` (ignore the number of branches).
+/// * `ParameterThreshold` - flag functions having a high number of parameters.
+/// The default is `6`.
class FunctionSizeCheck : public ClangTidyCheck {
public:
FunctionSizeCheck(StringRef Name, ClangTidyContext *Context);
@@ -39,6 +41,7 @@ private:
const unsigned LineThreshold;
const unsigned StatementThreshold;
const unsigned BranchThreshold;
+ const unsigned ParameterThreshold;
};
} // namespace readability
OpenPOWER on IntegriCloud