sammccall added a comment.

In D94293#2486468 <https://reviews.llvm.org/D94293#2486468>, @njames93 wrote:

> How does this approach work with differing language standards. For example 
> with an old implementation designed for c++14, `string_view` header won't 
> exist. If the implementation is designed to work with c++17, including that 
> header in c++14 mode will probably be ifdef... Error.

Yeah, this seems at least annoying. There's some spectrum of:

- build indexes per language version and dynamically switch between them based 
on the file
- make this variable in some global way (e.g. a flag, or first file opened 
chooses the language version)
- language version is always (e.g.) c++14, hopefully it's better than nothing

Similar to the no-stdlib question and the multiple-languages question, this 
points to a separate index layer being a stronger design to allow dynamically 
swapping it (though worse can be better, too).



================
Comment at: clang-tools-extra/clangd/ClangdServer.h:161
+    // insertion
+    bool IndexSTL = false;
+
----------------
nit: "the standard library"

for two reasons:
 - "STL" is no longer the correct name, even for C++
 - languages other than C++ have standard libraries (C in particular) that we 
could also control with this flag


================
Comment at: clang-tools-extra/clangd/index/Background.cpp:451
+  //               indexer?
+  const Path STLHeaderPath = SourceRoot + "/.stl_header.h";
+  vlog("Indexing STL headers from {0}", STLHeaderPath);
----------------
separate from the issue of virtual vs real file, it's not clear to me why we 
*want* this file to be close to the project rather than in some completely 
anonymous location.

(I have a few guesses, but...)


================
Comment at: clang-tools-extra/clangd/index/Background.h:160
+    // TODO(kuhnel): Only index if enqueueing C++ file.
+    indexSTLHeaders(ChangedFiles);
   }
----------------
this can happen 0+ times (roughly it happens once every time an enumerable CDB 
is discovered).

Instead, we'd want it to happen exactly once, or possibly 0-1 times if we're 
going to be language-sensitive.


================
Comment at: clang-tools-extra/clangd/tool/ClangdMain.cpp:527
 
+opt<bool> IndexSTL{
+    "index-stl",
----------------
kuhnel wrote:
> kadircet wrote:
> > do we really need to hide this behind a flag ? it sounds like a quite 
> > useful feature to me with minimal risk of regressions and unlikely to make 
> > anyone upset. in the end we are not doing anything heuristically and just 
> > throwing clang on some STL headers, that'll probably be included within the 
> > TUs eventually.
> > 
> > there's always the risk of crashing while parsing some STL headers, but i 
> > don't think it is any different than user just including the header 
> > manually.
> > 
> > the biggest problem i can see is people using custom STL headers, but 
> > hopefully compile flags interpolation logic should be able to infer the 
> > relevant location for those. and in the cases it fails we either index the 
> > default STL and suggest people some symbols their implementation might 
> > lack, or fail to find STL at all and print some logs for the missing 
> > includes.
> Back when I was developing embedded software, we couldn't use the STL for 
> various reasons (object size, no exceptions, no dynamic memory, ...) and had 
> our own, proprietary base library. In such a scenario it would be annoying if 
> clangd would be proposing things I could not use in the project. 
> 
> So we should have a way for users to disable this. I'm fine if we switch it 
> on by default and offer a `--disable-stl-index` flag instead.
Yeah, this is a good point.

Having this configurable would be valuable, but the useful granularity for such 
an option is per-file (Config) rather than a global clangd flag, as it's 
codebase-specific.

Unfortunately that doesn't really square with having it in the background index.


Repository:
  rG LLVM Github Monorepo

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

https://reviews.llvm.org/D94293

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

Reply via email to