[PATCH] D38425: [clangd] Document highlights for clangd

Ilya Biryukov via Phabricator via cfe-commits cfe-commits at lists.llvm.org
Thu Nov 30 01:31:30 PST 2017


ilya-biryukov requested changes to this revision.
ilya-biryukov added inline comments.
This revision now requires changes to proceed.


================
Comment at: clangd/ClangdLSPServer.cpp:67
         }}}});
+
   if (Params.rootUri && !Params.rootUri->file.empty())
----------------
malaperle wrote:
> extra line
Still there


================
Comment at: clangd/ClangdServer.cpp:513
+  auto FileContents = DraftMgr.getDraft(File);
+  assert(FileContents.Draft &&
+         "findDocumentHighlights is called for non-added document");
----------------
Other functions don't crash in this case anymore, we should follow the same pattern here (see `findDefinitions` for an example)


================
Comment at: clangd/ClangdServer.cpp:524
+    if (!AST)
+      return;
+    Result = clangd::findDocumentHighlights(*AST, Pos, Logger);
----------------
We should return an error this case.


================
Comment at: clangd/ClangdUnit.cpp:1062
+
+  DocumentHighlight getDocumentHighlight(SourceRange SR,
+                                         DocumentHighlightKind Kind) {
----------------
This function should be private.


================
Comment at: clangd/ClangdUnit.cpp:1096
+  Range R = {Begin, End};
+  Location L;
+  if (const FileEntry *F =
----------------
We should not return default-initialized `Locations` from this function.
Return `llvm::Optional<Location>` and handle the case when `getFileEntryForID` returns null by returning `llvm::None`.


================
Comment at: clangd/ClangdUnit.cpp:1165
 
   indexTopLevelDecls(AST.getASTContext(), AST.getTopLevelDecls(),
+                     DeclMacrosFinder, IndexOpts);
----------------
Let's add a comment that we don't currently handle macros. It's ok for the first iteration, having `documentHighlights` for `Decl`s is useful enough to get it in.


================
Comment at: clangd/Protocol.h:621
+                        const DocumentHighlight &RHS) {
+    return std::tie(LHS.range) < std::tie(RHS.range);
+  }
----------------
Please also compare `kind` here, to make this operator consistent with `operator==`.
`std::tie(LHS.range, LHS.kind) < std::tie(RHS.range,  RHS.kind)` should work. If it doesn't, converting enums to int should help: `std::tie(LHS.range, int(LHS.kind)) < std::tie(RHS.range,  int(RHS.kind))`


================
Comment at: test/clangd/initialize-params-invalid.test:23
 # CHECK-NEXT:      "documentFormattingProvider": true,
+# CHECK-NEXT:	   "documentHighlightProvider": true,
 # CHECK-NEXT:      "documentOnTypeFormattingProvider": {
----------------
NIT: Misindent


================
Comment at: test/clangd/initialize-params.test:23
 # CHECK-NEXT:      "documentFormattingProvider": true,
+# CHECK-NEXT:	   "documentHighlightProvider": true,
 # CHECK-NEXT:      "documentOnTypeFormattingProvider": {
----------------
NIT: Misindent


Repository:
  rCTE Clang Tools Extra

https://reviews.llvm.org/D38425





More information about the cfe-commits mailing list