[PATCH] D60821: [clangd] Emit better error messages when rename fails.
Haojian Wu via Phabricator via cfe-commits
cfe-commits at lists.llvm.org
Thu Apr 18 02:52:18 PDT 2019
hokein updated this revision to Diff 195701.
hokein marked 4 inline comments as done.
hokein added a comment.
Address comments.
Repository:
rG LLVM Github Monorepo
CHANGES SINCE LAST ACTION
https://reviews.llvm.org/D60821/new/
https://reviews.llvm.org/D60821
Files:
clang-tools-extra/clangd/ClangdServer.cpp
clang-tools-extra/test/clangd/rename.test
Index: clang-tools-extra/test/clangd/rename.test
===================================================================
--- clang-tools-extra/test/clangd/rename.test
+++ clang-tools-extra/test/clangd/rename.test
@@ -29,7 +29,7 @@
{"jsonrpc":"2.0","id":2,"method":"textDocument/rename","params":{"textDocument":{"uri":"test:///foo.cpp"},"position":{"line":0,"character":2},"newName":"bar"}}
# CHECK: "error": {
# CHECK-NEXT: "code": -32001,
-# CHECK-NEXT: "message": "clang diagnostic"
+# CHECK-NEXT: "message": "there is no symbol at the given location"
# CHECK-NEXT: },
# CHECK-NEXT: "id": 2,
# CHECK-NEXT: "jsonrpc": "2.0"
Index: clang-tools-extra/clangd/ClangdServer.cpp
===================================================================
--- clang-tools-extra/clangd/ClangdServer.cpp
+++ clang-tools-extra/clangd/ClangdServer.cpp
@@ -44,15 +44,26 @@
namespace clangd {
namespace {
+// Expand a DiagnosticError to make it print-friendly (print the detailed
+// message, rather than "clang diagnostic").
+llvm::Error expandDiagnostics(llvm::Error Err, DiagnosticsEngine &DE) {
+ if (auto Diag = DiagnosticError::take(Err)) {
+ llvm::cantFail(std::move(Err));
+ SmallVector<char, 128> DiagMessage;
+ Diag->second.EmitToString(DE, DiagMessage);
+ return llvm::make_error<llvm::StringError>(DiagMessage,
+ llvm::inconvertibleErrorCode());
+ }
+ return Err;
+}
+
class RefactoringResultCollector final
: public tooling::RefactoringResultConsumer {
public:
+ RefactoringResultCollector(DiagnosticsEngine &DE) : Diags(DE) {}
void handleError(llvm::Error Err) override {
assert(!Result.hasValue());
- // FIXME: figure out a way to return better message for DiagnosticError.
- // clangd uses llvm::toString to convert the Err to string, however, for
- // DiagnosticError, only "clang diagnostic" will be generated.
- Result = std::move(Err);
+ Result = expandDiagnostics(std::move(Err), Diags);
}
// Using the handle(SymbolOccurrences) from parent class.
@@ -63,6 +74,7 @@
Result = std::move(SourceReplacements);
}
+ DiagnosticsEngine &Diags;
llvm::Optional<llvm::Expected<tooling::AtomicChanges>> Result;
};
@@ -291,7 +303,8 @@
return CB(InpAST.takeError());
auto &AST = InpAST->AST;
- RefactoringResultCollector ResultCollector;
+ RefactoringResultCollector ResultCollector(
+ AST.getASTContext().getDiagnostics());
const SourceManager &SourceMgr = AST.getASTContext().getSourceManager();
SourceLocation SourceLocationBeg =
clangd::getBeginningOfIdentifier(AST, Pos, SourceMgr.getMainFileID());
@@ -301,7 +314,8 @@
auto Rename = clang::tooling::RenameOccurrences::initiate(
Context, SourceRange(SourceLocationBeg), NewName);
if (!Rename)
- return CB(Rename.takeError());
+ return CB(expandDiagnostics(Rename.takeError(),
+ AST.getASTContext().getDiagnostics()));
Rename->invoke(ResultCollector, Context);
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D60821.195701.patch
Type: text/x-patch
Size: 3060 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/cfe-commits/attachments/20190418/d3b924d3/attachment.bin>
More information about the cfe-commits
mailing list