sammccall added a comment.

In D114724#3163579 <https://reviews.llvm.org/D114724#3163579>, @kadircet wrote:

> for whatever reason I remembered the std::remove to have been referenced 
> ~17k. looks like these two are much closer. I don't think it makes sense to 
> prefer one or the other here.

Agree, for StdSymbolMap.inc this means neither version of remove should be 
there.

> I suggest moving forward with a mechanism that enables accepting certain 
> variants and accepting both unnamed and algorithm variants for std::remove, 
> hence it being rejected as an ambiguous symbol in the end. That way we won't 
> have a special case to handle once we start including multiple options for a 
> symbol.
> WDYT?

In practice we don't actually need the ability to accept specific variants, 
just variants in general.
(Maybe we'll need it later, but maybe not.)



================
Comment at: clang-tools-extra/clangd/CSymbolMap.inc:701
 SYMBOL(remainderl, None, <math.h>)
-SYMBOL(remove, None, <stdio.h>)
 SYMBOL(remquo, None, <math.h>)
----------------
hmm, I would expect this to still be in CSymbolMap, it's not ambiguous there.


================
Comment at: clang-tools-extra/clangd/include-mapping/cppreference_parser.py:138
       # FIXME: use these as a fallback rather than ignoring entirely.
-      if variant:
+      if variant != (namespace+symbol_name in variants_to_accept):
         continue
----------------
kadircet wrote:
> sammccall wrote:
> > This logic seems a bit weird and non-general: it allows us to accept any 
> > variant and reject any non-variant, but it doesn't allow us to accept 
> > a*specific* variant (they are named) and doesn't allow us to accept both 
> > (which currently would lead to the symbol being dropped as ambiguous).
> I was trying to keep the change to a minimum. Happy to go with a solution 
> that accepts a dictionary in the form of `(FQN, list_of_accepted_variants)`, 
> where the list can have `""` variant, or instead of a list we can also have a 
> glob, but I don't think it'll provide much value considering the irregularity 
> of std header names.
I'd just change this to `variant or (ns + name in variants to accept)`

That way we accept both versions of move, and end up dropping it as ambiguous.


================
Comment at: clang-tools-extra/clangd/include-mapping/cppreference_parser.py:164
+  # those symbols.
+  variants_to_accept = set(["std::remove"])
   symbols = []
----------------
we should have a comment on the symbol
# std::remove<> template has variant "algorithm"


Repository:
  rG LLVM Github Monorepo

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

https://reviews.llvm.org/D114724

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

Reply via email to