nridge added inline comments.
================
Comment at: clang-tools-extra/clangd/GlobalCompilationDatabase.h:165
+// process a file (possibly different from the one in the command).
+class CompileCommandsAdjuster {
+public:
----------------
nridge wrote:
> sammccall wrote:
> > I have a couple of concerns with this interface:
> >  - we seem to be stretching to cover {mangler, querydriver} with one 
> > interface, but there's no particular reason to - we never use it 
> > polymorphically.
> >  - the contract is very vague. If it's just "mutate flags" then some sort 
> > of generic `function<void(CompileCommand&)>` seems sufficient
> >  - `File` feels out-of-place - it's purely an input for the mangler. If 
> > query-driver needs an extra input, will we add that too?
> >  - either `CompileCommand` or filename+argv seems reasonable, providing 
> > CompileCommand+argv is confusing. 
> >  - the name is hard to distinguish from tooling::ArgumentsAdjuster (which 
> > is a bad interface)
> > 
> > The immediate problem being solved is the type of 
> > CommandMangler::SystemIncludeExtractor, right?
> > Can that just be `unique_function<void(vector<string>&, StringRef)>` or so? 
> > Possibly behind `using SystemIncludeExtractor = ...`.
> It's more that `QueryDriverDatabase` 
> [uses](https://searchfox.org/llvm/rev/f213128b292da85f68eeebbb68cba1541e1c39e2/clang-tools-extra/clangd/QueryDriverDatabase.cpp#354)
>  the `Directory` field of `tooling::CompileCommand` in addition to the 
> arguments.
> 
> We could add the directory as another argument to the function, but at that 
> point why not group the arguments into `tooling::CompileCommand` which is 
> more semantically meaningful?
> 
> As for polymorphism vs. `unique_function`, I don't feel strongly about that, 
> happy to change that up. (I do find `function` more annoying to debug because 
> `step into` at a call site in the debugger steps into some hard-to-read 
> library code, but that's probably better solved at the debugger tooling 
> level.)
Forgot to mention one other subtlety here: because `QueryDriverDatabase` needs 
to operate on a `tooling::CompileCommand`, the interface between 
`CommandMangler` and `OverlayCDB` needs to be widened to accommodate passing a 
`tooling::CompileCommand`, i.e. it can't be `ArgumentsAdjuster` any more.

This is why I reused `CompileCommandsAdjuster` as the type used to pass 
`CommandMangler` to `OverlayCDB`, and the type used to pass 
`SystemIncludeExtractor` to `CommandMangler`. It's not used 
//polymorphically//, we just need an interface that can accept a 
`CompileCommand` in both places; they could be two different types if we prefer.


Repository:
  rG LLVM Github Monorepo

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

https://reviews.llvm.org/D133756

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

Reply via email to