sammccall marked 10 inline comments as done.
sammccall added inline comments.


================
Comment at: clang-tools-extra/clangd/CMakeLists.txt:41
+  ConfigCompile.cpp
   ConfigYAML.cpp
   Diagnostics.cpp
----------------
hokein wrote:
> we have a few config-related files now, I wonder would it make sense to 
> create a config/ subdir?
It seems marginal to me - could go either way. We have a small handful (2 
headers and 3 impl files). There may be 1-2 more, but I'm not sure yet. 
(config-files-on-disk, and json->fragment).
So 6-7 files... smaller than the other subdirs, but not tiny.

There's also the fact that config.h/cpp is not like the others: all features 
(not just infra) depend on this, it's not in the `config::` namespace etc. So 
should it really be in the subdir?

Mind if we hold off on this until at least the scope of D82335 has landed? I 
think it would be awkward to do this move halfway through this patchset, but 
fairly easy to do at any point that things are stable.


================
Comment at: clang-tools-extra/clangd/ConfigCompile.cpp:96
+
+  constexpr static auto Error = llvm::SourceMgr::DK_Error;
+  void diag(llvm::SourceMgr::DiagKind Kind, llvm::StringRef Message,
----------------
hokein wrote:
> this member seems unused.
it's used on line 52 `diag(Error, ...)`.

I wouldn't bother extracting it except there should be a bunch more places 
where errors are emitted, and keeping them readable is worthwhile IME.


================
Comment at: clang-tools-extra/clangd/ConfigProvider.h:32
+/// Describes the context used to evaluate configuration fragments.
+struct Params {
+  /// Absolute path to file we're targeting. Unix slashes.
----------------
hokein wrote:
> nit: I find the name `Params` is too general, it implies less information. 
> When I read the code using `Params`, I have to go-to-definition to see what 
> it means. 
> 
> if we only have a single member in this struct, maybe just use it directly.
Agree with the vague name.
In most contexts, the name is `config::Params` which is at least a bit more 
specific.

> if we only have a single member in this struct, maybe just use it directly.

I don't like this, though - there are likely to be more things here in the 
future (e.g. platform), and passing around a string is much less clear as to 
intent. So any idea about a name for this struct?

What about `config::Environment` or `config::Env`? still too vague?


================
Comment at: clang-tools-extra/clangd/ConfigProvider.h:40
+///
+/// Fragments are compiled by Providers when first loaded, and cached for 
reuse.
+/// Like a compiled program, this is good for performance and also encourages
----------------
hokein wrote:
> I might miss the context, where is the provider, not added yet? 
Right, D82335 has a rought draft of everything together (it's called 
ConfigProvider in that patch).

I think it's less churn-y to add the documentation as the classes are added, 
even if it means temporarily referring to something that doesn't exist yet.


================
Comment at: clang-tools-extra/clangd/ConfigProvider.h:47
+  /// This always produces a usable compiled fragment (errors are recovered).
+  explicit CompiledFragment(Fragment, DiagnosticCallback);
+
----------------
hokein wrote:
> Would it be more nature to have a function `compile`(or so) to do the actual 
> compile (Fragment -> CompiledFragment) rather than doing it in a constructor?
I'm not sure. The idea that the input/result is Fragment/CompiledFragment, and 
that the compilation cannot fail, suggests to me that a constructor is OK here.
On the other hand, the DiangosticCallback param (which we don't keep a 
reference to) is a bit weird.

So I don't really feel strongly about it one way or the other, happy to change 
it if you do think it would be significantly better.


================
Comment at: clang-tools-extra/clangd/unittests/ConfigCompileTests.cpp:40
+TEST_F(ConfigCompileTests, Condition) {
+  // No condition.
+  Frag.CompileFlags.Add.emplace_back("X");
----------------
hokein wrote:
> my first impression was that each `// XXX` is a separated test, but it turns 
> out not, the tests here seem to be stateful -- `Frag` keeps being modified. I 
> think it is intentional, but it is hard for readers to track given that the 
> code is long.
Agree. Made this test reset fragment state after each group of assertions.


Repository:
  rG LLVM Github Monorepo

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

https://reviews.llvm.org/D82612



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

Reply via email to