ballerina-platform / ballerina-lang

The Ballerina Programming Language
https://ballerina.io/
Apache License 2.0
3.58k stars 737 forks source link

[Bug]: `RuntimeException: Syntax kind is not supported: IN_KEYWORD` for incomplete let expression #39967

Open mindula opened 1 year ago

mindula commented 1 year ago

Description

Consider the following scenario,

import ballerina/lang.regexp;

function testRegExp(string:RegExp name) {
    string:RegExp letExpr = let string:<cursor> s = re `${name}` in re `car, van`;
}

The following exception is thrown with bal build (2201.5.0-SNAPSHOT) at the above cursor position

[2023-03-23 11:23:32,782] SEVERE {b7a.log.crash} - Syntax kind is not supported: IN_KEYWORD 
java.lang.RuntimeException: Syntax kind is not supported: IN_KEYWORD
        at org.wso2.ballerinalang.compiler.parser.BLangNodeBuilder.transform(BLangNodeBuilder.java:2401)
        at org.wso2.ballerinalang.compiler.parser.BLangNodeBuilder.transform(BLangNodeBuilder.java:514)
        at io.ballerina.compiler.syntax.tree.Token.apply(Token.java:114)
        at org.wso2.ballerinalang.compiler.parser.BLangNodeBuilder.createRawTemplateLiteral(BLangNodeBuilder.java:5469)
        at org.wso2.ballerinalang.compiler.parser.BLangNodeBuilder.transform(BLangNodeBuilder.java:2458)
        at org.wso2.ballerinalang.compiler.parser.BLangNodeBuilder.transform(BLangNodeBuilder.java:514)
        at io.ballerina.compiler.syntax.tree.TemplateExpressionNode.apply(TemplateExpressionNode.java:59)
        at org.wso2.ballerinalang.compiler.parser.BLangNodeBuilder.createActionOrExpression(BLangNodeBuilder.java:5427)
        at org.wso2.ballerinalang.compiler.parser.BLangNodeBuilder.createExpression(BLangNodeBuilder.java:5400)
        at org.wso2.ballerinalang.compiler.parser.BLangNodeBuilder.transform(BLangNodeBuilder.java:2144)
        at org.wso2.ballerinalang.compiler.parser.BLangNodeBuilder.transform(BLangNodeBuilder.java:514)
        at io.ballerina.compiler.syntax.tree.BinaryExpressionNode.apply(BinaryExpressionNode.java:54)
        at org.wso2.ballerinalang.compiler.parser.BLangNodeBuilder.createActionOrExpression(BLangNodeBuilder.java:5427)
        at org.wso2.ballerinalang.compiler.parser.BLangNodeBuilder.createExpression(BLangNodeBuilder.java:5400)
        at org.wso2.ballerinalang.compiler.parser.BLangNodeBuilder.transform(BLangNodeBuilder.java:2144)
        at org.wso2.ballerinalang.compiler.parser.BLangNodeBuilder.transform(BLangNodeBuilder.java:514)
        at io.ballerina.compiler.syntax.tree.BinaryExpressionNode.apply(BinaryExpressionNode.java:54)
        at org.wso2.ballerinalang.compiler.parser.BLangNodeBuilder.createActionOrExpression(BLangNodeBuilder.java:5427)
        at org.wso2.ballerinalang.compiler.parser.BLangNodeBuilder.createExpression(BLangNodeBuilder.java:5400)
        at org.wso2.ballerinalang.compiler.parser.BLangNodeBuilder.transform(BLangNodeBuilder.java:2144)
        at org.wso2.ballerinalang.compiler.parser.BLangNodeBuilder.transform(BLangNodeBuilder.java:514)
        at io.ballerina.compiler.syntax.tree.BinaryExpressionNode.apply(BinaryExpressionNode.java:54)
        at org.wso2.ballerinalang.compiler.parser.BLangNodeBuilder.createActionOrExpression(BLangNodeBuilder.java:5427)
        at org.wso2.ballerinalang.compiler.parser.BLangNodeBuilder.createExpression(BLangNodeBuilder.java:5400)
        at org.wso2.ballerinalang.compiler.parser.BLangNodeBuilder.transform(BLangNodeBuilder.java:2144)
        at org.wso2.ballerinalang.compiler.parser.BLangNodeBuilder.transform(BLangNodeBuilder.java:514)
        at io.ballerina.compiler.syntax.tree.BinaryExpressionNode.apply(BinaryExpressionNode.java:54)
        at org.wso2.ballerinalang.compiler.parser.BLangNodeBuilder.createActionOrExpression(BLangNodeBuilder.java:5427)
        at org.wso2.ballerinalang.compiler.parser.BLangNodeBuilder.createExpression(BLangNodeBuilder.java:5400)
        at org.wso2.ballerinalang.compiler.parser.BLangNodeBuilder.transform(BLangNodeBuilder.java:2444)
        at org.wso2.ballerinalang.compiler.parser.BLangNodeBuilder.transform(BLangNodeBuilder.java:514)
        at io.ballerina.compiler.syntax.tree.InterpolationNode.apply(InterpolationNode.java:54)
        at org.wso2.ballerinalang.compiler.parser.BLangNodeBuilder.transform(BLangNodeBuilder.java:5526)
        at org.wso2.ballerinalang.compiler.parser.BLangNodeBuilder.transform(BLangNodeBuilder.java:514)
        at io.ballerina.compiler.syntax.tree.ReAtomQuantifierNode.apply(ReAtomQuantifierNode.java:51)
        at org.wso2.ballerinalang.compiler.parser.BLangNodeBuilder.transform(BLangNodeBuilder.java:5507)
        at org.wso2.ballerinalang.compiler.parser.BLangNodeBuilder.transform(BLangNodeBuilder.java:514)
        at io.ballerina.compiler.syntax.tree.ReSequenceNode.apply(ReSequenceNode.java:46)
        at org.wso2.ballerinalang.compiler.parser.BLangNodeBuilder.createReDisjunctionNode(BLangNodeBuilder.java:5496)
        at org.wso2.ballerinalang.compiler.parser.BLangNodeBuilder.createRegExpTemplateLiteral(BLangNodeBuilder.java:5486)
        at org.wso2.ballerinalang.compiler.parser.BLangNodeBuilder.transform(BLangNodeBuilder.java:2460)
        at org.wso2.ballerinalang.compiler.parser.BLangNodeBuilder.transform(BLangNodeBuilder.java:514)
        at io.ballerina.compiler.syntax.tree.TemplateExpressionNode.apply(TemplateExpressionNode.java:59)
        at org.wso2.ballerinalang.compiler.parser.BLangNodeBuilder.createActionOrExpression(BLangNodeBuilder.java:5427)
        at org.wso2.ballerinalang.compiler.parser.BLangNodeBuilder.createExpression(BLangNodeBuilder.java:5400)
        at org.wso2.ballerinalang.compiler.parser.BLangNodeBuilder.createBLangVarDef(BLangNodeBuilder.java:2983)
        at org.wso2.ballerinalang.compiler.parser.BLangNodeBuilder.createLetVariable(BLangNodeBuilder.java:2593)
        at org.wso2.ballerinalang.compiler.parser.BLangNodeBuilder.transform(BLangNodeBuilder.java:2584)
        at org.wso2.ballerinalang.compiler.parser.BLangNodeBuilder.transform(BLangNodeBuilder.java:514)
        at io.ballerina.compiler.syntax.tree.LetExpressionNode.apply(LetExpressionNode.java:58)
        at org.wso2.ballerinalang.compiler.parser.BLangNodeBuilder.createActionOrExpression(BLangNodeBuilder.java:5427)
        at org.wso2.ballerinalang.compiler.parser.BLangNodeBuilder.createExpression(BLangNodeBuilder.java:5400)
        at org.wso2.ballerinalang.compiler.parser.BLangNodeBuilder.createBLangVarDef(BLangNodeBuilder.java:2983)
        at org.wso2.ballerinalang.compiler.parser.BLangNodeBuilder.transform(BLangNodeBuilder.java:2958)
        at org.wso2.ballerinalang.compiler.parser.BLangNodeBuilder.transform(BLangNodeBuilder.java:514)
        at io.ballerina.compiler.syntax.tree.VariableDeclarationNode.apply(VariableDeclarationNode.java:67)
        at org.wso2.ballerinalang.compiler.parser.BLangNodeBuilder.generateAndAddBLangStatements(BLangNodeBuilder.java:5299)
        at org.wso2.ballerinalang.compiler.parser.BLangNodeBuilder.transform(BLangNodeBuilder.java:1670)
        at org.wso2.ballerinalang.compiler.parser.BLangNodeBuilder.transform(BLangNodeBuilder.java:514)
        at io.ballerina.compiler.syntax.tree.FunctionBodyBlockNode.apply(FunctionBodyBlockNode.java:63)
        at org.wso2.ballerinalang.compiler.parser.BLangNodeBuilder.populateFunctionNode(BLangNodeBuilder.java:1573)
        at org.wso2.ballerinalang.compiler.parser.BLangNodeBuilder.createFunctionNode(BLangNodeBuilder.java:1551)
        at org.wso2.ballerinalang.compiler.parser.BLangNodeBuilder.transform(BLangNodeBuilder.java:1529)
        at org.wso2.ballerinalang.compiler.parser.BLangNodeBuilder.transform(BLangNodeBuilder.java:514)
        at io.ballerina.compiler.syntax.tree.FunctionDefinitionNode.apply(FunctionDefinitionNode.java:71)
        at org.wso2.ballerinalang.compiler.parser.BLangNodeBuilder.transform(BLangNodeBuilder.java:654)
        at org.wso2.ballerinalang.compiler.parser.BLangNodeBuilder.transform(BLangNodeBuilder.java:514)
        at io.ballerina.compiler.syntax.tree.ModulePartNode.apply(ModulePartNode.java:54)
        at org.wso2.ballerinalang.compiler.parser.BLangNodeBuilder.accept(BLangNodeBuilder.java:553)
        at io.ballerina.projects.DocumentContext.compilationUnit(DocumentContext.java:111)
        at io.ballerina.projects.ModuleContext.compileInternal(ModuleContext.java:419)
        at io.ballerina.projects.ModuleCompilationState$1.compile(ModuleCompilationState.java:45)
        at io.ballerina.projects.ModuleContext.compile(ModuleContext.java:381)
        at io.ballerina.projects.PackageCompilation.compileModulesInternal(PackageCompilation.java:203)
        at io.ballerina.projects.PackageCompilation.compileModules(PackageCompilation.java:187)
        at io.ballerina.projects.PackageCompilation.compile(PackageCompilation.java:99)
        at io.ballerina.projects.PackageCompilation.from(PackageCompilation.java:94)
        at io.ballerina.projects.PackageContext.getPackageCompilation(PackageContext.java:233)
        at io.ballerina.projects.Package.getCompilation(Package.java:148)
        at io.ballerina.projects.Package.runCodeGeneratorPlugins(Package.java:309)
        at io.ballerina.cli.task.CompileTask.execute(CompileTask.java:139)
        at io.ballerina.cli.TaskExecutor.executeTasks(TaskExecutor.java:40)
        at io.ballerina.cli.cmd.BuildCommand.execute(BuildCommand.java:279)
        at java.base/java.util.Optional.ifPresent(Optional.java:183)
        at io.ballerina.cli.launcher.Main.main(Main.java:51)

Affected Version(s)

No response

OS, DB, other environment details and versions

No response

Related area

-> Compilation

Related issue(s) (optional)

No response

Suggested label(s) (optional)

No response

Suggested assignee(s) (optional)

No response

pcnfernando commented 1 year ago

This is reproducable with other template expressions as well. LS recovers after the crash. Hence not a blocker