@@ -960,42 +960,6 @@ std::optional<HoverInfo> getHoverContents(const Attr *A, ParsedAST &AST) {
960960 return HI;
961961}
962962
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-
999963void addLayoutInfo (const NamedDecl &ND, HoverInfo &HI) {
1000964 if (ND.isInvalidDecl ())
1001965 return ;
@@ -1601,51 +1565,32 @@ std::optional<llvm::StringRef> getBacktickQuoteRange(llvm::StringRef Line,
16011565 return Line.slice (Offset, Next + 1 );
16021566}
16031567
1604- void parseDocumentationLine (llvm::StringRef Line , markup::Paragraph &Out) {
1568+ void parseDocumentationParagraph (llvm::StringRef Text , markup::Paragraph &Out) {
16051569 // 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]) {
16081572 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));
16111575 Out.appendCode (Range->trim (" `" ), /* Preserve=*/ true );
1612- return parseDocumentationLine (Line .substr (I + Range->size ()), Out);
1576+ return parseDocumentationParagraph (Text .substr (I + Range->size ()), Out);
16131577 }
16141578 break ;
16151579 }
16161580 }
1617- Out.appendText (Line). appendSpace ( );
1581+ Out.appendText (Text );
16181582}
16191583
16201584void 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 " )) {
16301589
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 ());
16451592 }
1646- FlushParagraph ();
16471593}
1648-
16491594llvm::raw_ostream &operator <<(llvm::raw_ostream &OS,
16501595 const HoverInfo::PrintedType &T) {
16511596 OS << T.Type ;
0 commit comments