[PATCH] D96281: Add options to flag individual core increments and to ignore macros to cognitive complexity check.

Jens Massberg via Phabricator via cfe-commits cfe-commits at lists.llvm.org
Mon Feb 8 09:59:04 PST 2021


massberg created this revision.
massberg added reviewers: lebedev.ri, alexfh.
Herald added a subscriber: nullptr.cpp.
massberg requested review of this revision.
Herald added a project: clang.

Often you are only interested in the overall cognitive complexity of a
function and not every individual increment. Thus the flag
'FlagBasicIncrements' is added. If it is set to 'true', each increment
is flagged. Otherwise, only the complexity of function with complexity
of at least the threshold are flagged.

If a macro is used within the function, the code inside the macro
doesn't make the code less readable. Instead, for a reader a macro is
more like a function that is called. Thus the code inside a macro
shouldn't increase the complexity of the function in which it is called.
Thus the flag 'IgnoreMacros' is added. If set to 'true' code inside
macros isn't considered during analysis.
This isn't perfect, as now the code of a macro isn't considered at all,
even if it has a high cognitive complexity itself. It might be better if
a macro is considered in the analysis like a function and gets its own
cognitive complexity. Implementing such an analysis seems to be very
complex (if possible at all with the given AST), so we give the user the
option to either ignore macros completely or to let the expanded code
count to the calling function's complexity.

By default 'FlagBasisIncrements' is set to 'true' and 'IgnoreMacros' is
set to 'false', which is the original behavior of the check.

Added a new test for different flag combinations.


Repository:
  rG LLVM Github Monorepo

https://reviews.llvm.org/D96281

Files:
  clang-tools-extra/clang-tidy/readability/FunctionCognitiveComplexityCheck.cpp
  clang-tools-extra/clang-tidy/readability/FunctionCognitiveComplexityCheck.h
  clang-tools-extra/docs/clang-tidy/checks/readability-function-cognitive-complexity.rst
  clang-tools-extra/test/clang-tidy/checkers/readability-function-cognitive-complexity-flags.cpp

-------------- next part --------------
A non-text attachment was scrubbed...
Name: D96281.322149.patch
Type: text/x-patch
Size: 8088 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/cfe-commits/attachments/20210208/47fdfef3/attachment.bin>


More information about the cfe-commits mailing list