[PATCH] D36836: [clang-tidy] Implement readability-function-cognitive-complexity check

Aaron Ballman via Phabricator via cfe-commits cfe-commits at lists.llvm.org
Sun Oct 15 09:01:57 PDT 2017


aaron.ballman added a comment.

(I've not had the chance to complete a full review, but these are some thoughts thus far.)



================
Comment at: clang-tidy/readability/FunctionCognitiveComplexityCheck.cpp:76
+  // So either static out-of-line or non-static in-line.
+  const std::array<const StringRef, 4> Msgs = {{
+      // FIXME: these messages somehow trigger an assertion:
----------------
I don't think this needs to be a member of the class -- it can be a `static const char *[]` at file scope, can it not?


================
Comment at: clang-tidy/readability/FunctionCognitiveComplexityCheck.cpp:77
+  const std::array<const StringRef, 4> Msgs = {{
+      // FIXME: these messages somehow trigger an assertion:
+      // Fix conflicts with existing fix! The new replacement overlaps with an
----------------
Are you intending to fix this -- that sounds rather serious?


================
Comment at: clang-tidy/readability/FunctionCognitiveComplexityCheck.cpp:97
+
+  /// The helper struct used to record one increment occurence, with all the
+  /// details nessesary
----------------
occurence -> occurrence


================
Comment at: clang-tidy/readability/FunctionCognitiveComplexityCheck.cpp:98
+  /// The helper struct used to record one increment occurence, with all the
+  /// details nessesary
+  struct Detail final {
----------------
Missing a full stop.


================
Comment at: clang-tidy/readability/FunctionCognitiveComplexityCheck.cpp:99
+  /// details nessesary
+  struct Detail final {
+    const SourceLocation Loc;     /// What caused the increment?
----------------
I don't think the `final` adds value here.


================
Comment at: clang-tidy/readability/FunctionCognitiveComplexityCheck.cpp:102
+    const unsigned short Nesting; /// How deeply nested is Loc located?
+    const Criteria C : 3;         /// The criteria of the increment
+
----------------
Why is this turned into a bit-field? If that is important, it should be of type `unsigned` to prevent differences between compilers (MSVC treats bit-fields differently than GCC and Clang).


================
Comment at: clang-tidy/readability/FunctionCognitiveComplexityCheck.cpp:118
+
+      unsigned MsgId;           /// The id of the message to output
+      unsigned short Increment; /// How much of an increment?
----------------
We use `//` instead of `///` unless we're specifically documenting something for doxygen.


================
Comment at: clang-tidy/readability/FunctionCognitiveComplexityCheck.cpp:139
+  };
+  // static_assert(sizeof(Detail) <= 8, "it's best to keep the size minimal");
+
----------------
Why is this commented out?


================
Comment at: clang-tidy/readability/FunctionCognitiveComplexityCheck.cpp:150
+
+  /// The grand total Cognitive Complexity of the function
+  unsigned Total = 0;
----------------
Missing full-stop (here and elsewhere, I'll stop commenting on them).


================
Comment at: clang-tidy/readability/FunctionCognitiveComplexityCheck.cpp:191
+  Details.emplace_back(Loc, Nesting, C);
+  const Detail &D(Details.back());
+
----------------
Please use `=` instead of `()` here.


================
Comment at: clang-tidy/readability/FunctionCognitiveComplexityCheck.cpp:210
+  /// new sequence, thus it is a stack.
+  std::stack</*********/ Optional<BinaryOperator::Opcode>,
+             SmallVector<Optional<BinaryOperator::Opcode>, 4>>
----------------
What's with the comment?


================
Comment at: clang-tidy/readability/FunctionCognitiveComplexityCheck.cpp:215-218
+#define TraverseWithIncreasedNestingLevel(CLASS, Node)                         \
+  ++CurrentNestingLevel;                                                       \
+  ShouldContinue = Base::Traverse##CLASS(Node);                                \
+  --CurrentNestingLevel;
----------------
I don't think this macro adds clarify for its two uses.


Repository:
  rL LLVM

https://reviews.llvm.org/D36836





More information about the cfe-commits mailing list