[clang-tools-extra] [clangd] Improve Markup Rendering (PR #140498)

via cfe-commits cfe-commits at lists.llvm.org
Sat Jul 12 13:01:16 PDT 2025


================
@@ -370,40 +497,128 @@ std::unique_ptr<Block> Paragraph::clone() const {
 
 /// Choose a marker to delimit `Text` from a prioritized list of options.
 /// This is more readable than escaping for plain-text.
-llvm::StringRef chooseMarker(llvm::ArrayRef<llvm::StringRef> Options,
-                             llvm::StringRef Text) {
+llvm::StringRef Paragraph::chooseMarker(llvm::ArrayRef<llvm::StringRef> Options,
+                                        llvm::StringRef Text) const {
   // Prefer a delimiter whose characters don't appear in the text.
   for (llvm::StringRef S : Options)
     if (Text.find_first_of(S) == llvm::StringRef::npos)
       return S;
   return Options.front();
 }
 
+bool Paragraph::punctuationIndicatesLineBreak(llvm::StringRef Line) const {
+  constexpr llvm::StringLiteral Punctuation = R"txt(.:,;!?)txt";
+
+  Line = Line.rtrim();
+  return !Line.empty() && Punctuation.contains(Line.back());
+}
+
+bool Paragraph::isHardLineBreakIndicator(llvm::StringRef Rest) const {
+  // '-'/'*' md list, '@'/'\' documentation command, '>' md blockquote,
+  // '#' headings, '`' code blocks, two spaces (markdown force newline)
+  constexpr llvm::StringLiteral LinebreakIndicators = R"txt(-*@\>#`)txt";
+
+  Rest = Rest.ltrim(" \t");
----------------
tcottin wrote:

I would say no.

This case is only relevant if there are multiple successive newline characters in a paragraph.
This cannot happen for the documentation usecase because successive newline characters will lead to separate Paragraph objects.

The only case where this is relevant is if a Paragraph is created by a user and the paragraph text is explicitly set to contain e.g. "text\n\nother text".
In this case the newlines are treated the same as a newline, which results in a space in the text.

https://github.com/llvm/llvm-project/pull/140498


More information about the cfe-commits mailing list