[llvm-branch-commits] [clang-tools-extra-branch] r368670 - Merging r368581:

Hans Wennborg via llvm-branch-commits llvm-branch-commits at lists.llvm.org
Tue Aug 13 04:42:12 PDT 2019


Author: hans
Date: Tue Aug 13 04:42:12 2019
New Revision: 368670

URL: http://llvm.org/viewvc/llvm-project?rev=368670&view=rev
Log:
Merging r368581:
------------------------------------------------------------------------
r368581 | ibiryukov | 2019-08-12 16:35:30 +0200 (Mon, 12 Aug 2019) | 18 lines

[clangd] Separate chunks with a space when rendering markdown

Summary:
This results in better rendering of resulting markdown.

Especially noticeable in coc.nvim that does not have a visible horizontal
spaces around inline code blocks. More details and a screenshot from
coc.nvim can be found in https://github.com/clangd/clangd/issues/95.

Reviewers: sammccall

Reviewed By: sammccall

Subscribers: MaskRay, jkorous, arphaman, kadircet, cfe-commits

Tags: #clang

Differential Revision: https://reviews.llvm.org/D66086
------------------------------------------------------------------------

Modified:
    clang-tools-extra/branches/release_90/   (props changed)
    clang-tools-extra/branches/release_90/clangd/FormattedString.cpp
    clang-tools-extra/branches/release_90/clangd/unittests/FormattedStringTests.cpp

Propchange: clang-tools-extra/branches/release_90/
------------------------------------------------------------------------------
--- svn:mergeinfo (original)
+++ svn:mergeinfo Tue Aug 13 04:42:12 2019
@@ -1 +1 @@
-/clang-tools-extra/trunk:366443,366451,366455,366541,366545,366559,366687,366811,366880,366900,366991-366992,367112,367687,368019,368058,368498
+/clang-tools-extra/trunk:366443,366451,366455,366541,366545,366559,366687,366811,366880,366900,366991-366992,367112,367687,368019,368058,368498,368581

Modified: clang-tools-extra/branches/release_90/clangd/FormattedString.cpp
URL: http://llvm.org/viewvc/llvm-project/clang-tools-extra/branches/release_90/clangd/FormattedString.cpp?rev=368670&r1=368669&r2=368670&view=diff
==============================================================================
--- clang-tools-extra/branches/release_90/clangd/FormattedString.cpp (original)
+++ clang-tools-extra/branches/release_90/clangd/FormattedString.cpp Tue Aug 13 04:42:12 2019
@@ -112,15 +112,20 @@ void FormattedString::appendInlineCode(s
 
 std::string FormattedString::renderAsMarkdown() const {
   std::string R;
+  auto EnsureWhitespace = [&R]() {
+    // Adds a space for nicer rendering.
+    if (!R.empty() && !isWhitespace(R.back()))
+      R += " ";
+  };
   for (const auto &C : Chunks) {
     switch (C.Kind) {
     case ChunkKind::PlainText:
+      if (!C.Contents.empty() && !isWhitespace(C.Contents.front()))
+        EnsureWhitespace();
       R += renderText(C.Contents);
       continue;
     case ChunkKind::InlineCodeBlock:
-      // Make sure we don't glue two backticks together.
-      if (llvm::StringRef(R).endswith("`"))
-        R += " ";
+      EnsureWhitespace();
       R += renderInlineBlock(C.Contents);
       continue;
     case ChunkKind::CodeBlock:

Modified: clang-tools-extra/branches/release_90/clangd/unittests/FormattedStringTests.cpp
URL: http://llvm.org/viewvc/llvm-project/clang-tools-extra/branches/release_90/clangd/unittests/FormattedStringTests.cpp?rev=368670&r1=368669&r2=368670&view=diff
==============================================================================
--- clang-tools-extra/branches/release_90/clangd/unittests/FormattedStringTests.cpp (original)
+++ clang-tools-extra/branches/release_90/clangd/unittests/FormattedStringTests.cpp Tue Aug 13 04:42:12 2019
@@ -72,7 +72,7 @@ after)md";
   S.appendText("baz");
 
   EXPECT_EQ(S.renderAsPlainText(), "foo bar baz");
-  EXPECT_EQ(S.renderAsMarkdown(), "foo`bar`baz");
+  EXPECT_EQ(S.renderAsMarkdown(), "foo `bar` baz");
 }
 
 TEST(FormattedString, Escaping) {
@@ -158,6 +158,42 @@ TEST(FormattedString, Escaping) {
                                   "`````\n");
 }
 
+TEST(FormattedString, MarkdownWhitespace) {
+  // Whitespace should be added as separators between blocks.
+  FormattedString S;
+  S.appendText("foo");
+  S.appendText("bar");
+  EXPECT_EQ(S.renderAsMarkdown(), "foo bar");
+
+  S = FormattedString();
+  S.appendInlineCode("foo");
+  S.appendInlineCode("bar");
+  EXPECT_EQ(S.renderAsMarkdown(), "`foo` `bar`");
+
+  // However, we don't want to add any extra whitespace.
+  S = FormattedString();
+  S.appendText("foo ");
+  S.appendInlineCode("bar");
+  EXPECT_EQ(S.renderAsMarkdown(), "foo `bar`");
+
+  S = FormattedString();
+  S.appendText("foo\n");
+  S.appendInlineCode("bar");
+  EXPECT_EQ(S.renderAsMarkdown(), "foo\n`bar`");
+
+  S = FormattedString();
+  S.appendInlineCode("foo");
+  S.appendText(" bar");
+  EXPECT_EQ(S.renderAsMarkdown(), "`foo` bar");
+
+  S = FormattedString();
+  S.appendText("foo");
+  S.appendCodeBlock("bar");
+  S.appendText("baz");
+  EXPECT_EQ(S.renderAsMarkdown(), "foo\n```cpp\nbar\n```\nbaz");
+}
+
+
 } // namespace
 } // namespace clangd
 } // namespace clang




More information about the llvm-branch-commits mailing list