@@ -960,42 +960,6 @@ std::optional<HoverInfo> getHoverContents(const Attr *A, ParsedAST &AST) {
960
960
return HI;
961
961
}
962
962
963
- bool isParagraphBreak (llvm::StringRef Rest) {
964
- return Rest.ltrim (" \t " ).starts_with (" \n " );
965
- }
966
-
967
- bool punctuationIndicatesLineBreak (llvm::StringRef Line) {
968
- constexpr llvm::StringLiteral Punctuation = R"txt( .:,;!?)txt" ;
969
-
970
- Line = Line.rtrim ();
971
- return !Line.empty () && Punctuation.contains (Line.back ());
972
- }
973
-
974
- bool isHardLineBreakIndicator (llvm::StringRef Rest) {
975
- // '-'/'*' md list, '@'/'\' documentation command, '>' md blockquote,
976
- // '#' headings, '`' code blocks
977
- constexpr llvm::StringLiteral LinebreakIndicators = R"txt( -*@\>#`)txt" ;
978
-
979
- Rest = Rest.ltrim (" \t " );
980
- if (Rest.empty ())
981
- return false ;
982
-
983
- if (LinebreakIndicators.contains (Rest.front ()))
984
- return true ;
985
-
986
- if (llvm::isDigit (Rest.front ())) {
987
- llvm::StringRef AfterDigit = Rest.drop_while (llvm::isDigit);
988
- if (AfterDigit.starts_with (" ." ) || AfterDigit.starts_with (" )" ))
989
- return true ;
990
- }
991
- return false ;
992
- }
993
-
994
- bool isHardLineBreakAfter (llvm::StringRef Line, llvm::StringRef Rest) {
995
- // Should we also consider whether Line is short?
996
- return punctuationIndicatesLineBreak (Line) || isHardLineBreakIndicator (Rest);
997
- }
998
-
999
963
void addLayoutInfo (const NamedDecl &ND, HoverInfo &HI) {
1000
964
if (ND.isInvalidDecl ())
1001
965
return ;
@@ -1601,51 +1565,32 @@ std::optional<llvm::StringRef> getBacktickQuoteRange(llvm::StringRef Line,
1601
1565
return Line.slice (Offset, Next + 1 );
1602
1566
}
1603
1567
1604
- void parseDocumentationLine (llvm::StringRef Line , markup::Paragraph &Out) {
1568
+ void parseDocumentationParagraph (llvm::StringRef Text , markup::Paragraph &Out) {
1605
1569
// Probably this is appendText(Line), but scan for something interesting.
1606
- for (unsigned I = 0 ; I < Line .size (); ++I) {
1607
- switch (Line [I]) {
1570
+ for (unsigned I = 0 ; I < Text .size (); ++I) {
1571
+ switch (Text [I]) {
1608
1572
case ' `' :
1609
- if (auto Range = getBacktickQuoteRange (Line , I)) {
1610
- Out.appendText (Line .substr (0 , I));
1573
+ if (auto Range = getBacktickQuoteRange (Text , I)) {
1574
+ Out.appendText (Text .substr (0 , I));
1611
1575
Out.appendCode (Range->trim (" `" ), /* Preserve=*/ true );
1612
- return parseDocumentationLine (Line .substr (I + Range->size ()), Out);
1576
+ return parseDocumentationParagraph (Text .substr (I + Range->size ()), Out);
1613
1577
}
1614
1578
break ;
1615
1579
}
1616
1580
}
1617
- Out.appendText (Line). appendSpace ( );
1581
+ Out.appendText (Text );
1618
1582
}
1619
1583
1620
1584
void parseDocumentation (llvm::StringRef Input, markup::Document &Output) {
1621
- std::vector<llvm::StringRef> ParagraphLines;
1622
- auto FlushParagraph = [&] {
1623
- if (ParagraphLines.empty ())
1624
- return ;
1625
- auto &P = Output.addParagraph ();
1626
- for (llvm::StringRef Line : ParagraphLines)
1627
- parseDocumentationLine (Line, P);
1628
- ParagraphLines.clear ();
1629
- };
1585
+ llvm::StringRef Paragraph, Rest;
1586
+ for (std::tie (Paragraph, Rest) = Input.split (" \n\n " );
1587
+ !(Paragraph.empty () && Rest.empty ());
1588
+ std::tie (Paragraph, Rest) = Rest.split (" \n\n " )) {
1630
1589
1631
- llvm::StringRef Line, Rest;
1632
- for (std::tie (Line, Rest) = Input.split (' \n ' );
1633
- !(Line.empty () && Rest.empty ());
1634
- std::tie (Line, Rest) = Rest.split (' \n ' )) {
1635
-
1636
- // After a linebreak remove spaces to avoid 4 space markdown code blocks.
1637
- // FIXME: make FlushParagraph handle this.
1638
- Line = Line.ltrim ();
1639
- if (!Line.empty ())
1640
- ParagraphLines.push_back (Line);
1641
-
1642
- if (isParagraphBreak (Rest) || isHardLineBreakAfter (Line, Rest)) {
1643
- FlushParagraph ();
1644
- }
1590
+ if (!Paragraph.empty ())
1591
+ parseDocumentationParagraph (Paragraph, Output.addParagraph ());
1645
1592
}
1646
- FlushParagraph ();
1647
1593
}
1648
-
1649
1594
llvm::raw_ostream &operator <<(llvm::raw_ostream &OS,
1650
1595
const HoverInfo::PrintedType &T) {
1651
1596
OS << T.Type ;
0 commit comments