brighterscript 1.0.0-alpha.24 → 1.0.0-alpha.26
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 +521 -233
- package/README.md +45 -139
- package/bsconfig.schema.json +46 -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 +152 -0
- package/dist/AstValidationSegmenter.js.map +1 -0
- package/dist/BsConfig.d.ts +40 -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 +7 -0
- package/dist/CacheVerifier.js +20 -0
- package/dist/CacheVerifier.js.map +1 -0
- package/dist/CodeActionUtil.d.ts +3 -3
- package/dist/CodeActionUtil.js.map +1 -1
- package/dist/CommentFlagProcessor.d.ts +3 -2
- package/dist/CommentFlagProcessor.js +5 -4
- package/dist/CommentFlagProcessor.js.map +1 -1
- package/dist/DependencyGraph.d.ts +3 -2
- package/dist/DependencyGraph.js +11 -10
- package/dist/DependencyGraph.js.map +1 -1
- package/dist/DiagnosticCollection.js +9 -5
- package/dist/DiagnosticCollection.js.map +1 -1
- package/dist/DiagnosticFilterer.d.ts +1 -0
- package/dist/DiagnosticFilterer.js +5 -3
- package/dist/DiagnosticFilterer.js.map +1 -1
- package/dist/DiagnosticMessages.d.ts +61 -13
- package/dist/DiagnosticMessages.js +116 -19
- package/dist/DiagnosticMessages.js.map +1 -1
- package/dist/DiagnosticSeverityAdjuster.d.ts +7 -0
- package/dist/DiagnosticSeverityAdjuster.js +41 -0
- package/dist/DiagnosticSeverityAdjuster.js.map +1 -0
- package/dist/FunctionScope.d.ts +28 -0
- package/dist/FunctionScope.js +52 -0
- package/dist/FunctionScope.js.map +1 -0
- package/dist/KeyedThrottler.d.ts +3 -3
- package/dist/KeyedThrottler.js +3 -3
- package/dist/KeyedThrottler.js.map +1 -1
- package/dist/LanguageServer.d.ts +23 -11
- package/dist/LanguageServer.js +150 -69
- package/dist/LanguageServer.js.map +1 -1
- package/dist/Logger.d.ts +3 -2
- package/dist/Logger.js +11 -3
- package/dist/Logger.js.map +1 -1
- package/dist/PluginInterface.d.ts +21 -3
- package/dist/PluginInterface.js +74 -6
- package/dist/PluginInterface.js.map +1 -1
- package/dist/Program.d.ts +158 -79
- package/dist/Program.js +841 -706
- package/dist/Program.js.map +1 -1
- package/dist/ProgramBuilder.d.ts +22 -12
- package/dist/ProgramBuilder.js +130 -103
- package/dist/ProgramBuilder.js.map +1 -1
- package/dist/Scope.d.ts +86 -137
- package/dist/Scope.js +453 -519
- package/dist/Scope.js.map +1 -1
- package/dist/Stopwatch.js +1 -1
- package/dist/Stopwatch.js.map +1 -1
- package/dist/SymbolTable.d.ts +89 -34
- package/dist/SymbolTable.js +239 -114
- 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/Watcher.d.ts +0 -3
- package/dist/Watcher.js +0 -3
- package/dist/Watcher.js.map +1 -1
- package/dist/XmlScope.d.ts +4 -11
- package/dist/XmlScope.js +75 -88
- package/dist/XmlScope.js.map +1 -1
- package/dist/astUtils/CachedLookups.d.ts +48 -0
- package/dist/astUtils/CachedLookups.js +323 -0
- package/dist/astUtils/CachedLookups.js.map +1 -0
- package/dist/astUtils/{AstEditor.d.ts → Editor.d.ts} +9 -5
- package/dist/astUtils/{AstEditor.js → Editor.js} +10 -4
- package/dist/astUtils/Editor.js.map +1 -0
- package/dist/astUtils/{AstEditor.spec.js → Editor.spec.js} +69 -65
- package/dist/astUtils/Editor.spec.js.map +1 -0
- package/dist/astUtils/creators.d.ts +10 -10
- package/dist/astUtils/creators.js +54 -24
- package/dist/astUtils/creators.js.map +1 -1
- package/dist/astUtils/creators.spec.js +5 -5
- package/dist/astUtils/creators.spec.js.map +1 -1
- package/dist/astUtils/reflection.d.ts +132 -104
- package/dist/astUtils/reflection.js +220 -174
- package/dist/astUtils/reflection.js.map +1 -1
- package/dist/astUtils/reflection.spec.js +256 -157
- package/dist/astUtils/reflection.spec.js.map +1 -1
- package/dist/astUtils/stackedVisitor.spec.js +12 -12
- package/dist/astUtils/stackedVisitor.spec.js.map +1 -1
- package/dist/astUtils/visitors.d.ts +53 -35
- package/dist/astUtils/visitors.js +29 -3
- package/dist/astUtils/visitors.js.map +1 -1
- package/dist/astUtils/visitors.spec.js +208 -52
- package/dist/astUtils/visitors.spec.js.map +1 -1
- package/dist/astUtils/xml.d.ts +9 -9
- package/dist/astUtils/xml.js +9 -9
- package/dist/astUtils/xml.js.map +1 -1
- package/dist/bscPlugin/BscPlugin.d.ts +11 -2
- package/dist/bscPlugin/BscPlugin.js +37 -3
- package/dist/bscPlugin/BscPlugin.js.map +1 -1
- package/dist/bscPlugin/CallExpressionInfo.d.ts +36 -0
- package/dist/bscPlugin/CallExpressionInfo.js +131 -0
- package/dist/bscPlugin/CallExpressionInfo.js.map +1 -0
- 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/SignatureHelpUtil.d.ts +10 -0
- package/dist/bscPlugin/SignatureHelpUtil.js +136 -0
- package/dist/bscPlugin/SignatureHelpUtil.js.map +1 -0
- package/dist/bscPlugin/codeActions/CodeActionsProcessor.js +16 -13
- package/dist/bscPlugin/codeActions/CodeActionsProcessor.js.map +1 -1
- package/dist/bscPlugin/codeActions/CodeActionsProcessor.spec.js +16 -16
- package/dist/bscPlugin/codeActions/CodeActionsProcessor.spec.js.map +1 -1
- package/dist/bscPlugin/completions/CompletionsProcessor.d.ts +52 -1
- package/dist/bscPlugin/completions/CompletionsProcessor.js +517 -26
- package/dist/bscPlugin/completions/CompletionsProcessor.js.map +1 -1
- package/dist/bscPlugin/completions/CompletionsProcessor.spec.js +1909 -0
- package/dist/bscPlugin/completions/CompletionsProcessor.spec.js.map +1 -0
- package/dist/bscPlugin/definition/DefinitionProvider.d.ts +13 -0
- package/dist/bscPlugin/definition/DefinitionProvider.js +210 -0
- package/dist/bscPlugin/definition/DefinitionProvider.js.map +1 -0
- package/dist/bscPlugin/definition/DefinitionProvider.spec.js +88 -0
- package/dist/bscPlugin/definition/DefinitionProvider.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 -7
- package/dist/bscPlugin/hover/HoverProcessor.js +123 -125
- package/dist/bscPlugin/hover/HoverProcessor.js.map +1 -1
- package/dist/bscPlugin/hover/HoverProcessor.spec.js +371 -53
- package/dist/bscPlugin/hover/HoverProcessor.spec.js.map +1 -1
- package/dist/bscPlugin/semanticTokens/BrsFileSemanticTokensProcessor.d.ts +2 -1
- package/dist/bscPlugin/semanticTokens/BrsFileSemanticTokensProcessor.js +83 -23
- package/dist/bscPlugin/semanticTokens/BrsFileSemanticTokensProcessor.js.map +1 -1
- package/dist/bscPlugin/semanticTokens/BrsFileSemanticTokensProcessor.spec.js +83 -6
- package/dist/bscPlugin/semanticTokens/BrsFileSemanticTokensProcessor.spec.js.map +1 -1
- package/dist/bscPlugin/serialize/BslibInjector.spec.d.ts +1 -0
- 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} +38 -12
- 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 +12 -0
- package/dist/bscPlugin/transpile/XmlFilePreTranspileProcessor.js +99 -0
- package/dist/bscPlugin/transpile/XmlFilePreTranspileProcessor.js.map +1 -0
- package/dist/bscPlugin/validation/BrsFileValidator.d.ts +13 -5
- package/dist/bscPlugin/validation/BrsFileValidator.js +262 -52
- package/dist/bscPlugin/validation/BrsFileValidator.js.map +1 -1
- package/dist/bscPlugin/validation/BrsFileValidator.spec.js +230 -14
- package/dist/bscPlugin/validation/BrsFileValidator.spec.js.map +1 -1
- package/dist/bscPlugin/validation/ProgramValidator.d.ts +10 -0
- package/dist/bscPlugin/validation/ProgramValidator.js +32 -0
- package/dist/bscPlugin/validation/ProgramValidator.js.map +1 -0
- package/dist/bscPlugin/validation/ScopeValidator.d.ts +58 -27
- package/dist/bscPlugin/validation/ScopeValidator.js +514 -286
- 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 +2527 -0
- package/dist/bscPlugin/validation/ScopeValidator.spec.js.map +1 -0
- package/dist/bscPlugin/validation/XmlFileValidator.d.ts +8 -0
- package/dist/bscPlugin/validation/XmlFileValidator.js +44 -0
- package/dist/bscPlugin/validation/XmlFileValidator.js.map +1 -0
- 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 +47 -17
- package/dist/diagnosticUtils.js.map +1 -1
- package/dist/examples/plugins/removePrint.js +8 -10
- 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 +523 -493
- package/dist/files/BrsFile.Class.spec.js.map +1 -1
- package/dist/files/BrsFile.d.ts +111 -117
- package/dist/files/BrsFile.js +684 -1142
- package/dist/files/BrsFile.js.map +1 -1
- package/dist/files/BrsFile.spec.js +1783 -1233
- package/dist/files/BrsFile.spec.js.map +1 -1
- package/dist/files/BscFile.d.ts +104 -0
- package/dist/files/BscFile.js +16 -0
- package/dist/files/BscFile.js.map +1 -0
- 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/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 +70 -32
- package/dist/files/XmlFile.js +106 -118
- package/dist/files/XmlFile.js.map +1 -1
- package/dist/files/XmlFile.spec.js +325 -262
- package/dist/files/XmlFile.spec.js.map +1 -1
- package/dist/files/tests/imports.spec.js +48 -40
- package/dist/files/tests/imports.spec.js.map +1 -1
- package/dist/files/tests/optionalChaning.spec.js +84 -24
- package/dist/files/tests/optionalChaning.spec.js.map +1 -1
- package/dist/globalCallables.js +16 -21
- package/dist/globalCallables.js.map +1 -1
- package/dist/index.d.ts +12 -1
- package/dist/index.js +12 -1
- package/dist/index.js.map +1 -1
- package/dist/interfaces.d.ts +421 -162
- package/dist/interfaces.js +27 -0
- package/dist/interfaces.js.map +1 -1
- package/dist/lexer/Character.spec.js +5 -5
- package/dist/lexer/Character.spec.js.map +1 -1
- package/dist/lexer/Lexer.d.ts +12 -5
- package/dist/lexer/Lexer.js +28 -13
- package/dist/lexer/Lexer.js.map +1 -1
- package/dist/lexer/Lexer.spec.js +181 -135
- package/dist/lexer/Lexer.spec.js.map +1 -1
- package/dist/lexer/Token.d.ts +9 -1
- package/dist/lexer/Token.js +9 -1
- package/dist/lexer/Token.js.map +1 -1
- package/dist/lexer/TokenKind.d.ts +8 -0
- package/dist/lexer/TokenKind.js +24 -4
- package/dist/lexer/TokenKind.js.map +1 -1
- package/dist/parser/AstNode.d.ts +162 -0
- package/dist/parser/AstNode.js +225 -0
- package/dist/parser/AstNode.js.map +1 -0
- package/dist/parser/AstNode.spec.d.ts +1 -0
- package/dist/parser/AstNode.spec.js +165 -0
- package/dist/parser/AstNode.spec.js.map +1 -0
- package/dist/parser/BrsTranspileState.d.ts +4 -7
- package/dist/parser/BrsTranspileState.js +4 -12
- package/dist/parser/BrsTranspileState.js.map +1 -1
- package/dist/parser/Expression.d.ts +376 -283
- package/dist/parser/Expression.js +742 -585
- package/dist/parser/Expression.js.map +1 -1
- package/dist/parser/Parser.Class.spec.js +151 -145
- package/dist/parser/Parser.Class.spec.js.map +1 -1
- package/dist/parser/Parser.d.ts +48 -201
- package/dist/parser/Parser.js +705 -1026
- package/dist/parser/Parser.js.map +1 -1
- package/dist/parser/Parser.spec.d.ts +3 -1
- package/dist/parser/Parser.spec.js +861 -848
- package/dist/parser/Parser.spec.js.map +1 -1
- package/dist/parser/SGParser.d.ts +9 -8
- package/dist/parser/SGParser.js +10 -8
- package/dist/parser/SGParser.js.map +1 -1
- package/dist/parser/SGParser.spec.js +27 -38
- package/dist/parser/SGParser.spec.js.map +1 -1
- package/dist/parser/SGTypes.d.ts +98 -35
- package/dist/parser/SGTypes.js +169 -99
- package/dist/parser/SGTypes.js.map +1 -1
- package/dist/parser/Statement.d.ts +468 -272
- package/dist/parser/Statement.js +904 -631
- package/dist/parser/Statement.js.map +1 -1
- package/dist/parser/Statement.spec.js +47 -23
- package/dist/parser/Statement.spec.js.map +1 -1
- package/dist/parser/TranspileState.d.ts +1 -1
- package/dist/parser/TranspileState.js +7 -12
- package/dist/parser/TranspileState.js.map +1 -1
- package/dist/parser/tests/Parser.spec.js +3 -2
- package/dist/parser/tests/Parser.spec.js.map +1 -1
- package/dist/parser/tests/controlFlow/For.spec.js +33 -23
- package/dist/parser/tests/controlFlow/For.spec.js.map +1 -1
- package/dist/parser/tests/controlFlow/ForEach.spec.js +25 -20
- package/dist/parser/tests/controlFlow/ForEach.spec.js.map +1 -1
- package/dist/parser/tests/controlFlow/If.spec.js +96 -94
- package/dist/parser/tests/controlFlow/If.spec.js.map +1 -1
- package/dist/parser/tests/controlFlow/While.spec.js +22 -16
- package/dist/parser/tests/controlFlow/While.spec.js.map +1 -1
- package/dist/parser/tests/expression/Additive.spec.js +8 -8
- package/dist/parser/tests/expression/Additive.spec.js.map +1 -1
- package/dist/parser/tests/expression/ArrayLiterals.spec.js +58 -21
- package/dist/parser/tests/expression/ArrayLiterals.spec.js.map +1 -1
- package/dist/parser/tests/expression/AssociativeArrayLiterals.spec.js +62 -21
- package/dist/parser/tests/expression/AssociativeArrayLiterals.spec.js.map +1 -1
- package/dist/parser/tests/expression/Boolean.spec.js +8 -8
- package/dist/parser/tests/expression/Boolean.spec.js.map +1 -1
- package/dist/parser/tests/expression/Call.spec.js +129 -21
- package/dist/parser/tests/expression/Call.spec.js.map +1 -1
- package/dist/parser/tests/expression/Exponential.spec.js +5 -5
- package/dist/parser/tests/expression/Exponential.spec.js.map +1 -1
- package/dist/parser/tests/expression/Function.spec.js +36 -36
- package/dist/parser/tests/expression/Function.spec.js.map +1 -1
- package/dist/parser/tests/expression/Indexing.spec.js +92 -22
- package/dist/parser/tests/expression/Indexing.spec.js.map +1 -1
- package/dist/parser/tests/expression/Multiplicative.spec.js +9 -9
- package/dist/parser/tests/expression/Multiplicative.spec.js.map +1 -1
- package/dist/parser/tests/expression/NullCoalescenceExpression.spec.js +59 -59
- package/dist/parser/tests/expression/NullCoalescenceExpression.spec.js.map +1 -1
- package/dist/parser/tests/expression/PrefixUnary.spec.js +12 -12
- package/dist/parser/tests/expression/PrefixUnary.spec.js.map +1 -1
- package/dist/parser/tests/expression/Primary.spec.js +12 -12
- package/dist/parser/tests/expression/Primary.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/Relational.spec.js +13 -13
- package/dist/parser/tests/expression/Relational.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 +96 -57
- package/dist/parser/tests/expression/TemplateStringExpression.spec.js.map +1 -1
- package/dist/parser/tests/expression/TernaryExpression.spec.js +89 -89
- package/dist/parser/tests/expression/TernaryExpression.spec.js.map +1 -1
- package/dist/parser/tests/expression/TypeExpression.spec.d.ts +1 -0
- package/dist/parser/tests/expression/TypeExpression.spec.js +127 -0
- package/dist/parser/tests/expression/TypeExpression.spec.js.map +1 -0
- 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/AssignmentOperators.spec.js +15 -15
- package/dist/parser/tests/statement/AssignmentOperators.spec.js.map +1 -1
- package/dist/parser/tests/statement/ConstStatement.spec.js +82 -33
- package/dist/parser/tests/statement/ConstStatement.spec.js.map +1 -1
- package/dist/parser/tests/statement/Continue.spec.d.ts +1 -0
- package/dist/parser/tests/statement/Continue.spec.js +119 -0
- package/dist/parser/tests/statement/Continue.spec.js.map +1 -0
- package/dist/parser/tests/statement/Declaration.spec.js +19 -19
- package/dist/parser/tests/statement/Declaration.spec.js.map +1 -1
- package/dist/parser/tests/statement/Dim.spec.js +22 -22
- package/dist/parser/tests/statement/Dim.spec.js.map +1 -1
- package/dist/parser/tests/statement/Enum.spec.js +98 -302
- package/dist/parser/tests/statement/Enum.spec.js.map +1 -1
- package/dist/parser/tests/statement/For.spec.js +9 -10
- package/dist/parser/tests/statement/For.spec.js.map +1 -1
- package/dist/parser/tests/statement/ForEach.spec.js +8 -9
- package/dist/parser/tests/statement/ForEach.spec.js.map +1 -1
- package/dist/parser/tests/statement/Function.spec.js +44 -35
- package/dist/parser/tests/statement/Function.spec.js.map +1 -1
- package/dist/parser/tests/statement/Goto.spec.js +5 -5
- package/dist/parser/tests/statement/Goto.spec.js.map +1 -1
- package/dist/parser/tests/statement/Increment.spec.js +20 -20
- package/dist/parser/tests/statement/Increment.spec.js.map +1 -1
- package/dist/parser/tests/statement/InterfaceStatement.spec.js +30 -196
- package/dist/parser/tests/statement/InterfaceStatement.spec.js.map +1 -1
- package/dist/parser/tests/statement/LibraryStatement.spec.js +11 -11
- package/dist/parser/tests/statement/LibraryStatement.spec.js.map +1 -1
- package/dist/parser/tests/statement/Misc.spec.js +16 -78
- package/dist/parser/tests/statement/Misc.spec.js.map +1 -1
- package/dist/parser/tests/statement/PrintStatement.spec.js +36 -34
- package/dist/parser/tests/statement/PrintStatement.spec.js.map +1 -1
- package/dist/parser/tests/statement/ReturnStatement.spec.js +14 -12
- package/dist/parser/tests/statement/ReturnStatement.spec.js.map +1 -1
- package/dist/parser/tests/statement/Set.spec.js +48 -35
- package/dist/parser/tests/statement/Set.spec.js.map +1 -1
- package/dist/parser/tests/statement/Stop.spec.js +6 -6
- package/dist/parser/tests/statement/Stop.spec.js.map +1 -1
- package/dist/parser/tests/statement/Throw.spec.js +6 -6
- package/dist/parser/tests/statement/Throw.spec.js.map +1 -1
- package/dist/parser/tests/statement/TryCatch.spec.js +18 -16
- package/dist/parser/tests/statement/TryCatch.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/preprocessor/Manifest.spec.js +8 -8
- package/dist/preprocessor/Manifest.spec.js.map +1 -1
- package/dist/preprocessor/Preprocessor.d.ts +5 -6
- package/dist/preprocessor/Preprocessor.js +5 -5
- package/dist/preprocessor/Preprocessor.js.map +1 -1
- package/dist/preprocessor/Preprocessor.spec.js +25 -25
- package/dist/preprocessor/Preprocessor.spec.js.map +1 -1
- package/dist/preprocessor/PreprocessorParser.d.ts +1 -1
- package/dist/preprocessor/PreprocessorParser.js +7 -1
- package/dist/preprocessor/PreprocessorParser.js.map +1 -1
- package/dist/preprocessor/PreprocessorParser.spec.js +13 -13
- package/dist/preprocessor/PreprocessorParser.spec.js.map +1 -1
- package/dist/roku-types/data.json +5892 -10081
- package/dist/roku-types/index.d.ts +622 -1719
- package/dist/types/ArrayType.d.ts +10 -9
- package/dist/types/ArrayType.js +65 -60
- package/dist/types/ArrayType.js.map +1 -1
- package/dist/types/ArrayType.spec.js +36 -68
- 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 +8 -5
- package/dist/types/BooleanType.js +14 -7
- package/dist/types/BooleanType.js.map +1 -1
- package/dist/types/BooleanType.spec.js +10 -6
- package/dist/types/BooleanType.spec.js.map +1 -1
- package/dist/types/BscType.d.ts +32 -21
- package/dist/types/BscType.js +118 -21
- package/dist/types/BscType.js.map +1 -1
- package/dist/types/BscTypeKind.d.ts +25 -0
- package/dist/types/BscTypeKind.js +30 -0
- package/dist/types/BscTypeKind.js.map +1 -0
- package/dist/types/BuiltInInterfaceAdder.d.ts +23 -0
- package/dist/types/BuiltInInterfaceAdder.js +171 -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 +17 -0
- package/dist/types/ClassType.js +58 -0
- package/dist/types/ClassType.js.map +1 -0
- package/dist/types/ClassType.spec.d.ts +1 -0
- package/dist/types/ClassType.spec.js +77 -0
- package/dist/types/ClassType.spec.js.map +1 -0
- 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 +8 -5
- package/dist/types/DoubleType.js +18 -16
- package/dist/types/DoubleType.js.map +1 -1
- package/dist/types/DoubleType.spec.js +12 -6
- package/dist/types/DoubleType.spec.js.map +1 -1
- package/dist/types/DynamicType.d.ts +9 -5
- package/dist/types/DynamicType.js +15 -4
- package/dist/types/DynamicType.js.map +1 -1
- package/dist/types/DynamicType.spec.js +16 -5
- package/dist/types/DynamicType.spec.js.map +1 -1
- package/dist/types/EnumType.d.ts +30 -12
- package/dist/types/EnumType.js +43 -17
- package/dist/types/EnumType.js.map +1 -1
- package/dist/types/EnumType.spec.d.ts +1 -0
- package/dist/types/EnumType.spec.js +33 -0
- package/dist/types/EnumType.spec.js.map +1 -0
- package/dist/types/FloatType.d.ts +8 -5
- package/dist/types/FloatType.js +18 -16
- package/dist/types/FloatType.js.map +1 -1
- package/dist/types/FloatType.spec.js +4 -6
- package/dist/types/FloatType.spec.js.map +1 -1
- package/dist/types/FunctionType.d.ts +13 -8
- package/dist/types/FunctionType.js +30 -14
- package/dist/types/FunctionType.js.map +1 -1
- package/dist/types/InheritableType.d.ts +28 -0
- package/dist/types/InheritableType.js +152 -0
- package/dist/types/InheritableType.js.map +1 -0
- package/dist/types/IntegerType.d.ts +8 -5
- package/dist/types/IntegerType.js +18 -16
- package/dist/types/IntegerType.js.map +1 -1
- package/dist/types/IntegerType.spec.js +8 -6
- package/dist/types/IntegerType.spec.js.map +1 -1
- package/dist/types/InterfaceType.d.ts +12 -13
- package/dist/types/InterfaceType.js +20 -48
- package/dist/types/InterfaceType.js.map +1 -1
- package/dist/types/InterfaceType.spec.js +90 -56
- package/dist/types/InterfaceType.spec.js.map +1 -1
- package/dist/types/InvalidType.d.ts +7 -5
- package/dist/types/InvalidType.js +13 -7
- package/dist/types/InvalidType.js.map +1 -1
- package/dist/types/InvalidType.spec.js +8 -6
- package/dist/types/InvalidType.spec.js.map +1 -1
- package/dist/types/LongIntegerType.d.ts +8 -5
- package/dist/types/LongIntegerType.js +17 -15
- package/dist/types/LongIntegerType.js.map +1 -1
- package/dist/types/LongIntegerType.spec.js +10 -6
- package/dist/types/LongIntegerType.spec.js.map +1 -1
- package/dist/types/NamespaceType.d.ts +12 -0
- package/dist/types/NamespaceType.js +28 -0
- package/dist/types/NamespaceType.js.map +1 -0
- package/dist/types/ObjectType.d.ts +9 -8
- package/dist/types/ObjectType.js +21 -11
- package/dist/types/ObjectType.js.map +1 -1
- package/dist/types/ObjectType.spec.js +3 -3
- package/dist/types/ObjectType.spec.js.map +1 -1
- package/dist/types/ReferenceType.d.ts +63 -0
- package/dist/types/ReferenceType.js +423 -0
- package/dist/types/ReferenceType.js.map +1 -0
- package/dist/types/ReferenceType.spec.d.ts +1 -0
- package/dist/types/ReferenceType.spec.js +137 -0
- package/dist/types/ReferenceType.spec.js.map +1 -0
- package/dist/types/StringType.d.ts +11 -5
- package/dist/types/StringType.js +18 -7
- package/dist/types/StringType.js.map +1 -1
- package/dist/types/StringType.spec.js +3 -5
- package/dist/types/StringType.spec.js.map +1 -1
- package/dist/types/TypedFunctionType.d.ts +22 -17
- package/dist/types/TypedFunctionType.js +78 -60
- package/dist/types/TypedFunctionType.js.map +1 -1
- package/dist/types/TypedFunctionType.spec.js +105 -20
- package/dist/types/TypedFunctionType.spec.js.map +1 -1
- package/dist/types/UninitializedType.d.ts +8 -6
- package/dist/types/UninitializedType.js +13 -7
- package/dist/types/UninitializedType.js.map +1 -1
- package/dist/types/UnionType.d.ts +20 -0
- package/dist/types/UnionType.js +123 -0
- package/dist/types/UnionType.js.map +1 -0
- package/dist/types/UnionType.spec.d.ts +1 -0
- package/dist/types/UnionType.spec.js +130 -0
- package/dist/types/UnionType.spec.js.map +1 -0
- package/dist/types/VoidType.d.ts +8 -5
- package/dist/types/VoidType.js +14 -7
- package/dist/types/VoidType.js.map +1 -1
- package/dist/types/VoidType.spec.js +3 -3
- package/dist/types/VoidType.spec.js.map +1 -1
- package/dist/types/helper.spec.d.ts +1 -0
- package/dist/types/helper.spec.js +145 -0
- package/dist/types/helper.spec.js.map +1 -0
- package/dist/types/helpers.d.ts +19 -37
- package/dist/types/helpers.js +159 -99
- package/dist/types/helpers.js.map +1 -1
- package/dist/types/index.d.ts +22 -0
- package/dist/types/index.js +39 -0
- package/dist/types/index.js.map +1 -0
- package/dist/util.d.ts +143 -139
- package/dist/util.js +864 -385
- package/dist/util.js.map +1 -1
- package/dist/validators/ClassValidator.d.ts +8 -25
- package/dist/validators/ClassValidator.js +99 -179
- package/dist/validators/ClassValidator.js.map +1 -1
- package/package.json +165 -152
- 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 -32
- package/dist/bscPlugin/transpile/BrsFilePreTranspileProcessor.spec.js.map +0 -1
- package/dist/parser/SGTypes.spec.js +0 -351
- package/dist/parser/SGTypes.spec.js.map +0 -1
- package/dist/types/CustomType.d.ts +0 -12
- package/dist/types/CustomType.js +0 -44
- package/dist/types/CustomType.js.map +0 -1
- package/dist/types/LazyType.d.ts +0 -16
- package/dist/types/LazyType.js +0 -44
- package/dist/types/LazyType.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/{parser/SGTypes.spec.d.ts → bscPlugin/definition/DefinitionProvider.spec.d.ts} +0 -0
|
@@ -0,0 +1,162 @@
|
|
|
1
|
+
import type { WalkVisitor, WalkOptions } from '../astUtils/visitors';
|
|
2
|
+
import type { Position, Range } from 'vscode-languageserver';
|
|
3
|
+
import { CancellationTokenSource } from 'vscode-languageserver';
|
|
4
|
+
import { InternalWalkMode } from '../astUtils/visitors';
|
|
5
|
+
import type { SymbolTable } from '../SymbolTable';
|
|
6
|
+
import type { BrsTranspileState } from './BrsTranspileState';
|
|
7
|
+
import type { GetTypeOptions, TranspileResult } from '../interfaces';
|
|
8
|
+
import type { AnnotationExpression } from './Expression';
|
|
9
|
+
import type { BscType } from '../types/BscType';
|
|
10
|
+
import type { Token } from '../lexer/Token';
|
|
11
|
+
/**
|
|
12
|
+
* A BrightScript AST node
|
|
13
|
+
*/
|
|
14
|
+
export declare abstract class AstNode {
|
|
15
|
+
abstract kind: AstNodeKind;
|
|
16
|
+
/**
|
|
17
|
+
* The starting and ending location of the node.
|
|
18
|
+
*/
|
|
19
|
+
abstract range: Range;
|
|
20
|
+
abstract transpile(state: BrsTranspileState): TranspileResult;
|
|
21
|
+
/**
|
|
22
|
+
* When being considered by the walk visitor, this describes what type of element the current class is.
|
|
23
|
+
*/
|
|
24
|
+
visitMode: InternalWalkMode;
|
|
25
|
+
abstract walk(visitor: WalkVisitor, options: WalkOptions): any;
|
|
26
|
+
/**
|
|
27
|
+
* The parent node for this statement. This is set dynamically during `onFileValidate`, and should not be set directly.
|
|
28
|
+
*/
|
|
29
|
+
parent?: AstNode;
|
|
30
|
+
/**
|
|
31
|
+
* Certain expressions or statements can have a symbol table (such as blocks, functions, namespace bodies, etc).
|
|
32
|
+
* If you're interested in getting the closest SymbolTable, use `getSymbolTable` instead.
|
|
33
|
+
*/
|
|
34
|
+
symbolTable?: SymbolTable;
|
|
35
|
+
/**
|
|
36
|
+
* Get the closest symbol table for this node
|
|
37
|
+
*/
|
|
38
|
+
getSymbolTable(): SymbolTable;
|
|
39
|
+
/**
|
|
40
|
+
* Walk upward and return the first node that results in `true` from the matcher.
|
|
41
|
+
* @param matcher a function called for each node. If you return true, this function returns the specified node. If you return a node, that node is returned. all other return values continue the loop
|
|
42
|
+
* The function's second parameter is a cancellation token. If you'd like to short-circuit the walk, call `cancellationToken.cancel()`, then this function will return `undefined`
|
|
43
|
+
*/
|
|
44
|
+
findAncestor<TNode extends AstNode = AstNode>(matcher: (node: AstNode, cancellationToken: CancellationTokenSource) => boolean | AstNode | undefined | void): TNode | undefined;
|
|
45
|
+
/**
|
|
46
|
+
* Find the first child where the matcher evaluates to true.
|
|
47
|
+
* @param matcher a function called for each node. If you return true, this function returns the specified node. If you return a node, that node is returned. all other return values continue the loop
|
|
48
|
+
*/
|
|
49
|
+
findChild<TNode extends AstNode = AstNode>(matcher: (node: AstNode, cancellationSource: any) => boolean | AstNode | undefined | void, options?: WalkOptions): TNode | undefined;
|
|
50
|
+
/**
|
|
51
|
+
* Find a list of all children first child where the matcher evaluates to true.
|
|
52
|
+
* @param matcher a function called for each node. If you return true, the specified node is included in the results. If you return a node,
|
|
53
|
+
* that node is returned. all other return values exclude that value and continue the loop
|
|
54
|
+
*/
|
|
55
|
+
findChildren<TNode extends AstNode = AstNode>(matcher: (node: AstNode, cancellationSource: CancellationTokenSource) => boolean | AstNode | undefined | void, options?: WalkOptions): Array<TNode>;
|
|
56
|
+
/**
|
|
57
|
+
* FInd the deepest child that includes the given position
|
|
58
|
+
*/
|
|
59
|
+
findChildAtPosition<TNodeType extends AstNode = AstNode>(position: Position, options?: WalkOptions): TNodeType | undefined;
|
|
60
|
+
/**
|
|
61
|
+
* Get the BscType of this node.
|
|
62
|
+
*/
|
|
63
|
+
getType(options: GetTypeOptions): BscType;
|
|
64
|
+
/**
|
|
65
|
+
* Links all child nodes to their parent AstNode, and the same with symbol tables. This performs a full AST walk, so you should use this sparingly
|
|
66
|
+
*/
|
|
67
|
+
link(): void;
|
|
68
|
+
/**
|
|
69
|
+
* Walk upward and return the root node
|
|
70
|
+
*/
|
|
71
|
+
getRoot(): AstNode;
|
|
72
|
+
getLeadingTrivia(): Token[];
|
|
73
|
+
}
|
|
74
|
+
export declare abstract class Statement extends AstNode {
|
|
75
|
+
/**
|
|
76
|
+
* When being considered by the walk visitor, this describes what type of element the current class is.
|
|
77
|
+
*/
|
|
78
|
+
visitMode: InternalWalkMode;
|
|
79
|
+
/**
|
|
80
|
+
* Annotations for this statement
|
|
81
|
+
*/
|
|
82
|
+
annotations?: AnnotationExpression[] | undefined;
|
|
83
|
+
}
|
|
84
|
+
/** A BrightScript expression */
|
|
85
|
+
export declare abstract class Expression extends AstNode {
|
|
86
|
+
/**
|
|
87
|
+
* When being considered by the walk visitor, this describes what type of element the current class is.
|
|
88
|
+
*/
|
|
89
|
+
visitMode: InternalWalkMode;
|
|
90
|
+
}
|
|
91
|
+
export declare enum AstNodeKind {
|
|
92
|
+
Body = "Body",
|
|
93
|
+
BinaryExpression = "BinaryExpression",
|
|
94
|
+
CallExpression = "CallExpression",
|
|
95
|
+
FunctionExpression = "FunctionExpression",
|
|
96
|
+
FunctionParameterExpression = "FunctionParameterExpression",
|
|
97
|
+
NamespacedVariableNameExpression = "NamespacedVariableNameExpression",
|
|
98
|
+
DottedGetExpression = "DottedGetExpression",
|
|
99
|
+
XmlAttributeGetExpression = "XmlAttributeGetExpression",
|
|
100
|
+
IndexedGetExpression = "IndexedGetExpression",
|
|
101
|
+
GroupingExpression = "GroupingExpression",
|
|
102
|
+
LiteralExpression = "LiteralExpression",
|
|
103
|
+
EscapedCharCodeLiteralExpression = "EscapedCharCodeLiteralExpression",
|
|
104
|
+
ArrayLiteralExpression = "ArrayLiteralExpression",
|
|
105
|
+
AAMemberExpression = "AAMemberExpression",
|
|
106
|
+
AALiteralExpression = "AALiteralExpression",
|
|
107
|
+
UnaryExpression = "UnaryExpression",
|
|
108
|
+
VariableExpression = "VariableExpression",
|
|
109
|
+
SourceLiteralExpression = "SourceLiteralExpression",
|
|
110
|
+
NewExpression = "NewExpression",
|
|
111
|
+
CallfuncExpression = "CallfuncExpression",
|
|
112
|
+
TemplateStringQuasiExpression = "TemplateStringQuasiExpression",
|
|
113
|
+
TemplateStringExpression = "TemplateStringExpression",
|
|
114
|
+
TaggedTemplateStringExpression = "TaggedTemplateStringExpression",
|
|
115
|
+
AnnotationExpression = "AnnotationExpression",
|
|
116
|
+
TernaryExpression = "TernaryExpression",
|
|
117
|
+
NullCoalescingExpression = "NullCoalescingExpression",
|
|
118
|
+
RegexLiteralExpression = "RegexLiteralExpression",
|
|
119
|
+
EmptyStatement = "EmptyStatement",
|
|
120
|
+
AssignmentStatement = "AssignmentStatement",
|
|
121
|
+
ExpressionStatement = "ExpressionStatement",
|
|
122
|
+
CommentStatement = "CommentStatement",
|
|
123
|
+
ExitForStatement = "ExitForStatement",
|
|
124
|
+
ExitWhileStatement = "ExitWhileStatement",
|
|
125
|
+
FunctionStatement = "FunctionStatement",
|
|
126
|
+
IfStatement = "IfStatement",
|
|
127
|
+
IncrementStatement = "IncrementStatement",
|
|
128
|
+
PrintStatement = "PrintStatement",
|
|
129
|
+
DimStatement = "DimStatement",
|
|
130
|
+
GotoStatement = "GotoStatement",
|
|
131
|
+
LabelStatement = "LabelStatement",
|
|
132
|
+
ReturnStatement = "ReturnStatement",
|
|
133
|
+
EndStatement = "EndStatement",
|
|
134
|
+
StopStatement = "StopStatement",
|
|
135
|
+
ForStatement = "ForStatement",
|
|
136
|
+
ForEachStatement = "ForEachStatement",
|
|
137
|
+
WhileStatement = "WhileStatement",
|
|
138
|
+
DottedSetStatement = "DottedSetStatement",
|
|
139
|
+
IndexedSetStatement = "IndexedSetStatement",
|
|
140
|
+
LibraryStatement = "LibraryStatement",
|
|
141
|
+
NamespaceStatement = "NamespaceStatement",
|
|
142
|
+
ImportStatement = "ImportStatement",
|
|
143
|
+
InterfaceStatement = "InterfaceStatement",
|
|
144
|
+
InterfaceFieldStatement = "InterfaceFieldStatement",
|
|
145
|
+
InterfaceMethodStatement = "InterfaceMethodStatement",
|
|
146
|
+
ClassStatement = "ClassStatement",
|
|
147
|
+
MethodStatement = "MethodStatement",
|
|
148
|
+
ClassMethodStatement = "ClassMethodStatement",
|
|
149
|
+
FieldStatement = "FieldStatement",
|
|
150
|
+
ClassFieldStatement = "ClassFieldStatement",
|
|
151
|
+
TryCatchStatement = "TryCatchStatement",
|
|
152
|
+
CatchStatement = "CatchStatement",
|
|
153
|
+
ThrowStatement = "ThrowStatement",
|
|
154
|
+
EnumStatement = "EnumStatement",
|
|
155
|
+
EnumMemberStatement = "EnumMemberStatement",
|
|
156
|
+
ConstStatement = "ConstStatement",
|
|
157
|
+
ContinueStatement = "ContinueStatement",
|
|
158
|
+
Block = "Block",
|
|
159
|
+
TypeExpression = "TypeExpression",
|
|
160
|
+
TypeCastExpression = "TypeCastExpression",
|
|
161
|
+
TypedArrayExpression = "TypedArrayExpression"
|
|
162
|
+
}
|
|
@@ -0,0 +1,225 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.AstNodeKind = exports.Expression = exports.Statement = exports.AstNode = void 0;
|
|
4
|
+
const visitors_1 = require("../astUtils/visitors");
|
|
5
|
+
const vscode_languageserver_1 = require("vscode-languageserver");
|
|
6
|
+
const visitors_2 = require("../astUtils/visitors");
|
|
7
|
+
const util_1 = require("../util");
|
|
8
|
+
const DynamicType_1 = require("../types/DynamicType");
|
|
9
|
+
/**
|
|
10
|
+
* A BrightScript AST node
|
|
11
|
+
*/
|
|
12
|
+
class AstNode {
|
|
13
|
+
constructor() {
|
|
14
|
+
/**
|
|
15
|
+
* When being considered by the walk visitor, this describes what type of element the current class is.
|
|
16
|
+
*/
|
|
17
|
+
this.visitMode = visitors_2.InternalWalkMode.visitStatements;
|
|
18
|
+
}
|
|
19
|
+
/**
|
|
20
|
+
* Get the closest symbol table for this node
|
|
21
|
+
*/
|
|
22
|
+
getSymbolTable() {
|
|
23
|
+
let node = this;
|
|
24
|
+
while (node) {
|
|
25
|
+
if (node.symbolTable) {
|
|
26
|
+
return node.symbolTable;
|
|
27
|
+
}
|
|
28
|
+
node = node.parent;
|
|
29
|
+
}
|
|
30
|
+
//justification: we are following a chain of nodes until we get to one with a SymbolTable,
|
|
31
|
+
//and the top-level node will always have a SymbolTable. So we'll never hit this undefined,
|
|
32
|
+
//but it is not so easy to convince the typechecker of this.
|
|
33
|
+
return undefined;
|
|
34
|
+
}
|
|
35
|
+
/**
|
|
36
|
+
* Walk upward and return the first node that results in `true` from the matcher.
|
|
37
|
+
* @param matcher a function called for each node. If you return true, this function returns the specified node. If you return a node, that node is returned. all other return values continue the loop
|
|
38
|
+
* The function's second parameter is a cancellation token. If you'd like to short-circuit the walk, call `cancellationToken.cancel()`, then this function will return `undefined`
|
|
39
|
+
*/
|
|
40
|
+
findAncestor(matcher) {
|
|
41
|
+
let node = this.parent;
|
|
42
|
+
const cancel = new vscode_languageserver_1.CancellationTokenSource();
|
|
43
|
+
while (node) {
|
|
44
|
+
let matcherValue = matcher(node, cancel);
|
|
45
|
+
if (cancel.token.isCancellationRequested) {
|
|
46
|
+
return;
|
|
47
|
+
}
|
|
48
|
+
if (matcherValue) {
|
|
49
|
+
cancel.cancel();
|
|
50
|
+
return (matcherValue === true ? node : matcherValue);
|
|
51
|
+
}
|
|
52
|
+
node = node.parent;
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
/**
|
|
56
|
+
* Find the first child where the matcher evaluates to true.
|
|
57
|
+
* @param matcher a function called for each node. If you return true, this function returns the specified node. If you return a node, that node is returned. all other return values continue the loop
|
|
58
|
+
*/
|
|
59
|
+
findChild(matcher, options) {
|
|
60
|
+
const cancel = new vscode_languageserver_1.CancellationTokenSource();
|
|
61
|
+
let result;
|
|
62
|
+
this.walk((node) => {
|
|
63
|
+
const matcherValue = matcher(node, cancel);
|
|
64
|
+
if (matcherValue) {
|
|
65
|
+
cancel.cancel();
|
|
66
|
+
result = matcherValue === true ? node : matcherValue;
|
|
67
|
+
}
|
|
68
|
+
}, Object.assign(Object.assign({ walkMode: visitors_1.WalkMode.visitAllRecursive }, options !== null && options !== void 0 ? options : {}), { cancel: cancel.token }));
|
|
69
|
+
return result;
|
|
70
|
+
}
|
|
71
|
+
/**
|
|
72
|
+
* Find a list of all children first child where the matcher evaluates to true.
|
|
73
|
+
* @param matcher a function called for each node. If you return true, the specified node is included in the results. If you return a node,
|
|
74
|
+
* that node is returned. all other return values exclude that value and continue the loop
|
|
75
|
+
*/
|
|
76
|
+
findChildren(matcher, options) {
|
|
77
|
+
const cancel = new vscode_languageserver_1.CancellationTokenSource();
|
|
78
|
+
let result = [];
|
|
79
|
+
this.walk((node) => {
|
|
80
|
+
const matcherValue = matcher(node, cancel);
|
|
81
|
+
if (matcherValue) {
|
|
82
|
+
result.push(matcherValue === true ? node : matcherValue);
|
|
83
|
+
}
|
|
84
|
+
}, Object.assign(Object.assign({ walkMode: visitors_1.WalkMode.visitAllRecursive }, options !== null && options !== void 0 ? options : {}), { cancel: cancel.token }));
|
|
85
|
+
return result;
|
|
86
|
+
}
|
|
87
|
+
/**
|
|
88
|
+
* FInd the deepest child that includes the given position
|
|
89
|
+
*/
|
|
90
|
+
findChildAtPosition(position, options) {
|
|
91
|
+
return this.findChild((node) => {
|
|
92
|
+
var _a;
|
|
93
|
+
//if the current node includes this range, keep that node
|
|
94
|
+
if (util_1.default.rangeContains(node.range, position)) {
|
|
95
|
+
return (_a = node.findChildAtPosition(position, options)) !== null && _a !== void 0 ? _a : node;
|
|
96
|
+
}
|
|
97
|
+
}, options);
|
|
98
|
+
}
|
|
99
|
+
/**
|
|
100
|
+
* Get the BscType of this node.
|
|
101
|
+
*/
|
|
102
|
+
getType(options) {
|
|
103
|
+
return DynamicType_1.DynamicType.instance;
|
|
104
|
+
}
|
|
105
|
+
/**
|
|
106
|
+
* Links all child nodes to their parent AstNode, and the same with symbol tables. This performs a full AST walk, so you should use this sparingly
|
|
107
|
+
*/
|
|
108
|
+
link() {
|
|
109
|
+
//the act of walking causes the nodes to be linked
|
|
110
|
+
this.walk(() => { }, {
|
|
111
|
+
walkMode: visitors_1.WalkMode.visitAllRecursive
|
|
112
|
+
});
|
|
113
|
+
}
|
|
114
|
+
/**
|
|
115
|
+
* Walk upward and return the root node
|
|
116
|
+
*/
|
|
117
|
+
getRoot() {
|
|
118
|
+
let node = this;
|
|
119
|
+
while (node) {
|
|
120
|
+
if (!node.parent) {
|
|
121
|
+
return node;
|
|
122
|
+
}
|
|
123
|
+
node = node.parent;
|
|
124
|
+
}
|
|
125
|
+
}
|
|
126
|
+
getLeadingTrivia() {
|
|
127
|
+
return [];
|
|
128
|
+
}
|
|
129
|
+
}
|
|
130
|
+
exports.AstNode = AstNode;
|
|
131
|
+
class Statement extends AstNode {
|
|
132
|
+
constructor() {
|
|
133
|
+
super(...arguments);
|
|
134
|
+
/**
|
|
135
|
+
* When being considered by the walk visitor, this describes what type of element the current class is.
|
|
136
|
+
*/
|
|
137
|
+
this.visitMode = visitors_2.InternalWalkMode.visitStatements;
|
|
138
|
+
}
|
|
139
|
+
}
|
|
140
|
+
exports.Statement = Statement;
|
|
141
|
+
/** A BrightScript expression */
|
|
142
|
+
class Expression extends AstNode {
|
|
143
|
+
constructor() {
|
|
144
|
+
super(...arguments);
|
|
145
|
+
/**
|
|
146
|
+
* When being considered by the walk visitor, this describes what type of element the current class is.
|
|
147
|
+
*/
|
|
148
|
+
this.visitMode = visitors_2.InternalWalkMode.visitExpressions;
|
|
149
|
+
}
|
|
150
|
+
}
|
|
151
|
+
exports.Expression = Expression;
|
|
152
|
+
var AstNodeKind;
|
|
153
|
+
(function (AstNodeKind) {
|
|
154
|
+
AstNodeKind["Body"] = "Body";
|
|
155
|
+
AstNodeKind["BinaryExpression"] = "BinaryExpression";
|
|
156
|
+
AstNodeKind["CallExpression"] = "CallExpression";
|
|
157
|
+
AstNodeKind["FunctionExpression"] = "FunctionExpression";
|
|
158
|
+
AstNodeKind["FunctionParameterExpression"] = "FunctionParameterExpression";
|
|
159
|
+
AstNodeKind["NamespacedVariableNameExpression"] = "NamespacedVariableNameExpression";
|
|
160
|
+
AstNodeKind["DottedGetExpression"] = "DottedGetExpression";
|
|
161
|
+
AstNodeKind["XmlAttributeGetExpression"] = "XmlAttributeGetExpression";
|
|
162
|
+
AstNodeKind["IndexedGetExpression"] = "IndexedGetExpression";
|
|
163
|
+
AstNodeKind["GroupingExpression"] = "GroupingExpression";
|
|
164
|
+
AstNodeKind["LiteralExpression"] = "LiteralExpression";
|
|
165
|
+
AstNodeKind["EscapedCharCodeLiteralExpression"] = "EscapedCharCodeLiteralExpression";
|
|
166
|
+
AstNodeKind["ArrayLiteralExpression"] = "ArrayLiteralExpression";
|
|
167
|
+
AstNodeKind["AAMemberExpression"] = "AAMemberExpression";
|
|
168
|
+
AstNodeKind["AALiteralExpression"] = "AALiteralExpression";
|
|
169
|
+
AstNodeKind["UnaryExpression"] = "UnaryExpression";
|
|
170
|
+
AstNodeKind["VariableExpression"] = "VariableExpression";
|
|
171
|
+
AstNodeKind["SourceLiteralExpression"] = "SourceLiteralExpression";
|
|
172
|
+
AstNodeKind["NewExpression"] = "NewExpression";
|
|
173
|
+
AstNodeKind["CallfuncExpression"] = "CallfuncExpression";
|
|
174
|
+
AstNodeKind["TemplateStringQuasiExpression"] = "TemplateStringQuasiExpression";
|
|
175
|
+
AstNodeKind["TemplateStringExpression"] = "TemplateStringExpression";
|
|
176
|
+
AstNodeKind["TaggedTemplateStringExpression"] = "TaggedTemplateStringExpression";
|
|
177
|
+
AstNodeKind["AnnotationExpression"] = "AnnotationExpression";
|
|
178
|
+
AstNodeKind["TernaryExpression"] = "TernaryExpression";
|
|
179
|
+
AstNodeKind["NullCoalescingExpression"] = "NullCoalescingExpression";
|
|
180
|
+
AstNodeKind["RegexLiteralExpression"] = "RegexLiteralExpression";
|
|
181
|
+
AstNodeKind["EmptyStatement"] = "EmptyStatement";
|
|
182
|
+
AstNodeKind["AssignmentStatement"] = "AssignmentStatement";
|
|
183
|
+
AstNodeKind["ExpressionStatement"] = "ExpressionStatement";
|
|
184
|
+
AstNodeKind["CommentStatement"] = "CommentStatement";
|
|
185
|
+
AstNodeKind["ExitForStatement"] = "ExitForStatement";
|
|
186
|
+
AstNodeKind["ExitWhileStatement"] = "ExitWhileStatement";
|
|
187
|
+
AstNodeKind["FunctionStatement"] = "FunctionStatement";
|
|
188
|
+
AstNodeKind["IfStatement"] = "IfStatement";
|
|
189
|
+
AstNodeKind["IncrementStatement"] = "IncrementStatement";
|
|
190
|
+
AstNodeKind["PrintStatement"] = "PrintStatement";
|
|
191
|
+
AstNodeKind["DimStatement"] = "DimStatement";
|
|
192
|
+
AstNodeKind["GotoStatement"] = "GotoStatement";
|
|
193
|
+
AstNodeKind["LabelStatement"] = "LabelStatement";
|
|
194
|
+
AstNodeKind["ReturnStatement"] = "ReturnStatement";
|
|
195
|
+
AstNodeKind["EndStatement"] = "EndStatement";
|
|
196
|
+
AstNodeKind["StopStatement"] = "StopStatement";
|
|
197
|
+
AstNodeKind["ForStatement"] = "ForStatement";
|
|
198
|
+
AstNodeKind["ForEachStatement"] = "ForEachStatement";
|
|
199
|
+
AstNodeKind["WhileStatement"] = "WhileStatement";
|
|
200
|
+
AstNodeKind["DottedSetStatement"] = "DottedSetStatement";
|
|
201
|
+
AstNodeKind["IndexedSetStatement"] = "IndexedSetStatement";
|
|
202
|
+
AstNodeKind["LibraryStatement"] = "LibraryStatement";
|
|
203
|
+
AstNodeKind["NamespaceStatement"] = "NamespaceStatement";
|
|
204
|
+
AstNodeKind["ImportStatement"] = "ImportStatement";
|
|
205
|
+
AstNodeKind["InterfaceStatement"] = "InterfaceStatement";
|
|
206
|
+
AstNodeKind["InterfaceFieldStatement"] = "InterfaceFieldStatement";
|
|
207
|
+
AstNodeKind["InterfaceMethodStatement"] = "InterfaceMethodStatement";
|
|
208
|
+
AstNodeKind["ClassStatement"] = "ClassStatement";
|
|
209
|
+
AstNodeKind["MethodStatement"] = "MethodStatement";
|
|
210
|
+
AstNodeKind["ClassMethodStatement"] = "ClassMethodStatement";
|
|
211
|
+
AstNodeKind["FieldStatement"] = "FieldStatement";
|
|
212
|
+
AstNodeKind["ClassFieldStatement"] = "ClassFieldStatement";
|
|
213
|
+
AstNodeKind["TryCatchStatement"] = "TryCatchStatement";
|
|
214
|
+
AstNodeKind["CatchStatement"] = "CatchStatement";
|
|
215
|
+
AstNodeKind["ThrowStatement"] = "ThrowStatement";
|
|
216
|
+
AstNodeKind["EnumStatement"] = "EnumStatement";
|
|
217
|
+
AstNodeKind["EnumMemberStatement"] = "EnumMemberStatement";
|
|
218
|
+
AstNodeKind["ConstStatement"] = "ConstStatement";
|
|
219
|
+
AstNodeKind["ContinueStatement"] = "ContinueStatement";
|
|
220
|
+
AstNodeKind["Block"] = "Block";
|
|
221
|
+
AstNodeKind["TypeExpression"] = "TypeExpression";
|
|
222
|
+
AstNodeKind["TypeCastExpression"] = "TypeCastExpression";
|
|
223
|
+
AstNodeKind["TypedArrayExpression"] = "TypedArrayExpression";
|
|
224
|
+
})(AstNodeKind = exports.AstNodeKind || (exports.AstNodeKind = {}));
|
|
225
|
+
//# sourceMappingURL=AstNode.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"AstNode.js","sourceRoot":"","sources":["../../src/parser/AstNode.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,165 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
const util_1 = require("../util");
|
|
4
|
+
const fsExtra = require("fs-extra");
|
|
5
|
+
const Program_1 = require("../Program");
|
|
6
|
+
const chai_config_spec_1 = require("../chai-config.spec");
|
|
7
|
+
const testHelpers_spec_1 = require("../testHelpers.spec");
|
|
8
|
+
const testHelpers_spec_2 = require("../testHelpers.spec");
|
|
9
|
+
const reflection_1 = require("../astUtils/reflection");
|
|
10
|
+
const Statement_1 = require("./Statement");
|
|
11
|
+
describe('AstNode', () => {
|
|
12
|
+
let program;
|
|
13
|
+
beforeEach(() => {
|
|
14
|
+
fsExtra.emptyDirSync(testHelpers_spec_2.tempDir);
|
|
15
|
+
program = new Program_1.Program({
|
|
16
|
+
rootDir: testHelpers_spec_2.rootDir,
|
|
17
|
+
stagingDir: testHelpers_spec_2.stagingDir
|
|
18
|
+
});
|
|
19
|
+
program.createSourceScope(); //ensure source scope is created
|
|
20
|
+
});
|
|
21
|
+
afterEach(() => {
|
|
22
|
+
fsExtra.emptyDirSync(testHelpers_spec_2.tempDir);
|
|
23
|
+
program.dispose();
|
|
24
|
+
});
|
|
25
|
+
describe('findChildAtPosition', () => {
|
|
26
|
+
it('finds deepest AstNode that matches the position', () => {
|
|
27
|
+
const file = program.setFile('source/main.brs', `
|
|
28
|
+
sub main()
|
|
29
|
+
alpha = invalid
|
|
30
|
+
print alpha.beta.charlie.delta(alpha.echo.foxtrot())
|
|
31
|
+
end sub
|
|
32
|
+
`);
|
|
33
|
+
program.validate();
|
|
34
|
+
(0, testHelpers_spec_1.expectZeroDiagnostics)(program);
|
|
35
|
+
const delta = file.ast.findChildAtPosition(util_1.util.createPosition(3, 52));
|
|
36
|
+
(0, chai_config_spec_1.expect)(delta.tokens.name.text).to.eql('delta');
|
|
37
|
+
const foxtrot = file.ast.findChildAtPosition(util_1.util.createPosition(3, 71));
|
|
38
|
+
(0, chai_config_spec_1.expect)(foxtrot.tokens.name.text).to.eql('foxtrot');
|
|
39
|
+
});
|
|
40
|
+
});
|
|
41
|
+
describe('findChild', () => {
|
|
42
|
+
it('finds a child that matches the matcher', () => {
|
|
43
|
+
const file = program.setFile('source/main.brs', `
|
|
44
|
+
sub main()
|
|
45
|
+
alpha = invalid
|
|
46
|
+
print alpha.beta.charlie.delta(alpha.echo.foxtrot())
|
|
47
|
+
end sub
|
|
48
|
+
`);
|
|
49
|
+
(0, chai_config_spec_1.expect)(file.ast.findChild((node) => {
|
|
50
|
+
return (0, reflection_1.isAssignmentStatement)(node) && node.tokens.name.text === 'alpha';
|
|
51
|
+
})).instanceof(Statement_1.AssignmentStatement);
|
|
52
|
+
});
|
|
53
|
+
it('returns the exact node that matches', () => {
|
|
54
|
+
const file = program.setFile('source/main.brs', `
|
|
55
|
+
sub main()
|
|
56
|
+
alpha1 = invalid
|
|
57
|
+
alpha2 = invalid
|
|
58
|
+
end sub
|
|
59
|
+
`);
|
|
60
|
+
let count = 0;
|
|
61
|
+
const instance = file.ast.findChild((node) => {
|
|
62
|
+
if ((0, reflection_1.isAssignmentStatement)(node)) {
|
|
63
|
+
count++;
|
|
64
|
+
if (count === 2) {
|
|
65
|
+
return true;
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
});
|
|
69
|
+
const expected = file.ast.statements[0].func.body.statements[1];
|
|
70
|
+
(0, chai_config_spec_1.expect)(instance).to.equal(expected);
|
|
71
|
+
});
|
|
72
|
+
it('returns undefined when matcher never returned true', () => {
|
|
73
|
+
const file = program.setFile('source/main.brs', `
|
|
74
|
+
sub main()
|
|
75
|
+
alpha = invalid
|
|
76
|
+
print alpha.beta.charlie.delta(alpha.echo.foxtrot())
|
|
77
|
+
end sub
|
|
78
|
+
`);
|
|
79
|
+
(0, chai_config_spec_1.expect)(file.ast.findChild((node) => false)).not.to.exist;
|
|
80
|
+
});
|
|
81
|
+
it('returns the value returned from the matcher', () => {
|
|
82
|
+
const file = program.setFile('source/main.brs', `
|
|
83
|
+
sub main()
|
|
84
|
+
alpha = invalid
|
|
85
|
+
print alpha.beta.charlie.delta(alpha.echo.foxtrot())
|
|
86
|
+
end sub
|
|
87
|
+
`);
|
|
88
|
+
const secondStatement = file.ast.statements[0].func.body.statements[1];
|
|
89
|
+
(0, chai_config_spec_1.expect)(file.ast.findChild((node) => secondStatement)).to.equal(secondStatement);
|
|
90
|
+
});
|
|
91
|
+
it('cancels properly', () => {
|
|
92
|
+
const file = program.setFile('source/main.brs', `
|
|
93
|
+
sub main()
|
|
94
|
+
alpha = invalid
|
|
95
|
+
print alpha.beta.charlie.delta(alpha.echo.foxtrot())
|
|
96
|
+
end sub
|
|
97
|
+
`);
|
|
98
|
+
let count = 0;
|
|
99
|
+
file.ast.findChild((node, cancelToken) => {
|
|
100
|
+
count++;
|
|
101
|
+
cancelToken.cancel();
|
|
102
|
+
});
|
|
103
|
+
(0, chai_config_spec_1.expect)(count).to.eql(1);
|
|
104
|
+
});
|
|
105
|
+
});
|
|
106
|
+
describe('findAncestor', () => {
|
|
107
|
+
it('returns node when matcher returns true', () => {
|
|
108
|
+
const file = program.setFile('source/main.brs', `
|
|
109
|
+
sub main()
|
|
110
|
+
alpha = invalid
|
|
111
|
+
print alpha.beta.charlie.delta(alpha.echo.foxtrot())
|
|
112
|
+
end sub
|
|
113
|
+
`);
|
|
114
|
+
const secondStatement = file.ast.statements[0].func.body.statements[1];
|
|
115
|
+
const foxtrot = file.ast.findChild((node) => {
|
|
116
|
+
var _a;
|
|
117
|
+
return (0, reflection_1.isDottedGetExpression)(node) && ((_a = node.tokens.name) === null || _a === void 0 ? void 0 : _a.text) === 'foxtrot';
|
|
118
|
+
});
|
|
119
|
+
(0, chai_config_spec_1.expect)(foxtrot.findAncestor(reflection_1.isPrintStatement)).to.equal(secondStatement);
|
|
120
|
+
});
|
|
121
|
+
it('returns undefined when no match found', () => {
|
|
122
|
+
const file = program.setFile('source/main.brs', `
|
|
123
|
+
sub main()
|
|
124
|
+
alpha = invalid
|
|
125
|
+
print alpha.beta.charlie.delta(alpha.echo.foxtrot())
|
|
126
|
+
end sub
|
|
127
|
+
`);
|
|
128
|
+
const foxtrot = file.ast.findChild((node) => {
|
|
129
|
+
var _a;
|
|
130
|
+
return (0, reflection_1.isDottedGetExpression)(node) && ((_a = node.tokens.name) === null || _a === void 0 ? void 0 : _a.text) === 'foxtrot';
|
|
131
|
+
});
|
|
132
|
+
(0, chai_config_spec_1.expect)(foxtrot.findAncestor(reflection_1.isClassStatement)).to.be.undefined;
|
|
133
|
+
});
|
|
134
|
+
it('returns overridden node when returned in matcher', () => {
|
|
135
|
+
const file = program.setFile('source/main.brs', `
|
|
136
|
+
sub main()
|
|
137
|
+
alpha = invalid
|
|
138
|
+
print alpha.beta.charlie.delta(alpha.echo.foxtrot())
|
|
139
|
+
end sub
|
|
140
|
+
`);
|
|
141
|
+
const firstStatement = file.ast.statements[0].func.body.statements[0];
|
|
142
|
+
const foxtrot = file.ast.findChild((node) => {
|
|
143
|
+
var _a;
|
|
144
|
+
return (0, reflection_1.isDottedGetExpression)(node) && ((_a = node.tokens.name) === null || _a === void 0 ? void 0 : _a.text) === 'foxtrot';
|
|
145
|
+
});
|
|
146
|
+
(0, chai_config_spec_1.expect)(foxtrot.findAncestor(node => firstStatement)).to.equal(firstStatement);
|
|
147
|
+
});
|
|
148
|
+
it('returns overridden node when returned in matcher', () => {
|
|
149
|
+
const file = program.setFile('source/main.brs', `
|
|
150
|
+
sub main()
|
|
151
|
+
alpha = invalid
|
|
152
|
+
print alpha.beta.charlie.delta(alpha.echo.foxtrot())
|
|
153
|
+
end sub
|
|
154
|
+
`);
|
|
155
|
+
let count = 0;
|
|
156
|
+
const firstStatement = file.ast.statements[0].func.body.statements[0];
|
|
157
|
+
firstStatement.findAncestor((node, cancel) => {
|
|
158
|
+
count++;
|
|
159
|
+
cancel.cancel();
|
|
160
|
+
});
|
|
161
|
+
(0, chai_config_spec_1.expect)(count).to.eql(1);
|
|
162
|
+
});
|
|
163
|
+
});
|
|
164
|
+
});
|
|
165
|
+
//# sourceMappingURL=AstNode.spec.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"AstNode.spec.js","sourceRoot":"","sources":["../../src/parser/AstNode.spec.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,8 +1,6 @@
|
|
|
1
1
|
import type { Range } from 'vscode-languageserver';
|
|
2
|
-
import {
|
|
2
|
+
import { Editor } from '../astUtils/Editor';
|
|
3
3
|
import type { BrsFile } from '../files/BrsFile';
|
|
4
|
-
import type { Scope } from '../Scope';
|
|
5
|
-
import type { TypeContext } from '../types/BscType';
|
|
6
4
|
import type { ClassStatement } from './Statement';
|
|
7
5
|
import { TranspileState } from './TranspileState';
|
|
8
6
|
export declare class BrsTranspileState extends TranspileState {
|
|
@@ -24,9 +22,8 @@ export declare class BrsTranspileState extends TranspileState {
|
|
|
24
22
|
*/
|
|
25
23
|
classStatement?: ClassStatement;
|
|
26
24
|
/**
|
|
27
|
-
*
|
|
25
|
+
* An AST editor that can be used by the AST nodes to do various transformations to the AST which will be reverted at the end of the transpile cycle
|
|
26
|
+
* TODO remove this before file_api is merged
|
|
28
27
|
*/
|
|
29
|
-
|
|
30
|
-
get typeContext(): TypeContext;
|
|
31
|
-
editor: AstEditor;
|
|
28
|
+
editor: Editor;
|
|
32
29
|
}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.BrsTranspileState = void 0;
|
|
4
|
-
const
|
|
4
|
+
const Editor_1 = require("../astUtils/Editor");
|
|
5
5
|
const TranspileState_1 = require("./TranspileState");
|
|
6
6
|
class BrsTranspileState extends TranspileState_1.TranspileState {
|
|
7
7
|
constructor(file) {
|
|
@@ -12,21 +12,13 @@ class BrsTranspileState extends TranspileState_1.TranspileState {
|
|
|
12
12
|
* Used to assist blocks in knowing when to add a comment statement to the same line as the first line of the parent
|
|
13
13
|
*/
|
|
14
14
|
this.lineage = [];
|
|
15
|
-
|
|
15
|
+
/**
|
|
16
16
|
* An AST editor that can be used by the AST nodes to do various transformations to the AST which will be reverted at the end of the transpile cycle
|
|
17
|
+
* TODO remove this before file_api is merged
|
|
17
18
|
*/
|
|
18
|
-
this.editor = new
|
|
19
|
+
this.editor = new Editor_1.Editor();
|
|
19
20
|
this.bslibPrefix = this.file.program.bslibPrefix;
|
|
20
21
|
}
|
|
21
|
-
/**
|
|
22
|
-
* Transpilation of LazyTypes needs access to the scope - just pick the first
|
|
23
|
-
*/
|
|
24
|
-
get scope() {
|
|
25
|
-
return this.file.program.getScopesForFile(this.file)[0];
|
|
26
|
-
}
|
|
27
|
-
get typeContext() {
|
|
28
|
-
return { file: this.file, scope: this.scope };
|
|
29
|
-
}
|
|
30
22
|
}
|
|
31
23
|
exports.BrsTranspileState = BrsTranspileState;
|
|
32
24
|
//# sourceMappingURL=BrsTranspileState.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"BrsTranspileState.js","sourceRoot":"","sources":["../../src/parser/BrsTranspileState.ts"],"names":[],"mappings":";;;AACA
|
|
1
|
+
{"version":3,"file":"BrsTranspileState.js","sourceRoot":"","sources":["../../src/parser/BrsTranspileState.ts"],"names":[],"mappings":";;;AACA,+CAA4C;AAG5C,qDAAkD;AAElD,MAAa,iBAAkB,SAAQ,+BAAc;IACjD,YACW,IAAa;QAEpB,KAAK,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;QAFnC,SAAI,GAAJ,IAAI,CAAS;QAWxB;;;WAGG;QACH,YAAO,GAAG,EAER,CAAC;QAOH;;;WAGG;QACI,WAAM,GAAG,IAAI,eAAM,EAAE,CAAC;QAzBzB,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC;IACrD,CAAC;CAyBJ;AA/BD,8CA+BC"}
|