[PATCH] D56160: [clang-tidy] modernize-use-trailing-return check

Bernhard Manfred Gruber via Phabricator via cfe-commits cfe-commits at lists.llvm.org
Wed Jan 2 14:42:42 PST 2019


bernhardmgruber marked 10 inline comments as done.
bernhardmgruber added a comment.

I fixed most of the stylistic issues. Regarding the missing test cases, I will add those and do the necessary code changes. Thank you very much for pointing them out to me!



================
Comment at: clang-tidy/modernize/UseTrailingReturnCheck.cpp:21-22
+
+// very similar to UseOverrideCheck
+SourceLocation findTrailingReturnTypeLocation(const CharSourceRange &range,
+                                              const ASTContext &ctx,
----------------
lebedev.ri wrote:
> This function looks quite fragile.
> Is there no existing function elsewhere [in the support libraries] that does this?
> There is no way to extract this from AST?
> 
I have not found one by browsing the doxygen documentation. I got inspired by ParseTokens in UseOverrideCheck.cpp. But I am an absolute beginner on the LLVM codebase, so please point me in a direction and I try to find something better!

There is also this in the documentation of [[ https://clang.llvm.org/doxygen/classclang_1_1FunctionDecl.html#a1ac2b87b937cc44d8980a898851c0c75 | FunctionDecl::getReturnTypeSourceRange()]]: "This may omit qualifiers and other information with limited representation in the AST."
So maybe the AST really does not contain the locations of const/volatile and const/ref qualifiers


================
Comment at: clang-tidy/modernize/UseTrailingReturnCheck.cpp:91
+  Token t;
+  std::vector<Token> tokens;
+  while (!lexer.LexFromRawLexer(t)) {
----------------
lebedev.ri wrote:
> Wouldn't `SmallVector<Token, 4>` be sufficient in most cases?
I believe return types with namespaces or template arguments produce more tokens, so I will go with SmallVector<Token, 8>. But i did not do any measurements.


================
Comment at: clang-tidy/modernize/UseTrailingReturnCheck.cpp:161-163
+  const auto &ctx = *Result.Context;
+  const auto &sm = *Result.SourceManager;
+  const auto &opts = getLangOpts();
----------------
lebedev.ri wrote:
> 1. All the variables should be WithThisCase
> 2. Can't tell if the `auto` is ok here? 
> 
1. done
2. Is it important to know what types Result.Context and the others are? I am just passing them on to further functions because I have to, they are not relevant for the logic I am coding.


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

https://reviews.llvm.org/D56160





More information about the cfe-commits mailing list