[clang-tools-extra] r368581 - [clangd] Separate chunks with a space when rendering markdown

Hans Wennborg via cfe-commits cfe-commits at lists.llvm.org
Tue Aug 13 04:41:09 PDT 2019


Sure, merged in r368670.

On Mon, Aug 12, 2019 at 5:12 PM Ilya Biryukov <ibiryukov at google.com> wrote:
>
> +Hans Wennborg, could we merge this into the release?
>
> On Mon, Aug 12, 2019 at 4:34 PM Ilya Biryukov via cfe-commits <cfe-commits at lists.llvm.org> wrote:
>>
>> Author: ibiryukov
>> Date: Mon Aug 12 07:35:30 2019
>> New Revision: 368581
>>
>> URL: http://llvm.org/viewvc/llvm-project?rev=368581&view=rev
>> Log:
>> [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/trunk/clangd/FormattedString.cpp
>>     clang-tools-extra/trunk/clangd/unittests/FormattedStringTests.cpp
>>
>> Modified: clang-tools-extra/trunk/clangd/FormattedString.cpp
>> URL: http://llvm.org/viewvc/llvm-project/clang-tools-extra/trunk/clangd/FormattedString.cpp?rev=368581&r1=368580&r2=368581&view=diff
>> ==============================================================================
>> --- clang-tools-extra/trunk/clangd/FormattedString.cpp (original)
>> +++ clang-tools-extra/trunk/clangd/FormattedString.cpp Mon Aug 12 07:35:30 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/trunk/clangd/unittests/FormattedStringTests.cpp
>> URL: http://llvm.org/viewvc/llvm-project/clang-tools-extra/trunk/clangd/unittests/FormattedStringTests.cpp?rev=368581&r1=368580&r2=368581&view=diff
>> ==============================================================================
>> --- clang-tools-extra/trunk/clangd/unittests/FormattedStringTests.cpp (original)
>> +++ clang-tools-extra/trunk/clangd/unittests/FormattedStringTests.cpp Mon Aug 12 07:35:30 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
>>
>>
>> _______________________________________________
>> cfe-commits mailing list
>> cfe-commits at lists.llvm.org
>> https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
>
>
>
> --
> Regards,
> Ilya Biryukov


More information about the cfe-commits mailing list