[PATCH] D155421: [clangd] Add BlockEnd comments for control flow statements
Haojian Wu via Phabricator via cfe-commits
cfe-commits at lists.llvm.org
Fri Jul 21 00:14:24 PDT 2023
hokein accepted this revision.
hokein added a comment.
This revision is now accepted and ready to land.
Thanks, this looks like in a good shape. I left comments with some thoughts and nits, but they're not blockers, feel free to land it.
================
Comment at: clang-tools-extra/clangd/InlayHints.cpp:252
+// This is used to summarize e.g. the condition of a while loop.
+std::string summarizeExpr(const Expr *E) {
+ struct Namer : ConstStmtVisitor<Namer, std::string> {
----------------
This looks like a complicated implementation to get an abbreviated-form of cond expression for the inlay label text.
A different idea would be if the user can just click the inlay label text, then the editor jumps to the corresponding for statement (looks like it is supported with the [InlayHintLabelPart::Location](https://microsoft.github.io/language-server-protocol/specifications/lsp/3.17/specification/#inlayHintLabelPart)) with that we probably don't need to emit an abbreviated-form text (`// for` should be clear enough).
================
Comment at: clang-tools-extra/clangd/InlayHints.cpp:578
+ // } else if (cond2) {
+ // } // mark as "cond1" or "cond2"?
+ // For now, the answer is neither, just mark as "if".
----------------
my opinion for this case would be (the marking result is also consistent with the brackets)
```
if (cond1) {
} // mark as cond1
else if (cond2) {
} // mark as cond2.
```
================
Comment at: clang-tools-extra/clangd/InlayHints.cpp:599
+ llvm::StringRef Name = "") {
+ if (const auto *CS = llvm::dyn_cast_or_null<CompoundStmt>(Body))
+ addBlockEndHint(CS->getSourceRange(), Label, Name, "");
----------------
it looks like we will mark the block end for single-statement `CompoundStmt` without `{}`, it doesn't seem to add much value to this case (the body is short enough to spot the for statement).
```
for (int i = 0; i < 10; ++i)
foo();
```
================
Comment at: clang-tools-extra/clangd/unittests/InlayHintTests.cpp:1786
+
+ if (auto X = cond) {
+ $init[[}]]
----------------
nit: add a case `if (int i = 0; i > 10) { ... }`.
================
Comment at: clang-tools-extra/clangd/unittests/InlayHintTests.cpp:1859
+ ExpectedHint{" // while \"foo\"", "string"},
+ ExpectedHint{" // while \"...\"", "string_long"},
+ ExpectedHint{" // while true", "boolean"},
----------------
nit: I guess showing `foo...` is better.
Repository:
rG LLVM Github Monorepo
CHANGES SINCE LAST ACTION
https://reviews.llvm.org/D155421/new/
https://reviews.llvm.org/D155421
More information about the cfe-commits
mailing list