sammccall added a comment.

In https://reviews.llvm.org/D39836#920977, @arphaman wrote:

> In https://reviews.llvm.org/D39836#920587, @sammccall wrote:
>
> > So I probably should have started from the other end, here :-)
> >
> > I'd really like to make the completion retrieval and ranking more flexible. 
> > In particular
> >
> > - incorporating results from other sources (indexes: both in-memory and 
> > external services).
> > - combining more quality signals like usage count and fuzzy-match-strength 
> > in a non-lexicographic-sort way The biggest difficulty in *supporting* 
> > unusable functions is maintaining the invariant that all unusable functions 
> > are ranked lower than usable ones - all code that deals with ranking has to 
> > deal with this special case, e.g. by making score a tuple instead of a 
> > single number.
>
>
> That sounds good to me. Please keep in mind that not all clients might want 
> to take advantage of these things as they might have their own fuzz-match 
> logic


Yup! My understanding of the protocol is clients will generally trigger 
completion after the dot, and then filter client-side *unless* the result set 
is incomplete.
So fuzzy-match filtering/scoring would only be triggered if we limit the number 
of results (proposed as optional in https://reviews.llvm.org/D39852) or if 
completion is explicitly triggered mid-identifier (maybe we should allow 
turning this off too).

> and external result injection.

Absolutely. To be concrete, i'm thinking about three overlaid:

1. a static generated index that clangd consumes (e.g. generated by 
index-while-building and located on disk, or a hosted index of google's 
monorepo)
2. a dynamically generated index of symbols in files that clangd has seen. 
(Likely to be dirty with respect to 1)
3. context-sensitive completion results as today

1 would definitely be optional.
2 isn't really external... we might want to handle global symbols with 2 and 
not 3 as now, but that's an implementation detail.

>> If the current approach of "give them a penalty" is enough, knowing that in 
>> the future it may lead to e.g. a very widely used but inaccessible protected 
>> function being ranked highly, then that seems fine to me too. A wider 
>> configuration space means testing is more work, but happy to live with it. 
>> What do you think?
>> 
>> (With my user-hat on, configurable is fine, though I do strongly feel they 
>> should be off by default, and it seems unlikely many users will change the 
>> defaults.)
> 
> I'd be ok with off by default, as long as it's possible to turn it on :)

Sure, I'll update the patch.

For these things that are (I assume) more "user preference" than project- or 
integration-specific, I wonder whether command-line flags are the right thing. 
Configuration in `~/.clangd` is a can of worms, but might be the right thing in 
the long-run.


https://reviews.llvm.org/D39836



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

Reply via email to