ilya-biryukov added a comment.

Sorry for late response, was on vacation.
+1 to all @malaperle 's comments.

Here are some extra quick comments, will take a closer look later.



================
Comment at: clangd/ClangdServer.cpp:11
 #include "ClangdServer.h"
+#include "Protocol.h"
 #include "clang/Format/Format.h"
----------------
malaperle wrote:
> I don't know if the intention was to keep the protocol completely out of the 
> ClangdServer class. Maybe someone else can clarify. But either way, I see 
> that ClangdUnit does include "Protocol.h" so it's probably OK for now.
We don't want dependencies on JSON parsing/unparsing and the protocol itself. 
We reuse some of the LSP class definitions to avoid code duplication, though.

This include is redundant, though, as `ClangdServer.h` already include 
`Protocol.h`. 


================
Comment at: clangd/ClangdServer.h:281
   /// Get definition of symbol at a specified \p Line and \p Column in \p File.
-  llvm::Expected<Tagged<std::vector<Location>>> findDefinitions(PathRef File,
+  llvm::Expected<Tagged<std::vector<std::pair<Location, const Decl*>>>> 
findDefinitions(PathRef File,
                                                                 Position Pos);
----------------
malaperle wrote:
> Location can be deduced from Decl*. I don't think this should be a pair. I 
> also think we need a more general finder that just gets either the Decl* or 
> MacroDef* at the "cursor". I think CXCursor does something similar in that it 
> stores either Decl* or MacroDef*. I'm not sure it would be worth moving 
> CXCursor from libclang but perhaps something stripped down for Clangd would 
> be OK. This new finder will be able to be reused by findDefinition, 
> highlights, hover, references and more.
> We can make one patch that refactors the existing code so that 
> findDefinitions uses this new finder class.
We should not return `Decl*` from `ClangdServer::findDefinitions`, it's an 
internal clang object (there are many other reasons why it's bad). 

It's ok the change the `findDefinitions` helper function inside 
`ClangdUnit.cpp`, though. Please change it instead.

As for the `CXCursor`, I think the simplest approach would be to return two 
vectors (`vector<Decl*>` and `vector<MacroDef*>`). I think clangd would 
eventually get its own `CXCursor`-like things, possible reusing code or 
wrapping CXCursor. But for now let's keep things simple.


https://reviews.llvm.org/D35894



_______________________________________________
cfe-commits mailing list
cfe-commits@lists.llvm.org
http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to