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)) {
|
||||
break;
|
||||
}
|
||||
else if (!myBuilder.newlineBeforeCurrentToken()) {
|
||||
else if (!isScriptTopLevel && !myBuilder.newlineBeforeCurrentToken()) {
|
||||
String severalStatementsError = "Unexpected tokens (use ';' to separate expressions on the same line)";
|
||||
|
||||
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");
|
||||
}
|
||||
|
||||
@TestMetadata("OneLiner.kts")
|
||||
public void testOneLiner() throws Exception {
|
||||
runTest("compiler/testData/psi/script/OneLiner.kts");
|
||||
}
|
||||
|
||||
@TestMetadata("Shebang.kts")
|
||||
public void testShebang() throws Exception {
|
||||
runTest("compiler/testData/psi/script/Shebang.kts");
|
||||
|
||||
Reference in New Issue
Block a user