Skip to content

Commit c9f215c

Browse files
committed
[libSyntax] Teach SyntaxToSyntaxMapConverter to convert trivia
1 parent a3fb15b commit c9f215c

File tree

1 file changed

+19
-11
lines changed

1 file changed

+19
-11
lines changed

tools/SourceKit/lib/SwiftLang/SwiftEditor.cpp

Lines changed: 19 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -571,13 +571,14 @@ class SyntaxToSyntaxMapConverter : public SyntaxVisitor {
571571
: SyntaxMap(SyntaxMap), TokenClassifications(TokenClassifications) {}
572572

573573
private:
574-
void print(Trivia Trivia) {
574+
void print(Trivia Trivia, unsigned Offset) {
575575
for (auto TriviaPiece : Trivia) {
576-
print(TriviaPiece);
576+
print(TriviaPiece, Offset);
577+
Offset += TriviaPiece.getTextLength();
577578
}
578579
}
579580

580-
void print(TriviaPiece TriviaPiece) {
581+
void print(TriviaPiece TriviaPiece, unsigned Offset) {
581582
llvm::Optional<SyntaxNodeKind> Kind;
582583
switch (TriviaPiece.getKind()) {
583584
case TriviaKind::Space:
@@ -604,8 +605,11 @@ class SyntaxToSyntaxMapConverter : public SyntaxVisitor {
604605
Kind = SyntaxNodeKind::DocCommentBlock;
605606
break;
606607
}
607-
// FIXME: Add the trivia to the syntax map, but we don't have the necessary
608-
// location data yet
608+
if (Kind.hasValue()) {
609+
SwiftSyntaxToken Token(Offset, TriviaPiece.getTextLength(),
610+
Kind.getValue());
611+
SyntaxMap.addToken(Token);
612+
}
609613
}
610614

611615
llvm::Optional<SyntaxNodeKind>
@@ -650,17 +654,21 @@ class SyntaxToSyntaxMapConverter : public SyntaxVisitor {
650654
if (Token.isMissing())
651655
return;
652656

653-
print(Token.getLeadingTrivia());
657+
auto LeadingTriviaOffset =
658+
Token.getAbsolutePositionWithLeadingTrivia().getOffset();
659+
print(Token.getLeadingTrivia(), LeadingTriviaOffset);
654660

655661
SyntaxClassification Classification = TokenClassifications[Token.getId()];
656662
auto Kind = getKindForSyntaxClassification(Classification);
657-
if (Kind.hasValue()) {
658-
unsigned Start = Token.getAbsolutePosition().getOffset();
659-
unsigned Length = Token.getRaw()->getTokenText().size();
660-
SyntaxMap.addToken(SwiftSyntaxToken(Start, Length, Kind.getValue()));
663+
unsigned TokenStart = Token.getAbsolutePosition().getOffset();
664+
unsigned TokenLength = Token.getRaw()->getTokenText().size();
665+
if (Kind.hasValue() && TokenLength > 0) {
666+
SwiftSyntaxToken Token(TokenStart, TokenLength, Kind.getValue());
667+
SyntaxMap.addToken(Token);
661668
}
662669

663-
print(Token.getTrailingTrivia());
670+
auto TrailingTriviaOffset = TokenStart + TokenLength;
671+
print(Token.getTrailingTrivia(), TrailingTriviaOffset);
664672
}
665673

666674
public:

0 commit comments

Comments
 (0)