[clang-tools-extra] r273304 - clang-rename: add a -old-name option

Galina Kistanova via cfe-commits cfe-commits at lists.llvm.org
Tue Jun 21 18:17:52 PDT 2016


Hi Miklos,

This revision broke one of builders:
http://lab.llvm.org:8011/builders/llvm-clang-lld-x86_64-scei-ps4-windows10pro-fast/builds/7435

Please have a look at it.

Thanks

Galina

On Tue, Jun 21, 2016 at 12:48 PM, Miklos Vajna via cfe-commits <
cfe-commits at lists.llvm.org> wrote:

> Author: vmiklos
> Date: Tue Jun 21 14:48:57 2016
> New Revision: 273304
>
> URL: http://llvm.org/viewvc/llvm-project?rev=273304&view=rev
> Log:
> clang-rename: add a -old-name option
>
> This is similar to -offset with the following differences:
>
> 1) -offset can refer to local variables as well.
>
> 2) -old-name makes it easier to refer to e.g. ClassName::MemberName by
> spelling out the fully qualified name, instead of having to use e.g.
> grep to look up the exact offset.
>
> In other words, -offset is great when clang-rename is invoked by e.g. an
> IDE, but not really user-friendly when the tool is invoked by the user
> from commandline.  That's the use case where -old-name is supposed to
> improve the situation.
>
> Reviewers: klimek
>
> Differential Revision: http://reviews.llvm.org/D21517
>
> Added:
>     clang-tools-extra/trunk/test/clang-rename/ClassTestByName.cpp
> Modified:
>     clang-tools-extra/trunk/clang-rename/USRFinder.cpp
>     clang-tools-extra/trunk/clang-rename/USRFinder.h
>     clang-tools-extra/trunk/clang-rename/USRFindingAction.cpp
>     clang-tools-extra/trunk/clang-rename/USRFindingAction.h
>     clang-tools-extra/trunk/clang-rename/tool/ClangRename.cpp
>
> Modified: clang-tools-extra/trunk/clang-rename/USRFinder.cpp
> URL:
> http://llvm.org/viewvc/llvm-project/clang-tools-extra/trunk/clang-rename/USRFinder.cpp?rev=273304&r1=273303&r2=273304&view=diff
>
> ==============================================================================
> --- clang-tools-extra/trunk/clang-rename/USRFinder.cpp (original)
> +++ clang-tools-extra/trunk/clang-rename/USRFinder.cpp Tue Jun 21 14:48:57
> 2016
> @@ -40,6 +40,14 @@ public:
>          Point(Point) {
>    }
>
> +  // \brief Finds the NamedDecl for a name in the source.
> +  // \param Name the fully qualified name.
> +  explicit NamedDeclFindingASTVisitor(const SourceManager &SourceMgr,
> +                                      const std::string &Name)
> +      : Result(nullptr), SourceMgr(SourceMgr),
> +        Name(Name) {
> +  }
> +
>    // Declaration visitors:
>
>    // \brief Checks if the point falls within the NameDecl. This covers
> every
> @@ -93,9 +101,17 @@ private:
>    // \returns false on success.
>    bool setResult(const NamedDecl *Decl, SourceLocation Start,
>                   SourceLocation End) {
> -    if (!Start.isValid() || !Start.isFileID() || !End.isValid() ||
> -        !End.isFileID() || !isPointWithin(Start, End)) {
> -      return true;
> +    if (Name.empty()) {
> +      // Offset is used to find the declaration.
> +      if (!Start.isValid() || !Start.isFileID() || !End.isValid() ||
> +          !End.isFileID() || !isPointWithin(Start, End)) {
> +        return true;
> +      }
> +    } else {
> +      // Fully qualified name is used to find the declaration.
> +      if (Name != Decl->getQualifiedNameAsString()) {
> +        return true;
> +      }
>      }
>      Result = Decl;
>      return false;
> @@ -121,6 +137,7 @@ private:
>    const NamedDecl *Result;
>    const SourceManager &SourceMgr;
>    const SourceLocation Point; // The location to find the NamedDecl.
> +  const std::string Name;
>  };
>  }
>
> @@ -145,6 +162,22 @@ const NamedDecl *getNamedDeclAt(const AS
>      }
>    }
>
> +  return nullptr;
> +}
> +
> +const NamedDecl *getNamedDeclFor(const ASTContext &Context,
> +                                 const std::string &Name) {
> +  const auto &SourceMgr = Context.getSourceManager();
> +  NamedDeclFindingASTVisitor Visitor(SourceMgr, Name);
> +  auto Decls = Context.getTranslationUnitDecl()->decls();
> +
> +  for (auto &CurrDecl : Decls) {
> +    Visitor.TraverseDecl(CurrDecl);
> +    if (const NamedDecl *Result = Visitor.getNamedDecl()) {
> +      return Result;
> +    }
> +  }
> +
>    return nullptr;
>  }
>
>
> Modified: clang-tools-extra/trunk/clang-rename/USRFinder.h
> URL:
> http://llvm.org/viewvc/llvm-project/clang-tools-extra/trunk/clang-rename/USRFinder.h?rev=273304&r1=273303&r2=273304&view=diff
>
> ==============================================================================
> --- clang-tools-extra/trunk/clang-rename/USRFinder.h (original)
> +++ clang-tools-extra/trunk/clang-rename/USRFinder.h Tue Jun 21 14:48:57
> 2016
> @@ -30,6 +30,12 @@ namespace rename {
>  const NamedDecl *getNamedDeclAt(const ASTContext &Context,
>                                  const SourceLocation Point);
>
> +// Given an AST context and a fully qualified name, returns a NamedDecl
> +// identifying the symbol with a matching name. Returns null if nothing is
> +// found for the name.
> +const NamedDecl *getNamedDeclFor(const ASTContext &Context,
> +                                 const std::string &Name);
> +
>  // Converts a Decl into a USR.
>  std::string getUSRForDecl(const Decl *Decl);
>
>
> Modified: clang-tools-extra/trunk/clang-rename/USRFindingAction.cpp
> URL:
> http://llvm.org/viewvc/llvm-project/clang-tools-extra/trunk/clang-rename/USRFindingAction.cpp?rev=273304&r1=273303&r2=273304&view=diff
>
> ==============================================================================
> --- clang-tools-extra/trunk/clang-rename/USRFindingAction.cpp (original)
> +++ clang-tools-extra/trunk/clang-rename/USRFindingAction.cpp Tue Jun 21
> 14:48:57 2016
> @@ -68,7 +68,12 @@ struct NamedDeclFindingConsumer : public
>          SourceMgr.getMainFileID()).getLocWithOffset(SymbolOffset);
>      if (!Point.isValid())
>        return;
> -    const NamedDecl *FoundDecl = getNamedDeclAt(Context, Point);
> +    const NamedDecl *FoundDecl = nullptr;
> +    if (OldName.empty()) {
> +      FoundDecl = getNamedDeclAt(Context, Point);
> +    } else {
> +      FoundDecl = getNamedDeclFor(Context, OldName);
> +    }
>      if (FoundDecl == nullptr) {
>        FullSourceLoc FullLoc(Point, SourceMgr);
>        errs() << "clang-rename: could not find symbol at "
> @@ -96,6 +101,7 @@ struct NamedDeclFindingConsumer : public
>    }
>
>    unsigned SymbolOffset;
> +  std::string OldName;
>    std::string *SpellingName;
>    std::vector<std::string> *USRs;
>  };
> @@ -106,6 +112,7 @@ USRFindingAction::newASTConsumer() {
>        new NamedDeclFindingConsumer);
>    SpellingName = "";
>    Consumer->SymbolOffset = SymbolOffset;
> +  Consumer->OldName = OldName;
>    Consumer->USRs = &USRs;
>    Consumer->SpellingName = &SpellingName;
>    return std::move(Consumer);
>
> Modified: clang-tools-extra/trunk/clang-rename/USRFindingAction.h
> URL:
> http://llvm.org/viewvc/llvm-project/clang-tools-extra/trunk/clang-rename/USRFindingAction.h?rev=273304&r1=273303&r2=273304&view=diff
>
> ==============================================================================
> --- clang-tools-extra/trunk/clang-rename/USRFindingAction.h (original)
> +++ clang-tools-extra/trunk/clang-rename/USRFindingAction.h Tue Jun 21
> 14:48:57 2016
> @@ -25,7 +25,7 @@ class NamedDecl;
>  namespace rename {
>
>  struct USRFindingAction {
> -  USRFindingAction(unsigned Offset) : SymbolOffset(Offset) {
> +  USRFindingAction(unsigned Offset, const std::string &Name) :
> SymbolOffset(Offset), OldName(Name) {
>    }
>    std::unique_ptr<ASTConsumer> newASTConsumer();
>
> @@ -40,6 +40,7 @@ struct USRFindingAction {
>
>  private:
>    unsigned SymbolOffset;
> +  std::string OldName;
>    std::string SpellingName;
>    std::vector<std::string> USRs;
>  };
>
> Modified: clang-tools-extra/trunk/clang-rename/tool/ClangRename.cpp
> URL:
> http://llvm.org/viewvc/llvm-project/clang-tools-extra/trunk/clang-rename/tool/ClangRename.cpp?rev=273304&r1=273303&r2=273304&view=diff
>
> ==============================================================================
> --- clang-tools-extra/trunk/clang-rename/tool/ClangRename.cpp (original)
> +++ clang-tools-extra/trunk/clang-rename/tool/ClangRename.cpp Tue Jun 21
> 14:48:57 2016
> @@ -52,6 +52,11 @@ SymbolOffset(
>      "offset",
>      cl::desc("Locates the symbol by offset as opposed to
> <line>:<column>."),
>      cl::cat(ClangRenameCategory));
> +static cl::opt<std::string>
> +OldName(
> +    "old-name",
> +    cl::desc("The fully qualified name of the symbol, if -offset is not
> used."),
> +    cl::cat(ClangRenameCategory));
>  static cl::opt<bool>
>  Inplace(
>      "i",
> @@ -96,7 +101,7 @@ int main(int argc, const char **argv) {
>    // Get the USRs.
>    auto Files = OP.getSourcePathList();
>    tooling::RefactoringTool Tool(OP.getCompilations(), Files);
> -  rename::USRFindingAction USRAction(SymbolOffset);
> +  rename::USRFindingAction USRAction(SymbolOffset, OldName);
>
>    // Find the USRs.
>    Tool.run(tooling::newFrontendActionFactory(&USRAction).get());
>
> Added: clang-tools-extra/trunk/test/clang-rename/ClassTestByName.cpp
> URL:
> http://llvm.org/viewvc/llvm-project/clang-tools-extra/trunk/test/clang-rename/ClassTestByName.cpp?rev=273304&view=auto
>
> ==============================================================================
> --- clang-tools-extra/trunk/test/clang-rename/ClassTestByName.cpp (added)
> +++ clang-tools-extra/trunk/test/clang-rename/ClassTestByName.cpp Tue Jun
> 21 14:48:57 2016
> @@ -0,0 +1,10 @@
> +// RUN: cat %s > %t.cpp
> +// RUN: clang-rename -old-name=Cla -new-name=Hector %t.cpp -i --
> +// RUN: sed 's,//.*,,' %t.cpp | FileCheck %s
> +class Cla { // CHECK: class Hector
> +};
> +
> +int main() {
> +  Cla *Pointer = 0; // CHECK: Hector *Pointer = 0;
> +  return 0;
> +}
>
>
> _______________________________________________
> cfe-commits mailing list
> cfe-commits at lists.llvm.org
> http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/cfe-commits/attachments/20160621/4ae85e75/attachment-0001.html>


More information about the cfe-commits mailing list