lh123 added inline comments.

================
Comment at: clang-tools-extra/clangd/Hover.cpp:1271
     OS << " = " << *P.Default;
+  if (P.Type && P.Type->AKA)
+    OS << llvm::formatv(" (aka {0})", *P.Type->AKA);
----------------
lh123 wrote:
> sammccall wrote:
> > kadircet wrote:
> > > sammccall wrote:
> > > > Hmm, this seems to render as:
> > > > 
> > > > ```std::string Foo = "" (aka basic_string<char>)```
> > > > 
> > > > it's not *completely* clear what the aka refers to.
> > > > I don't have a better solution, though.
> > > > @kadircet any opinions here?
> > > i think it's attached to the type of the parameter, not it's name nor the 
> > > initializer-expr. so I think we should move this closer to the type (i.e. 
> > > `std::string (aka basic_sting<char>) Foo = ""`, basically 
> > > `llvm::toString(P.Type)` ?)
> > > i think it's attached to the type of the parameter
> > 
> > This is logically correct but I think it's harder to read. This puts text 
> > in the middle of code, in a way that doesn't seem obvious to me: parens 
> > mean several things in C++ and it may be hard to recognize this means none 
> > of them.
> > 
> > Worst case is we have function types: `word(*)() (aka long(*)()) x = 
> > nullptr`
> > 
> > It also disrupts the reading flow in the case where the aka is *not* needed 
> > for understanding.
> > I think overall the previous version was better, though not great.
> > 
> > I'm tempted to say we should scope down this patch further until we have a 
> > better feel for how it behaves, i.e. exclude param types from aka for now. 
> > Param types are less obviously useful to disambiguate than result types. 
> > (e.g. because in most cases you can hover over the input expression).
> > I'm tempted to say we should scope down this patch further until we have a 
> > better feel for how it behaves, i.e. exclude param types from aka for now. 
> > Param types are less obviously useful to disambiguate than result types. 
> > (e.g. because in most cases you can hover over the input expression).
> 
> I‘d like to keep the `a.k.a` type for parameter. because: 
> 1. sometime we pass `literal (or null pointer)` as parameter, but clang 
> doesn't support hover on literal. eg:
> ```
> using mint = int;
> void foo(mint *);
> void code() {
>     foo(nullptr); // hover over foo, we can get 'mint * (aka int *)'
> }
> ```
> 2. It may be useful when making function calls, although it does not work 
> well when the function is overloaded.**(add a.k.a type to signature help?)** 
> eg:
> ```
> using mint = int;
> void foo(mint *);
> void code() {
>     foo(); // hover on foo, we can get 'mint * (aka int *)'
> }
> ```
> 
> >  I think overall the previous version was better, though not great.
> 
> Agree with that, it seems that putting a.k.a in the middle of the code makes 
> the hover look bad based on my recent use
It is also useful when pass function calling  as parameters.
```
struct Test {
  Test(int);
};
using Alias = Test;

int foo();
void bar(Alias);

void code() {
    bar(foo()); // Hover over bar, we can know that 'int' is implicitly 
converted to 'Test'
}
```


Repository:
  rG LLVM Github Monorepo

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

https://reviews.llvm.org/D114522

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

Reply via email to