Skip to content

Commit 5e9470a

Browse files
authored
Merge pull request #59976 from CodaFi/the-whole-shebang
Differentiate Shebang from Garbage
2 parents bcfa805 + 003b362 commit 5e9470a

File tree

5 files changed

+7
-4
lines changed

5 files changed

+7
-4
lines changed

include/swift/Syntax/Trivia.h.gyb

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -366,6 +366,7 @@ private:
366366
case TriviaKind::DocBlockComment:
367367
return Text.startswith("/**") && Text.endswith("*/");
368368
case TriviaKind::GarbageText:
369+
case TriviaKind::Shebang:
369370
return !Text.empty();
370371
% for trivia in TRIVIAS:
371372
% if trivia.is_collection():

lib/Parse/Lexer.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3214,7 +3214,7 @@ ParsedTrivia TriviaLexer::lexTrivia(StringRef TriviaStr) {
32143214
// Hashbang '#!/path/to/swift'.
32153215
advanceToEndOfLine(CurPtr, BufferEnd);
32163216
size_t Length = CurPtr - TriviaStart;
3217-
Pieces.push_back(TriviaKind::GarbageText, Length);
3217+
Pieces.push_back(TriviaKind::Shebang, Length);
32183218
continue;
32193219
}
32203220
break;

unittests/Parse/LexerTriviaTests.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -109,7 +109,7 @@ TEST_F(LexerTriviaTest, TriviaHashbang) {
109109
ASSERT_EQ(LeadingTrivia, "#!/bin/swift\n");
110110
ASSERT_EQ(TrailingTrivia, "");
111111
ASSERT_EQ(LeadingTriviaPieces, (ParsedTrivia{{
112-
ParsedTriviaPiece(TriviaKind::GarbageText, strlen("#!/bin/swift")),
112+
ParsedTriviaPiece(TriviaKind::Shebang, strlen("#!/bin/swift")),
113113
ParsedTriviaPiece(TriviaKind::Newline, 1)}}));
114114
ASSERT_EQ(TrailingTriviaPieces, ParsedTrivia());
115115
}
@@ -140,7 +140,7 @@ TEST_F(LexerTriviaTest, TriviaHashbangAfterBOM) {
140140
ASSERT_EQ(TrailingTrivia, "");
141141
ASSERT_EQ(LeadingTriviaPieces, (ParsedTrivia{{
142142
ParsedTriviaPiece(TriviaKind::GarbageText, strlen("\xEF\xBB\xBF")),
143-
ParsedTriviaPiece(TriviaKind::GarbageText, strlen("#!/bin/swift")),
143+
ParsedTriviaPiece(TriviaKind::Shebang, strlen("#!/bin/swift")),
144144
ParsedTriviaPiece(TriviaKind::Newline, 1)}}));
145145
ASSERT_EQ(TrailingTriviaPieces, ParsedTrivia());
146146
}

unittests/Syntax/TriviaTests.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -173,7 +173,7 @@ TEST(TriviaTests, Contains) {
173173
.contains(TriviaKind::DocBlockComment));
174174
ASSERT_TRUE(Trivia::docLineComment("///")
175175
.contains(TriviaKind::DocLineComment));
176-
ASSERT_TRUE(Trivia::garbageText("#!swift").contains(TriviaKind::GarbageText));
176+
ASSERT_TRUE(Trivia::shebang("#!swift").contains(TriviaKind::Shebang));
177177
ASSERT_TRUE(Trivia::lineComment("//").contains(TriviaKind::LineComment));
178178
ASSERT_TRUE(Trivia::newlines(1).contains(TriviaKind::Newline));
179179
ASSERT_TRUE(Trivia::spaces(1).contains(TriviaKind::Space));

utils/gyb_syntax_support/Trivia.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -59,6 +59,8 @@ def is_collection(self):
5959
'with \'*/\'.',
6060
is_comment=True, serialization_code=11),
6161
Trivia('GarbageText', 'Any skipped garbage text.', serialization_code=12),
62+
Trivia('Shebang', 'A script command, starting with \'#!\'.',
63+
serialization_code=13),
6264
]
6365

6466

0 commit comments

Comments
 (0)