Skip to content

Commit c2052d3

Browse files
Closure Teamcopybara-github
Closure Team
authored andcommitted
Remove unnecessary POUND TokenType
PiperOrigin-RevId: 722805274
1 parent ed7b61c commit c2052d3

File tree

3 files changed

+23
-9
lines changed

3 files changed

+23
-9
lines changed

src/com/google/javascript/jscomp/parsing/parser/Scanner.java

+17-7
Original file line numberDiff line numberDiff line change
@@ -47,7 +47,10 @@ public class Scanner {
4747
private int typeParameterLevel;
4848

4949
public Scanner(
50-
ErrorReporter errorReporter, CommentRecorder commentRecorder, SourceFile file, int offset) {
50+
ErrorReporter errorReporter,
51+
CommentRecorder commentRecorder,
52+
SourceFile file,
53+
int offset) {
5154
this.errorReporter = errorReporter;
5255
this.commentRecorder = commentRecorder;
5356
this.source = file;
@@ -622,9 +625,16 @@ private Token scanToken() {
622625
return createToken(TokenType.BAR, beginToken);
623626
}
624627
case '#':
625-
return createToken(TokenType.POUND, beginToken);
626-
// TODO: add NumberToken
627-
// TODO: character following NumericLiteral must not be an IdentifierStart or DecimalDigit
628+
// Shebang is not actually ever parsed here (when used correctly, it's handled above in the
629+
// skipComments() call) so its token is an error.
630+
if (peek('!')) {
631+
reportError(getPosition(index), "Shebang comment must be at the start of the file");
632+
} else {
633+
reportError(getPosition(index), "Invalid usage of #");
634+
}
635+
return createToken(TokenType.ERROR, beginToken);
636+
// TODO: add NumberToken
637+
// TODO: character following NumericLiteral must not be an IdentifierStart or DecimalDigit
628638
case '0':
629639
return scanPostZero(beginToken);
630640
case '1':
@@ -982,7 +992,7 @@ private SkipTemplateCharactersResult skipTemplateCharacters() {
982992
if (peekChar(1) == '{') {
983993
return result;
984994
}
985-
// Fall through.
995+
// Fall through.
986996
default:
987997
nextChar();
988998
}
@@ -1046,15 +1056,15 @@ private SkipTemplateCharactersResult skipTemplateCharacters() {
10461056
}
10471057
return null;
10481058
}
1049-
// https://tc39.es/ecma262/#prod-TemplateEscapeSequence
1059+
// https://tc39.es/ecma262/#prod-TemplateEscapeSequence
10501060
case '\\':
10511061
case 'b':
10521062
case 'f':
10531063
case 'n':
10541064
case 'r':
10551065
case 't':
10561066
case 'v':
1057-
// special meaning in template literal
1067+
// special meaning in template literal
10581068
case '$':
10591069
case '`':
10601070
return null;

src/com/google/javascript/jscomp/parsing/parser/TokenType.java

-1
Original file line numberDiff line numberDiff line change
@@ -128,7 +128,6 @@ public enum TokenType {
128128
CARET_EQUAL("^="),
129129
SLASH("/"),
130130
SLASH_EQUAL("/="),
131-
POUND("#"),
132131

133132
// Logical Assignment Punctuators
134133
AND_EQUAL("&&="),

test/com/google/javascript/jscomp/parsing/ParserTest.java

+6-1
Original file line numberDiff line numberDiff line change
@@ -7055,7 +7055,12 @@ public void testGoogModule() {
70557055
@Test
70567056
public void testShebang() {
70577057
parse("#!/usr/bin/node\n var x = 1;");
7058-
parseError("var x = 1; \n #!/usr/bin/node", "primary expression expected");
7058+
parseError("var x = 1; \n #!/usr/bin/node", "Shebang comment must be at the start of the file");
7059+
}
7060+
7061+
@Test
7062+
public void testInvalidPoundUsage() {
7063+
parseError("var x = 1; \n# Wrong-style comment", "Invalid usage of #");
70597064
}
70607065

70617066
@Test

0 commit comments

Comments
 (0)