brighterscript 0.66.0-alpha.1 → 0.66.0-alpha.10
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +215 -10
- package/README.md +13 -3
- package/bsconfig.schema.json +15 -0
- package/dist/ActionPipeline.d.ts +10 -0
- package/dist/ActionPipeline.js +40 -0
- package/dist/ActionPipeline.js.map +1 -0
- package/dist/AstValidationSegmenter.d.ts +25 -0
- package/dist/AstValidationSegmenter.js +150 -0
- package/dist/AstValidationSegmenter.js.map +1 -0
- package/dist/BsConfig.d.ts +13 -4
- package/dist/BusyStatusTracker.d.ts +31 -0
- package/dist/BusyStatusTracker.js +83 -0
- package/dist/BusyStatusTracker.js.map +1 -0
- package/dist/Cache.js +3 -3
- package/dist/Cache.js.map +1 -1
- package/dist/CacheVerifier.d.ts +0 -1
- package/dist/CodeActionUtil.d.ts +2 -2
- package/dist/CommentFlagProcessor.d.ts +4 -3
- package/dist/CommentFlagProcessor.js.map +1 -1
- package/dist/DiagnosticCollection.js +8 -5
- package/dist/DiagnosticCollection.js.map +1 -1
- package/dist/DiagnosticMessages.d.ts +34 -4
- package/dist/DiagnosticMessages.js +59 -4
- package/dist/DiagnosticMessages.js.map +1 -1
- package/dist/FunctionScope.d.ts +1 -1
- package/dist/LanguageServer.d.ts +23 -1
- package/dist/LanguageServer.js +139 -57
- package/dist/LanguageServer.js.map +1 -1
- package/dist/Logger.d.ts +3 -2
- package/dist/Logger.js +10 -2
- package/dist/Logger.js.map +1 -1
- package/dist/PluginInterface.d.ts +11 -2
- package/dist/PluginInterface.js +69 -10
- package/dist/PluginInterface.js.map +1 -1
- package/dist/Program.d.ts +138 -49
- package/dist/Program.js +637 -349
- package/dist/Program.js.map +1 -1
- package/dist/ProgramBuilder.d.ts +10 -4
- package/dist/ProgramBuilder.js +76 -74
- package/dist/ProgramBuilder.js.map +1 -1
- package/dist/Scope.d.ts +52 -49
- package/dist/Scope.js +298 -274
- package/dist/Scope.js.map +1 -1
- package/dist/SymbolTable.d.ts +35 -14
- package/dist/SymbolTable.js +90 -29
- package/dist/SymbolTable.js.map +1 -1
- package/dist/Throttler.d.ts +12 -0
- package/dist/Throttler.js +39 -0
- package/dist/Throttler.js.map +1 -1
- package/dist/XmlScope.d.ts +7 -4
- package/dist/XmlScope.js +52 -12
- package/dist/XmlScope.js.map +1 -1
- package/dist/astUtils/{AstEditor.d.ts → Editor.d.ts} +6 -1
- package/dist/astUtils/{AstEditor.js → Editor.js} +9 -3
- package/dist/astUtils/Editor.js.map +1 -0
- package/dist/astUtils/{AstEditor.spec.js → Editor.spec.js} +10 -6
- package/dist/astUtils/Editor.spec.js.map +1 -0
- package/dist/astUtils/creators.d.ts +3 -1
- package/dist/astUtils/creators.js +14 -4
- package/dist/astUtils/creators.js.map +1 -1
- package/dist/astUtils/reflection.d.ts +37 -9
- package/dist/astUtils/reflection.js +83 -14
- package/dist/astUtils/reflection.js.map +1 -1
- package/dist/astUtils/reflection.spec.js +87 -5
- package/dist/astUtils/reflection.spec.js.map +1 -1
- package/dist/astUtils/visitors.d.ts +14 -3
- package/dist/astUtils/visitors.js +22 -2
- package/dist/astUtils/visitors.js.map +1 -1
- package/dist/astUtils/visitors.spec.js +58 -7
- package/dist/astUtils/visitors.spec.js.map +1 -1
- package/dist/bscPlugin/BscPlugin.d.ts +10 -2
- package/dist/bscPlugin/BscPlugin.js +24 -4
- package/dist/bscPlugin/BscPlugin.js.map +1 -1
- package/dist/bscPlugin/CallExpressionInfo.d.ts +3 -3
- package/dist/bscPlugin/CallExpressionInfo.js.map +1 -1
- package/dist/bscPlugin/FileWriter.d.ts +6 -0
- package/dist/bscPlugin/FileWriter.js +24 -0
- package/dist/bscPlugin/FileWriter.js.map +1 -0
- package/dist/bscPlugin/codeActions/CodeActionsProcessor.js +8 -8
- package/dist/bscPlugin/codeActions/CodeActionsProcessor.js.map +1 -1
- package/dist/bscPlugin/codeActions/CodeActionsProcessor.spec.js +4 -4
- package/dist/bscPlugin/codeActions/CodeActionsProcessor.spec.js.map +1 -1
- package/dist/bscPlugin/completions/CompletionsProcessor.d.ts +50 -1
- package/dist/bscPlugin/completions/CompletionsProcessor.js +442 -23
- package/dist/bscPlugin/completions/CompletionsProcessor.js.map +1 -1
- package/dist/bscPlugin/completions/CompletionsProcessor.spec.js +1737 -0
- package/dist/bscPlugin/completions/CompletionsProcessor.spec.js.map +1 -0
- package/dist/bscPlugin/fileProviders/FileProvider.d.ts +9 -0
- package/dist/bscPlugin/fileProviders/FileProvider.js +51 -0
- package/dist/bscPlugin/fileProviders/FileProvider.js.map +1 -0
- package/dist/bscPlugin/hover/HoverProcessor.d.ts +7 -3
- package/dist/bscPlugin/hover/HoverProcessor.js +133 -103
- package/dist/bscPlugin/hover/HoverProcessor.js.map +1 -1
- package/dist/bscPlugin/hover/HoverProcessor.spec.js +241 -29
- package/dist/bscPlugin/hover/HoverProcessor.spec.js.map +1 -1
- package/dist/bscPlugin/semanticTokens/BrsFileSemanticTokensProcessor.d.ts +1 -0
- package/dist/bscPlugin/semanticTokens/BrsFileSemanticTokensProcessor.js +43 -0
- package/dist/bscPlugin/semanticTokens/BrsFileSemanticTokensProcessor.js.map +1 -1
- package/dist/bscPlugin/semanticTokens/BrsFileSemanticTokensProcessor.spec.js +22 -0
- package/dist/bscPlugin/semanticTokens/BrsFileSemanticTokensProcessor.spec.js.map +1 -1
- package/dist/bscPlugin/serialize/BslibInjector.spec.js +19 -0
- package/dist/bscPlugin/serialize/BslibInjector.spec.js.map +1 -0
- package/dist/bscPlugin/serialize/BslibManager.d.ts +9 -0
- package/dist/bscPlugin/serialize/BslibManager.js +40 -0
- package/dist/bscPlugin/serialize/BslibManager.js.map +1 -0
- package/dist/bscPlugin/serialize/FileSerializer.d.ts +9 -0
- package/dist/bscPlugin/serialize/FileSerializer.js +72 -0
- package/dist/bscPlugin/serialize/FileSerializer.js.map +1 -0
- package/dist/bscPlugin/transpile/{BrsFilePreTranspileProcessor.d.ts → BrsFileTranspileProcessor.d.ts} +4 -2
- package/dist/bscPlugin/transpile/{BrsFilePreTranspileProcessor.js → BrsFileTranspileProcessor.js} +29 -5
- package/dist/bscPlugin/transpile/BrsFileTranspileProcessor.js.map +1 -0
- package/dist/bscPlugin/transpile/BrsFileTranspileProcessor.spec.d.ts +1 -0
- package/dist/bscPlugin/transpile/BrsFileTranspileProcessor.spec.js +41 -0
- package/dist/bscPlugin/transpile/BrsFileTranspileProcessor.spec.js.map +1 -0
- package/dist/bscPlugin/transpile/XmlFilePreTranspileProcessor.d.ts +2 -2
- package/dist/bscPlugin/transpile/XmlFilePreTranspileProcessor.js.map +1 -1
- package/dist/bscPlugin/validation/BrsFileValidator.d.ts +0 -4
- package/dist/bscPlugin/validation/BrsFileValidator.js +34 -29
- package/dist/bscPlugin/validation/BrsFileValidator.js.map +1 -1
- package/dist/bscPlugin/validation/BrsFileValidator.spec.js +1 -1
- package/dist/bscPlugin/validation/BrsFileValidator.spec.js.map +1 -1
- package/dist/bscPlugin/validation/ScopeValidator.d.ts +28 -7
- package/dist/bscPlugin/validation/ScopeValidator.js +393 -205
- package/dist/bscPlugin/validation/ScopeValidator.js.map +1 -1
- package/dist/bscPlugin/validation/ScopeValidator.spec.d.ts +1 -0
- package/dist/bscPlugin/validation/ScopeValidator.spec.js +2038 -0
- package/dist/bscPlugin/validation/ScopeValidator.spec.js.map +1 -0
- package/dist/bscPlugin/validation/XmlFileValidator.js +2 -2
- package/dist/bscPlugin/validation/XmlFileValidator.js.map +1 -1
- package/dist/cli.js +104 -13
- package/dist/cli.js.map +1 -1
- package/dist/deferred.d.ts +3 -3
- package/dist/deferred.js.map +1 -1
- package/dist/diagnosticUtils.d.ts +8 -2
- package/dist/diagnosticUtils.js +45 -16
- package/dist/diagnosticUtils.js.map +1 -1
- package/dist/examples/plugins/removePrint.js +1 -1
- package/dist/examples/plugins/removePrint.js.map +1 -1
- package/dist/files/AssetFile.d.ts +26 -0
- package/dist/files/AssetFile.js +26 -0
- package/dist/files/AssetFile.js.map +1 -0
- package/dist/files/BrsFile.Class.spec.js +383 -56
- package/dist/files/BrsFile.Class.spec.js.map +1 -1
- package/dist/files/BrsFile.d.ts +73 -46
- package/dist/files/BrsFile.js +370 -534
- package/dist/files/BrsFile.js.map +1 -1
- package/dist/files/BrsFile.spec.js +1139 -682
- package/dist/files/BrsFile.spec.js.map +1 -1
- package/dist/files/Factory.d.ts +25 -0
- package/dist/files/Factory.js +22 -0
- package/dist/files/Factory.js.map +1 -0
- package/dist/files/File.d.ts +106 -0
- package/dist/files/File.js +16 -0
- package/dist/files/File.js.map +1 -0
- package/dist/files/LazyFileData.d.ts +20 -0
- package/dist/files/LazyFileData.js +54 -0
- package/dist/files/LazyFileData.js.map +1 -0
- package/dist/files/LazyFileData.spec.d.ts +1 -0
- package/dist/files/LazyFileData.spec.js +27 -0
- package/dist/files/LazyFileData.spec.js.map +1 -0
- package/dist/files/XmlFile.d.ts +56 -23
- package/dist/files/XmlFile.js +88 -60
- package/dist/files/XmlFile.js.map +1 -1
- package/dist/files/XmlFile.spec.js +64 -93
- package/dist/files/XmlFile.spec.js.map +1 -1
- package/dist/files/tests/imports.spec.js +21 -8
- package/dist/files/tests/imports.spec.js.map +1 -1
- package/dist/files/tests/optionalChaning.spec.js +14 -14
- package/dist/files/tests/optionalChaning.spec.js.map +1 -1
- package/dist/globalCallables.js +88 -84
- package/dist/globalCallables.js.map +1 -1
- package/dist/index.d.ts +9 -1
- package/dist/index.js +9 -1
- package/dist/index.js.map +1 -1
- package/dist/interfaces.d.ts +389 -94
- package/dist/interfaces.js +13 -2
- package/dist/interfaces.js.map +1 -1
- package/dist/lexer/Lexer.d.ts +12 -0
- package/dist/lexer/Lexer.js +28 -8
- package/dist/lexer/Lexer.js.map +1 -1
- package/dist/lexer/Lexer.spec.js +40 -0
- package/dist/lexer/Lexer.spec.js.map +1 -1
- package/dist/lexer/Token.d.ts +4 -0
- package/dist/lexer/Token.js.map +1 -1
- package/dist/lexer/TokenKind.d.ts +5 -0
- package/dist/lexer/TokenKind.js +14 -2
- package/dist/lexer/TokenKind.js.map +1 -1
- package/dist/parser/AstNode.d.ts +9 -2
- package/dist/parser/AstNode.js +16 -0
- package/dist/parser/AstNode.js.map +1 -1
- package/dist/parser/BrsTranspileState.d.ts +3 -2
- package/dist/parser/BrsTranspileState.js +3 -2
- package/dist/parser/BrsTranspileState.js.map +1 -1
- package/dist/parser/Expression.d.ts +21 -5
- package/dist/parser/Expression.js +128 -35
- package/dist/parser/Expression.js.map +1 -1
- package/dist/parser/Parser.Class.spec.js +103 -1
- package/dist/parser/Parser.Class.spec.js.map +1 -1
- package/dist/parser/Parser.d.ts +7 -0
- package/dist/parser/Parser.js +117 -21
- package/dist/parser/Parser.js.map +1 -1
- package/dist/parser/Parser.spec.js +557 -5
- package/dist/parser/Parser.spec.js.map +1 -1
- package/dist/parser/SGParser.d.ts +4 -4
- package/dist/parser/SGParser.js +3 -3
- package/dist/parser/SGParser.js.map +1 -1
- package/dist/parser/SGParser.spec.js +2 -2
- package/dist/parser/SGParser.spec.js.map +1 -1
- package/dist/parser/SGTypes.d.ts +2 -2
- package/dist/parser/Statement.d.ts +37 -12
- package/dist/parser/Statement.js +153 -46
- package/dist/parser/Statement.js.map +1 -1
- package/dist/parser/tests/Parser.spec.js +2 -1
- package/dist/parser/tests/Parser.spec.js.map +1 -1
- package/dist/parser/tests/controlFlow/For.spec.js +16 -8
- package/dist/parser/tests/controlFlow/For.spec.js.map +1 -1
- package/dist/parser/tests/controlFlow/ForEach.spec.js +12 -6
- package/dist/parser/tests/controlFlow/ForEach.spec.js.map +1 -1
- package/dist/parser/tests/controlFlow/While.spec.js +8 -4
- package/dist/parser/tests/controlFlow/While.spec.js.map +1 -1
- package/dist/parser/tests/expression/Call.spec.js +4 -4
- package/dist/parser/tests/expression/Call.spec.js.map +1 -1
- package/dist/parser/tests/expression/NullCoalescenceExpression.spec.js +29 -29
- package/dist/parser/tests/expression/NullCoalescenceExpression.spec.js.map +1 -1
- package/dist/parser/tests/expression/RegexLiteralExpression.spec.js +10 -10
- package/dist/parser/tests/expression/RegexLiteralExpression.spec.js.map +1 -1
- package/dist/parser/tests/expression/SourceLiteralExpression.spec.js +24 -24
- package/dist/parser/tests/expression/SourceLiteralExpression.spec.js.map +1 -1
- package/dist/parser/tests/expression/TemplateStringExpression.spec.js +75 -36
- package/dist/parser/tests/expression/TemplateStringExpression.spec.js.map +1 -1
- package/dist/parser/tests/expression/TernaryExpression.spec.js +36 -36
- package/dist/parser/tests/expression/TernaryExpression.spec.js.map +1 -1
- package/dist/parser/tests/expression/UnaryExpression.spec.d.ts +1 -0
- package/dist/parser/tests/expression/UnaryExpression.spec.js +52 -0
- package/dist/parser/tests/expression/UnaryExpression.spec.js.map +1 -0
- package/dist/parser/tests/statement/ConstStatement.spec.js +71 -22
- package/dist/parser/tests/statement/ConstStatement.spec.js.map +1 -1
- package/dist/parser/tests/statement/Continue.spec.js +2 -2
- package/dist/parser/tests/statement/Continue.spec.js.map +1 -1
- package/dist/parser/tests/statement/Enum.spec.js +38 -285
- package/dist/parser/tests/statement/Enum.spec.js.map +1 -1
- package/dist/parser/tests/statement/For.spec.js +6 -6
- package/dist/parser/tests/statement/For.spec.js.map +1 -1
- package/dist/parser/tests/statement/ForEach.spec.js +4 -4
- package/dist/parser/tests/statement/ForEach.spec.js.map +1 -1
- package/dist/parser/tests/statement/InterfaceStatement.spec.js +26 -10
- package/dist/parser/tests/statement/InterfaceStatement.spec.js.map +1 -1
- package/dist/parser/tests/statement/PrintStatement.spec.js +16 -13
- package/dist/parser/tests/statement/PrintStatement.spec.js.map +1 -1
- package/dist/parser/tests/statement/ReturnStatement.spec.js +5 -3
- package/dist/parser/tests/statement/ReturnStatement.spec.js.map +1 -1
- package/dist/parser/tests/statement/Set.spec.js +26 -13
- package/dist/parser/tests/statement/Set.spec.js.map +1 -1
- package/dist/preprocessor/Manifest.d.ts +1 -1
- package/dist/preprocessor/Manifest.js +2 -2
- package/dist/preprocessor/Manifest.js.map +1 -1
- package/dist/roku-types/data.json +243 -293
- package/dist/roku-types/index.d.ts +17 -38
- package/dist/types/ArrayType.d.ts +4 -1
- package/dist/types/ArrayType.js +46 -6
- package/dist/types/ArrayType.js.map +1 -1
- package/dist/types/ArrayType.spec.js +32 -3
- package/dist/types/ArrayType.spec.js.map +1 -1
- package/dist/types/AssociativeArrayType.d.ts +11 -0
- package/dist/types/AssociativeArrayType.js +52 -0
- package/dist/types/AssociativeArrayType.js.map +1 -0
- package/dist/types/BaseFunctionType.d.ts +9 -0
- package/dist/types/BaseFunctionType.js +25 -0
- package/dist/types/BaseFunctionType.js.map +1 -0
- package/dist/types/BooleanType.d.ts +2 -1
- package/dist/types/BooleanType.js +8 -2
- package/dist/types/BooleanType.js.map +1 -1
- package/dist/types/BscType.d.ts +10 -6
- package/dist/types/BscType.js +69 -16
- package/dist/types/BscType.js.map +1 -1
- package/dist/types/BscTypeKind.d.ts +3 -0
- package/dist/types/BscTypeKind.js +3 -0
- package/dist/types/BscTypeKind.js.map +1 -1
- package/dist/types/BuiltInInterfaceAdder.d.ts +23 -0
- package/dist/types/BuiltInInterfaceAdder.js +157 -0
- package/dist/types/BuiltInInterfaceAdder.js.map +1 -0
- package/dist/types/BuiltInInterfaceAdder.spec.d.ts +1 -0
- package/dist/types/BuiltInInterfaceAdder.spec.js +116 -0
- package/dist/types/BuiltInInterfaceAdder.spec.js.map +1 -0
- package/dist/types/ClassType.d.ts +10 -4
- package/dist/types/ClassType.js +32 -5
- package/dist/types/ClassType.js.map +1 -1
- package/dist/types/ClassType.spec.js +5 -3
- package/dist/types/ClassType.spec.js.map +1 -1
- package/dist/types/ComponentType.d.ts +26 -0
- package/dist/types/ComponentType.js +83 -0
- package/dist/types/ComponentType.js.map +1 -0
- package/dist/types/DoubleType.d.ts +2 -1
- package/dist/types/DoubleType.js +9 -2
- package/dist/types/DoubleType.js.map +1 -1
- package/dist/types/DynamicType.d.ts +2 -2
- package/dist/types/DynamicType.js +3 -1
- package/dist/types/DynamicType.js.map +1 -1
- package/dist/types/EnumType.d.ts +24 -6
- package/dist/types/EnumType.js +29 -7
- package/dist/types/EnumType.js.map +1 -1
- package/dist/types/FloatType.d.ts +2 -1
- package/dist/types/FloatType.js +9 -2
- package/dist/types/FloatType.js.map +1 -1
- package/dist/types/FunctionType.d.ts +8 -20
- package/dist/types/FunctionType.js +17 -45
- package/dist/types/FunctionType.js.map +1 -1
- package/dist/types/InheritableType.d.ts +7 -4
- package/dist/types/InheritableType.js +67 -3
- package/dist/types/InheritableType.js.map +1 -1
- package/dist/types/IntegerType.d.ts +2 -1
- package/dist/types/IntegerType.js +9 -2
- package/dist/types/IntegerType.js.map +1 -1
- package/dist/types/InterfaceType.d.ts +6 -4
- package/dist/types/InterfaceType.js +8 -11
- package/dist/types/InterfaceType.js.map +1 -1
- package/dist/types/InterfaceType.spec.js +30 -2
- package/dist/types/InterfaceType.spec.js.map +1 -1
- package/dist/types/InvalidType.d.ts +2 -1
- package/dist/types/InvalidType.js +7 -1
- package/dist/types/InvalidType.js.map +1 -1
- package/dist/types/LongIntegerType.d.ts +2 -1
- package/dist/types/LongIntegerType.js +9 -2
- package/dist/types/LongIntegerType.js.map +1 -1
- package/dist/types/NamespaceType.d.ts +2 -1
- package/dist/types/NamespaceType.js +3 -0
- package/dist/types/NamespaceType.js.map +1 -1
- package/dist/types/ObjectType.d.ts +2 -2
- package/dist/types/ObjectType.js +5 -10
- package/dist/types/ObjectType.js.map +1 -1
- package/dist/types/ReferenceType.d.ts +15 -3
- package/dist/types/ReferenceType.js +173 -24
- package/dist/types/ReferenceType.js.map +1 -1
- package/dist/types/ReferenceType.spec.js +21 -6
- package/dist/types/ReferenceType.spec.js.map +1 -1
- package/dist/types/StringType.d.ts +2 -1
- package/dist/types/StringType.js +9 -2
- package/dist/types/StringType.js.map +1 -1
- package/dist/types/TypedFunctionType.d.ts +33 -0
- package/dist/types/TypedFunctionType.js +106 -0
- package/dist/types/TypedFunctionType.js.map +1 -0
- package/dist/types/TypedFunctionType.spec.d.ts +1 -0
- package/dist/types/TypedFunctionType.spec.js +122 -0
- package/dist/types/TypedFunctionType.spec.js.map +1 -0
- package/dist/types/UninitializedType.d.ts +2 -1
- package/dist/types/UninitializedType.js +1 -1
- package/dist/types/UninitializedType.js.map +1 -1
- package/dist/types/UnionType.d.ts +4 -2
- package/dist/types/UnionType.js +36 -4
- package/dist/types/UnionType.js.map +1 -1
- package/dist/types/UnionType.spec.js +46 -19
- package/dist/types/UnionType.spec.js.map +1 -1
- package/dist/types/VoidType.d.ts +2 -1
- package/dist/types/VoidType.js +7 -2
- package/dist/types/VoidType.js.map +1 -1
- package/dist/types/helper.spec.js +15 -0
- package/dist/types/helper.spec.js.map +1 -1
- package/dist/types/helpers.d.ts +5 -0
- package/dist/types/helpers.js +50 -3
- package/dist/types/helpers.js.map +1 -1
- package/dist/types/index.d.ts +1 -1
- package/dist/types/index.js +1 -1
- package/dist/types/index.js.map +1 -1
- package/dist/util.d.ts +71 -15
- package/dist/util.js +578 -150
- package/dist/util.js.map +1 -1
- package/dist/validators/ClassValidator.d.ts +0 -1
- package/dist/validators/ClassValidator.js +0 -22
- package/dist/validators/ClassValidator.js.map +1 -1
- package/package.json +3 -2
- package/dist/astUtils/AstEditor.js.map +0 -1
- package/dist/astUtils/AstEditor.spec.js.map +0 -1
- package/dist/bscPlugin/transpile/BrsFilePreTranspileProcessor.js.map +0 -1
- package/dist/bscPlugin/transpile/BrsFilePreTranspileProcessor.spec.js +0 -31
- package/dist/bscPlugin/transpile/BrsFilePreTranspileProcessor.spec.js.map +0 -1
- package/dist/types/FunctionType.spec.js +0 -23
- package/dist/types/FunctionType.spec.js.map +0 -1
- /package/dist/astUtils/{AstEditor.spec.d.ts → Editor.spec.d.ts} +0 -0
- /package/dist/bscPlugin/{transpile/BrsFilePreTranspileProcessor.spec.d.ts → completions/CompletionsProcessor.spec.d.ts} +0 -0
- /package/dist/{types/FunctionType.spec.d.ts → bscPlugin/serialize/BslibInjector.spec.d.ts} +0 -0
package/dist/parser/Parser.js
CHANGED
|
@@ -240,10 +240,14 @@ class Parser {
|
|
|
240
240
|
/**
|
|
241
241
|
* Create a new InterfaceMethodStatement. This should only be called from within `interfaceDeclaration`
|
|
242
242
|
*/
|
|
243
|
-
interfaceFieldStatement() {
|
|
243
|
+
interfaceFieldStatement(optionalKeyword) {
|
|
244
244
|
const name = this.identifier(...TokenKind_1.AllowedProperties);
|
|
245
|
-
|
|
246
|
-
|
|
245
|
+
let asToken;
|
|
246
|
+
let typeExpression;
|
|
247
|
+
if (this.check(TokenKind_1.TokenKind.As)) {
|
|
248
|
+
[asToken, typeExpression] = this.consumeAsTokenAndTypeExpression();
|
|
249
|
+
}
|
|
250
|
+
return new Statement_1.InterfaceFieldStatement(name, asToken, typeExpression, optionalKeyword);
|
|
247
251
|
}
|
|
248
252
|
consumeAsTokenAndTypeExpression() {
|
|
249
253
|
let asToken = this.consumeToken(TokenKind_1.TokenKind.As);
|
|
@@ -255,6 +259,9 @@ class Parser {
|
|
|
255
259
|
//consume the statement separator
|
|
256
260
|
this.consumeStatementSeparators();
|
|
257
261
|
}
|
|
262
|
+
else if (this.peek().kind !== TokenKind_1.TokenKind.Identifier && !this.checkAny(...TokenKind_1.DeclarableTypes, ...TokenKind_1.AllowedTypeIdentifiers)) {
|
|
263
|
+
this.diagnostics.push(Object.assign(Object.assign({}, DiagnosticMessages_1.DiagnosticMessages.expectedIdentifierAfterKeyword(asToken.text)), { range: asToken.range }));
|
|
264
|
+
}
|
|
258
265
|
else {
|
|
259
266
|
typeExpression = this.typeExpression();
|
|
260
267
|
}
|
|
@@ -264,11 +271,19 @@ class Parser {
|
|
|
264
271
|
/**
|
|
265
272
|
* Create a new InterfaceMethodStatement. This should only be called from within `interfaceDeclaration()`
|
|
266
273
|
*/
|
|
267
|
-
interfaceMethodStatement() {
|
|
274
|
+
interfaceMethodStatement(optionalKeyword) {
|
|
268
275
|
const functionType = this.advance();
|
|
269
276
|
const name = this.identifier(...TokenKind_1.AllowedProperties);
|
|
270
|
-
const leftParen = this.
|
|
271
|
-
|
|
277
|
+
const leftParen = this.consume(DiagnosticMessages_1.DiagnosticMessages.expectedToken(TokenKind_1.TokenKind.LeftParen), TokenKind_1.TokenKind.LeftParen);
|
|
278
|
+
let params = [];
|
|
279
|
+
if (!this.check(TokenKind_1.TokenKind.RightParen)) {
|
|
280
|
+
do {
|
|
281
|
+
if (params.length >= Expression_1.CallExpression.MaximumArguments) {
|
|
282
|
+
this.diagnostics.push(Object.assign(Object.assign({}, DiagnosticMessages_1.DiagnosticMessages.tooManyCallableParameters(params.length, Expression_1.CallExpression.MaximumArguments)), { range: this.peek().range }));
|
|
283
|
+
}
|
|
284
|
+
params.push(this.functionParameter());
|
|
285
|
+
} while (this.match(TokenKind_1.TokenKind.Comma));
|
|
286
|
+
}
|
|
272
287
|
const rightParen = this.consumeToken(TokenKind_1.TokenKind.RightParen);
|
|
273
288
|
// let asToken = null as Token;
|
|
274
289
|
// let returnTypeExpression: TypeExpression;
|
|
@@ -277,13 +292,13 @@ class Parser {
|
|
|
277
292
|
if (this.check(TokenKind_1.TokenKind.As)) {
|
|
278
293
|
[asToken, returnTypeExpression] = this.consumeAsTokenAndTypeExpression();
|
|
279
294
|
}
|
|
280
|
-
return new Statement_1.InterfaceMethodStatement(functionType, name, leftParen, params, rightParen, asToken, returnTypeExpression);
|
|
295
|
+
return new Statement_1.InterfaceMethodStatement(functionType, name, leftParen, params, rightParen, asToken, returnTypeExpression, optionalKeyword);
|
|
281
296
|
}
|
|
282
297
|
interfaceDeclaration() {
|
|
283
298
|
this.warnIfNotBrighterScriptMode('interface declarations');
|
|
284
299
|
const parentAnnotations = this.enterAnnotationBlock();
|
|
285
300
|
const interfaceToken = this.consume(DiagnosticMessages_1.DiagnosticMessages.expectedKeyword(TokenKind_1.TokenKind.Interface), TokenKind_1.TokenKind.Interface);
|
|
286
|
-
const nameToken = this.identifier();
|
|
301
|
+
const nameToken = this.identifier(...this.allowedLocalIdentifiers);
|
|
287
302
|
let extendsToken;
|
|
288
303
|
let parentInterfaceName;
|
|
289
304
|
if (this.peek().text.toLowerCase() === 'extends') {
|
|
@@ -305,13 +320,20 @@ class Parser {
|
|
|
305
320
|
if (this.check(TokenKind_1.TokenKind.At)) {
|
|
306
321
|
this.annotationExpression();
|
|
307
322
|
}
|
|
323
|
+
const optionalKeyword = this.consumeTokenIf(TokenKind_1.TokenKind.Optional);
|
|
308
324
|
//fields
|
|
309
|
-
if (this.checkAny(TokenKind_1.TokenKind.Identifier, ...TokenKind_1.AllowedProperties) && this.
|
|
325
|
+
if (this.checkAny(TokenKind_1.TokenKind.Identifier, ...TokenKind_1.AllowedProperties) && this.checkAnyNext(TokenKind_1.TokenKind.As, TokenKind_1.TokenKind.Newline, TokenKind_1.TokenKind.Comment)) {
|
|
326
|
+
decl = this.interfaceFieldStatement(optionalKeyword);
|
|
327
|
+
//field with name = 'optional'
|
|
328
|
+
}
|
|
329
|
+
else if (optionalKeyword && this.checkAny(TokenKind_1.TokenKind.As, TokenKind_1.TokenKind.Newline, TokenKind_1.TokenKind.Comment)) {
|
|
330
|
+
//rewind one place, so that 'optional' is the field name
|
|
331
|
+
this.current--;
|
|
310
332
|
decl = this.interfaceFieldStatement();
|
|
311
333
|
//methods (function/sub keyword followed by opening paren)
|
|
312
334
|
}
|
|
313
|
-
else if (this.checkAny(TokenKind_1.TokenKind.Function, TokenKind_1.TokenKind.Sub) && this.
|
|
314
|
-
decl = this.interfaceMethodStatement();
|
|
335
|
+
else if (this.checkAny(TokenKind_1.TokenKind.Function, TokenKind_1.TokenKind.Sub) && this.checkAnyNext(TokenKind_1.TokenKind.Identifier, ...TokenKind_1.AllowedProperties)) {
|
|
336
|
+
decl = this.interfaceMethodStatement(optionalKeyword);
|
|
315
337
|
//comments
|
|
316
338
|
}
|
|
317
339
|
else if (this.check(TokenKind_1.TokenKind.Comment)) {
|
|
@@ -349,7 +371,7 @@ class Parser {
|
|
|
349
371
|
this.warnIfNotBrighterScriptMode('enum declarations');
|
|
350
372
|
const parentAnnotations = this.enterAnnotationBlock();
|
|
351
373
|
result.tokens.enum = this.consume(DiagnosticMessages_1.DiagnosticMessages.expectedKeyword(TokenKind_1.TokenKind.Enum), TokenKind_1.TokenKind.Enum);
|
|
352
|
-
result.tokens.name = this.tryIdentifier();
|
|
374
|
+
result.tokens.name = this.tryIdentifier(...this.allowedLocalIdentifiers);
|
|
353
375
|
this.consumeStatementSeparators();
|
|
354
376
|
//gather up all members
|
|
355
377
|
while (this.checkAny(TokenKind_1.TokenKind.Comment, TokenKind_1.TokenKind.Identifier, TokenKind_1.TokenKind.At, ...TokenKind_1.AllowedProperties)) {
|
|
@@ -480,6 +502,32 @@ class Parser {
|
|
|
480
502
|
return result;
|
|
481
503
|
}
|
|
482
504
|
fieldDeclaration(accessModifier) {
|
|
505
|
+
let optionalKeyword = this.consumeTokenIf(TokenKind_1.TokenKind.Optional);
|
|
506
|
+
if (this.checkAny(TokenKind_1.TokenKind.Identifier, ...TokenKind_1.AllowedProperties)) {
|
|
507
|
+
if (this.check(TokenKind_1.TokenKind.As)) {
|
|
508
|
+
if (this.checkAnyNext(TokenKind_1.TokenKind.Comment, TokenKind_1.TokenKind.Newline)) {
|
|
509
|
+
// as <EOL>
|
|
510
|
+
// `as` is the field name
|
|
511
|
+
}
|
|
512
|
+
else if (this.checkNext(TokenKind_1.TokenKind.As)) {
|
|
513
|
+
// as as ____
|
|
514
|
+
// first `as` is the field name
|
|
515
|
+
}
|
|
516
|
+
else if (optionalKeyword) {
|
|
517
|
+
// optional as ____
|
|
518
|
+
// optional is the field name, `as` starts type
|
|
519
|
+
// rewind current token
|
|
520
|
+
optionalKeyword = null;
|
|
521
|
+
this.current--;
|
|
522
|
+
}
|
|
523
|
+
}
|
|
524
|
+
}
|
|
525
|
+
else {
|
|
526
|
+
// no name after `optional` ... optional is the name
|
|
527
|
+
// rewind current token
|
|
528
|
+
optionalKeyword = null;
|
|
529
|
+
this.current--;
|
|
530
|
+
}
|
|
483
531
|
let name = this.consume(DiagnosticMessages_1.DiagnosticMessages.expectedClassFieldIdentifier(), TokenKind_1.TokenKind.Identifier, ...TokenKind_1.AllowedProperties);
|
|
484
532
|
let asToken;
|
|
485
533
|
let fieldTypeExpression;
|
|
@@ -494,7 +542,7 @@ class Parser {
|
|
|
494
542
|
equal = this.advance();
|
|
495
543
|
initialValue = this.expression();
|
|
496
544
|
}
|
|
497
|
-
return new Statement_1.FieldStatement(accessModifier, name, asToken, fieldTypeExpression, equal, initialValue);
|
|
545
|
+
return new Statement_1.FieldStatement(accessModifier, name, asToken, fieldTypeExpression, equal, initialValue, optionalKeyword);
|
|
498
546
|
}
|
|
499
547
|
functionDeclaration(isAnonymous, checkIdentifier = true, onlyCallableAsMember = false) {
|
|
500
548
|
var _a;
|
|
@@ -518,7 +566,8 @@ class Parser {
|
|
|
518
566
|
start: this.peek().range.start,
|
|
519
567
|
end: this.peek().range.start
|
|
520
568
|
},
|
|
521
|
-
leadingWhitespace: ''
|
|
569
|
+
leadingWhitespace: '',
|
|
570
|
+
leadingTrivia: []
|
|
522
571
|
};
|
|
523
572
|
}
|
|
524
573
|
let isSub = (functionType === null || functionType === void 0 ? void 0 : functionType.kind) === TokenKind_1.TokenKind.Sub;
|
|
@@ -1363,9 +1412,9 @@ class Parser {
|
|
|
1363
1412
|
if ((0, reflection_1.isCallExpression)(expr) || (0, reflection_1.isCallfuncExpression)(expr)) {
|
|
1364
1413
|
return new Statement_1.ExpressionStatement(expr);
|
|
1365
1414
|
}
|
|
1366
|
-
//at this point, it's probably an error. However, we recover a little more gracefully by creating an
|
|
1415
|
+
//at this point, it's probably an error. However, we recover a little more gracefully by creating an inclosing ExpressionStatement
|
|
1367
1416
|
this.diagnostics.push(Object.assign(Object.assign({}, DiagnosticMessages_1.DiagnosticMessages.expectedStatementOrFunctionCallButReceivedExpression()), { range: expressionStart.range }));
|
|
1368
|
-
|
|
1417
|
+
return new Statement_1.ExpressionStatement(expr);
|
|
1369
1418
|
}
|
|
1370
1419
|
setStatement() {
|
|
1371
1420
|
/**
|
|
@@ -1394,6 +1443,7 @@ class Parser {
|
|
|
1394
1443
|
return this.expressionStatement(expr);
|
|
1395
1444
|
}
|
|
1396
1445
|
printStatement() {
|
|
1446
|
+
var _a;
|
|
1397
1447
|
let printKeyword = this.advance();
|
|
1398
1448
|
let values = [];
|
|
1399
1449
|
while (!this.checkEndOfStatement()) {
|
|
@@ -1412,7 +1462,8 @@ class Parser {
|
|
|
1412
1462
|
}
|
|
1413
1463
|
//print statements can be empty, so look for empty print conditions
|
|
1414
1464
|
if (!values.length) {
|
|
1415
|
-
|
|
1465
|
+
const endOfStatementRange = util_1.util.createRangeFromPositions(printKeyword.range.end, (_a = this.peek()) === null || _a === void 0 ? void 0 : _a.range.end);
|
|
1466
|
+
let emptyStringLiteral = (0, creators_1.createStringLiteral)('', endOfStatementRange);
|
|
1416
1467
|
values.push(emptyStringLiteral);
|
|
1417
1468
|
}
|
|
1418
1469
|
let last = values[values.length - 1];
|
|
@@ -1569,6 +1620,7 @@ class Parser {
|
|
|
1569
1620
|
if (findTypeCast) {
|
|
1570
1621
|
do {
|
|
1571
1622
|
if (this.check(TokenKind_1.TokenKind.As)) {
|
|
1623
|
+
this.warnIfNotBrighterScriptMode('type cast');
|
|
1572
1624
|
// Check if this expression is wrapped in any type casts
|
|
1573
1625
|
// allows for multiple casts:
|
|
1574
1626
|
// myVal = foo() as dynamic as string
|
|
@@ -1667,10 +1719,18 @@ class Parser {
|
|
|
1667
1719
|
}
|
|
1668
1720
|
prefixUnary() {
|
|
1669
1721
|
const nextKind = this.peek().kind;
|
|
1670
|
-
if (nextKind === TokenKind_1.TokenKind.Not
|
|
1722
|
+
if (nextKind === TokenKind_1.TokenKind.Not) {
|
|
1671
1723
|
this.current++; //advance
|
|
1672
1724
|
let operator = this.previous();
|
|
1673
|
-
let right = this.
|
|
1725
|
+
let right = this.relational();
|
|
1726
|
+
return new Expression_1.UnaryExpression(operator, right);
|
|
1727
|
+
}
|
|
1728
|
+
else if (nextKind === TokenKind_1.TokenKind.Minus || nextKind === TokenKind_1.TokenKind.Plus) {
|
|
1729
|
+
this.current++; //advance
|
|
1730
|
+
let operator = this.previous();
|
|
1731
|
+
let right = nextKind === TokenKind_1.TokenKind.Not
|
|
1732
|
+
? this.boolean()
|
|
1733
|
+
: this.prefixUnary();
|
|
1674
1734
|
return new Expression_1.UnaryExpression(operator, right);
|
|
1675
1735
|
}
|
|
1676
1736
|
return this.call();
|
|
@@ -1692,10 +1752,18 @@ class Parser {
|
|
|
1692
1752
|
return new Expression_1.IndexedGetExpression(expr, index, openingSquare, closingSquare, questionDotToken);
|
|
1693
1753
|
}
|
|
1694
1754
|
newExpression() {
|
|
1755
|
+
var _a;
|
|
1695
1756
|
this.warnIfNotBrighterScriptMode(`using 'new' keyword to construct a class`);
|
|
1696
1757
|
let newToken = this.advance();
|
|
1697
1758
|
let nameExpr = this.identifyingExpression();
|
|
1698
|
-
let leftParen = this.
|
|
1759
|
+
let leftParen = this.tryConsume(DiagnosticMessages_1.DiagnosticMessages.unexpectedToken(this.peek().text), TokenKind_1.TokenKind.LeftParen, TokenKind_1.TokenKind.QuestionLeftParen);
|
|
1760
|
+
if (!leftParen) {
|
|
1761
|
+
// new expression without a following call expression
|
|
1762
|
+
// wrap the name in an expression
|
|
1763
|
+
const endOfStatementRange = util_1.util.createRangeFromPositions(newToken.range.end, (_a = this.peek()) === null || _a === void 0 ? void 0 : _a.range.end);
|
|
1764
|
+
const exprStmt = nameExpr !== null && nameExpr !== void 0 ? nameExpr : (0, creators_1.createStringLiteral)('', endOfStatementRange);
|
|
1765
|
+
return new Statement_1.ExpressionStatement(exprStmt);
|
|
1766
|
+
}
|
|
1699
1767
|
let call = this.finishCall(leftParen, nameExpr);
|
|
1700
1768
|
//pop the call from the callExpressions list because this is technically something else
|
|
1701
1769
|
this.callExpressions.pop();
|
|
@@ -1810,7 +1878,9 @@ class Parser {
|
|
|
1810
1878
|
const changedTokens = [];
|
|
1811
1879
|
try {
|
|
1812
1880
|
let expr = this.getTypeExpressionPart(changedTokens);
|
|
1813
|
-
while (this.matchAny(TokenKind_1.TokenKind.Or)) {
|
|
1881
|
+
while (this.options.mode === ParseMode.BrighterScript && this.matchAny(TokenKind_1.TokenKind.Or)) {
|
|
1882
|
+
// If we're in Brighterscript mode, allow union types with "or" between types
|
|
1883
|
+
// TODO: Handle Union types in parens? eg. "(string or integer)"
|
|
1814
1884
|
let operator = this.previous();
|
|
1815
1885
|
let right = this.getTypeExpressionPart(changedTokens);
|
|
1816
1886
|
if (right) {
|
|
@@ -1832,6 +1902,13 @@ class Parser {
|
|
|
1832
1902
|
throw error;
|
|
1833
1903
|
}
|
|
1834
1904
|
}
|
|
1905
|
+
/**
|
|
1906
|
+
* Gets a single "part" of a type of a potential Union type
|
|
1907
|
+
* Note: this does not NEED to be part of a union type, but the logic is the same
|
|
1908
|
+
*
|
|
1909
|
+
* @param changedTokens an array that is modified with any tokens that have been changed from their default kind to identifiers - eg. when a keyword is used as type
|
|
1910
|
+
* @returns an expression that was successfully parsed
|
|
1911
|
+
*/
|
|
1835
1912
|
getTypeExpressionPart(changedTokens) {
|
|
1836
1913
|
let expr;
|
|
1837
1914
|
if (this.checkAny(...TokenKind_1.DeclarableTypes)) {
|
|
@@ -1850,6 +1927,25 @@ class Parser {
|
|
|
1850
1927
|
this._references.expressions.add(expr);
|
|
1851
1928
|
}
|
|
1852
1929
|
}
|
|
1930
|
+
//Check if it has square brackets, thus making it an array
|
|
1931
|
+
if (expr && this.check(TokenKind_1.TokenKind.LeftSquareBracket)) {
|
|
1932
|
+
if (this.options.mode === ParseMode.BrightScript) {
|
|
1933
|
+
// typed arrays not allowed in Brightscript
|
|
1934
|
+
this.warnIfNotBrighterScriptMode('typed arrays');
|
|
1935
|
+
return expr;
|
|
1936
|
+
}
|
|
1937
|
+
// Check if it is an array - that is, if it has `[]` after the type
|
|
1938
|
+
// eg. `string[]` or `SomeKlass[]`
|
|
1939
|
+
// This is while loop, so it supports multidimensional arrays (eg. integer[][])
|
|
1940
|
+
while (this.check(TokenKind_1.TokenKind.LeftSquareBracket)) {
|
|
1941
|
+
const leftBracket = this.advance();
|
|
1942
|
+
if (this.check(TokenKind_1.TokenKind.RightSquareBracket)) {
|
|
1943
|
+
const rightBracket = this.advance();
|
|
1944
|
+
expr = new Expression_1.TypedArrayExpression(expr, leftBracket, rightBracket);
|
|
1945
|
+
this._references.expressions.add(expr);
|
|
1946
|
+
}
|
|
1947
|
+
}
|
|
1948
|
+
}
|
|
1853
1949
|
return expr;
|
|
1854
1950
|
}
|
|
1855
1951
|
primary() {
|