ioeric added inline comments.

================
Comment at: clangd/include-mapping/gen_std.py:46
+//
+// Generated from cppreference offline HTML book v%s.
+//===----------------------------------------------------------------------===//
----------------
I'd suggest dropping `v` prefix as it might be confusing (e.g. one would search 
for the exact same version number on cppreference archive). Maybe add a short 
comment explaining that this is the modification date of the doc?


================
Comment at: clangd/include-mapping/gen_std.py:114
+  # so we use the modified time of the symbol_index.html as the version.
+  cppreference_version = datetime.datetime.fromtimestamp(
+    os.stat(index_page_path).st_mtime).strftime('%Y-%m-%d')
----------------
s/version/date/, as this not really a version.


================
Comment at: clangd/include-mapping/gen_std.py:129
+        headers = ParseSymbolPage(f.read())
+      if len(headers) == 0:
+        sys.stderr.write("No header found for symbol %s at %s\n" % 
(symbol_name,
----------------
`if not headers:`


================
Comment at: clangd/index/CanonicalIncludes.cpp:123
 
   static const std::vector<std::pair<const char *, const char *>>
       SystemHeaderMap = {
----------------
ioeric wrote:
> hokein wrote:
> > sammccall wrote:
> > > hokein wrote:
> > > > ioeric wrote:
> > > > > Can we remove the suffix header mapping now? Is it for the 
> > > > > `std::chrono::` symbols? What are the reasons not to include them in 
> > > > > this patch? 
> > > > Ideally, we could remove it once we get a perfect symbol mapping but 
> > > > I'd prefer to keep it (it serves as a fallback when we don't find 
> > > > symbols in the symbol mapping), so that we could add new symbol mapping 
> > > > increasingly without changing the current behavior.
> > > > 
> > > > Removing it should be done carefully without introducing regression, 
> > > > and is outside the scope of this patch.
> > > We do need fallback heuristics. We should conisder cases:
> > >  - for known `std::` symbols mapped to one system header, we don't need a 
> > > fallback
> > >  - for known `std::` mapped to multiple system headers (`std::move`), we 
> > > need some fallback. There are probably few enough of these that it 
> > > doesn't justify listing *all* system header paths.
> > >  - for known `std::` symbols with a primary template in one file and 
> > > specializations/overloads in another (swap?) always inserting the primary 
> > > seems fine 
> > >  - For "random" unknown symbols from system header `foo/bits/_bar.h`, we 
> > > can not insert, correct to `<bar>`, or use the full path name. I don't 
> > > have a strong preference here, maybe we should do what's easiest.
> > >  - for c standard library (`::printf` --> `<stdio.h>` etc) we probably 
> > > want mappings just like in this patch, I think cppreference has them.
> > >  - other "standardish" headers (POSIX etc) - hmm, unclear.
> > > 
> > > Thinking about all these cases, I'm thinking the nicest solution would be 
> > > having the symbol -> header mapping, having a small (symbol,header) -> 
> > > header mapping **only** for ambiguous cases, and not inserting "system" 
> > > headers that aren't in the main mapping at all. Then we can improve 
> > > coverage of posix, windows etc headers over time.
> > > Question is, how can we recognize "system" headers?
> > I think we were talking about C++ std symbols.
> > 
> > > for known std:: symbols mapped to one system header, we don't need a 
> > > fallback
> > > for known std:: mapped to multiple system headers (std::move), we need 
> > > some fallback. There are probably few enough of these that it doesn't 
> > > justify listing *all* system header paths.
> > > for known std:: symbols with a primary template in one file and 
> > > specializations/overloads in another (swap?) always inserting the primary 
> > > seems fine
> > 
> > As discussed in this patch, we have other ways to disambiguate these 
> > symbols (rather than relying on the header mapping), so it is possible to 
> > remove STL headers mapping, but we'll lose correct headers for STL 
> > implement-related symbols (e.g. `__hash_code`), ideally we should drop 
> > these symbols in the indexer...
> > 
> > > for c standard library (::printf --> <stdio.h> etc) we probably want 
> > > mappings just like in this patch, I think cppreference has them.
> > 
> > Yes, cppreference has them.
> > 
> > > other "standardish" headers (POSIX etc) - hmm, unclear.
> > 
> > I think we should still keep the header mapping. Not sure whether there are 
> > some sources like cppreference that list all symbols.
> > 
> > 
> So, do we have a plan on how to handle ambiguous symbols properly? If so, 
> could you please summarize this in the FIXME comment so that we don't lose 
> track of it?
> 
> > I think we should still keep the header mapping. Not sure whether there are 
> > some sources like cppreference that list all symbols.
> What's the reasoning?
> 
> I am +1 on Sam's idea about skipping include insertion for std:: symbols that 
> are not on cppreference. It's fine to keep the suffix header mapping in the 
> short term while we are working out ambiguous symbols. But I don't think we 
> would want to maintain both mappings in the long term. 
> 
> Could you maybe add comment for the header mapping indicating that they are 
> now the fallback mapping for std:: symbols?
This is not done?


Repository:
  rCTE Clang Tools Extra

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

https://reviews.llvm.org/D58345



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

Reply via email to