[PATCH] D76094: [clangd] Change line break behaviour for hoverinfo
Sam McCall via Phabricator via cfe-commits
cfe-commits at lists.llvm.org
Mon Mar 16 07:35:30 PDT 2020
sammccall added a comment.
I understand the main goal here is preserving intended line breaks in documentation comments? Thanks for tackling this problem!
A design goal here is that the markup objects are the source of truth about the document structure. So if we've decided we want a comment to turn into multiple lines, we should create multiple Paragraph objects, this makes it easy to adjust the rendering strategy and isolate differences between text/markdown.
I think this means this splitting needs to happen on the way in instead of on the way out. In Hover.cpp:
if (!Documentation.empty())
Output.addParagraph().appendText(Documentation);
would be come something like
parseDocumentationComment(Output, Documentation);
which would ultimately add a paragraph to `Output` for each line detected in Documentation.
> Even though markdown doc comments in cpp are still rare, I removed the markdown escaping
Please let's leave this out, at least from this patch, if it's not the primary goal. This is a complicated tradeoff, there's plenty of reasonably common patterns where we should be escaping, such as `vector<string>`. Moreover if we're treating punctuation in the comments as formatting, we should likely also be doing so in plain-text mode.
FYI D75687 <https://reviews.llvm.org/D75687> (less unneccesary escaping in markdown) is also in flight and likely to touch some of the same code.
================
Comment at: clang-tools-extra/clangd/FormattedString.cpp:103
+// converted to markdown linebreaks if \p Markdown is set.
+std::string convertLineBreaks(llvm::StringRef Input, bool Markdown = false) {
+ Input = Input.trim();
----------------
We can separate concerns more clearly by not having this function care about markdown.
Can it have a signature like:
- `vector<StringRef> splitLines(StringRef Text)` (which wouldn't normalize whitespace within the lines)
- `vector<string> splitLines(StringRef Text)` which would
and then continue to have line rendering handled elsewhere?
Repository:
rG LLVM Github Monorepo
CHANGES SINCE LAST ACTION
https://reviews.llvm.org/D76094/new/
https://reviews.llvm.org/D76094
More information about the cfe-commits
mailing list