sammccall added inline comments.

================
Comment at: clang-tools-extra/clangd/IncludeCleaner.cpp:247
   for (const Inclusion &MFI : Structure.MainFileIncludes) {
     // FIXME: Skip includes that are not self-contained.
     if (!MFI.HeaderID) {
----------------
kbobyrev wrote:
> sammccall wrote:
> > this is fixed now (though I think it would be better addressed ~here)
> That's what I had initially (you can see the previous version of the patch, 
> after which I sent "oh, wrong place" and changed it). I think my idea was 
> that this looks confusing from the API standpoint. Choosing to filter out 
> non-guarded headers looks like a diagnostics decision and it looked awkward 
> to me to do that here: what `getUnused` does is simply merge two data 
> structures. I think it's somewhat similar to the patch where you mentioned 
> "parse, don't validate" and it is a great argument: the `<built-in>` and 
> `<scratch-space>` are indeed not "headers" in a sensible meaning of the term 
> but non self-contained ones are.
> 
> I don't have a very strong opinion on this, so I put the filtering back here 
> but I'm curious if you agree with my thoughs.
Sorry, I was unclear: I meant we should put the call to `mayConsiderUnused` 
here, not that we should split it up and put half of it here. So the "written 
with <" check would also be at this point.

> Choosing to filter out non-guarded headers looks like a diagnostics decision
I don't think so: we **don't know** that a header is unused if we suspect it of 
being an umbrella header or used for side effects. The reason we're choosing 
not to diagnose it doesn't have anything to do with **diagnostics** per se.
You could say "unused" has some more narrow definition, but that doesn't seem 
very useful to me.

> what `getUnused` does is simply merge two data structures
Sure, because the nontrivial parts haven't been implemented yet :-) But its 
role is to make filtering decisions of Inclusions from the AST to support a 
high-level concept of "unused", so I think the filtering fits well here.
If we support a non-strict policy, I'd expect getUnused to implement that 
(maybe with helpers) and that's going to involve some more analysis too.

On the other hand, I think the role of the loop in 
issueUnusedIncludesDiagnostics *is* simply converting: between an unused 
include list to diagnostics.

> I think it's somewhat similar to the patch where you mentioned "parse, don't 
> validate" and it is a great argument: the <built-in> and <scratch-space> are 
> indeed not "headers" in a sensible meaning of the term but non self-contained 
> ones are.
I'm not sure the analogy holds: my argument was to do the filtering at the 
place where you're doing the conversion/parsing that might fail. But here we 
could perfectly well convert the unused FileIDs to unused Header IDs to unused 
Inclusions to diagnostics, it would just be logically wrong to do so. We have 
free choice of where to put that logic, and diagnostic conversion seems like 
the wrong place to me.


Repository:
  rG LLVM Github Monorepo

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

https://reviews.llvm.org/D112695

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

Reply via email to