[PATCH] D69263: [clangd] Implement cross-file rename.

Ilya Biryukov via Phabricator via cfe-commits cfe-commits at lists.llvm.org
Thu Nov 7 09:23:12 PST 2019


ilya-biryukov added inline comments.


================
Comment at: clang-tools-extra/clangd/ClangdServer.cpp:342
+  // A snapshot of all file dirty buffers.
+  llvm::StringMap<std::string> SnapShot = WorkScheduler.getAllFileContents();
   auto Action = [File = File.str(), NewName = NewName.str(), Pos, WantFormat,
----------------
NIT: s/SnapShot/Snapshot


================
Comment at: clang-tools-extra/clangd/ClangdServer.cpp:371
+    }
+    CB(std::move(*Edits));
   };
----------------
NIT: `return CB(std::move(*Edits));`
to keep all calls to `CB` consistent.


================
Comment at: clang-tools-extra/clangd/TUScheduler.h:186
+
+  // std::vector<std::>
   /// Schedule an async task with no dependencies.
----------------
NIT: seems like a leftover from the previous version. Maybe remove?


================
Comment at: clang-tools-extra/clangd/refactor/Rename.cpp:48
+  auto ID = getSymbolID(&D);
+  assert(ID);
+  Req.IDs.insert(*ID);
----------------
NIT: this assert is redundant, `Optional` asserts it has a value when `operator*` is called.
The code could be simplified to the equivalent: `Refs.insert(*getSymbolID(&D))`


================
Comment at: clang-tools-extra/clangd/refactor/Rename.cpp:135
+  // Note: within-file rename does support this through the AST.
+  if (const auto *S = llvm::dyn_cast<CXXMethodDecl>(&RenameDecl))
+    if (S->isVirtual())
----------------
nit: add braces to the outer if


================
Comment at: clang-tools-extra/clangd/refactor/Rename.cpp:244
+    return EndOffset.takeError();
+  return std::make_pair<>(*StartOffset, *EndOffset);
+};
----------------
NIT: remove `<>`. should still work, right?


================
Comment at: clang-tools-extra/clangd/refactor/Rename.cpp:297
+  FileEdits Results;
+  std::string OldName = RenameDecl->getNameAsString();
+  for (const auto &FileAndOccurrences : AffectedFiles) {
----------------
We don't seem to use it. Remove? Or am I missing the usage?


================
Comment at: clang-tools-extra/clangd/refactor/Rename.cpp:345
+  SourceLocation SourceLocationBeg =
+      SM.getMacroArgExpandedLocation(getBeginningOfIdentifier(
+          RInputs.Pos, SM, AST.getASTContext().getLangOpts()));
----------------
Why is this different from `prepareRename`, which does not call `getMacroArgExpandedLocation`?



================
Comment at: clang-tools-extra/clangd/refactor/Rename.cpp:379
+    return FileEdits(
+        {std::make_pair<>(RInputs.MainFilePath,
+                          Edit{MainFileCode, std::move(*MainFileRenameEdit)})});
----------------
NIT: remove `<>`


================
Comment at: clang-tools-extra/clangd/refactor/Tweak.h:80
     llvm::Optional<std::string> ShowMessage;
     /// A mapping from file path(the one used for accessing the underlying VFS)
     /// to edits.
----------------
The comment is now redundant, since the typedef has the same comment.


================
Comment at: clang-tools-extra/clangd/unittests/RenameTests.cpp:27
+
+std::unique_ptr<RefSlab> buildRefSlab(const Annotations &Code,
+                                      llvm::StringRef SymbolName,
----------------
Could you document what this function is doing?


================
Comment at: clang-tools-extra/clangd/unittests/RenameTests.cpp:52
+    std::pair</*InitialCode*/ std::string, /*CodeAfterRename*/ std::string>>
+applyRename(FileEdits FE) {
+  std::vector<std::pair<std::string, std::string>> Results;
----------------
NIT: I suggest to call it `applyEdits`, there's nothing rename-specific in this function.


================
Comment at: clang-tools-extra/clangd/unittests/RenameTests.cpp:115
     ASSERT_TRUE(bool(RenameResult)) << RenameResult.takeError();
-    auto ApplyResult = llvm::cantFail(
-        tooling::applyAllReplacements(Code.code(), *RenameResult));
-    EXPECT_EQ(expectedResult(Code, NewName), ApplyResult);
+    EXPECT_THAT(applyRename(std::move(*RenameResult)),
+                UnorderedElementsAre(
----------------
NIT: maybe simplify to `EXPECT_EQ(applyRename(...).second, expectedResult(Code, NewName))`?


Repository:
  rG LLVM Github Monorepo

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

https://reviews.llvm.org/D69263





More information about the cfe-commits mailing list