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/Statement.js
CHANGED
|
@@ -7,6 +7,7 @@ const util_1 = require("../util");
|
|
|
7
7
|
const Parser_1 = require("./Parser");
|
|
8
8
|
const visitors_1 = require("../astUtils/visitors");
|
|
9
9
|
const reflection_1 = require("../astUtils/reflection");
|
|
10
|
+
const interfaces_1 = require("../interfaces");
|
|
10
11
|
const SymbolTable_1 = require("../SymbolTable");
|
|
11
12
|
const creators_1 = require("../astUtils/creators");
|
|
12
13
|
const DynamicType_1 = require("../types/DynamicType");
|
|
@@ -18,7 +19,7 @@ const EnumType_1 = require("../types/EnumType");
|
|
|
18
19
|
const NamespaceType_1 = require("../types/NamespaceType");
|
|
19
20
|
const InterfaceType_1 = require("../types/InterfaceType");
|
|
20
21
|
const VoidType_1 = require("../types/VoidType");
|
|
21
|
-
const
|
|
22
|
+
const TypedFunctionType_1 = require("../types/TypedFunctionType");
|
|
22
23
|
class EmptyStatement extends AstNode_2.Statement {
|
|
23
24
|
constructor(
|
|
24
25
|
/**
|
|
@@ -132,7 +133,12 @@ class AssignmentStatement extends AstNode_2.Statement {
|
|
|
132
133
|
}
|
|
133
134
|
}
|
|
134
135
|
getType(options) {
|
|
135
|
-
|
|
136
|
+
// TODO: Do we still need this.typeExpression?
|
|
137
|
+
var _a;
|
|
138
|
+
// Note: compound assignments (eg. +=) are internally dealt with via the RHS being a BinaryExpression
|
|
139
|
+
// so this.value will be a BinaryExpression, and BinaryExpressions can figure out their own types
|
|
140
|
+
const rhs = this.value.getType(Object.assign(Object.assign({}, options), { typeChain: undefined }));
|
|
141
|
+
(_a = options.typeChain) === null || _a === void 0 ? void 0 : _a.push(new interfaces_1.TypeChainEntry(this.name.text, rhs, options.flags, this.name.range));
|
|
136
142
|
return rhs;
|
|
137
143
|
}
|
|
138
144
|
}
|
|
@@ -287,6 +293,9 @@ class FunctionStatement extends AstNode_2.Statement {
|
|
|
287
293
|
return this.name.text;
|
|
288
294
|
}
|
|
289
295
|
}
|
|
296
|
+
getLeadingTrivia() {
|
|
297
|
+
return util_1.util.concatAnnotationLeadingTrivia(this, this.func.getLeadingTrivia());
|
|
298
|
+
}
|
|
290
299
|
transpile(state) {
|
|
291
300
|
//create a fake token using the full transpiled name
|
|
292
301
|
let nameToken = Object.assign(Object.assign({}, this.name), { text: this.getName(Parser_1.ParseMode.BrightScript) });
|
|
@@ -307,8 +316,9 @@ class FunctionStatement extends AstNode_2.Statement {
|
|
|
307
316
|
}
|
|
308
317
|
}
|
|
309
318
|
getType(options) {
|
|
319
|
+
var _a;
|
|
310
320
|
const funcExprType = this.func.getType(options);
|
|
311
|
-
funcExprType.setName(this.name.text);
|
|
321
|
+
funcExprType.setName((_a = this.name) === null || _a === void 0 ? void 0 : _a.text);
|
|
312
322
|
return funcExprType;
|
|
313
323
|
}
|
|
314
324
|
}
|
|
@@ -528,6 +538,9 @@ class LabelStatement extends AstNode_2.Statement {
|
|
|
528
538
|
this.kind = AstNode_1.AstNodeKind.LabelStatement;
|
|
529
539
|
this.range = util_1.util.createBoundingRange(tokens.identifier, tokens.colon);
|
|
530
540
|
}
|
|
541
|
+
getLeadingTrivia() {
|
|
542
|
+
return util_1.util.concatAnnotationLeadingTrivia(this, this.tokens.identifier.leadingTrivia);
|
|
543
|
+
}
|
|
531
544
|
transpile(state) {
|
|
532
545
|
return [
|
|
533
546
|
state.transpileToken(this.tokens.identifier),
|
|
@@ -830,9 +843,7 @@ class LibraryStatement extends AstNode_2.Statement {
|
|
|
830
843
|
}
|
|
831
844
|
exports.LibraryStatement = LibraryStatement;
|
|
832
845
|
class NamespaceStatement extends AstNode_2.Statement {
|
|
833
|
-
constructor(keyword,
|
|
834
|
-
// this should technically only be a VariableExpression or DottedGetExpression, but that can be enforced elsewhere
|
|
835
|
-
nameExpression, body, endKeyword) {
|
|
846
|
+
constructor(keyword, nameExpression, body, endKeyword) {
|
|
836
847
|
super();
|
|
837
848
|
this.keyword = keyword;
|
|
838
849
|
this.nameExpression = nameExpression;
|
|
@@ -853,14 +864,25 @@ class NamespaceStatement extends AstNode_2.Statement {
|
|
|
853
864
|
return this._range;
|
|
854
865
|
}
|
|
855
866
|
getName(parseMode) {
|
|
856
|
-
|
|
867
|
+
var _a, _b;
|
|
857
868
|
const sep = parseMode === Parser_1.ParseMode.BrighterScript ? '.' : '_';
|
|
858
869
|
let name = util_1.util.getAllDottedGetPartsAsString(this.nameExpression, parseMode);
|
|
859
|
-
if (
|
|
860
|
-
name =
|
|
870
|
+
if (((_b = (_a = this.parent) === null || _a === void 0 ? void 0 : _a.parent) === null || _b === void 0 ? void 0 : _b.kind) === AstNode_1.AstNodeKind.NamespaceStatement) {
|
|
871
|
+
name = this.parent.parent.getName(parseMode) + sep + name;
|
|
861
872
|
}
|
|
862
873
|
return name;
|
|
863
874
|
}
|
|
875
|
+
getLeadingTrivia() {
|
|
876
|
+
return util_1.util.concatAnnotationLeadingTrivia(this, this.keyword.leadingTrivia);
|
|
877
|
+
}
|
|
878
|
+
getNameParts() {
|
|
879
|
+
var _a, _b;
|
|
880
|
+
let parts = util_1.util.getAllDottedGetParts(this.nameExpression);
|
|
881
|
+
if (((_b = (_a = this.parent) === null || _a === void 0 ? void 0 : _a.parent) === null || _b === void 0 ? void 0 : _b.kind) === AstNode_1.AstNodeKind.NamespaceStatement) {
|
|
882
|
+
parts = this.parent.parent.getNameParts().concat(parts);
|
|
883
|
+
}
|
|
884
|
+
return parts;
|
|
885
|
+
}
|
|
864
886
|
transpile(state) {
|
|
865
887
|
//namespaces don't actually have any real content, so just transpile their bodies
|
|
866
888
|
return this.body.transpile(state);
|
|
@@ -887,7 +909,6 @@ class NamespaceStatement extends AstNode_2.Statement {
|
|
|
887
909
|
}
|
|
888
910
|
getType(options) {
|
|
889
911
|
const resultType = new NamespaceType_1.NamespaceType(this.name);
|
|
890
|
-
resultType.pushMemberProvider(() => this.body.getSymbolTable());
|
|
891
912
|
return resultType;
|
|
892
913
|
}
|
|
893
914
|
}
|
|
@@ -954,6 +975,9 @@ class InterfaceStatement extends AstNode_2.Statement {
|
|
|
954
975
|
hasParentInterface() {
|
|
955
976
|
return !!this.parentInterfaceName;
|
|
956
977
|
}
|
|
978
|
+
getLeadingTrivia() {
|
|
979
|
+
return util_1.util.concatAnnotationLeadingTrivia(this, this.tokens.interface.leadingTrivia);
|
|
980
|
+
}
|
|
957
981
|
/**
|
|
958
982
|
* The name of the interface WITH its leading namespace (if applicable)
|
|
959
983
|
*/
|
|
@@ -1037,35 +1061,48 @@ class InterfaceStatement extends AstNode_2.Statement {
|
|
|
1037
1061
|
}
|
|
1038
1062
|
}
|
|
1039
1063
|
getType(options) {
|
|
1040
|
-
var _a, _b, _c;
|
|
1064
|
+
var _a, _b, _c, _d;
|
|
1041
1065
|
const superIface = (_a = this.parentInterfaceName) === null || _a === void 0 ? void 0 : _a.getType(options);
|
|
1042
1066
|
const resultType = new InterfaceType_1.InterfaceType(this.getName(Parser_1.ParseMode.BrighterScript), superIface);
|
|
1043
1067
|
for (const statement of this.methods) {
|
|
1044
|
-
|
|
1068
|
+
const memberType = statement === null || statement === void 0 ? void 0 : statement.getType(Object.assign(Object.assign({}, options), { typeChain: undefined })); // no typechain info needed
|
|
1069
|
+
const flag = statement.isOptional ? SymbolTable_1.SymbolTypeFlag.runtime | SymbolTable_1.SymbolTypeFlag.optional : SymbolTable_1.SymbolTypeFlag.runtime;
|
|
1070
|
+
resultType.addMember((_b = statement === null || statement === void 0 ? void 0 : statement.tokens.name) === null || _b === void 0 ? void 0 : _b.text, { definingNode: statement }, memberType, flag);
|
|
1045
1071
|
}
|
|
1046
1072
|
for (const statement of this.fields) {
|
|
1047
|
-
|
|
1073
|
+
const memberType = statement === null || statement === void 0 ? void 0 : statement.getType(Object.assign(Object.assign({}, options), { typeChain: undefined })); // no typechain info needed
|
|
1074
|
+
const flag = statement.isOptional ? SymbolTable_1.SymbolTypeFlag.runtime | SymbolTable_1.SymbolTypeFlag.optional : SymbolTable_1.SymbolTypeFlag.runtime;
|
|
1075
|
+
resultType.addMember((_c = statement === null || statement === void 0 ? void 0 : statement.tokens.name) === null || _c === void 0 ? void 0 : _c.text, { definingNode: statement }, memberType, flag);
|
|
1048
1076
|
}
|
|
1077
|
+
(_d = options.typeChain) === null || _d === void 0 ? void 0 : _d.push(new interfaces_1.TypeChainEntry(this.getName(Parser_1.ParseMode.BrighterScript), resultType, options.flags, this.range));
|
|
1049
1078
|
return resultType;
|
|
1050
1079
|
}
|
|
1051
1080
|
}
|
|
1052
1081
|
exports.InterfaceStatement = InterfaceStatement;
|
|
1053
1082
|
class InterfaceFieldStatement extends AstNode_2.Statement {
|
|
1054
|
-
constructor(nameToken, asToken, typeExpression) {
|
|
1083
|
+
constructor(nameToken, asToken, typeExpression, optionalToken) {
|
|
1055
1084
|
super();
|
|
1056
1085
|
this.typeExpression = typeExpression;
|
|
1057
1086
|
this.kind = AstNode_1.AstNodeKind.InterfaceFieldStatement;
|
|
1058
1087
|
this.tokens = {};
|
|
1088
|
+
this.tokens.optional = optionalToken;
|
|
1059
1089
|
this.tokens.name = nameToken;
|
|
1060
1090
|
this.tokens.as = asToken;
|
|
1061
|
-
this.range = util_1.util.createBoundingRange(this.tokens.name, this.tokens.as, this.typeExpression);
|
|
1091
|
+
this.range = util_1.util.createBoundingRange(this.tokens.optional, this.tokens.name, this.tokens.as, this.typeExpression);
|
|
1062
1092
|
}
|
|
1063
1093
|
transpile(state) {
|
|
1064
1094
|
throw new Error('Method not implemented.');
|
|
1065
1095
|
}
|
|
1096
|
+
getLeadingTrivia() {
|
|
1097
|
+
var _a, _b;
|
|
1098
|
+
return util_1.util.concatAnnotationLeadingTrivia(this, (_b = (_a = this.tokens.optional) === null || _a === void 0 ? void 0 : _a.leadingTrivia) !== null && _b !== void 0 ? _b : this.tokens.name.leadingTrivia);
|
|
1099
|
+
}
|
|
1066
1100
|
get name() {
|
|
1067
1101
|
return this.tokens.name.text;
|
|
1068
1102
|
}
|
|
1103
|
+
get isOptional() {
|
|
1104
|
+
return !!this.tokens.optional;
|
|
1105
|
+
}
|
|
1069
1106
|
walk(visitor, options) {
|
|
1070
1107
|
if (options.walkMode & visitors_1.InternalWalkMode.walkExpressions) {
|
|
1071
1108
|
(0, visitors_1.walk)(this, 'typeExpression', visitor, options);
|
|
@@ -1077,6 +1114,9 @@ class InterfaceFieldStatement extends AstNode_2.Statement {
|
|
|
1077
1114
|
for (let annotation of (_a = this.annotations) !== null && _a !== void 0 ? _a : []) {
|
|
1078
1115
|
result.push(...annotation.getTypedef(state), state.newline, state.indent());
|
|
1079
1116
|
}
|
|
1117
|
+
if (this.isOptional) {
|
|
1118
|
+
result.push(this.tokens.optional.text, ' ');
|
|
1119
|
+
}
|
|
1080
1120
|
result.push(this.tokens.name.text);
|
|
1081
1121
|
if (this.typeExpression) {
|
|
1082
1122
|
result.push(' as ', ...this.typeExpression.getTypedef(state));
|
|
@@ -1092,12 +1132,13 @@ exports.InterfaceFieldStatement = InterfaceFieldStatement;
|
|
|
1092
1132
|
//TODO: there is much that is similar with this and FunctionExpression.
|
|
1093
1133
|
//It would be nice to refactor this so there is less duplicated code
|
|
1094
1134
|
class InterfaceMethodStatement extends AstNode_2.Statement {
|
|
1095
|
-
constructor(functionTypeToken, nameToken, leftParen, params, rightParen, asToken, returnTypeExpression) {
|
|
1135
|
+
constructor(functionTypeToken, nameToken, leftParen, params, rightParen, asToken, returnTypeExpression, optionalToken) {
|
|
1096
1136
|
super();
|
|
1097
1137
|
this.params = params;
|
|
1098
1138
|
this.returnTypeExpression = returnTypeExpression;
|
|
1099
1139
|
this.kind = AstNode_1.AstNodeKind.InterfaceMethodStatement;
|
|
1100
1140
|
this.tokens = {};
|
|
1141
|
+
this.tokens.optional = optionalToken;
|
|
1101
1142
|
this.tokens.functionType = functionTypeToken;
|
|
1102
1143
|
this.tokens.name = nameToken;
|
|
1103
1144
|
this.tokens.leftParen = leftParen;
|
|
@@ -1109,7 +1150,20 @@ class InterfaceMethodStatement extends AstNode_2.Statement {
|
|
|
1109
1150
|
}
|
|
1110
1151
|
get range() {
|
|
1111
1152
|
var _a;
|
|
1112
|
-
return util_1.util.createBoundingRange(this.tokens.functionType, this.tokens.name, this.tokens.leftParen, ...((_a = this.params) !== null && _a !== void 0 ? _a : []), this.tokens.rightParen, this.tokens.as, this.returnTypeExpression);
|
|
1153
|
+
return util_1.util.createBoundingRange(this.tokens.optional, this.tokens.functionType, this.tokens.name, this.tokens.leftParen, ...((_a = this.params) !== null && _a !== void 0 ? _a : []), this.tokens.rightParen, this.tokens.as, this.returnTypeExpression);
|
|
1154
|
+
}
|
|
1155
|
+
/**
|
|
1156
|
+
* Get the name of this method.
|
|
1157
|
+
*/
|
|
1158
|
+
getName(parseMode) {
|
|
1159
|
+
return this.tokens.name.text;
|
|
1160
|
+
}
|
|
1161
|
+
get isOptional() {
|
|
1162
|
+
return !!this.tokens.optional;
|
|
1163
|
+
}
|
|
1164
|
+
getLeadingTrivia() {
|
|
1165
|
+
var _a, _b;
|
|
1166
|
+
return util_1.util.concatAnnotationLeadingTrivia(this, (_b = (_a = this.tokens.optional) === null || _a === void 0 ? void 0 : _a.leadingTrivia) !== null && _b !== void 0 ? _b : this.tokens.functionType.leadingTrivia);
|
|
1113
1167
|
}
|
|
1114
1168
|
walk(visitor, options) {
|
|
1115
1169
|
if (options.walkMode & visitors_1.InternalWalkMode.walkExpressions) {
|
|
@@ -1122,6 +1176,9 @@ class InterfaceMethodStatement extends AstNode_2.Statement {
|
|
|
1122
1176
|
for (let annotation of (_a = this.annotations) !== null && _a !== void 0 ? _a : []) {
|
|
1123
1177
|
result.push(...annotation.getTypedef(state), state.newline, state.indent());
|
|
1124
1178
|
}
|
|
1179
|
+
if (this.isOptional) {
|
|
1180
|
+
result.push(this.tokens.optional.text, ' ');
|
|
1181
|
+
}
|
|
1125
1182
|
result.push(this.tokens.functionType.text, ' ', this.tokens.name.text, '(');
|
|
1126
1183
|
const params = (_b = this.params) !== null && _b !== void 0 ? _b : [];
|
|
1127
1184
|
for (let i = 0; i < params.length; i++) {
|
|
@@ -1141,7 +1198,7 @@ class InterfaceMethodStatement extends AstNode_2.Statement {
|
|
|
1141
1198
|
return result;
|
|
1142
1199
|
}
|
|
1143
1200
|
getType(options) {
|
|
1144
|
-
var _a;
|
|
1201
|
+
var _a, _b, _c;
|
|
1145
1202
|
//if there's a defined return type, use that
|
|
1146
1203
|
let returnType = (_a = this.returnTypeExpression) === null || _a === void 0 ? void 0 : _a.getType(options);
|
|
1147
1204
|
const isSub = this.tokens.functionType.kind === TokenKind_1.TokenKind.Sub;
|
|
@@ -1149,11 +1206,18 @@ class InterfaceMethodStatement extends AstNode_2.Statement {
|
|
|
1149
1206
|
if (!returnType) {
|
|
1150
1207
|
returnType = isSub ? VoidType_1.VoidType.instance : DynamicType_1.DynamicType.instance;
|
|
1151
1208
|
}
|
|
1152
|
-
const resultType = new
|
|
1209
|
+
const resultType = new TypedFunctionType_1.TypedFunctionType(returnType);
|
|
1153
1210
|
resultType.isSub = isSub;
|
|
1154
1211
|
for (let param of this.params) {
|
|
1155
1212
|
resultType.addParameter(param.name.text, param.getType(options), !!param.defaultValue);
|
|
1156
1213
|
}
|
|
1214
|
+
if (options.typeChain) {
|
|
1215
|
+
// need Interface type for type chain
|
|
1216
|
+
(_b = this.parent) === null || _b === void 0 ? void 0 : _b.getType(options);
|
|
1217
|
+
}
|
|
1218
|
+
let funcName = this.getName(Parser_1.ParseMode.BrighterScript);
|
|
1219
|
+
resultType.setName(funcName);
|
|
1220
|
+
(_c = options.typeChain) === null || _c === void 0 ? void 0 : _c.push(new interfaces_1.TypeChainEntry(resultType.name, resultType, options.flags, this.range));
|
|
1157
1221
|
return resultType;
|
|
1158
1222
|
}
|
|
1159
1223
|
}
|
|
@@ -1164,7 +1228,7 @@ class ClassStatement extends AstNode_2.Statement {
|
|
|
1164
1228
|
* The name of the class (without namespace prefix)
|
|
1165
1229
|
*/
|
|
1166
1230
|
name, body, end, extendsKeyword, parentClassName) {
|
|
1167
|
-
var _a, _b, _c;
|
|
1231
|
+
var _a, _b, _c, _d;
|
|
1168
1232
|
super();
|
|
1169
1233
|
this.classKeyword = classKeyword;
|
|
1170
1234
|
this.name = name;
|
|
@@ -1177,14 +1241,15 @@ class ClassStatement extends AstNode_2.Statement {
|
|
|
1177
1241
|
this.methods = [];
|
|
1178
1242
|
this.fields = [];
|
|
1179
1243
|
this.body = (_a = this.body) !== null && _a !== void 0 ? _a : [];
|
|
1244
|
+
this.symbolTable = new SymbolTable_2.SymbolTable(`ClassStatement: '${(_b = this.name) === null || _b === void 0 ? void 0 : _b.text}'`, () => { var _a; return (_a = this.parent) === null || _a === void 0 ? void 0 : _a.getSymbolTable(); });
|
|
1180
1245
|
for (let statement of this.body) {
|
|
1181
1246
|
if ((0, reflection_1.isMethodStatement)(statement)) {
|
|
1182
1247
|
this.methods.push(statement);
|
|
1183
|
-
this.memberMap[(
|
|
1248
|
+
this.memberMap[(_c = statement === null || statement === void 0 ? void 0 : statement.name) === null || _c === void 0 ? void 0 : _c.text.toLowerCase()] = statement;
|
|
1184
1249
|
}
|
|
1185
1250
|
else if ((0, reflection_1.isFieldStatement)(statement)) {
|
|
1186
1251
|
this.fields.push(statement);
|
|
1187
|
-
this.memberMap[(
|
|
1252
|
+
this.memberMap[(_d = statement === null || statement === void 0 ? void 0 : statement.name) === null || _d === void 0 ? void 0 : _d.text.toLowerCase()] = statement;
|
|
1188
1253
|
}
|
|
1189
1254
|
}
|
|
1190
1255
|
this.range = util_1.util.createBoundingRange(classKeyword, name, extendsKeyword, parentClassName, ...(body !== null && body !== void 0 ? body : []), end);
|
|
@@ -1208,6 +1273,9 @@ class ClassStatement extends AstNode_2.Statement {
|
|
|
1208
1273
|
return undefined;
|
|
1209
1274
|
}
|
|
1210
1275
|
}
|
|
1276
|
+
getLeadingTrivia() {
|
|
1277
|
+
return util_1.util.concatAnnotationLeadingTrivia(this, this.classKeyword.leadingTrivia);
|
|
1278
|
+
}
|
|
1211
1279
|
transpile(state) {
|
|
1212
1280
|
let result = [];
|
|
1213
1281
|
//make the builder
|
|
@@ -1309,6 +1377,12 @@ class ClassStatement extends AstNode_2.Statement {
|
|
|
1309
1377
|
}
|
|
1310
1378
|
return `__${name}_builder`;
|
|
1311
1379
|
}
|
|
1380
|
+
getConstructorType() {
|
|
1381
|
+
var _a, _b;
|
|
1382
|
+
const constructorType = (_b = (_a = this.getConstructorFunction()) === null || _a === void 0 ? void 0 : _a.getType({ flags: SymbolTable_1.SymbolTypeFlag.runtime })) !== null && _b !== void 0 ? _b : new TypedFunctionType_1.TypedFunctionType(null);
|
|
1383
|
+
constructorType.returnType = this.getType({ flags: SymbolTable_1.SymbolTypeFlag.runtime });
|
|
1384
|
+
return constructorType;
|
|
1385
|
+
}
|
|
1312
1386
|
/**
|
|
1313
1387
|
* Get the constructor function for this class (if exists), or undefined if not exist
|
|
1314
1388
|
*/
|
|
@@ -1446,16 +1520,20 @@ class ClassStatement extends AstNode_2.Statement {
|
|
|
1446
1520
|
}
|
|
1447
1521
|
}
|
|
1448
1522
|
getType(options) {
|
|
1449
|
-
var _a, _b, _c;
|
|
1523
|
+
var _a, _b, _c, _d;
|
|
1450
1524
|
const superClass = (_a = this.parentClassName) === null || _a === void 0 ? void 0 : _a.getType(options);
|
|
1451
1525
|
const resultType = new ClassType_1.ClassType(this.getName(Parser_1.ParseMode.BrighterScript), superClass);
|
|
1452
1526
|
for (const statement of this.methods) {
|
|
1453
|
-
const funcType = statement === null || statement === void 0 ? void 0 : statement.func.getType(options);
|
|
1454
|
-
|
|
1527
|
+
const funcType = statement === null || statement === void 0 ? void 0 : statement.func.getType(Object.assign(Object.assign({}, options), { typeChain: undefined })); //no typechain needed
|
|
1528
|
+
const flag = SymbolTable_1.SymbolTypeFlag.runtime;
|
|
1529
|
+
resultType.addMember((_b = statement === null || statement === void 0 ? void 0 : statement.name) === null || _b === void 0 ? void 0 : _b.text, { definingNode: statement }, funcType, flag);
|
|
1455
1530
|
}
|
|
1456
1531
|
for (const statement of this.fields) {
|
|
1457
|
-
|
|
1532
|
+
const fieldType = statement.getType(Object.assign(Object.assign({}, options), { typeChain: undefined })); //no typechain needed
|
|
1533
|
+
const flag = statement.isOptional ? SymbolTable_1.SymbolTypeFlag.runtime | SymbolTable_1.SymbolTypeFlag.optional : SymbolTable_1.SymbolTypeFlag.runtime;
|
|
1534
|
+
resultType.addMember((_c = statement === null || statement === void 0 ? void 0 : statement.name) === null || _c === void 0 ? void 0 : _c.text, { definingNode: statement }, fieldType, flag);
|
|
1458
1535
|
}
|
|
1536
|
+
(_d = options.typeChain) === null || _d === void 0 ? void 0 : _d.push(new interfaces_1.TypeChainEntry(resultType.name, resultType, options.flags, this.range));
|
|
1459
1537
|
return resultType;
|
|
1460
1538
|
}
|
|
1461
1539
|
}
|
|
@@ -1490,6 +1568,9 @@ class MethodStatement extends FunctionStatement {
|
|
|
1490
1568
|
getName(parseMode) {
|
|
1491
1569
|
return this.name.text;
|
|
1492
1570
|
}
|
|
1571
|
+
getLeadingTrivia() {
|
|
1572
|
+
return util_1.util.concatAnnotationLeadingTrivia(this, this.func.getLeadingTrivia());
|
|
1573
|
+
}
|
|
1493
1574
|
transpile(state) {
|
|
1494
1575
|
if (this.name.text.toLowerCase() === 'new') {
|
|
1495
1576
|
this.ensureSuperConstructorCall(state);
|
|
@@ -1562,19 +1643,22 @@ class MethodStatement extends FunctionStatement {
|
|
|
1562
1643
|
text: 'super',
|
|
1563
1644
|
isReserved: false,
|
|
1564
1645
|
range: state.classStatement.name.range,
|
|
1565
|
-
leadingWhitespace: ''
|
|
1646
|
+
leadingWhitespace: '',
|
|
1647
|
+
leadingTrivia: []
|
|
1566
1648
|
}), {
|
|
1567
1649
|
kind: TokenKind_1.TokenKind.LeftParen,
|
|
1568
1650
|
text: '(',
|
|
1569
1651
|
isReserved: false,
|
|
1570
1652
|
range: state.classStatement.name.range,
|
|
1571
|
-
leadingWhitespace: ''
|
|
1653
|
+
leadingWhitespace: '',
|
|
1654
|
+
leadingTrivia: []
|
|
1572
1655
|
}, {
|
|
1573
1656
|
kind: TokenKind_1.TokenKind.RightParen,
|
|
1574
1657
|
text: ')',
|
|
1575
1658
|
isReserved: false,
|
|
1576
1659
|
range: state.classStatement.name.range,
|
|
1577
|
-
leadingWhitespace: ''
|
|
1660
|
+
leadingWhitespace: '',
|
|
1661
|
+
leadingTrivia: []
|
|
1578
1662
|
}, []));
|
|
1579
1663
|
state.editor.arrayUnshift(this.func.body.statements, superCall);
|
|
1580
1664
|
}
|
|
@@ -1588,13 +1672,14 @@ class MethodStatement extends FunctionStatement {
|
|
|
1588
1672
|
for (let field of state.classStatement.fields) {
|
|
1589
1673
|
let thisQualifiedName = Object.assign({}, field.name);
|
|
1590
1674
|
thisQualifiedName.text = 'm.' + field.name.text;
|
|
1591
|
-
|
|
1592
|
-
|
|
1593
|
-
|
|
1594
|
-
else {
|
|
1675
|
+
const fieldAssignment = field.initialValue
|
|
1676
|
+
? new AssignmentStatement(field.equal, thisQualifiedName, field.initialValue)
|
|
1677
|
+
: new AssignmentStatement((0, creators_1.createToken)(TokenKind_1.TokenKind.Equal, '=', field.name.range), thisQualifiedName,
|
|
1595
1678
|
//if there is no initial value, set the initial value to `invalid`
|
|
1596
|
-
|
|
1597
|
-
|
|
1679
|
+
(0, creators_1.createInvalidLiteral)('invalid', field.name.range));
|
|
1680
|
+
// Add parent so namespace lookups work
|
|
1681
|
+
fieldAssignment.parent = state.classStatement;
|
|
1682
|
+
newStatements.push(fieldAssignment);
|
|
1598
1683
|
}
|
|
1599
1684
|
state.editor.arraySplice(this.func.body.statements, startingIndex, 0, ...newStatements);
|
|
1600
1685
|
}
|
|
@@ -1606,7 +1691,7 @@ class MethodStatement extends FunctionStatement {
|
|
|
1606
1691
|
}
|
|
1607
1692
|
exports.MethodStatement = MethodStatement;
|
|
1608
1693
|
class FieldStatement extends AstNode_2.Statement {
|
|
1609
|
-
constructor(accessModifier, name, as, typeExpression, equal, initialValue) {
|
|
1694
|
+
constructor(accessModifier, name, as, typeExpression, equal, initialValue, optional) {
|
|
1610
1695
|
super();
|
|
1611
1696
|
this.accessModifier = accessModifier;
|
|
1612
1697
|
this.name = name;
|
|
@@ -1614,8 +1699,9 @@ class FieldStatement extends AstNode_2.Statement {
|
|
|
1614
1699
|
this.typeExpression = typeExpression;
|
|
1615
1700
|
this.equal = equal;
|
|
1616
1701
|
this.initialValue = initialValue;
|
|
1702
|
+
this.optional = optional;
|
|
1617
1703
|
this.kind = AstNode_1.AstNodeKind.FieldStatement;
|
|
1618
|
-
this.range = util_1.util.createBoundingRange(accessModifier, name, as, typeExpression, equal, initialValue);
|
|
1704
|
+
this.range = util_1.util.createBoundingRange(accessModifier, optional, name, as, typeExpression, equal, initialValue);
|
|
1619
1705
|
}
|
|
1620
1706
|
/**
|
|
1621
1707
|
* Derive a ValueKind from the type token, or the initial value.
|
|
@@ -1625,6 +1711,13 @@ class FieldStatement extends AstNode_2.Statement {
|
|
|
1625
1711
|
var _a, _b, _c, _d;
|
|
1626
1712
|
return (_d = (_b = (_a = this.typeExpression) === null || _a === void 0 ? void 0 : _a.getType(Object.assign(Object.assign({}, options), { flags: SymbolTable_1.SymbolTypeFlag.typetime }))) !== null && _b !== void 0 ? _b : (_c = this.initialValue) === null || _c === void 0 ? void 0 : _c.getType(Object.assign(Object.assign({}, options), { flags: SymbolTable_1.SymbolTypeFlag.runtime }))) !== null && _d !== void 0 ? _d : DynamicType_1.DynamicType.instance;
|
|
1627
1713
|
}
|
|
1714
|
+
getLeadingTrivia() {
|
|
1715
|
+
var _a, _b, _c, _d, _e, _f;
|
|
1716
|
+
return util_1.util.concatAnnotationLeadingTrivia(this, (_f = (_d = (_b = (_a = this.accessModifier) === null || _a === void 0 ? void 0 : _a.leadingTrivia) !== null && _b !== void 0 ? _b : (_c = this.optional) === null || _c === void 0 ? void 0 : _c.leadingTrivia) !== null && _d !== void 0 ? _d : (_e = this.name) === null || _e === void 0 ? void 0 : _e.leadingTrivia) !== null && _f !== void 0 ? _f : []);
|
|
1717
|
+
}
|
|
1718
|
+
get isOptional() {
|
|
1719
|
+
return !!this.optional;
|
|
1720
|
+
}
|
|
1628
1721
|
transpile(state) {
|
|
1629
1722
|
throw new Error('transpile not implemented for ' + Object.getPrototypeOf(this).constructor.name);
|
|
1630
1723
|
}
|
|
@@ -1639,7 +1732,11 @@ class FieldStatement extends AstNode_2.Statement {
|
|
|
1639
1732
|
if ((0, reflection_1.isInvalidType)(type) || (0, reflection_1.isVoidType)(type)) {
|
|
1640
1733
|
type = new DynamicType_1.DynamicType();
|
|
1641
1734
|
}
|
|
1642
|
-
result.push((_c = (_b = this.accessModifier) === null || _b === void 0 ? void 0 : _b.text) !== null && _c !== void 0 ? _c : 'public', ' '
|
|
1735
|
+
result.push((_c = (_b = this.accessModifier) === null || _b === void 0 ? void 0 : _b.text) !== null && _c !== void 0 ? _c : 'public', ' ');
|
|
1736
|
+
if (this.isOptional) {
|
|
1737
|
+
result.push(this.optional.text, ' ');
|
|
1738
|
+
}
|
|
1739
|
+
result.push((_d = this.name) === null || _d === void 0 ? void 0 : _d.text, ' as ', type.toTypeString());
|
|
1643
1740
|
}
|
|
1644
1741
|
return result;
|
|
1645
1742
|
}
|
|
@@ -1758,6 +1855,9 @@ class EnumStatement extends AstNode_2.Statement {
|
|
|
1758
1855
|
}
|
|
1759
1856
|
return result;
|
|
1760
1857
|
}
|
|
1858
|
+
getLeadingTrivia() {
|
|
1859
|
+
return util_1.util.concatAnnotationLeadingTrivia(this, this.tokens.enum.leadingTrivia);
|
|
1860
|
+
}
|
|
1761
1861
|
/**
|
|
1762
1862
|
* Get a map of member names and their values.
|
|
1763
1863
|
* All values are stored as their AST LiteralExpression representation (i.e. string enum values include the wrapping quotes)
|
|
@@ -1852,12 +1952,13 @@ class EnumStatement extends AstNode_2.Statement {
|
|
|
1852
1952
|
(0, visitors_1.walkArray)(this.body, visitor, options, this);
|
|
1853
1953
|
}
|
|
1854
1954
|
}
|
|
1855
|
-
getType() {
|
|
1856
|
-
var _a, _b;
|
|
1857
|
-
const
|
|
1955
|
+
getType(options) {
|
|
1956
|
+
var _a, _b, _c;
|
|
1957
|
+
const members = this.getMembers();
|
|
1958
|
+
const resultType = new EnumType_1.EnumType(this.fullName, (_a = members[0]) === null || _a === void 0 ? void 0 : _a.getType(options).underlyingType);
|
|
1858
1959
|
resultType.pushMemberProvider(() => this.getSymbolTable());
|
|
1859
|
-
for (const statement of
|
|
1860
|
-
resultType.addMember((
|
|
1960
|
+
for (const statement of members) {
|
|
1961
|
+
resultType.addMember((_c = (_b = statement === null || statement === void 0 ? void 0 : statement.tokens) === null || _b === void 0 ? void 0 : _b.name) === null || _c === void 0 ? void 0 : _c.text, { definingNode: statement }, statement.getType(options), SymbolTable_1.SymbolTypeFlag.runtime);
|
|
1861
1962
|
}
|
|
1862
1963
|
return resultType;
|
|
1863
1964
|
}
|
|
@@ -1879,6 +1980,9 @@ class EnumMemberStatement extends AstNode_2.Statement {
|
|
|
1879
1980
|
get name() {
|
|
1880
1981
|
return this.tokens.name.text;
|
|
1881
1982
|
}
|
|
1983
|
+
getLeadingTrivia() {
|
|
1984
|
+
return util_1.util.concatAnnotationLeadingTrivia(this, this.tokens.name.leadingTrivia);
|
|
1985
|
+
}
|
|
1882
1986
|
transpile(state) {
|
|
1883
1987
|
return [];
|
|
1884
1988
|
}
|
|
@@ -1899,9 +2003,9 @@ class EnumMemberStatement extends AstNode_2.Statement {
|
|
|
1899
2003
|
(0, visitors_1.walk)(this, 'value', visitor, options);
|
|
1900
2004
|
}
|
|
1901
2005
|
}
|
|
1902
|
-
getType() {
|
|
1903
|
-
var _a, _b, _c;
|
|
1904
|
-
return new EnumType_1.EnumMemberType((_a = this.parent) === null || _a === void 0 ? void 0 : _a.fullName, (_c = (_b = this.tokens) === null || _b === void 0 ? void 0 : _b.name) === null || _c === void 0 ? void 0 : _c.text);
|
|
2006
|
+
getType(options) {
|
|
2007
|
+
var _a, _b, _c, _d;
|
|
2008
|
+
return new EnumType_1.EnumMemberType((_a = this.parent) === null || _a === void 0 ? void 0 : _a.fullName, (_c = (_b = this.tokens) === null || _b === void 0 ? void 0 : _b.name) === null || _c === void 0 ? void 0 : _c.text, (_d = this.value) === null || _d === void 0 ? void 0 : _d.getType(options));
|
|
1905
2009
|
}
|
|
1906
2010
|
}
|
|
1907
2011
|
exports.EnumMemberStatement = EnumMemberStatement;
|
|
@@ -1916,6 +2020,9 @@ class ConstStatement extends AstNode_2.Statement {
|
|
|
1916
2020
|
get name() {
|
|
1917
2021
|
return this.tokens.name.text;
|
|
1918
2022
|
}
|
|
2023
|
+
getLeadingTrivia() {
|
|
2024
|
+
return util_1.util.concatAnnotationLeadingTrivia(this, this.tokens.const.leadingTrivia);
|
|
2025
|
+
}
|
|
1919
2026
|
/**
|
|
1920
2027
|
* The name of the statement WITH its leading namespace (if applicable)
|
|
1921
2028
|
*/
|