brighterscript 1.0.0-alpha.5 → 1.0.0-alpha.51
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/README.md +79 -138
- package/bsconfig.schema.json +196 -5
- 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 +45 -0
- package/dist/AstValidationSegmenter.js +322 -0
- package/dist/AstValidationSegmenter.js.map +1 -0
- package/dist/BsConfig.d.ts +161 -43
- package/dist/BusyStatusTracker.d.ts +61 -0
- package/dist/BusyStatusTracker.js +148 -0
- package/dist/BusyStatusTracker.js.map +1 -0
- package/dist/Cache.d.ts +3 -8
- package/dist/Cache.js +9 -14
- 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 +29 -4
- package/dist/CodeActionUtil.js +22 -5
- package/dist/CodeActionUtil.js.map +1 -1
- package/dist/CommentFlagProcessor.d.ts +20 -15
- package/dist/CommentFlagProcessor.js +143 -58
- package/dist/CommentFlagProcessor.js.map +1 -1
- package/dist/CrossScopeValidator.d.ts +68 -0
- package/dist/CrossScopeValidator.js +650 -0
- package/dist/CrossScopeValidator.js.map +1 -0
- package/dist/DependencyGraph.d.ts +8 -3
- package/dist/DependencyGraph.js +49 -16
- package/dist/DependencyGraph.js.map +1 -1
- package/dist/DiagnosticCollection.d.ts +21 -5
- package/dist/DiagnosticCollection.js +77 -24
- package/dist/DiagnosticCollection.js.map +1 -1
- package/dist/DiagnosticFilterer.d.ts +27 -6
- package/dist/DiagnosticFilterer.js +273 -60
- package/dist/DiagnosticFilterer.js.map +1 -1
- package/dist/DiagnosticManager.d.ts +83 -0
- package/dist/DiagnosticManager.js +422 -0
- package/dist/DiagnosticManager.js.map +1 -0
- package/dist/DiagnosticMessages.d.ts +602 -196
- package/dist/DiagnosticMessages.js +926 -342
- package/dist/DiagnosticMessages.js.map +1 -1
- package/dist/DiagnosticSeverityAdjuster.d.ts +7 -0
- package/dist/DiagnosticSeverityAdjuster.js +45 -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 +136 -104
- package/dist/LanguageServer.js +577 -741
- package/dist/LanguageServer.js.map +1 -1
- package/dist/Logger.d.ts +17 -13
- package/dist/Logger.js +64 -34
- package/dist/Logger.js.map +1 -1
- package/dist/PluginInterface.d.ts +32 -10
- package/dist/PluginInterface.js +117 -7
- package/dist/PluginInterface.js.map +1 -1
- package/dist/Program.d.ts +302 -98
- package/dist/Program.js +1613 -726
- package/dist/Program.js.map +1 -1
- package/dist/ProgramBuilder.d.ts +39 -22
- package/dist/ProgramBuilder.js +245 -179
- package/dist/ProgramBuilder.js.map +1 -1
- package/dist/Scope.d.ts +227 -106
- package/dist/Scope.js +609 -557
- package/dist/Scope.js.map +1 -1
- package/dist/ScopeNamespaceLookup.d.ts +73 -0
- package/dist/ScopeNamespaceLookup.js +242 -0
- package/dist/ScopeNamespaceLookup.js.map +1 -0
- package/dist/SemanticTokenUtils.js +5 -1
- package/dist/SemanticTokenUtils.js.map +1 -1
- package/dist/Stopwatch.d.ts +4 -0
- package/dist/Stopwatch.js +8 -1
- package/dist/Stopwatch.js.map +1 -1
- package/dist/SymbolTable.d.ts +145 -26
- package/dist/SymbolTable.js +575 -64
- package/dist/SymbolTable.js.map +1 -1
- package/dist/SymbolTypeFlag.d.ts +9 -0
- package/dist/SymbolTypeFlag.js +14 -0
- package/dist/SymbolTypeFlag.js.map +1 -0
- 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 +5 -15
- package/dist/XmlScope.js +34 -90
- package/dist/XmlScope.js.map +1 -1
- package/dist/astUtils/CachedLookups.d.ts +50 -0
- package/dist/astUtils/CachedLookups.js +337 -0
- package/dist/astUtils/CachedLookups.js.map +1 -0
- package/dist/astUtils/Editor.d.ts +69 -0
- package/dist/astUtils/Editor.js +245 -0
- package/dist/astUtils/Editor.js.map +1 -0
- package/dist/astUtils/creators.d.ts +54 -19
- package/dist/astUtils/creators.js +242 -42
- package/dist/astUtils/creators.js.map +1 -1
- package/dist/astUtils/reflection.d.ts +199 -85
- package/dist/astUtils/reflection.js +518 -145
- package/dist/astUtils/reflection.js.map +1 -1
- package/dist/astUtils/stackedVisitor.js.map +1 -1
- package/dist/astUtils/visitors.d.ts +117 -53
- package/dist/astUtils/visitors.js +95 -15
- package/dist/astUtils/visitors.js.map +1 -1
- package/dist/astUtils/xml.d.ts +9 -8
- package/dist/astUtils/xml.js +12 -7
- package/dist/astUtils/xml.js.map +1 -1
- package/dist/bscPlugin/BscPlugin.d.ts +26 -4
- package/dist/bscPlugin/BscPlugin.js +96 -4
- package/dist/bscPlugin/BscPlugin.js.map +1 -1
- package/dist/bscPlugin/CallExpressionInfo.d.ts +36 -0
- package/dist/bscPlugin/CallExpressionInfo.js +142 -0
- package/dist/bscPlugin/CallExpressionInfo.js.map +1 -0
- package/dist/bscPlugin/FileWriter.d.ts +19 -0
- package/dist/bscPlugin/FileWriter.js +79 -0
- package/dist/bscPlugin/FileWriter.js.map +1 -0
- package/dist/bscPlugin/SignatureHelpUtil.d.ts +10 -0
- package/dist/bscPlugin/SignatureHelpUtil.js +137 -0
- package/dist/bscPlugin/SignatureHelpUtil.js.map +1 -0
- package/dist/bscPlugin/codeActions/CodeActionsProcessor.d.ts +109 -7
- package/dist/bscPlugin/codeActions/CodeActionsProcessor.js +676 -26
- package/dist/bscPlugin/codeActions/CodeActionsProcessor.js.map +1 -1
- package/dist/bscPlugin/codeActions/FixAllCodeActionsProcessor.d.ts +17 -0
- package/dist/bscPlugin/codeActions/FixAllCodeActionsProcessor.js +66 -0
- package/dist/bscPlugin/codeActions/FixAllCodeActionsProcessor.js.map +1 -0
- package/dist/bscPlugin/codeActions/codeActionHelpers.d.ts +18 -0
- package/dist/bscPlugin/codeActions/codeActionHelpers.js +31 -0
- package/dist/bscPlugin/codeActions/codeActionHelpers.js.map +1 -0
- package/dist/bscPlugin/completions/CompletionsProcessor.d.ts +65 -0
- package/dist/bscPlugin/completions/CompletionsProcessor.js +633 -0
- package/dist/bscPlugin/completions/CompletionsProcessor.js.map +1 -0
- package/dist/bscPlugin/definition/DefinitionProvider.d.ts +13 -0
- package/dist/bscPlugin/definition/DefinitionProvider.js +220 -0
- package/dist/bscPlugin/definition/DefinitionProvider.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 +18 -0
- package/dist/bscPlugin/hover/HoverProcessor.js +238 -0
- package/dist/bscPlugin/hover/HoverProcessor.js.map +1 -0
- package/dist/bscPlugin/references/ReferencesProvider.d.ts +12 -0
- package/dist/bscPlugin/references/ReferencesProvider.js +57 -0
- package/dist/bscPlugin/references/ReferencesProvider.js.map +1 -0
- package/dist/bscPlugin/selectionRanges/SelectionRangesProcessor.d.ts +7 -0
- package/dist/bscPlugin/selectionRanges/SelectionRangesProcessor.js +77 -0
- package/dist/bscPlugin/selectionRanges/SelectionRangesProcessor.js.map +1 -0
- package/dist/bscPlugin/semanticTokens/BrsFileSemanticTokensProcessor.d.ts +14 -0
- package/dist/bscPlugin/semanticTokens/BrsFileSemanticTokensProcessor.js +164 -0
- package/dist/bscPlugin/semanticTokens/BrsFileSemanticTokensProcessor.js.map +1 -0
- package/dist/bscPlugin/serialize/BslibManager.d.ts +12 -0
- package/dist/bscPlugin/serialize/BslibManager.js +46 -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 +80 -0
- package/dist/bscPlugin/serialize/FileSerializer.js.map +1 -0
- package/dist/bscPlugin/symbols/DocumentSymbolProcessor.d.ts +7 -0
- package/dist/bscPlugin/symbols/DocumentSymbolProcessor.js +22 -0
- package/dist/bscPlugin/symbols/DocumentSymbolProcessor.js.map +1 -0
- package/dist/bscPlugin/symbols/WorkspaceSymbolProcessor.d.ts +7 -0
- package/dist/bscPlugin/symbols/WorkspaceSymbolProcessor.js +26 -0
- package/dist/bscPlugin/symbols/WorkspaceSymbolProcessor.js.map +1 -0
- package/dist/bscPlugin/symbols/symbolUtils.d.ts +5 -0
- package/dist/bscPlugin/symbols/symbolUtils.js +141 -0
- package/dist/bscPlugin/symbols/symbolUtils.js.map +1 -0
- package/dist/bscPlugin/transpile/BrsFileTranspileProcessor.d.ts +34 -0
- package/dist/bscPlugin/transpile/BrsFileTranspileProcessor.js +504 -0
- package/dist/bscPlugin/transpile/BrsFileTranspileProcessor.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/BrsFileAfterValidator.d.ts +7 -0
- package/dist/bscPlugin/validation/BrsFileAfterValidator.js +18 -0
- package/dist/bscPlugin/validation/BrsFileAfterValidator.js.map +1 -0
- package/dist/bscPlugin/validation/BrsFileValidator.d.ts +51 -0
- package/dist/bscPlugin/validation/BrsFileValidator.js +714 -0
- package/dist/bscPlugin/validation/BrsFileValidator.js.map +1 -0
- package/dist/bscPlugin/validation/ProgramValidator.d.ts +11 -0
- package/dist/bscPlugin/validation/ProgramValidator.js +33 -0
- package/dist/bscPlugin/validation/ProgramValidator.js.map +1 -0
- package/dist/bscPlugin/validation/ScopeValidator.d.ts +158 -0
- package/dist/bscPlugin/validation/ScopeValidator.js +1481 -0
- package/dist/bscPlugin/validation/ScopeValidator.js.map +1 -0
- package/dist/bscPlugin/validation/XmlFileValidator.d.ts +8 -0
- package/dist/bscPlugin/validation/XmlFileValidator.js +50 -0
- package/dist/bscPlugin/validation/XmlFileValidator.js.map +1 -0
- package/dist/cli.js +140 -28
- package/dist/cli.js.map +1 -1
- package/dist/common/Sequencer.d.ts +53 -0
- package/dist/common/Sequencer.js +233 -0
- package/dist/common/Sequencer.js.map +1 -0
- package/dist/deferred.d.ts +5 -3
- package/dist/deferred.js +10 -0
- package/dist/deferred.js.map +1 -1
- package/dist/diagnosticUtils.d.ts +61 -4
- package/dist/diagnosticUtils.js +285 -25
- package/dist/diagnosticUtils.js.map +1 -1
- package/dist/examples/plugins/removePrint.d.ts +2 -2
- package/dist/examples/plugins/removePrint.js +8 -12
- package/dist/examples/plugins/removePrint.js.map +1 -1
- package/dist/files/AssetFile.d.ts +24 -0
- package/dist/files/AssetFile.js +25 -0
- package/dist/files/AssetFile.js.map +1 -0
- package/dist/files/BrsFile.d.ts +161 -87
- package/dist/files/BrsFile.js +919 -936
- package/dist/files/BrsFile.js.map +1 -1
- package/dist/files/BscFile.d.ts +102 -0
- package/dist/files/BscFile.js +15 -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 +21 -0
- package/dist/files/LazyFileData.js +54 -0
- package/dist/files/LazyFileData.js.map +1 -0
- package/dist/files/XmlFile.d.ts +80 -41
- package/dist/files/XmlFile.js +162 -137
- package/dist/files/XmlFile.js.map +1 -1
- package/dist/globalCallables.d.ts +3 -1
- package/dist/globalCallables.js +424 -184
- package/dist/globalCallables.js.map +1 -1
- package/dist/index.d.ts +32 -4
- package/dist/index.js +54 -7
- package/dist/index.js.map +1 -1
- package/dist/interfaces.d.ts +987 -125
- package/dist/interfaces.js +21 -0
- package/dist/interfaces.js.map +1 -1
- package/dist/lexer/Lexer.d.ts +51 -12
- package/dist/lexer/Lexer.js +214 -65
- package/dist/lexer/Lexer.js.map +1 -1
- package/dist/lexer/Token.d.ts +27 -11
- package/dist/lexer/Token.js +10 -2
- package/dist/lexer/Token.js.map +1 -1
- package/dist/lexer/TokenKind.d.ts +48 -2
- package/dist/lexer/TokenKind.js +167 -10
- package/dist/lexer/TokenKind.js.map +1 -1
- package/dist/logging.d.ts +14 -0
- package/dist/logging.js +29 -0
- package/dist/logging.js.map +1 -0
- package/dist/lsp/ActionQueue.d.ts +35 -0
- package/dist/lsp/ActionQueue.js +115 -0
- package/dist/lsp/ActionQueue.js.map +1 -0
- package/dist/lsp/DocumentManager.d.ts +63 -0
- package/dist/lsp/DocumentManager.js +122 -0
- package/dist/lsp/DocumentManager.js.map +1 -0
- package/dist/lsp/LspProject.d.ts +287 -0
- package/dist/lsp/LspProject.js +3 -0
- package/dist/lsp/LspProject.js.map +1 -0
- package/dist/lsp/PathFilterer.d.ts +75 -0
- package/dist/lsp/PathFilterer.js +196 -0
- package/dist/lsp/PathFilterer.js.map +1 -0
- package/dist/lsp/Project.d.ts +200 -0
- package/dist/lsp/Project.js +562 -0
- package/dist/lsp/Project.js.map +1 -0
- package/dist/lsp/ProjectManager.d.ts +288 -0
- package/dist/lsp/ProjectManager.js +967 -0
- package/dist/lsp/ProjectManager.js.map +1 -0
- package/dist/lsp/ReaderWriterManager.d.ts +21 -0
- package/dist/lsp/ReaderWriterManager.js +60 -0
- package/dist/lsp/ReaderWriterManager.js.map +1 -0
- package/dist/lsp/worker/MessageHandler.d.ts +99 -0
- package/dist/lsp/worker/MessageHandler.js +138 -0
- package/dist/lsp/worker/MessageHandler.js.map +1 -0
- package/dist/lsp/worker/WorkerPool.d.ts +38 -0
- package/dist/lsp/worker/WorkerPool.js +78 -0
- package/dist/lsp/worker/WorkerPool.js.map +1 -0
- package/dist/lsp/worker/WorkerThreadProject.d.ts +168 -0
- package/dist/lsp/worker/WorkerThreadProject.js +205 -0
- package/dist/lsp/worker/WorkerThreadProject.js.map +1 -0
- package/dist/lsp/worker/WorkerThreadProjectRunner.d.ts +15 -0
- package/dist/lsp/worker/WorkerThreadProjectRunner.js +58 -0
- package/dist/lsp/worker/WorkerThreadProjectRunner.js.map +1 -0
- package/dist/lsp/worker/run.js +14 -0
- package/dist/lsp/worker/run.js.map +1 -0
- package/dist/parser/AstNode.d.ts +205 -0
- package/dist/parser/AstNode.js +305 -0
- package/dist/parser/AstNode.js.map +1 -0
- package/dist/parser/BrightScriptDocParser.d.ts +56 -0
- package/dist/parser/BrightScriptDocParser.js +294 -0
- package/dist/parser/BrightScriptDocParser.js.map +1 -0
- package/dist/parser/BrsTranspileState.d.ts +22 -3
- package/dist/parser/BrsTranspileState.js +19 -0
- package/dist/parser/BrsTranspileState.js.map +1 -1
- package/dist/parser/Expression.d.ts +601 -220
- package/dist/parser/Expression.js +1516 -502
- package/dist/parser/Expression.js.map +1 -1
- package/dist/parser/Parser.d.ts +137 -121
- package/dist/parser/Parser.js +1808 -982
- package/dist/parser/Parser.js.map +1 -1
- package/dist/parser/SGParser.d.ts +30 -13
- package/dist/parser/SGParser.js +94 -56
- package/dist/parser/SGParser.js.map +1 -1
- package/dist/parser/SGTypes.d.ts +134 -46
- package/dist/parser/SGTypes.js +206 -115
- package/dist/parser/SGTypes.js.map +1 -1
- package/dist/parser/Statement.d.ts +854 -267
- package/dist/parser/Statement.js +2416 -621
- package/dist/parser/Statement.js.map +1 -1
- package/dist/parser/TranspileState.d.ts +30 -14
- package/dist/parser/TranspileState.js +124 -27
- package/dist/parser/TranspileState.js.map +1 -1
- package/dist/preprocessor/Manifest.d.ts +6 -6
- package/dist/preprocessor/Manifest.js +17 -38
- package/dist/preprocessor/Manifest.js.map +1 -1
- package/dist/roku-types/data.json +20554 -0
- package/dist/roku-types/index.d.ts +5726 -0
- package/dist/roku-types/index.js +11 -0
- package/dist/roku-types/index.js.map +1 -0
- package/dist/types/ArrayType.d.ts +12 -5
- package/dist/types/ArrayType.js +95 -25
- package/dist/types/ArrayType.js.map +1 -1
- package/dist/types/AssociativeArrayType.d.ts +15 -0
- package/dist/types/AssociativeArrayType.js +64 -0
- package/dist/types/AssociativeArrayType.js.map +1 -0
- package/dist/types/BaseFunctionType.d.ts +10 -0
- package/dist/types/BaseFunctionType.js +26 -0
- package/dist/types/BaseFunctionType.js.map +1 -0
- package/dist/types/BooleanType.d.ts +9 -5
- package/dist/types/BooleanType.js +19 -8
- package/dist/types/BooleanType.js.map +1 -1
- package/dist/types/BscType.d.ts +41 -3
- package/dist/types/BscType.js +152 -0
- package/dist/types/BscType.js.map +1 -1
- package/dist/types/BscTypeKind.d.ts +28 -0
- package/dist/types/BscTypeKind.js +33 -0
- package/dist/types/BscTypeKind.js.map +1 -0
- package/dist/types/BuiltInInterfaceAdder.d.ts +28 -0
- package/dist/types/BuiltInInterfaceAdder.js +212 -0
- package/dist/types/BuiltInInterfaceAdder.js.map +1 -0
- package/dist/types/CallFuncableType.d.ts +24 -0
- package/dist/types/CallFuncableType.js +91 -0
- package/dist/types/CallFuncableType.js.map +1 -0
- package/dist/types/ClassType.d.ts +17 -0
- package/dist/types/ClassType.js +63 -0
- package/dist/types/ClassType.js.map +1 -0
- package/dist/types/ComponentType.d.ts +22 -0
- package/dist/types/ComponentType.js +110 -0
- package/dist/types/ComponentType.js.map +1 -0
- package/dist/types/DoubleType.d.ts +10 -5
- package/dist/types/DoubleType.js +21 -17
- package/dist/types/DoubleType.js.map +1 -1
- package/dist/types/DynamicType.d.ts +13 -5
- package/dist/types/DynamicType.js +26 -5
- package/dist/types/DynamicType.js.map +1 -1
- package/dist/types/EnumType.d.ts +42 -0
- package/dist/types/EnumType.js +101 -0
- package/dist/types/EnumType.js.map +1 -0
- package/dist/types/FloatType.d.ts +10 -5
- package/dist/types/FloatType.js +21 -17
- package/dist/types/FloatType.js.map +1 -1
- package/dist/types/FunctionType.d.ts +8 -22
- package/dist/types/FunctionType.js +25 -63
- package/dist/types/FunctionType.js.map +1 -1
- package/dist/types/InheritableType.d.ts +29 -0
- package/dist/types/InheritableType.js +173 -0
- package/dist/types/InheritableType.js.map +1 -0
- package/dist/types/InlineInterfaceType.d.ts +5 -0
- package/dist/types/InlineInterfaceType.js +17 -0
- package/dist/types/InlineInterfaceType.js.map +1 -0
- package/dist/types/IntegerType.d.ts +10 -5
- package/dist/types/IntegerType.js +21 -17
- package/dist/types/IntegerType.js.map +1 -1
- package/dist/types/InterfaceType.d.ts +14 -6
- package/dist/types/InterfaceType.js +30 -15
- package/dist/types/InterfaceType.js.map +1 -1
- package/dist/types/IntersectionType.d.ts +29 -0
- package/dist/types/IntersectionType.js +256 -0
- package/dist/types/IntersectionType.js.map +1 -0
- package/dist/types/InvalidType.d.ts +10 -5
- package/dist/types/InvalidType.js +21 -9
- package/dist/types/InvalidType.js.map +1 -1
- package/dist/types/LongIntegerType.d.ts +10 -5
- package/dist/types/LongIntegerType.js +21 -17
- package/dist/types/LongIntegerType.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 +12 -5
- package/dist/types/ObjectType.js +25 -8
- package/dist/types/ObjectType.js.map +1 -1
- package/dist/types/ReferenceType.d.ts +123 -0
- package/dist/types/ReferenceType.js +726 -0
- package/dist/types/ReferenceType.js.map +1 -0
- package/dist/types/StringType.d.ts +12 -5
- package/dist/types/StringType.js +23 -8
- package/dist/types/StringType.js.map +1 -1
- package/dist/types/TypeStatementType.d.ts +19 -0
- package/dist/types/TypeStatementType.js +56 -0
- package/dist/types/TypeStatementType.js.map +1 -0
- package/dist/types/TypedFunctionType.d.ts +34 -0
- package/dist/types/TypedFunctionType.js +157 -0
- package/dist/types/TypedFunctionType.js.map +1 -0
- package/dist/types/UninitializedType.d.ts +11 -6
- package/dist/types/UninitializedType.js +20 -11
- package/dist/types/UninitializedType.js.map +1 -1
- package/dist/types/UnionType.d.ts +27 -0
- package/dist/types/UnionType.js +196 -0
- package/dist/types/UnionType.js.map +1 -0
- package/dist/types/VoidType.d.ts +11 -5
- package/dist/types/VoidType.js +22 -8
- package/dist/types/VoidType.js.map +1 -1
- package/dist/types/helpers.d.ts +51 -0
- package/dist/types/helpers.js +329 -0
- package/dist/types/helpers.js.map +1 -0
- 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/types/roFunctionType.d.ts +11 -0
- package/dist/types/roFunctionType.js +37 -0
- package/dist/types/roFunctionType.js.map +1 -0
- package/dist/util.d.ts +325 -185
- package/dist/util.js +2135 -568
- package/dist/util.js.map +1 -1
- package/dist/validators/ClassValidator.d.ts +9 -15
- package/dist/validators/ClassValidator.js +93 -138
- package/dist/validators/ClassValidator.js.map +1 -1
- package/package.json +183 -138
- package/CHANGELOG.md +0 -1188
- package/dist/astUtils/creators.spec.js +0 -21
- package/dist/astUtils/creators.spec.js.map +0 -1
- package/dist/astUtils/index.d.ts +0 -7
- package/dist/astUtils/index.js +0 -26
- package/dist/astUtils/index.js.map +0 -1
- package/dist/astUtils/reflection.spec.d.ts +0 -1
- package/dist/astUtils/reflection.spec.js +0 -292
- package/dist/astUtils/reflection.spec.js.map +0 -1
- package/dist/astUtils/stackedVisitor.spec.d.ts +0 -1
- package/dist/astUtils/stackedVisitor.spec.js +0 -79
- package/dist/astUtils/stackedVisitor.spec.js.map +0 -1
- package/dist/astUtils/visitors.spec.d.ts +0 -1
- package/dist/astUtils/visitors.spec.js +0 -854
- package/dist/astUtils/visitors.spec.js.map +0 -1
- package/dist/bscPlugin/codeActions/CodeActionsProcessor.spec.d.ts +0 -1
- package/dist/bscPlugin/codeActions/CodeActionsProcessor.spec.js +0 -194
- package/dist/bscPlugin/codeActions/CodeActionsProcessor.spec.js.map +0 -1
- package/dist/bscPlugin/semanticTokens/SemanticTokensProcessor.d.ts +0 -7
- package/dist/bscPlugin/semanticTokens/SemanticTokensProcessor.js +0 -63
- package/dist/bscPlugin/semanticTokens/SemanticTokensProcessor.js.map +0 -1
- package/dist/bscPlugin/semanticTokens/SemanticTokensProcessor.spec.d.ts +0 -1
- package/dist/bscPlugin/semanticTokens/SemanticTokensProcessor.spec.js +0 -45
- package/dist/bscPlugin/semanticTokens/SemanticTokensProcessor.spec.js.map +0 -1
- package/dist/files/BrsFile.Class.spec.d.ts +0 -1
- package/dist/files/BrsFile.Class.spec.js +0 -1081
- package/dist/files/BrsFile.Class.spec.js.map +0 -1
- package/dist/files/BrsFile.spec.d.ts +0 -1
- package/dist/files/BrsFile.spec.js +0 -2524
- package/dist/files/BrsFile.spec.js.map +0 -1
- package/dist/files/XmlFile.spec.d.ts +0 -1
- package/dist/files/XmlFile.spec.js +0 -1065
- package/dist/files/XmlFile.spec.js.map +0 -1
- package/dist/files/tests/imports.spec.d.ts +0 -1
- package/dist/files/tests/imports.spec.js +0 -241
- package/dist/files/tests/imports.spec.js.map +0 -1
- package/dist/lexer/Character.spec.d.ts +0 -1
- package/dist/lexer/Character.spec.js +0 -27
- package/dist/lexer/Character.spec.js.map +0 -1
- package/dist/lexer/Lexer.spec.d.ts +0 -1
- package/dist/lexer/Lexer.spec.js +0 -1101
- package/dist/lexer/Lexer.spec.js.map +0 -1
- package/dist/lexer/index.d.ts +0 -3
- package/dist/lexer/index.js +0 -17
- package/dist/lexer/index.js.map +0 -1
- package/dist/parser/Parser.Class.spec.d.ts +0 -1
- package/dist/parser/Parser.Class.spec.js +0 -390
- package/dist/parser/Parser.Class.spec.js.map +0 -1
- package/dist/parser/Parser.spec.d.ts +0 -4
- package/dist/parser/Parser.spec.js +0 -1216
- package/dist/parser/Parser.spec.js.map +0 -1
- package/dist/parser/SGParser.spec.d.ts +0 -1
- package/dist/parser/SGParser.spec.js +0 -145
- package/dist/parser/SGParser.spec.js.map +0 -1
- package/dist/parser/SGTypes.spec.d.ts +0 -1
- package/dist/parser/SGTypes.spec.js +0 -351
- package/dist/parser/SGTypes.spec.js.map +0 -1
- package/dist/parser/Statement.spec.d.ts +0 -1
- package/dist/parser/Statement.spec.js +0 -94
- package/dist/parser/Statement.spec.js.map +0 -1
- package/dist/parser/index.d.ts +0 -3
- package/dist/parser/index.js +0 -16
- package/dist/parser/index.js.map +0 -1
- package/dist/parser/tests/Parser.spec.d.ts +0 -18
- package/dist/parser/tests/Parser.spec.js +0 -35
- package/dist/parser/tests/Parser.spec.js.map +0 -1
- package/dist/parser/tests/controlFlow/For.spec.d.ts +0 -1
- package/dist/parser/tests/controlFlow/For.spec.js +0 -161
- package/dist/parser/tests/controlFlow/For.spec.js.map +0 -1
- package/dist/parser/tests/controlFlow/ForEach.spec.d.ts +0 -1
- package/dist/parser/tests/controlFlow/ForEach.spec.js +0 -106
- package/dist/parser/tests/controlFlow/ForEach.spec.js.map +0 -1
- package/dist/parser/tests/controlFlow/If.spec.d.ts +0 -1
- package/dist/parser/tests/controlFlow/If.spec.js +0 -551
- package/dist/parser/tests/controlFlow/If.spec.js.map +0 -1
- package/dist/parser/tests/controlFlow/While.spec.d.ts +0 -1
- package/dist/parser/tests/controlFlow/While.spec.js +0 -107
- package/dist/parser/tests/controlFlow/While.spec.js.map +0 -1
- package/dist/parser/tests/expression/Additive.spec.d.ts +0 -1
- package/dist/parser/tests/expression/Additive.spec.js +0 -99
- package/dist/parser/tests/expression/Additive.spec.js.map +0 -1
- package/dist/parser/tests/expression/ArrayLiterals.spec.d.ts +0 -1
- package/dist/parser/tests/expression/ArrayLiterals.spec.js +0 -254
- package/dist/parser/tests/expression/ArrayLiterals.spec.js.map +0 -1
- package/dist/parser/tests/expression/AssociativeArrayLiterals.spec.d.ts +0 -1
- package/dist/parser/tests/expression/AssociativeArrayLiterals.spec.js +0 -266
- package/dist/parser/tests/expression/AssociativeArrayLiterals.spec.js.map +0 -1
- package/dist/parser/tests/expression/Boolean.spec.d.ts +0 -1
- package/dist/parser/tests/expression/Boolean.spec.js +0 -83
- package/dist/parser/tests/expression/Boolean.spec.js.map +0 -1
- package/dist/parser/tests/expression/Call.spec.d.ts +0 -1
- package/dist/parser/tests/expression/Call.spec.js +0 -134
- package/dist/parser/tests/expression/Call.spec.js.map +0 -1
- package/dist/parser/tests/expression/Exponential.spec.d.ts +0 -1
- package/dist/parser/tests/expression/Exponential.spec.js +0 -37
- package/dist/parser/tests/expression/Exponential.spec.js.map +0 -1
- package/dist/parser/tests/expression/Function.spec.d.ts +0 -1
- package/dist/parser/tests/expression/Function.spec.js +0 -403
- package/dist/parser/tests/expression/Function.spec.js.map +0 -1
- package/dist/parser/tests/expression/Indexing.spec.d.ts +0 -1
- package/dist/parser/tests/expression/Indexing.spec.js +0 -219
- package/dist/parser/tests/expression/Indexing.spec.js.map +0 -1
- package/dist/parser/tests/expression/Multiplicative.spec.d.ts +0 -1
- package/dist/parser/tests/expression/Multiplicative.spec.js +0 -67
- package/dist/parser/tests/expression/Multiplicative.spec.js.map +0 -1
- package/dist/parser/tests/expression/NullCoalescenceExpression.spec.d.ts +0 -1
- package/dist/parser/tests/expression/NullCoalescenceExpression.spec.js +0 -201
- package/dist/parser/tests/expression/NullCoalescenceExpression.spec.js.map +0 -1
- package/dist/parser/tests/expression/PrefixUnary.spec.d.ts +0 -1
- package/dist/parser/tests/expression/PrefixUnary.spec.js +0 -105
- package/dist/parser/tests/expression/PrefixUnary.spec.js.map +0 -1
- package/dist/parser/tests/expression/Primary.spec.d.ts +0 -1
- package/dist/parser/tests/expression/Primary.spec.js +0 -149
- package/dist/parser/tests/expression/Primary.spec.js.map +0 -1
- package/dist/parser/tests/expression/Relational.spec.d.ts +0 -1
- package/dist/parser/tests/expression/Relational.spec.js +0 -83
- package/dist/parser/tests/expression/Relational.spec.js.map +0 -1
- package/dist/parser/tests/expression/SourceLiteralExpression.spec.d.ts +0 -1
- package/dist/parser/tests/expression/SourceLiteralExpression.spec.js +0 -201
- package/dist/parser/tests/expression/SourceLiteralExpression.spec.js.map +0 -1
- package/dist/parser/tests/expression/TemplateStringExpression.spec.d.ts +0 -1
- package/dist/parser/tests/expression/TemplateStringExpression.spec.js +0 -202
- package/dist/parser/tests/expression/TemplateStringExpression.spec.js.map +0 -1
- package/dist/parser/tests/expression/TernaryExpression.spec.d.ts +0 -1
- package/dist/parser/tests/expression/TernaryExpression.spec.js +0 -323
- package/dist/parser/tests/expression/TernaryExpression.spec.js.map +0 -1
- package/dist/parser/tests/statement/AssignmentOperators.spec.d.ts +0 -1
- package/dist/parser/tests/statement/AssignmentOperators.spec.js +0 -79
- package/dist/parser/tests/statement/AssignmentOperators.spec.js.map +0 -1
- package/dist/parser/tests/statement/Declaration.spec.d.ts +0 -1
- package/dist/parser/tests/statement/Declaration.spec.js +0 -108
- package/dist/parser/tests/statement/Declaration.spec.js.map +0 -1
- package/dist/parser/tests/statement/Dim.spec.d.ts +0 -1
- package/dist/parser/tests/statement/Dim.spec.js +0 -73
- package/dist/parser/tests/statement/Dim.spec.js.map +0 -1
- package/dist/parser/tests/statement/Function.spec.d.ts +0 -1
- package/dist/parser/tests/statement/Function.spec.js +0 -332
- package/dist/parser/tests/statement/Function.spec.js.map +0 -1
- package/dist/parser/tests/statement/Goto.spec.d.ts +0 -1
- package/dist/parser/tests/statement/Goto.spec.js +0 -50
- package/dist/parser/tests/statement/Goto.spec.js.map +0 -1
- package/dist/parser/tests/statement/Increment.spec.d.ts +0 -1
- package/dist/parser/tests/statement/Increment.spec.js +0 -117
- package/dist/parser/tests/statement/Increment.spec.js.map +0 -1
- package/dist/parser/tests/statement/LibraryStatement.spec.d.ts +0 -1
- package/dist/parser/tests/statement/LibraryStatement.spec.js +0 -74
- package/dist/parser/tests/statement/LibraryStatement.spec.js.map +0 -1
- package/dist/parser/tests/statement/Misc.spec.d.ts +0 -1
- package/dist/parser/tests/statement/Misc.spec.js +0 -333
- package/dist/parser/tests/statement/Misc.spec.js.map +0 -1
- package/dist/parser/tests/statement/PrintStatement.spec.d.ts +0 -1
- package/dist/parser/tests/statement/PrintStatement.spec.js +0 -181
- package/dist/parser/tests/statement/PrintStatement.spec.js.map +0 -1
- package/dist/parser/tests/statement/ReturnStatement.spec.d.ts +0 -1
- package/dist/parser/tests/statement/ReturnStatement.spec.js +0 -94
- package/dist/parser/tests/statement/ReturnStatement.spec.js.map +0 -1
- package/dist/parser/tests/statement/Set.spec.d.ts +0 -1
- package/dist/parser/tests/statement/Set.spec.js +0 -218
- package/dist/parser/tests/statement/Set.spec.js.map +0 -1
- package/dist/parser/tests/statement/Stop.spec.d.ts +0 -1
- package/dist/parser/tests/statement/Stop.spec.js +0 -37
- package/dist/parser/tests/statement/Stop.spec.js.map +0 -1
- package/dist/parser/tests/statement/Throw.spec.d.ts +0 -1
- package/dist/parser/tests/statement/Throw.spec.js +0 -35
- package/dist/parser/tests/statement/Throw.spec.js.map +0 -1
- package/dist/parser/tests/statement/TryCatch.spec.d.ts +0 -1
- package/dist/parser/tests/statement/TryCatch.spec.js +0 -140
- package/dist/parser/tests/statement/TryCatch.spec.js.map +0 -1
- package/dist/preprocessor/Chunk.d.ts +0 -82
- package/dist/preprocessor/Chunk.js +0 -77
- package/dist/preprocessor/Chunk.js.map +0 -1
- package/dist/preprocessor/Manifest.spec.d.ts +0 -0
- package/dist/preprocessor/Manifest.spec.js +0 -105
- package/dist/preprocessor/Manifest.spec.js.map +0 -1
- package/dist/preprocessor/Preprocessor.d.ts +0 -60
- package/dist/preprocessor/Preprocessor.js +0 -156
- package/dist/preprocessor/Preprocessor.js.map +0 -1
- package/dist/preprocessor/Preprocessor.spec.d.ts +0 -1
- package/dist/preprocessor/Preprocessor.spec.js +0 -152
- package/dist/preprocessor/Preprocessor.spec.js.map +0 -1
- package/dist/preprocessor/PreprocessorParser.d.ts +0 -61
- package/dist/preprocessor/PreprocessorParser.js +0 -194
- package/dist/preprocessor/PreprocessorParser.js.map +0 -1
- package/dist/preprocessor/PreprocessorParser.spec.d.ts +0 -1
- package/dist/preprocessor/PreprocessorParser.spec.js +0 -116
- package/dist/preprocessor/PreprocessorParser.spec.js.map +0 -1
- package/dist/preprocessor/index.d.ts +0 -3
- package/dist/preprocessor/index.js +0 -16
- package/dist/preprocessor/index.js.map +0 -1
- package/dist/types/ArrayType.spec.d.ts +0 -1
- package/dist/types/ArrayType.spec.js +0 -30
- package/dist/types/ArrayType.spec.js.map +0 -1
- package/dist/types/BooleanType.spec.d.ts +0 -1
- package/dist/types/BooleanType.spec.js +0 -12
- package/dist/types/BooleanType.spec.js.map +0 -1
- package/dist/types/CustomType.d.ts +0 -10
- package/dist/types/CustomType.js +0 -35
- package/dist/types/CustomType.js.map +0 -1
- package/dist/types/DoubleType.spec.d.ts +0 -1
- package/dist/types/DoubleType.spec.js +0 -12
- package/dist/types/DoubleType.spec.js.map +0 -1
- package/dist/types/DynamicType.spec.d.ts +0 -1
- package/dist/types/DynamicType.spec.js +0 -12
- package/dist/types/DynamicType.spec.js.map +0 -1
- package/dist/types/FloatType.spec.d.ts +0 -1
- package/dist/types/FloatType.spec.js +0 -12
- package/dist/types/FloatType.spec.js.map +0 -1
- package/dist/types/FunctionType.spec.d.ts +0 -1
- package/dist/types/FunctionType.spec.js +0 -29
- package/dist/types/FunctionType.spec.js.map +0 -1
- package/dist/types/IntegerType.spec.d.ts +0 -1
- package/dist/types/IntegerType.spec.js +0 -12
- package/dist/types/IntegerType.spec.js.map +0 -1
- package/dist/types/InvalidType.spec.d.ts +0 -1
- package/dist/types/InvalidType.spec.js +0 -12
- package/dist/types/InvalidType.spec.js.map +0 -1
- package/dist/types/LazyType.d.ts +0 -15
- package/dist/types/LazyType.js +0 -32
- package/dist/types/LazyType.js.map +0 -1
- package/dist/types/LongIntegerType.spec.d.ts +0 -1
- package/dist/types/LongIntegerType.spec.js +0 -12
- package/dist/types/LongIntegerType.spec.js.map +0 -1
- package/dist/types/ObjectType.spec.d.ts +0 -1
- package/dist/types/ObjectType.spec.js +0 -12
- package/dist/types/ObjectType.spec.js.map +0 -1
- package/dist/types/StringType.spec.d.ts +0 -1
- package/dist/types/StringType.spec.js +0 -12
- package/dist/types/StringType.spec.js.map +0 -1
- package/dist/types/VoidType.spec.d.ts +0 -1
- package/dist/types/VoidType.spec.js +0 -12
- package/dist/types/VoidType.spec.js.map +0 -1
- /package/dist/{astUtils/creators.spec.d.ts → lsp/worker/run.d.ts} +0 -0
|
@@ -1,1081 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
const sinonImport = require("sinon");
|
|
4
|
-
const Program_1 = require("../Program");
|
|
5
|
-
const chai_1 = require("chai");
|
|
6
|
-
const DiagnosticMessages_1 = require("../DiagnosticMessages");
|
|
7
|
-
const vscode_languageserver_1 = require("vscode-languageserver");
|
|
8
|
-
const Parser_1 = require("../parser/Parser");
|
|
9
|
-
const testHelpers_spec_1 = require("../testHelpers.spec");
|
|
10
|
-
const util_1 = require("../util");
|
|
11
|
-
const fsExtra = require("fs-extra");
|
|
12
|
-
const BrsTranspileState_1 = require("../parser/BrsTranspileState");
|
|
13
|
-
const assert_1 = require("assert");
|
|
14
|
-
let sinon = sinonImport.createSandbox();
|
|
15
|
-
describe('BrsFile BrighterScript classes', () => {
|
|
16
|
-
let tmpPath = util_1.standardizePath `${process.cwd()}/.tmp`;
|
|
17
|
-
let rootDir = util_1.standardizePath `${tmpPath}/rootDir`;
|
|
18
|
-
let program;
|
|
19
|
-
let testTranspile = testHelpers_spec_1.getTestTranspile(() => [program, rootDir]);
|
|
20
|
-
beforeEach(() => {
|
|
21
|
-
fsExtra.ensureDirSync(rootDir);
|
|
22
|
-
fsExtra.emptyDirSync(tmpPath);
|
|
23
|
-
program = new Program_1.Program({ rootDir: rootDir });
|
|
24
|
-
});
|
|
25
|
-
afterEach(() => {
|
|
26
|
-
sinon.restore();
|
|
27
|
-
program.dispose();
|
|
28
|
-
fsExtra.ensureDirSync(tmpPath);
|
|
29
|
-
fsExtra.emptyDirSync(tmpPath);
|
|
30
|
-
});
|
|
31
|
-
function addFile(relativePath, text) {
|
|
32
|
-
return program.setFile({ src: `${rootDir}/${relativePath}`, dest: relativePath }, text);
|
|
33
|
-
}
|
|
34
|
-
it('detects all classes after parse', () => {
|
|
35
|
-
let file = program.setFile({ src: `${rootDir}/source/main.brs`, dest: 'source/main.brs' }, `
|
|
36
|
-
class Animal
|
|
37
|
-
end class
|
|
38
|
-
class Duck
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
end class
|
|
42
|
-
`);
|
|
43
|
-
chai_1.expect(file.parser.references.classStatements.map(x => x.getName(Parser_1.ParseMode.BrighterScript)).sort()).to.eql(['Animal', 'Duck']);
|
|
44
|
-
});
|
|
45
|
-
it('does not cause errors with incomplete class statement', () => {
|
|
46
|
-
program.setFile({ src: `${rootDir}/source/main.bs`, dest: 'source/main.bs' }, `
|
|
47
|
-
class
|
|
48
|
-
`);
|
|
49
|
-
program.validate();
|
|
50
|
-
//if no exception was thrown, this test passes
|
|
51
|
-
});
|
|
52
|
-
it('catches child class missing super call in constructor', () => {
|
|
53
|
-
var _a;
|
|
54
|
-
program.setFile({ src: `${rootDir}/source/main.bs`, dest: 'source/main.bs' }, `
|
|
55
|
-
class Person
|
|
56
|
-
sub new()
|
|
57
|
-
end sub
|
|
58
|
-
end class
|
|
59
|
-
class Infant extends Person
|
|
60
|
-
sub new()
|
|
61
|
-
end sub
|
|
62
|
-
end class
|
|
63
|
-
`);
|
|
64
|
-
program.validate();
|
|
65
|
-
chai_1.expect((_a = program.getDiagnostics()[0]) === null || _a === void 0 ? void 0 : _a.message).to.equal(DiagnosticMessages_1.DiagnosticMessages.classConstructorMissingSuperCall().message);
|
|
66
|
-
});
|
|
67
|
-
it('access modifier is option for override', () => {
|
|
68
|
-
var _a;
|
|
69
|
-
let file = program.setFile({ src: `${rootDir}/source/main.bs`, dest: 'source/main.bs' }, `
|
|
70
|
-
class Animal
|
|
71
|
-
sub move()
|
|
72
|
-
end sub
|
|
73
|
-
end class
|
|
74
|
-
|
|
75
|
-
class Duck extends Animal
|
|
76
|
-
override sub move()
|
|
77
|
-
end sub
|
|
78
|
-
end class
|
|
79
|
-
`);
|
|
80
|
-
program.validate();
|
|
81
|
-
chai_1.expect((_a = program.getDiagnostics()[0]) === null || _a === void 0 ? void 0 : _a.message).not.to.exist;
|
|
82
|
-
let duckClass = file.parser.references.classStatements.find(x => x.name.text.toLowerCase() === 'duck');
|
|
83
|
-
chai_1.expect(duckClass).to.exist;
|
|
84
|
-
chai_1.expect(duckClass.memberMap['move']).to.exist;
|
|
85
|
-
});
|
|
86
|
-
it('supports various namespace configurations', () => {
|
|
87
|
-
var _a;
|
|
88
|
-
program.setFile({ src: `${rootDir}/source/main.bs`, dest: 'source/main.bs' }, `
|
|
89
|
-
class Animal
|
|
90
|
-
sub new()
|
|
91
|
-
bigBird = new Birds.Bird()
|
|
92
|
-
donald = new Birds.Duck()
|
|
93
|
-
end sub
|
|
94
|
-
end class
|
|
95
|
-
|
|
96
|
-
namespace Birds
|
|
97
|
-
class Bird
|
|
98
|
-
sub new()
|
|
99
|
-
dog = new Animal()
|
|
100
|
-
donald = new Duck()
|
|
101
|
-
end sub
|
|
102
|
-
end class
|
|
103
|
-
class Duck
|
|
104
|
-
end class
|
|
105
|
-
end namespace
|
|
106
|
-
`);
|
|
107
|
-
program.validate();
|
|
108
|
-
chai_1.expect((_a = program.getDiagnostics()[0]) === null || _a === void 0 ? void 0 : _a.message).not.to.exist;
|
|
109
|
-
});
|
|
110
|
-
describe('super', () => {
|
|
111
|
-
it('always requires super call in child constructor', () => {
|
|
112
|
-
var _a;
|
|
113
|
-
program.setFile('source/main.bs', `
|
|
114
|
-
class Bird
|
|
115
|
-
end class
|
|
116
|
-
class Duck extends Bird
|
|
117
|
-
sub new()
|
|
118
|
-
end sub
|
|
119
|
-
end class
|
|
120
|
-
`);
|
|
121
|
-
program.validate();
|
|
122
|
-
chai_1.expect((_a = program.getDiagnostics()[0]) === null || _a === void 0 ? void 0 : _a.message).to.eql(DiagnosticMessages_1.DiagnosticMessages.classConstructorMissingSuperCall().message);
|
|
123
|
-
});
|
|
124
|
-
it('requires super call in child when parent has own `new` method', () => {
|
|
125
|
-
var _a;
|
|
126
|
-
program.setFile('source/main.bs', `
|
|
127
|
-
class Bird
|
|
128
|
-
sub new()
|
|
129
|
-
end sub
|
|
130
|
-
end class
|
|
131
|
-
class Duck extends Bird
|
|
132
|
-
sub new()
|
|
133
|
-
end sub
|
|
134
|
-
end class
|
|
135
|
-
`);
|
|
136
|
-
program.validate();
|
|
137
|
-
chai_1.expect((_a = program.getDiagnostics()[0]) === null || _a === void 0 ? void 0 : _a.message).to.eql(DiagnosticMessages_1.DiagnosticMessages.classConstructorMissingSuperCall().message);
|
|
138
|
-
});
|
|
139
|
-
it('allows non-`m` expressions and statements before the super call', () => {
|
|
140
|
-
var _a;
|
|
141
|
-
program.setFile('source/main.bs', `
|
|
142
|
-
class Bird
|
|
143
|
-
sub new(name)
|
|
144
|
-
end sub
|
|
145
|
-
end class
|
|
146
|
-
class Duck extends Bird
|
|
147
|
-
sub new()
|
|
148
|
-
thing = { m: "m"}
|
|
149
|
-
print thing.m
|
|
150
|
-
name = "Donald" + "Duck"
|
|
151
|
-
super(name)
|
|
152
|
-
end sub
|
|
153
|
-
end class
|
|
154
|
-
`);
|
|
155
|
-
program.validate();
|
|
156
|
-
chai_1.expect((_a = program.getDiagnostics()[0]) === null || _a === void 0 ? void 0 : _a.message).to.be.undefined;
|
|
157
|
-
});
|
|
158
|
-
it('allows non-`m` expressions and statements before the super call', () => {
|
|
159
|
-
program.setFile('source/main.bs', `
|
|
160
|
-
class Bird
|
|
161
|
-
sub new(name)
|
|
162
|
-
end sub
|
|
163
|
-
end class
|
|
164
|
-
class Duck extends Bird
|
|
165
|
-
sub new()
|
|
166
|
-
m.name = m.name + "Duck"
|
|
167
|
-
super()
|
|
168
|
-
end sub
|
|
169
|
-
end class
|
|
170
|
-
`);
|
|
171
|
-
program.validate();
|
|
172
|
-
chai_1.expect(program.getDiagnostics().map(x => ({ message: x.message, range: x.range }))).to.eql([{
|
|
173
|
-
message: DiagnosticMessages_1.DiagnosticMessages.classConstructorIllegalUseOfMBeforeSuperCall().message,
|
|
174
|
-
range: vscode_languageserver_1.Range.create(7, 24, 7, 25)
|
|
175
|
-
}, {
|
|
176
|
-
message: DiagnosticMessages_1.DiagnosticMessages.classConstructorIllegalUseOfMBeforeSuperCall().message,
|
|
177
|
-
range: vscode_languageserver_1.Range.create(7, 33, 7, 34)
|
|
178
|
-
}]);
|
|
179
|
-
});
|
|
180
|
-
});
|
|
181
|
-
describe('transpile', () => {
|
|
182
|
-
it('follows correct sequence for property initializers', () => {
|
|
183
|
-
testTranspile(`
|
|
184
|
-
class Animal
|
|
185
|
-
species1 = "Animal"
|
|
186
|
-
sub new()
|
|
187
|
-
print "From Animal: " + m.species
|
|
188
|
-
end sub
|
|
189
|
-
end class
|
|
190
|
-
class Duck extends Animal
|
|
191
|
-
species2 = "Duck"
|
|
192
|
-
sub new()
|
|
193
|
-
super()
|
|
194
|
-
print "From Duck: " + m.species
|
|
195
|
-
end sub
|
|
196
|
-
end class
|
|
197
|
-
`, `
|
|
198
|
-
function __Animal_builder()
|
|
199
|
-
instance = {}
|
|
200
|
-
instance.new = sub()
|
|
201
|
-
m.species1 = "Animal"
|
|
202
|
-
print "From Animal: " + m.species
|
|
203
|
-
end sub
|
|
204
|
-
return instance
|
|
205
|
-
end function
|
|
206
|
-
function Animal()
|
|
207
|
-
instance = __Animal_builder()
|
|
208
|
-
instance.new()
|
|
209
|
-
return instance
|
|
210
|
-
end function
|
|
211
|
-
function __Duck_builder()
|
|
212
|
-
instance = __Animal_builder()
|
|
213
|
-
instance.super0_new = instance.new
|
|
214
|
-
instance.new = sub()
|
|
215
|
-
m.super0_new()
|
|
216
|
-
m.species2 = "Duck"
|
|
217
|
-
print "From Duck: " + m.species
|
|
218
|
-
end sub
|
|
219
|
-
return instance
|
|
220
|
-
end function
|
|
221
|
-
function Duck()
|
|
222
|
-
instance = __Duck_builder()
|
|
223
|
-
instance.new()
|
|
224
|
-
return instance
|
|
225
|
-
end function
|
|
226
|
-
`, 'trim', 'source/main.bs');
|
|
227
|
-
});
|
|
228
|
-
it('handles class inheritance inferred constructor calls', () => {
|
|
229
|
-
testTranspile(`
|
|
230
|
-
class Animal
|
|
231
|
-
className1 = "Animal"
|
|
232
|
-
end class
|
|
233
|
-
class Duck extends Animal
|
|
234
|
-
className2 = "Duck"
|
|
235
|
-
end class
|
|
236
|
-
class BabyDuck extends Duck
|
|
237
|
-
className3 = "BabyDuck"
|
|
238
|
-
end class
|
|
239
|
-
`, `
|
|
240
|
-
function __Animal_builder()
|
|
241
|
-
instance = {}
|
|
242
|
-
instance.new = sub()
|
|
243
|
-
m.className1 = "Animal"
|
|
244
|
-
end sub
|
|
245
|
-
return instance
|
|
246
|
-
end function
|
|
247
|
-
function Animal()
|
|
248
|
-
instance = __Animal_builder()
|
|
249
|
-
instance.new()
|
|
250
|
-
return instance
|
|
251
|
-
end function
|
|
252
|
-
function __Duck_builder()
|
|
253
|
-
instance = __Animal_builder()
|
|
254
|
-
instance.super0_new = instance.new
|
|
255
|
-
instance.new = sub()
|
|
256
|
-
m.super0_new()
|
|
257
|
-
m.className2 = "Duck"
|
|
258
|
-
end sub
|
|
259
|
-
return instance
|
|
260
|
-
end function
|
|
261
|
-
function Duck()
|
|
262
|
-
instance = __Duck_builder()
|
|
263
|
-
instance.new()
|
|
264
|
-
return instance
|
|
265
|
-
end function
|
|
266
|
-
function __BabyDuck_builder()
|
|
267
|
-
instance = __Duck_builder()
|
|
268
|
-
instance.super1_new = instance.new
|
|
269
|
-
instance.new = sub()
|
|
270
|
-
m.super1_new()
|
|
271
|
-
m.className3 = "BabyDuck"
|
|
272
|
-
end sub
|
|
273
|
-
return instance
|
|
274
|
-
end function
|
|
275
|
-
function BabyDuck()
|
|
276
|
-
instance = __BabyDuck_builder()
|
|
277
|
-
instance.new()
|
|
278
|
-
return instance
|
|
279
|
-
end function
|
|
280
|
-
`, undefined, 'source/main.bs');
|
|
281
|
-
});
|
|
282
|
-
it('works with namespaces', () => {
|
|
283
|
-
testTranspile(`
|
|
284
|
-
namespace Birds.WaterFowl
|
|
285
|
-
class Duck
|
|
286
|
-
end class
|
|
287
|
-
class BabyDuck extends Duck
|
|
288
|
-
end class
|
|
289
|
-
end namespace
|
|
290
|
-
`, `
|
|
291
|
-
function __Birds_WaterFowl_Duck_builder()
|
|
292
|
-
instance = {}
|
|
293
|
-
instance.new = sub()
|
|
294
|
-
end sub
|
|
295
|
-
return instance
|
|
296
|
-
end function
|
|
297
|
-
function Birds_WaterFowl_Duck()
|
|
298
|
-
instance = __Birds_WaterFowl_Duck_builder()
|
|
299
|
-
instance.new()
|
|
300
|
-
return instance
|
|
301
|
-
end function
|
|
302
|
-
function __Birds_WaterFowl_BabyDuck_builder()
|
|
303
|
-
instance = __Birds_WaterFowl_Duck_builder()
|
|
304
|
-
instance.super0_new = instance.new
|
|
305
|
-
instance.new = sub()
|
|
306
|
-
m.super0_new()
|
|
307
|
-
end sub
|
|
308
|
-
return instance
|
|
309
|
-
end function
|
|
310
|
-
function Birds_WaterFowl_BabyDuck()
|
|
311
|
-
instance = __Birds_WaterFowl_BabyDuck_builder()
|
|
312
|
-
instance.new()
|
|
313
|
-
return instance
|
|
314
|
-
end function
|
|
315
|
-
`, undefined, 'source/main.bs');
|
|
316
|
-
});
|
|
317
|
-
it('works for simple class', () => {
|
|
318
|
-
testTranspile(`
|
|
319
|
-
class Duck
|
|
320
|
-
end class
|
|
321
|
-
`, `
|
|
322
|
-
function __Duck_builder()
|
|
323
|
-
instance = {}
|
|
324
|
-
instance.new = sub()
|
|
325
|
-
end sub
|
|
326
|
-
return instance
|
|
327
|
-
end function
|
|
328
|
-
function Duck()
|
|
329
|
-
instance = __Duck_builder()
|
|
330
|
-
instance.new()
|
|
331
|
-
return instance
|
|
332
|
-
end function
|
|
333
|
-
`, undefined, 'source/main.bs');
|
|
334
|
-
});
|
|
335
|
-
it('registers the constructor and properly handles its parameters', () => {
|
|
336
|
-
testTranspile(`
|
|
337
|
-
class Duck
|
|
338
|
-
sub new(name as string, age as integer)
|
|
339
|
-
end sub
|
|
340
|
-
end class
|
|
341
|
-
`, `
|
|
342
|
-
function __Duck_builder()
|
|
343
|
-
instance = {}
|
|
344
|
-
instance.new = sub(name as string, age as integer)
|
|
345
|
-
end sub
|
|
346
|
-
return instance
|
|
347
|
-
end function
|
|
348
|
-
function Duck(name as string, age as integer)
|
|
349
|
-
instance = __Duck_builder()
|
|
350
|
-
instance.new(name, age)
|
|
351
|
-
return instance
|
|
352
|
-
end function
|
|
353
|
-
`, undefined, 'source/main.bs');
|
|
354
|
-
});
|
|
355
|
-
it('properly handles child class constructor override and super calls', () => {
|
|
356
|
-
testTranspile(`
|
|
357
|
-
class Animal
|
|
358
|
-
sub new(name as string)
|
|
359
|
-
end sub
|
|
360
|
-
end class
|
|
361
|
-
|
|
362
|
-
class Duck extends Animal
|
|
363
|
-
sub new(name as string, age as integer)
|
|
364
|
-
super(name)
|
|
365
|
-
super.DoSomething()
|
|
366
|
-
end sub
|
|
367
|
-
end class
|
|
368
|
-
`, `
|
|
369
|
-
function __Animal_builder()
|
|
370
|
-
instance = {}
|
|
371
|
-
instance.new = sub(name as string)
|
|
372
|
-
end sub
|
|
373
|
-
return instance
|
|
374
|
-
end function
|
|
375
|
-
function Animal(name as string)
|
|
376
|
-
instance = __Animal_builder()
|
|
377
|
-
instance.new(name)
|
|
378
|
-
return instance
|
|
379
|
-
end function
|
|
380
|
-
function __Duck_builder()
|
|
381
|
-
instance = __Animal_builder()
|
|
382
|
-
instance.super0_new = instance.new
|
|
383
|
-
instance.new = sub(name as string, age as integer)
|
|
384
|
-
m.super0_new(name)
|
|
385
|
-
m.super0_DoSomething()
|
|
386
|
-
end sub
|
|
387
|
-
return instance
|
|
388
|
-
end function
|
|
389
|
-
function Duck(name as string, age as integer)
|
|
390
|
-
instance = __Duck_builder()
|
|
391
|
-
instance.new(name, age)
|
|
392
|
-
return instance
|
|
393
|
-
end function
|
|
394
|
-
`, undefined, 'source/main.bs');
|
|
395
|
-
});
|
|
396
|
-
it('transpiles super in nested blocks', () => {
|
|
397
|
-
testTranspile(`
|
|
398
|
-
class Creature
|
|
399
|
-
sub new(name as string)
|
|
400
|
-
end sub
|
|
401
|
-
function sayHello(text)
|
|
402
|
-
? text
|
|
403
|
-
end function
|
|
404
|
-
end class
|
|
405
|
-
|
|
406
|
-
class Duck extends Creature
|
|
407
|
-
override function sayHello(text)
|
|
408
|
-
text = "The duck says " + text
|
|
409
|
-
if text <> invalid
|
|
410
|
-
super.sayHello(text)
|
|
411
|
-
end if
|
|
412
|
-
end function
|
|
413
|
-
end class
|
|
414
|
-
`, `
|
|
415
|
-
function __Creature_builder()
|
|
416
|
-
instance = {}
|
|
417
|
-
instance.new = sub(name as string)
|
|
418
|
-
end sub
|
|
419
|
-
instance.sayHello = function(text)
|
|
420
|
-
? text
|
|
421
|
-
end function
|
|
422
|
-
return instance
|
|
423
|
-
end function
|
|
424
|
-
function Creature(name as string)
|
|
425
|
-
instance = __Creature_builder()
|
|
426
|
-
instance.new(name)
|
|
427
|
-
return instance
|
|
428
|
-
end function
|
|
429
|
-
function __Duck_builder()
|
|
430
|
-
instance = __Creature_builder()
|
|
431
|
-
instance.super0_new = instance.new
|
|
432
|
-
instance.new = sub()
|
|
433
|
-
m.super0_new()
|
|
434
|
-
end sub
|
|
435
|
-
instance.super0_sayHello = instance.sayHello
|
|
436
|
-
instance.sayHello = function(text)
|
|
437
|
-
text = "The duck says " + text
|
|
438
|
-
if text <> invalid then
|
|
439
|
-
m.super0_sayHello(text)
|
|
440
|
-
end if
|
|
441
|
-
end function
|
|
442
|
-
return instance
|
|
443
|
-
end function
|
|
444
|
-
function Duck()
|
|
445
|
-
instance = __Duck_builder()
|
|
446
|
-
instance.new()
|
|
447
|
-
return instance
|
|
448
|
-
end function
|
|
449
|
-
`, 'trim', 'source/main.bs');
|
|
450
|
-
});
|
|
451
|
-
it('properly transpiles classes from outside current namespace', () => {
|
|
452
|
-
addFile('source/Animals.bs', `
|
|
453
|
-
namespace Animals
|
|
454
|
-
class Duck
|
|
455
|
-
end class
|
|
456
|
-
end namespace
|
|
457
|
-
class Bird
|
|
458
|
-
end class
|
|
459
|
-
`);
|
|
460
|
-
testTranspile(`
|
|
461
|
-
namespace Animals
|
|
462
|
-
sub init()
|
|
463
|
-
donaldDuck = new Duck()
|
|
464
|
-
daffyDuck = new Animals.Duck()
|
|
465
|
-
bigBird = new Bird()
|
|
466
|
-
end sub
|
|
467
|
-
end namespace
|
|
468
|
-
`, `
|
|
469
|
-
sub Animals_init()
|
|
470
|
-
donaldDuck = Animals_Duck()
|
|
471
|
-
daffyDuck = Animals_Duck()
|
|
472
|
-
bigBird = Bird()
|
|
473
|
-
end sub
|
|
474
|
-
`, undefined, 'source/main.bs');
|
|
475
|
-
});
|
|
476
|
-
it('properly transpiles new statement for missing class ', () => {
|
|
477
|
-
testTranspile(`
|
|
478
|
-
sub main()
|
|
479
|
-
bob = new Human()
|
|
480
|
-
end sub
|
|
481
|
-
`, `
|
|
482
|
-
sub main()
|
|
483
|
-
bob = Human()
|
|
484
|
-
end sub
|
|
485
|
-
`, undefined, 'source/main.bs', false);
|
|
486
|
-
});
|
|
487
|
-
it('new keyword transpiles correctly', () => {
|
|
488
|
-
addFile('source/Animal.bs', `
|
|
489
|
-
class Animal
|
|
490
|
-
sub new(name as string)
|
|
491
|
-
end sub
|
|
492
|
-
end class
|
|
493
|
-
`);
|
|
494
|
-
testTranspile(`
|
|
495
|
-
sub main()
|
|
496
|
-
a = new Animal("donald")
|
|
497
|
-
end sub
|
|
498
|
-
`, `
|
|
499
|
-
sub main()
|
|
500
|
-
a = Animal("donald")
|
|
501
|
-
end sub
|
|
502
|
-
`, undefined, 'source/main.bs');
|
|
503
|
-
});
|
|
504
|
-
it('does not screw up local variable references', () => {
|
|
505
|
-
testTranspile(`
|
|
506
|
-
class Animal
|
|
507
|
-
sub new(name as string)
|
|
508
|
-
m.name = name
|
|
509
|
-
end sub
|
|
510
|
-
|
|
511
|
-
name as string
|
|
512
|
-
|
|
513
|
-
sub move(distanceInMeters as integer)
|
|
514
|
-
print m.name + " moved " + distanceInMeters.ToStr() + " meters"
|
|
515
|
-
end sub
|
|
516
|
-
end class
|
|
517
|
-
|
|
518
|
-
class Duck extends Animal
|
|
519
|
-
override sub move(distanceInMeters as integer)
|
|
520
|
-
print "Waddling..."
|
|
521
|
-
super.move(distanceInMeters)
|
|
522
|
-
end sub
|
|
523
|
-
end class
|
|
524
|
-
|
|
525
|
-
class BabyDuck extends Duck
|
|
526
|
-
override sub move(distanceInMeters as integer)
|
|
527
|
-
super.move(distanceInMeters)
|
|
528
|
-
print "Fell over...I'm new at this"
|
|
529
|
-
end sub
|
|
530
|
-
end class
|
|
531
|
-
|
|
532
|
-
sub Main()
|
|
533
|
-
smokey = new Animal("Smokey")
|
|
534
|
-
smokey.move(1)
|
|
535
|
-
'> Bear moved 1 meters
|
|
536
|
-
|
|
537
|
-
donald = new Duck("Donald")
|
|
538
|
-
donald.move(2)
|
|
539
|
-
'> Waddling...\\nDonald moved 2 meters
|
|
540
|
-
|
|
541
|
-
dewey = new BabyDuck("Dewey")
|
|
542
|
-
dewey.move(3)
|
|
543
|
-
'> Waddling...\\nDewey moved 2 meters\\nFell over...I'm new at this
|
|
544
|
-
end sub
|
|
545
|
-
`, `
|
|
546
|
-
function __Animal_builder()
|
|
547
|
-
instance = {}
|
|
548
|
-
instance.new = sub(name as string)
|
|
549
|
-
m.name = invalid
|
|
550
|
-
m.name = name
|
|
551
|
-
end sub
|
|
552
|
-
instance.move = sub(distanceInMeters as integer)
|
|
553
|
-
print m.name + " moved " + distanceInMeters.ToStr() + " meters"
|
|
554
|
-
end sub
|
|
555
|
-
return instance
|
|
556
|
-
end function
|
|
557
|
-
function Animal(name as string)
|
|
558
|
-
instance = __Animal_builder()
|
|
559
|
-
instance.new(name)
|
|
560
|
-
return instance
|
|
561
|
-
end function
|
|
562
|
-
function __Duck_builder()
|
|
563
|
-
instance = __Animal_builder()
|
|
564
|
-
instance.super0_new = instance.new
|
|
565
|
-
instance.new = sub()
|
|
566
|
-
m.super0_new()
|
|
567
|
-
end sub
|
|
568
|
-
instance.super0_move = instance.move
|
|
569
|
-
instance.move = sub(distanceInMeters as integer)
|
|
570
|
-
print "Waddling..."
|
|
571
|
-
m.super0_move(distanceInMeters)
|
|
572
|
-
end sub
|
|
573
|
-
return instance
|
|
574
|
-
end function
|
|
575
|
-
function Duck()
|
|
576
|
-
instance = __Duck_builder()
|
|
577
|
-
instance.new()
|
|
578
|
-
return instance
|
|
579
|
-
end function
|
|
580
|
-
function __BabyDuck_builder()
|
|
581
|
-
instance = __Duck_builder()
|
|
582
|
-
instance.super1_new = instance.new
|
|
583
|
-
instance.new = sub()
|
|
584
|
-
m.super1_new()
|
|
585
|
-
end sub
|
|
586
|
-
instance.super1_move = instance.move
|
|
587
|
-
instance.move = sub(distanceInMeters as integer)
|
|
588
|
-
m.super1_move(distanceInMeters)
|
|
589
|
-
print "Fell over...I'm new at this"
|
|
590
|
-
end sub
|
|
591
|
-
return instance
|
|
592
|
-
end function
|
|
593
|
-
function BabyDuck()
|
|
594
|
-
instance = __BabyDuck_builder()
|
|
595
|
-
instance.new()
|
|
596
|
-
return instance
|
|
597
|
-
end function
|
|
598
|
-
|
|
599
|
-
sub Main()
|
|
600
|
-
smokey = Animal("Smokey")
|
|
601
|
-
smokey.move(1)
|
|
602
|
-
'> Bear moved 1 meters
|
|
603
|
-
donald = Duck("Donald")
|
|
604
|
-
donald.move(2)
|
|
605
|
-
'> Waddling...\\nDonald moved 2 meters
|
|
606
|
-
dewey = BabyDuck("Dewey")
|
|
607
|
-
dewey.move(3)
|
|
608
|
-
'> Waddling...\\nDewey moved 2 meters\\nFell over...I'm new at this
|
|
609
|
-
end sub
|
|
610
|
-
`, 'trim', 'source/main.bs');
|
|
611
|
-
});
|
|
612
|
-
it('calculates the proper super index', () => {
|
|
613
|
-
testTranspile(`
|
|
614
|
-
class Duck
|
|
615
|
-
public sub walk(meters as integer)
|
|
616
|
-
print "Walked " + meters.ToStr() + " meters"
|
|
617
|
-
end sub
|
|
618
|
-
end class
|
|
619
|
-
|
|
620
|
-
class BabyDuck extends Duck
|
|
621
|
-
public override sub walk(meters as integer)
|
|
622
|
-
print "Tripped"
|
|
623
|
-
super.walk(meters)
|
|
624
|
-
end sub
|
|
625
|
-
end class
|
|
626
|
-
`, `
|
|
627
|
-
function __Duck_builder()
|
|
628
|
-
instance = {}
|
|
629
|
-
instance.new = sub()
|
|
630
|
-
end sub
|
|
631
|
-
instance.walk = sub(meters as integer)
|
|
632
|
-
print "Walked " + meters.ToStr() + " meters"
|
|
633
|
-
end sub
|
|
634
|
-
return instance
|
|
635
|
-
end function
|
|
636
|
-
function Duck()
|
|
637
|
-
instance = __Duck_builder()
|
|
638
|
-
instance.new()
|
|
639
|
-
return instance
|
|
640
|
-
end function
|
|
641
|
-
function __BabyDuck_builder()
|
|
642
|
-
instance = __Duck_builder()
|
|
643
|
-
instance.super0_new = instance.new
|
|
644
|
-
instance.new = sub()
|
|
645
|
-
m.super0_new()
|
|
646
|
-
end sub
|
|
647
|
-
instance.super0_walk = instance.walk
|
|
648
|
-
instance.walk = sub(meters as integer)
|
|
649
|
-
print "Tripped"
|
|
650
|
-
m.super0_walk(meters)
|
|
651
|
-
end sub
|
|
652
|
-
return instance
|
|
653
|
-
end function
|
|
654
|
-
function BabyDuck()
|
|
655
|
-
instance = __BabyDuck_builder()
|
|
656
|
-
instance.new()
|
|
657
|
-
return instance
|
|
658
|
-
end function
|
|
659
|
-
`, 'trim', 'source/main.bs');
|
|
660
|
-
});
|
|
661
|
-
});
|
|
662
|
-
it('detects using `new` keyword on non-classes', () => {
|
|
663
|
-
var _a;
|
|
664
|
-
program.setFile({ src: `${rootDir}/source/main.brs`, dest: 'source/main.brs' }, `
|
|
665
|
-
sub quack()
|
|
666
|
-
end sub
|
|
667
|
-
sub main()
|
|
668
|
-
duck = new quack()
|
|
669
|
-
end sub
|
|
670
|
-
`);
|
|
671
|
-
program.validate();
|
|
672
|
-
chai_1.expect((_a = program.getDiagnostics()[0]) === null || _a === void 0 ? void 0 : _a.message).to.equal(DiagnosticMessages_1.DiagnosticMessages.expressionIsNotConstructable('sub').message);
|
|
673
|
-
});
|
|
674
|
-
it('detects missing call to super', () => {
|
|
675
|
-
var _a;
|
|
676
|
-
program.setFile({ src: `${rootDir}/source/main.brs`, dest: 'source/main.brs' }, `
|
|
677
|
-
class Animal
|
|
678
|
-
sub new()
|
|
679
|
-
end sub
|
|
680
|
-
end class
|
|
681
|
-
class Duck extends Animal
|
|
682
|
-
sub new()
|
|
683
|
-
end sub
|
|
684
|
-
end class
|
|
685
|
-
`);
|
|
686
|
-
program.validate();
|
|
687
|
-
chai_1.expect((_a = program.getDiagnostics()[0]) === null || _a === void 0 ? void 0 : _a.message).to.equal(DiagnosticMessages_1.DiagnosticMessages.classConstructorMissingSuperCall().message);
|
|
688
|
-
});
|
|
689
|
-
it.skip('detects calls to unknown m methods', () => {
|
|
690
|
-
var _a;
|
|
691
|
-
program.setFile({ src: `${rootDir}/source/main.brs`, dest: 'source/main.brs' }, `
|
|
692
|
-
class Animal
|
|
693
|
-
sub new()
|
|
694
|
-
m.methodThatDoesNotExist()
|
|
695
|
-
end sub
|
|
696
|
-
end class
|
|
697
|
-
`);
|
|
698
|
-
program.validate();
|
|
699
|
-
chai_1.expect((_a = program.getDiagnostics()[0]) === null || _a === void 0 ? void 0 : _a.message).to.equal(DiagnosticMessages_1.DiagnosticMessages.methodDoesNotExistOnType('methodThatDoesNotExist', 'Animal'));
|
|
700
|
-
});
|
|
701
|
-
it('detects duplicate member names', () => {
|
|
702
|
-
program.setFile({ src: `${rootDir}/source/main.bs`, dest: 'source/main.bs' }, `
|
|
703
|
-
class Animal
|
|
704
|
-
public name
|
|
705
|
-
public name
|
|
706
|
-
public sub name()
|
|
707
|
-
end sub
|
|
708
|
-
public sub age()
|
|
709
|
-
end sub
|
|
710
|
-
public sub age()
|
|
711
|
-
end sub
|
|
712
|
-
public age
|
|
713
|
-
end class
|
|
714
|
-
`);
|
|
715
|
-
program.validate();
|
|
716
|
-
let diagnostics = program.getDiagnostics().map(x => {
|
|
717
|
-
return {
|
|
718
|
-
code: x.code,
|
|
719
|
-
message: x.message,
|
|
720
|
-
range: x.range,
|
|
721
|
-
severity: vscode_languageserver_1.DiagnosticSeverity.Error
|
|
722
|
-
};
|
|
723
|
-
});
|
|
724
|
-
chai_1.expect(diagnostics).to.eql([Object.assign(Object.assign({}, DiagnosticMessages_1.DiagnosticMessages.duplicateIdentifier('name')), { range: vscode_languageserver_1.Range.create(3, 23, 3, 27) }), Object.assign(Object.assign({}, DiagnosticMessages_1.DiagnosticMessages.duplicateIdentifier('name')), { range: vscode_languageserver_1.Range.create(4, 27, 4, 31) }), Object.assign(Object.assign({}, DiagnosticMessages_1.DiagnosticMessages.duplicateIdentifier('age')), { range: vscode_languageserver_1.Range.create(8, 27, 8, 30) }), Object.assign(Object.assign({}, DiagnosticMessages_1.DiagnosticMessages.duplicateIdentifier('age')), { range: vscode_languageserver_1.Range.create(10, 23, 10, 26) })]);
|
|
725
|
-
});
|
|
726
|
-
it('detects mismatched member type in child class', () => {
|
|
727
|
-
program.setFile({ src: `${rootDir}/source/main.bs`, dest: 'source/main.bs' }, `
|
|
728
|
-
class Animal
|
|
729
|
-
public name
|
|
730
|
-
end class
|
|
731
|
-
class Duck extends Animal
|
|
732
|
-
public function name()
|
|
733
|
-
return "Donald"
|
|
734
|
-
end function
|
|
735
|
-
end class
|
|
736
|
-
`);
|
|
737
|
-
program.validate();
|
|
738
|
-
chai_1.expect(program.getDiagnostics().map(x => x.message).sort()[0]).to.eql(DiagnosticMessages_1.DiagnosticMessages.classChildMemberDifferentMemberTypeThanAncestor('method', 'field', 'Animal').message);
|
|
739
|
-
});
|
|
740
|
-
it('allows untyped overridden field in child class', () => {
|
|
741
|
-
program.setFile({ src: `${rootDir}/source/main.bs`, dest: 'source/main.bs' }, `
|
|
742
|
-
class Animal
|
|
743
|
-
public name
|
|
744
|
-
end class
|
|
745
|
-
class Duck extends Animal
|
|
746
|
-
public name
|
|
747
|
-
end class
|
|
748
|
-
`);
|
|
749
|
-
program.validate();
|
|
750
|
-
testHelpers_spec_1.expectZeroDiagnostics(program);
|
|
751
|
-
});
|
|
752
|
-
it('allows overridden property name in child class', () => {
|
|
753
|
-
program.setFile('source/main.bs', `
|
|
754
|
-
class Bird
|
|
755
|
-
public name = "bird"
|
|
756
|
-
end class
|
|
757
|
-
class Duck extends Bird
|
|
758
|
-
public name = "duck"
|
|
759
|
-
end class
|
|
760
|
-
`);
|
|
761
|
-
program.validate();
|
|
762
|
-
testHelpers_spec_1.expectZeroDiagnostics(program);
|
|
763
|
-
});
|
|
764
|
-
it('flags incompatible child field type changes', () => {
|
|
765
|
-
program.setFile('source/main.bs', `
|
|
766
|
-
class Bird
|
|
767
|
-
public age = 12
|
|
768
|
-
public name = "bird"
|
|
769
|
-
public owner as Person
|
|
770
|
-
end class
|
|
771
|
-
class Duck extends Bird
|
|
772
|
-
public age = 12.2 'should be integer but is float
|
|
773
|
-
public name = 12 'should be string but is integer
|
|
774
|
-
public owner as string
|
|
775
|
-
end class
|
|
776
|
-
`);
|
|
777
|
-
program.validate();
|
|
778
|
-
chai_1.expect(program.getDiagnostics().map(x => x.message).sort()).to.eql([
|
|
779
|
-
DiagnosticMessages_1.DiagnosticMessages.cannotFindType('Person').message,
|
|
780
|
-
DiagnosticMessages_1.DiagnosticMessages.childFieldTypeNotAssignableToBaseProperty('Duck', 'Bird', 'age', 'float', 'integer').message,
|
|
781
|
-
DiagnosticMessages_1.DiagnosticMessages.childFieldTypeNotAssignableToBaseProperty('Duck', 'Bird', 'name', 'integer', 'string').message,
|
|
782
|
-
DiagnosticMessages_1.DiagnosticMessages.childFieldTypeNotAssignableToBaseProperty('Duck', 'Bird', 'owner', 'string', 'Person').message
|
|
783
|
-
]);
|
|
784
|
-
});
|
|
785
|
-
it('detects overridden methods without override keyword', () => {
|
|
786
|
-
program.setFile({ src: `${rootDir}/source/main.brs`, dest: 'source/main.brs' }, `
|
|
787
|
-
class Animal
|
|
788
|
-
sub speak()
|
|
789
|
-
end sub
|
|
790
|
-
end class
|
|
791
|
-
class Duck extends Animal
|
|
792
|
-
sub speak()
|
|
793
|
-
end sub
|
|
794
|
-
end class
|
|
795
|
-
`);
|
|
796
|
-
program.validate();
|
|
797
|
-
chai_1.expect(program.getDiagnostics()[0]).to.exist.and.to.include(Object.assign({}, DiagnosticMessages_1.DiagnosticMessages.missingOverrideKeyword('Animal')));
|
|
798
|
-
});
|
|
799
|
-
it('detects overridden methods with different visibility', () => {
|
|
800
|
-
program.setFile({ src: `${rootDir}/source/main.bs`, dest: 'source/main.bs' }, `
|
|
801
|
-
class Animal
|
|
802
|
-
sub speakInPublic()
|
|
803
|
-
end sub
|
|
804
|
-
protected sub speakWithFriends()
|
|
805
|
-
end sub
|
|
806
|
-
private sub speakWithFamily()
|
|
807
|
-
end sub
|
|
808
|
-
end class
|
|
809
|
-
class Duck extends Animal
|
|
810
|
-
private override sub speakInPublic()
|
|
811
|
-
end sub
|
|
812
|
-
public override sub speakWithFriends()
|
|
813
|
-
end sub
|
|
814
|
-
override sub speakWithFamily()
|
|
815
|
-
end sub
|
|
816
|
-
end class
|
|
817
|
-
`);
|
|
818
|
-
program.validate();
|
|
819
|
-
chai_1.expect(program.getDiagnostics()[0]).to.exist.and.to.include(Object.assign({}, DiagnosticMessages_1.DiagnosticMessages.mismatchedOverriddenMemberVisibility('Duck', 'speakInPublic', 'private', 'public', 'Animal')));
|
|
820
|
-
chai_1.expect(program.getDiagnostics()[1]).to.exist.and.to.include(Object.assign({}, DiagnosticMessages_1.DiagnosticMessages.mismatchedOverriddenMemberVisibility('Duck', 'speakWithFriends', 'public', 'protected', 'Animal')));
|
|
821
|
-
chai_1.expect(program.getDiagnostics()[2]).to.exist.and.to.include(Object.assign({}, DiagnosticMessages_1.DiagnosticMessages.mismatchedOverriddenMemberVisibility('Duck', 'speakWithFamily', 'public', 'private', 'Animal')));
|
|
822
|
-
});
|
|
823
|
-
it('allows overridden methods with matching visibility', () => {
|
|
824
|
-
program.setFile({ src: `${rootDir}/source/main.bs`, dest: 'source/main.bs' }, `
|
|
825
|
-
class Animal
|
|
826
|
-
sub speakInPublic()
|
|
827
|
-
end sub
|
|
828
|
-
protected sub speakWithFriends()
|
|
829
|
-
end sub
|
|
830
|
-
private sub speakWithFamily()
|
|
831
|
-
end sub
|
|
832
|
-
end class
|
|
833
|
-
class Duck extends Animal
|
|
834
|
-
override sub speakInPublic()
|
|
835
|
-
end sub
|
|
836
|
-
protected override sub speakWithFriends()
|
|
837
|
-
end sub
|
|
838
|
-
private override sub speakWithFamily()
|
|
839
|
-
end sub
|
|
840
|
-
end class
|
|
841
|
-
`);
|
|
842
|
-
program.validate();
|
|
843
|
-
chai_1.expect(program.getDiagnostics()).to.be.empty;
|
|
844
|
-
});
|
|
845
|
-
it('detects extending unknown parent class', () => {
|
|
846
|
-
program.setFile('source/main.brs', `
|
|
847
|
-
class Duck extends Animal
|
|
848
|
-
sub speak()
|
|
849
|
-
end sub
|
|
850
|
-
end class
|
|
851
|
-
`);
|
|
852
|
-
program.validate();
|
|
853
|
-
chai_1.expect(program.getDiagnostics()[0]).to.exist.and.to.deep.include(Object.assign(Object.assign({}, DiagnosticMessages_1.DiagnosticMessages.classCouldNotBeFound('Animal', 'source')), { range: vscode_languageserver_1.Range.create(1, 31, 1, 37) }));
|
|
854
|
-
});
|
|
855
|
-
it('catches newable class without namespace name', () => {
|
|
856
|
-
var _a;
|
|
857
|
-
program.setFile('source/main.bs', `
|
|
858
|
-
namespace NameA.NameB
|
|
859
|
-
class Duck
|
|
860
|
-
end class
|
|
861
|
-
end namespace
|
|
862
|
-
sub main()
|
|
863
|
-
' this should be an error because the proper name is NameA.NameB.Duck"
|
|
864
|
-
d = new Duck()
|
|
865
|
-
end sub
|
|
866
|
-
`);
|
|
867
|
-
program.validate();
|
|
868
|
-
chai_1.expect((_a = program.getDiagnostics()[0]) === null || _a === void 0 ? void 0 : _a.message).to.equal(DiagnosticMessages_1.DiagnosticMessages.classCouldNotBeFound('Duck', 'source').message);
|
|
869
|
-
});
|
|
870
|
-
it('supports newable class namespace inference', () => {
|
|
871
|
-
var _a;
|
|
872
|
-
program.setFile({ src: `${rootDir}/source/main.bs`, dest: 'source/main.bs' }, `
|
|
873
|
-
namespace NameA.NameB
|
|
874
|
-
class Duck
|
|
875
|
-
end class
|
|
876
|
-
sub main()
|
|
877
|
-
d = new Duck()
|
|
878
|
-
end sub
|
|
879
|
-
end namespace
|
|
880
|
-
`);
|
|
881
|
-
program.validate();
|
|
882
|
-
chai_1.expect((_a = program.getDiagnostics()[0]) === null || _a === void 0 ? void 0 : _a.message).not.to.exist;
|
|
883
|
-
});
|
|
884
|
-
it('catches extending unknown namespaced class', () => {
|
|
885
|
-
var _a;
|
|
886
|
-
program.setFile({ src: `${rootDir}/source/main.bs`, dest: 'source/main.bs' }, `
|
|
887
|
-
namespace NameA.NameB
|
|
888
|
-
class Animal
|
|
889
|
-
end class
|
|
890
|
-
class Duck extends NameA.NameB.Animal1
|
|
891
|
-
end class
|
|
892
|
-
end namespace
|
|
893
|
-
`);
|
|
894
|
-
program.validate();
|
|
895
|
-
chai_1.expect((_a = program.getDiagnostics()[0]) === null || _a === void 0 ? void 0 : _a.message).to.equal(DiagnosticMessages_1.DiagnosticMessages.classCouldNotBeFound('NameA.NameB.Animal1', 'source').message);
|
|
896
|
-
});
|
|
897
|
-
it('supports omitting namespace prefix for items in same namespace', () => {
|
|
898
|
-
var _a;
|
|
899
|
-
program.setFile({ src: `${rootDir}/source/main.bs`, dest: 'source/main.bs' }, `
|
|
900
|
-
namespace NameA.NameB
|
|
901
|
-
class Animal
|
|
902
|
-
end class
|
|
903
|
-
class Duck extends Animal
|
|
904
|
-
end class
|
|
905
|
-
end namespace
|
|
906
|
-
`);
|
|
907
|
-
program.validate();
|
|
908
|
-
chai_1.expect((_a = program.getDiagnostics()[0]) === null || _a === void 0 ? void 0 : _a.message).not.to.exist;
|
|
909
|
-
});
|
|
910
|
-
it('catches duplicate root-level class declarations', () => {
|
|
911
|
-
var _a;
|
|
912
|
-
program.setFile({ src: `${rootDir}/source/main.bs`, dest: 'source/main.bs' }, `
|
|
913
|
-
class Animal
|
|
914
|
-
end class
|
|
915
|
-
class Animal
|
|
916
|
-
`);
|
|
917
|
-
program.validate();
|
|
918
|
-
chai_1.expect((_a = program.getDiagnostics()[0]) === null || _a === void 0 ? void 0 : _a.message).to.equal(DiagnosticMessages_1.DiagnosticMessages.duplicateClassDeclaration('source', 'Animal').message);
|
|
919
|
-
});
|
|
920
|
-
it('catches duplicate namespace-level class declarations', () => {
|
|
921
|
-
var _a;
|
|
922
|
-
program.setFile({ src: `${rootDir}/source/main.bs`, dest: 'source/main.bs' }, `
|
|
923
|
-
namespace NameA.NameB
|
|
924
|
-
class Animal
|
|
925
|
-
end class
|
|
926
|
-
class Animal
|
|
927
|
-
end namespace
|
|
928
|
-
`);
|
|
929
|
-
program.validate();
|
|
930
|
-
chai_1.expect((_a = program.getDiagnostics()[0]) === null || _a === void 0 ? void 0 : _a.message).to.equal(DiagnosticMessages_1.DiagnosticMessages.duplicateClassDeclaration('source', 'NameA.NameB.Animal').message);
|
|
931
|
-
});
|
|
932
|
-
it('catches namespaced class name which is the same as a global class', () => {
|
|
933
|
-
var _a;
|
|
934
|
-
program.setFile({ src: `${rootDir}/source/main.bs`, dest: 'source/main.bs' }, `
|
|
935
|
-
namespace NameA.NameB
|
|
936
|
-
class Animal
|
|
937
|
-
end class
|
|
938
|
-
end namespace
|
|
939
|
-
class Animal
|
|
940
|
-
end class
|
|
941
|
-
`);
|
|
942
|
-
program.validate();
|
|
943
|
-
chai_1.expect((_a = program.getDiagnostics()[0]) === null || _a === void 0 ? void 0 : _a.message).to.equal(DiagnosticMessages_1.DiagnosticMessages.namespacedClassCannotShareNamewithNonNamespacedClass('Animal').message);
|
|
944
|
-
});
|
|
945
|
-
it('catches class with same name as function', () => {
|
|
946
|
-
var _a;
|
|
947
|
-
program.setFile('source/main.bs', `
|
|
948
|
-
class Animal
|
|
949
|
-
end class
|
|
950
|
-
sub Animal()
|
|
951
|
-
end sub
|
|
952
|
-
`);
|
|
953
|
-
program.validate();
|
|
954
|
-
chai_1.expect((_a = program.getDiagnostics()[0]) === null || _a === void 0 ? void 0 : _a.message).to.equal(DiagnosticMessages_1.DiagnosticMessages.functionCannotHaveSameNameAsClass('Animal').message);
|
|
955
|
-
});
|
|
956
|
-
it('catches class with same name (but different case) as function', () => {
|
|
957
|
-
var _a;
|
|
958
|
-
program.setFile('source/main.bs', `
|
|
959
|
-
class ANIMAL
|
|
960
|
-
end class
|
|
961
|
-
sub animal()
|
|
962
|
-
end sub
|
|
963
|
-
`);
|
|
964
|
-
program.validate();
|
|
965
|
-
chai_1.expect((_a = program.getDiagnostics()[0]) === null || _a === void 0 ? void 0 : _a.message).to.equal(DiagnosticMessages_1.DiagnosticMessages.functionCannotHaveSameNameAsClass('animal').message);
|
|
966
|
-
});
|
|
967
|
-
it('catches variable with same name as class', () => {
|
|
968
|
-
var _a;
|
|
969
|
-
program.setFile('source/main.bs', `
|
|
970
|
-
class Animal
|
|
971
|
-
end class
|
|
972
|
-
sub main()
|
|
973
|
-
animal = new Animal()
|
|
974
|
-
end sub
|
|
975
|
-
`);
|
|
976
|
-
program.validate();
|
|
977
|
-
chai_1.expect((_a = program.getDiagnostics()[0]) === null || _a === void 0 ? void 0 : _a.message).to.equal(DiagnosticMessages_1.DiagnosticMessages.localVarSameNameAsClass('Animal').message);
|
|
978
|
-
});
|
|
979
|
-
it('allows extending classes with more than one dot in the filename', () => {
|
|
980
|
-
program.setFile('source/testclass.bs', `
|
|
981
|
-
class Foo
|
|
982
|
-
end class
|
|
983
|
-
|
|
984
|
-
class Bar extends Foo
|
|
985
|
-
sub new()
|
|
986
|
-
super()
|
|
987
|
-
end sub
|
|
988
|
-
end class
|
|
989
|
-
`);
|
|
990
|
-
program.setFile('source/testclass_no_testdot.bs', `
|
|
991
|
-
class BarNoDot extends Foo
|
|
992
|
-
sub new()
|
|
993
|
-
super()
|
|
994
|
-
end sub
|
|
995
|
-
end class
|
|
996
|
-
`);
|
|
997
|
-
program.setFile('source/testclass.dot.bs', `
|
|
998
|
-
class BarDot extends Foo
|
|
999
|
-
sub new()
|
|
1000
|
-
super()
|
|
1001
|
-
end sub
|
|
1002
|
-
end class
|
|
1003
|
-
`);
|
|
1004
|
-
program.validate();
|
|
1005
|
-
testHelpers_spec_1.expectZeroDiagnostics(program);
|
|
1006
|
-
});
|
|
1007
|
-
it('computes correct super index for grandchild class', () => {
|
|
1008
|
-
program.setFile('source/main.bs', `
|
|
1009
|
-
sub Main()
|
|
1010
|
-
c = new App.ClassC()
|
|
1011
|
-
end sub
|
|
1012
|
-
|
|
1013
|
-
namespace App
|
|
1014
|
-
class ClassA
|
|
1015
|
-
end class
|
|
1016
|
-
|
|
1017
|
-
class ClassB extends ClassA
|
|
1018
|
-
end class
|
|
1019
|
-
end namespace
|
|
1020
|
-
`);
|
|
1021
|
-
testTranspile(`
|
|
1022
|
-
namespace App
|
|
1023
|
-
class ClassC extends ClassB
|
|
1024
|
-
sub new()
|
|
1025
|
-
super()
|
|
1026
|
-
end sub
|
|
1027
|
-
end class
|
|
1028
|
-
end namespace
|
|
1029
|
-
`, `
|
|
1030
|
-
function __App_ClassC_builder()
|
|
1031
|
-
instance = __App_ClassB_builder()
|
|
1032
|
-
instance.super1_new = instance.new
|
|
1033
|
-
instance.new = sub()
|
|
1034
|
-
m.super1_new()
|
|
1035
|
-
end sub
|
|
1036
|
-
return instance
|
|
1037
|
-
end function
|
|
1038
|
-
function App_ClassC()
|
|
1039
|
-
instance = __App_ClassC_builder()
|
|
1040
|
-
instance.new()
|
|
1041
|
-
return instance
|
|
1042
|
-
end function
|
|
1043
|
-
`, 'trim', 'source/App.ClassC.bs');
|
|
1044
|
-
});
|
|
1045
|
-
it('computes correct super index for namespaced child class and global parent class', () => {
|
|
1046
|
-
program.setFile('source/ClassA.bs', `
|
|
1047
|
-
class ClassA
|
|
1048
|
-
end class
|
|
1049
|
-
`);
|
|
1050
|
-
testTranspile(`
|
|
1051
|
-
namespace App
|
|
1052
|
-
class ClassB extends ClassA
|
|
1053
|
-
end class
|
|
1054
|
-
end namespace
|
|
1055
|
-
`, `
|
|
1056
|
-
function __App_ClassB_builder()
|
|
1057
|
-
instance = __ClassA_builder()
|
|
1058
|
-
instance.super0_new = instance.new
|
|
1059
|
-
instance.new = sub()
|
|
1060
|
-
m.super0_new()
|
|
1061
|
-
end sub
|
|
1062
|
-
return instance
|
|
1063
|
-
end function
|
|
1064
|
-
function App_ClassB()
|
|
1065
|
-
instance = __App_ClassB_builder()
|
|
1066
|
-
instance.new()
|
|
1067
|
-
return instance
|
|
1068
|
-
end function
|
|
1069
|
-
`, 'trim', 'source/App.ClassB.bs');
|
|
1070
|
-
});
|
|
1071
|
-
it('does not crash when parent class is missing', () => {
|
|
1072
|
-
const file = program.setFile('source/ClassB.bs', `
|
|
1073
|
-
class ClassB extends ClassA
|
|
1074
|
-
end class
|
|
1075
|
-
`);
|
|
1076
|
-
assert_1.doesNotThrow(() => {
|
|
1077
|
-
file.parser.references.classStatements[0].getParentClassIndex(new BrsTranspileState_1.BrsTranspileState(file));
|
|
1078
|
-
});
|
|
1079
|
-
});
|
|
1080
|
-
});
|
|
1081
|
-
//# sourceMappingURL=BrsFile.Class.spec.js.map
|