[PATCH] D72217: [clang-tidy] Added readability-qualified-auto check

Jonas Toth via Phabricator via cfe-commits cfe-commits at lists.llvm.org
Sun Jan 5 10:39:39 PST 2020


JonasToth added a comment.

+1 for the check from me as well :)



================
Comment at: clang-tools-extra/clang-tidy/readability/QualifiedAutoCheck.cpp:19
+  if (!getLangOpts().CPlusPlus) {
+    // auto deduction not used in c
+    return;
----------------
Please make the comments full sentences with punctuation.

This `if` has only one statement, so please ellide the braces - by coding standard.


================
Comment at: clang-tools-extra/clang-tidy/readability/QualifiedAutoCheck.cpp:48
+  return CharSourceRange::getTokenRange(Var->getBeginLoc(),
+                                        getTokLocationBeforeName(Var));
+}
----------------
thats dangerous. Your source location could be invalid or a macroID, I would rather make these `llvm::Optional`-


================
Comment at: clang-tools-extra/clang-tidy/readability/QualifiedAutoCheck.cpp:61
+      Diag << FixItHint::CreateReplacement(
+          FixItRange, IsPtrConst ? "const auto *const " : "auto *const ");
+    } else {
----------------
the outer const might be debatable. some code-bases don't want the `* const`, i think neither does LLVM. maybe that could be configurable?


================
Comment at: clang-tools-extra/clang-tidy/readability/QualifiedAutoCheck.cpp:71
+    if (!Var->getType().getTypePtr()->getPointeeType().isConstQualified()) {
+      // Pointer isn't const, no need to add const qualifier
+      return;
----------------
please make that comment a full sentence with punctuation and ellide the braces.


================
Comment at: clang-tools-extra/clang-tidy/readability/QualifiedAutoCheck.cpp:79
+            .isConstQualified();
+    if (!IsAutoPtrConst) {
+      return;
----------------
braces.


================
Comment at: clang-tools-extra/clang-tidy/readability/QualifiedAutoCheck.cpp:87
+
+    if (Var->getType().isConstQualified()) {
+      Diag << FixItHint::CreateReplacement(FixItRange, "const auto *const ");
----------------
braces.


================
Comment at: clang-tools-extra/clang-tidy/readability/QualifiedAutoCheck.cpp:96
+    if (!Var->getType().getTypePtr()->getPointeeType().isConstQualified()) {
+      // Reference isn't const, no need to add const qualifier
+      return;
----------------
full sentence.


================
Comment at: clang-tools-extra/clang-tidy/readability/QualifiedAutoCheck.cpp:104
+            .isConstQualified();
+    if (!IsAutoRefConst) {
+      return;
----------------
braces.


================
Comment at: clang-tools-extra/docs/clang-tidy/checks/readability-qualified-auto.rst:45
+This check helps to enforce this `LLVM Coding Standards recommendation
+<https://llvm.org/docs/CodingStandards.html#beware-unnecessary-copies-with-auto>`_.
----------------
I think this justifies an alias into the llvm-module we have.


================
Comment at: clang-tools-extra/test/clang-tidy/checkers/readability-qualified-auto.cpp:53
+}
+
+namespace std {
----------------
please add some tests with typedefs and macro-interference in the definitions.

Typedefs i am interested in: (names are up to you, just to get the idea)
```
using MyPtr = int *;
using MyRef = int&;
using CMyPtr = const int *;
using CCMyPtr = const int * const;
using CMyRef = const int&;
```
I believe resolves the typedefs and becomes the reference/pointer, but that needs some test.

The transformation should not happen if the code comes from a macro ID
```
int* get_ptr() { return new int(42); }
#define AUTO auto
AUTO my_variable = get_pointer();
```
Transformation should not happen in this case, because the macro might be used in different places and macros are complicated.


================
Comment at: clang-tools-extra/test/clang-tidy/checkers/readability-qualified-auto.cpp:100
+  loopPtr(PtrVec, CPtrVec);
+}
----------------
What about 
```
auto my_function -> int * { /* foo */ }
```
other contexts for `auto` need to be considered (lambdas, others?)


Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D72217/new/

https://reviews.llvm.org/D72217





More information about the cfe-commits mailing list