Allow to separate top-level script declarations and statements with semicolon
This fix allows to write one-liner scripts like "val x = 3; println(x)", which were previously rejected by the parser.
This commit is contained in:
@@ -1261,7 +1261,7 @@ public class KotlinExpressionParsing extends AbstractKotlinParsing {
|
|||||||
else if (at(RBRACE)) {
|
else if (at(RBRACE)) {
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
else if (!myBuilder.newlineBeforeCurrentToken()) {
|
else if (!isScriptTopLevel && !myBuilder.newlineBeforeCurrentToken()) {
|
||||||
String severalStatementsError = "Unexpected tokens (use ';' to separate expressions on the same line)";
|
String severalStatementsError = "Unexpected tokens (use ';' to separate expressions on the same line)";
|
||||||
|
|
||||||
if (atSet(STATEMENT_NEW_LINE_QUICK_RECOVERY_SET)) {
|
if (atSet(STATEMENT_NEW_LINE_QUICK_RECOVERY_SET)) {
|
||||||
|
|||||||
+1
@@ -0,0 +1 @@
|
|||||||
|
val x = 6; println(x * 7)
|
||||||
+35
@@ -0,0 +1,35 @@
|
|||||||
|
KtFile: OneLiner.kts
|
||||||
|
PACKAGE_DIRECTIVE
|
||||||
|
<empty list>
|
||||||
|
IMPORT_LIST
|
||||||
|
<empty list>
|
||||||
|
SCRIPT
|
||||||
|
BLOCK
|
||||||
|
PROPERTY
|
||||||
|
PsiElement(val)('val')
|
||||||
|
PsiWhiteSpace(' ')
|
||||||
|
PsiElement(IDENTIFIER)('x')
|
||||||
|
PsiWhiteSpace(' ')
|
||||||
|
PsiElement(EQ)('=')
|
||||||
|
PsiWhiteSpace(' ')
|
||||||
|
INTEGER_CONSTANT
|
||||||
|
PsiElement(INTEGER_LITERAL)('6')
|
||||||
|
PsiElement(SEMICOLON)(';')
|
||||||
|
PsiWhiteSpace(' ')
|
||||||
|
SCRIPT_INITIALIZER
|
||||||
|
CALL_EXPRESSION
|
||||||
|
REFERENCE_EXPRESSION
|
||||||
|
PsiElement(IDENTIFIER)('println')
|
||||||
|
VALUE_ARGUMENT_LIST
|
||||||
|
PsiElement(LPAR)('(')
|
||||||
|
VALUE_ARGUMENT
|
||||||
|
BINARY_EXPRESSION
|
||||||
|
REFERENCE_EXPRESSION
|
||||||
|
PsiElement(IDENTIFIER)('x')
|
||||||
|
PsiWhiteSpace(' ')
|
||||||
|
OPERATION_REFERENCE
|
||||||
|
PsiElement(MUL)('*')
|
||||||
|
PsiWhiteSpace(' ')
|
||||||
|
INTEGER_CONSTANT
|
||||||
|
PsiElement(INTEGER_LITERAL)('7')
|
||||||
|
PsiElement(RPAR)(')')
|
||||||
@@ -2607,6 +2607,11 @@ public class ParsingTestGenerated extends AbstractParsingTest {
|
|||||||
runTest("compiler/testData/psi/script/manyAnnotationsOnFile.kts");
|
runTest("compiler/testData/psi/script/manyAnnotationsOnFile.kts");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@TestMetadata("OneLiner.kts")
|
||||||
|
public void testOneLiner() throws Exception {
|
||||||
|
runTest("compiler/testData/psi/script/OneLiner.kts");
|
||||||
|
}
|
||||||
|
|
||||||
@TestMetadata("Shebang.kts")
|
@TestMetadata("Shebang.kts")
|
||||||
public void testShebang() throws Exception {
|
public void testShebang() throws Exception {
|
||||||
runTest("compiler/testData/psi/script/Shebang.kts");
|
runTest("compiler/testData/psi/script/Shebang.kts");
|
||||||
|
|||||||
Reference in New Issue
Block a user