sammccall added inline comments.

================
Comment at: clang-tools-extra/clangd/FormattedString.cpp:121
 std::string renderBlocks(llvm::ArrayRef<std::unique_ptr<Block>> Children,
-                         void (Block::*RenderFunc)(llvm::raw_ostream &) const) 
{
+                         const RenderType RT) {
   std::string R;
----------------
Having thought about this a bit more:

I think it'd be clearer to apply the ruler-filtering "symbolically", dropping 
those blocks before attempting rendering. Need isRuler() I guess.
Then something like

```
vector<Block*> FilteredBlocks;
for (auto& C : Children) {
  if (C->isRuler() && (FilteredBlocks.empty() || 
FilteredBlocks.back()->isRuler()))
    continue;
  FilteredBlocks.push_back(C.get());
}
while (!FilteredBlocks.empty() && FilteredBlocks.back()->isRuler())
  FilteredBlocks.pop_back();
```

Whereas I can't see a good way to apply the plaintext-newline rule 
symbolically, textually seems reasonable:
```
llvm::erase_if(Text, [&](Char &C) { return StringRef(Text.data(), &C - 
Text.data()).endswith("\n\n"); });
```


================
Comment at: clang-tools-extra/clangd/FormattedString.h:36
 
+  /// Padding information to imitate spacing while rendering for plaintext. As
+  /// markdown renderers should already add appropriate padding between
----------------
This is a bit weird layering-wise. I think it'd be cleaner just to do a 
substitution on the rendered output.
Still a hack, but we've got that either way.


Repository:
  rG LLVM Github Monorepo

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

https://reviews.llvm.org/D72622



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

Reply via email to