sammccall added a comment.

(I only got about halfway through the implementation - it's missing a lot of 
comments I think ;-))



================
Comment at: clang-tools-extra/clangd/XRefs.cpp:539
 
-/// Generate a \p Hover object given the declaration \p D.
-static Hover getHoverContents(const Decl *D) {
-  Hover H;
-  llvm::Optional<std::string> NamedScope = getScopeName(D);
+static QualType getDeclType(const Decl *D) {
+  if (const TypedefNameDecl *TDD = dyn_cast<TypedefNameDecl>(D))
----------------
I think this is basically ASTContext::getTypeDeclType()?


================
Comment at: clang-tools-extra/clangd/XRefs.cpp:549
 
-  // Generate the "Declared in" section.
-  if (NamedScope) {
-    assert(!NamedScope->empty());
+static llvm::Optional<Location> getDeclLoc(const SourceLocation &SL,
+                                           ASTContext &AST) {
----------------
what does this have to do with decls?


================
Comment at: clang-tools-extra/clangd/XRefs.cpp:563
 
-    H.contents.value += "Declared in ";
-    H.contents.value += *NamedScope;
-    H.contents.value += "\n\n";
+static std::string getDefinitionLine(const Decl *D) {
+  std::string Definition;
----------------
printDefinition?


================
Comment at: clang-tools-extra/clangd/XRefs.cpp:574
 
-  // We want to include the template in the Hover.
-  if (TemplateDecl *TD = D->getDescribedTemplate())
-    D = TD;
+llvm::raw_ostream &operator<<(llvm::raw_ostream &OS,
+                              const std::vector<HoverInfo::Param> &Params) {
----------------
I don't think it's reasonable to define this private helper as an overload of 
operator<<.
Make it a function, or inline it? (I think used only once)


================
Comment at: clang-tools-extra/clangd/XRefs.cpp:1207
+                              const HoverInfo::Param &P) {
+  OS << P.T << ' ' << P.Name;
+  if (!P.Default.empty())
----------------
avoid emitting the space if T/name are empty?


================
Comment at: clang-tools-extra/clangd/XRefs.cpp:1214
+llvm::raw_ostream &operator<<(llvm::raw_ostream &OS, const HoverInfo &HI) {
+  OS << HI.Definition << '\n';
+  OS << HI.Documentation << '\n';
----------------
This doesn't seem sufficiently self-documenting.


================
Comment at: clang-tools-extra/clangd/XRefs.h:52
+struct HoverInfo {
+  LocatedSymbol Sym;
+  /// Name of the context containing the symbol.
----------------
kadircet wrote:
> sammccall wrote:
> > I'm not sure about reuse of LocatedSymbol - do we want to commit to 
> > returning decl/def locations?
> > Name might be enough here.
> It might be nice to provide editors with enough info to jump to definition(it 
> was brought up during last meeting). But happy to reduce it to just name.
(this is not done I think - LocatedSymbol is still here)


================
Comment at: clang-tools-extra/clangd/XRefs.h:73
+  llvm::Optional<std::vector<Param>> Parameters;
+  llvm::Optional<std::vector<Param>> TemplateParameters;
+
----------------
ilya-biryukov wrote:
> kadircet wrote:
> > ilya-biryukov wrote:
> > > What does `Type` mean for non-type and template template parameters?
> > > Could you add a comment?
> > added comment for template template parameters.
> > 
> > For non-type template params, isn't it clear that this will hold the type 
> > of that param? e.g `template <C<int>... X>` -> `C<int>...`
> Ah, sure, sorry, I meant the type parameters :-)
I get the curiosity, but this is too much text, and only covers template 
parameters which are not the most important case.

Can we just say something like `The pretty-printed parameter type, e.g. "int", 
or "typename" (in TemplateParameters)`?

We should do something sensible for template template parameters, but it's not 
important or non-obvious enough to document.


================
Comment at: clang-tools-extra/clangd/XRefs.h:52
 
+struct HoverInfo {
+  using Type = std::string;
----------------
This needs docs :-)


================
Comment at: clang-tools-extra/clangd/XRefs.h:54
+  using Type = std::string;
+  struct Param {
+    // For template template params it holds the whole template decl, e.g,
----------------
one line doc for this struct?


================
Comment at: clang-tools-extra/clangd/XRefs.h:58
+    // For type-template params will contain "typename" or "class".
+    Type T;
+    std::string Name;
----------------
needs a real name
mention the no-type case (macros)


================
Comment at: clang-tools-extra/clangd/XRefs.h:59
+    Type T;
+    std::string Name;
+    std::string Default;
----------------
mention the unnamed case


================
Comment at: clang-tools-extra/clangd/XRefs.h:60
+    std::string Name;
+    std::string Default;
+  };
----------------
mention the no-default case


================
Comment at: clang-tools-extra/clangd/XRefs.h:64
+  LocatedSymbol Sym;
+  /// Fully qualiffied name for the scope containing the Sym.
+  std::string Scope;
----------------
qualiffied -> qualified


================
Comment at: clang-tools-extra/clangd/XRefs.h:65
+  /// Fully qualiffied name for the scope containing the Sym.
+  std::string Scope;
+  std::string ParentScope;
----------------
what's the difference between Scope and ParentScope?
Can we give them more obvious names, or a comment?
(The current comment doesn't really say anything)


================
Comment at: clang-tools-extra/clangd/XRefs.h:69
+  std::string Documentation;
+  /// Line containing the definition of the symbol.
+  std::string Definition;
----------------
This sounds like it's a source location, (e.g. "file.cc:42:7")
But I think it's rather source code?


================
Comment at: clang-tools-extra/clangd/XRefs.h:72
+
+  /// T and ReturnType are mutually exclusive.
+  llvm::Optional<Type> T;
----------------
I'm not sure this is significant or should even be true (e.g. if T is a 
function reference?)

Could we explain the relationship between the different fields here instead, 
maybe briefly with examples? (A function will have return type and parameters 
set, etc)


================
Comment at: clang-tools-extra/clangd/XRefs.h:73
+  /// T and ReturnType are mutually exclusive.
+  llvm::Optional<Type> T;
+  llvm::Optional<Type> ReturnType;
----------------
T needs a real name.


Repository:
  rG LLVM Github Monorepo

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

https://reviews.llvm.org/D61497



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

Reply via email to