brighterscript 0.72.1 → 0.72.3
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 +7 -2
- package/dist/LanguageServer.d.ts +2 -1
- package/dist/LanguageServer.js +12 -0
- package/dist/LanguageServer.js.map +1 -1
- package/dist/Program.d.ts +5 -1
- package/dist/Program.js +20 -0
- package/dist/Program.js.map +1 -1
- package/dist/bscPlugin/BscPlugin.d.ts +2 -1
- package/dist/bscPlugin/BscPlugin.js +4 -0
- package/dist/bscPlugin/BscPlugin.js.map +1 -1
- package/dist/bscPlugin/inlayHints/InlayHintProcessor.d.ts +23 -0
- package/dist/bscPlugin/inlayHints/InlayHintProcessor.js +183 -0
- package/dist/bscPlugin/inlayHints/InlayHintProcessor.js.map +1 -0
- package/dist/interfaces.d.ts +34 -1
- package/dist/lsp/LspProject.d.ts +8 -1
- package/dist/lsp/Project.d.ts +5 -1
- package/dist/lsp/Project.js +6 -0
- package/dist/lsp/Project.js.map +1 -1
- package/dist/lsp/ProjectManager.d.ts +5 -1
- package/dist/lsp/ProjectManager.js +12 -0
- package/dist/lsp/ProjectManager.js.map +1 -1
- package/dist/lsp/worker/WorkerThreadProject.d.ts +5 -1
- package/dist/lsp/worker/WorkerThreadProject.js +3 -0
- package/dist/lsp/worker/WorkerThreadProject.js.map +1 -1
- package/package.json +18 -14
- package/dist/astUtils/AstEditor.spec.d.ts +0 -1
- package/dist/astUtils/AstEditor.spec.js +0 -254
- package/dist/astUtils/AstEditor.spec.js.map +0 -1
- package/dist/astUtils/creators.spec.d.ts +0 -1
- package/dist/astUtils/creators.spec.js +0 -21
- package/dist/astUtils/creators.spec.js.map +0 -1
- package/dist/astUtils/reflection.spec.d.ts +0 -1
- package/dist/astUtils/reflection.spec.js +0 -308
- 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 -1197
- 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 -1237
- package/dist/bscPlugin/codeActions/CodeActionsProcessor.spec.js.map +0 -1
- package/dist/bscPlugin/definition/DefinitionProvider.spec.d.ts +0 -1
- package/dist/bscPlugin/definition/DefinitionProvider.spec.js +0 -171
- package/dist/bscPlugin/definition/DefinitionProvider.spec.js.map +0 -1
- package/dist/bscPlugin/hover/HoverProcessor.spec.d.ts +0 -1
- package/dist/bscPlugin/hover/HoverProcessor.spec.js +0 -201
- package/dist/bscPlugin/hover/HoverProcessor.spec.js.map +0 -1
- package/dist/bscPlugin/references/ReferencesProvider.spec.d.ts +0 -1
- package/dist/bscPlugin/references/ReferencesProvider.spec.js +0 -51
- package/dist/bscPlugin/references/ReferencesProvider.spec.js.map +0 -1
- package/dist/bscPlugin/selectionRanges/SelectionRangesProcessor.spec.d.ts +0 -1
- package/dist/bscPlugin/selectionRanges/SelectionRangesProcessor.spec.js +0 -298
- package/dist/bscPlugin/selectionRanges/SelectionRangesProcessor.spec.js.map +0 -1
- package/dist/bscPlugin/semanticTokens/BrsFileSemanticTokensProcessor.spec.d.ts +0 -1
- package/dist/bscPlugin/semanticTokens/BrsFileSemanticTokensProcessor.spec.js +0 -399
- package/dist/bscPlugin/semanticTokens/BrsFileSemanticTokensProcessor.spec.js.map +0 -1
- package/dist/bscPlugin/symbols/DocumentSymbolProcessor.spec.d.ts +0 -1
- package/dist/bscPlugin/symbols/DocumentSymbolProcessor.spec.js +0 -290
- package/dist/bscPlugin/symbols/DocumentSymbolProcessor.spec.js.map +0 -1
- package/dist/bscPlugin/symbols/WorkspaceSymbolProcessor.spec.d.ts +0 -1
- package/dist/bscPlugin/symbols/WorkspaceSymbolProcessor.spec.js +0 -245
- package/dist/bscPlugin/symbols/WorkspaceSymbolProcessor.spec.js.map +0 -1
- package/dist/bscPlugin/transpile/BrsFilePreTranspileProcessor.spec.d.ts +0 -1
- package/dist/bscPlugin/transpile/BrsFilePreTranspileProcessor.spec.js +0 -46
- package/dist/bscPlugin/transpile/BrsFilePreTranspileProcessor.spec.js.map +0 -1
- package/dist/bscPlugin/validation/BrsFileValidator.spec.d.ts +0 -1
- package/dist/bscPlugin/validation/BrsFileValidator.spec.js +0 -702
- package/dist/bscPlugin/validation/BrsFileValidator.spec.js.map +0 -1
- package/dist/common/Sequencer.spec.d.ts +0 -1
- package/dist/common/Sequencer.spec.js +0 -75
- package/dist/common/Sequencer.spec.js.map +0 -1
- package/dist/files/BrsFile.Class.spec.d.ts +0 -1
- package/dist/files/BrsFile.Class.spec.js +0 -1805
- 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 -4611
- 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 -1219
- 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/files/tests/optionalChaning.spec.d.ts +0 -1
- package/dist/files/tests/optionalChaning.spec.js +0 -152
- package/dist/files/tests/optionalChaning.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 -1300
- package/dist/lexer/Lexer.spec.js.map +0 -1
- package/dist/lsp/ActionQueue.spec.d.ts +0 -1
- package/dist/lsp/ActionQueue.spec.js +0 -80
- package/dist/lsp/ActionQueue.spec.js.map +0 -1
- package/dist/lsp/DocumentManager.spec.d.ts +0 -1
- package/dist/lsp/DocumentManager.spec.js +0 -103
- package/dist/lsp/DocumentManager.spec.js.map +0 -1
- package/dist/lsp/PathFilterer.spec.d.ts +0 -1
- package/dist/lsp/PathFilterer.spec.js +0 -182
- package/dist/lsp/PathFilterer.spec.js.map +0 -1
- package/dist/lsp/Project.spec.d.ts +0 -1
- package/dist/lsp/Project.spec.js +0 -400
- package/dist/lsp/Project.spec.js.map +0 -1
- package/dist/lsp/ProjectManager.spec.d.ts +0 -1
- package/dist/lsp/ProjectManager.spec.js +0 -1183
- package/dist/lsp/ProjectManager.spec.js.map +0 -1
- package/dist/lsp/worker/MessageHandler.spec.d.ts +0 -1
- package/dist/lsp/worker/MessageHandler.spec.js +0 -64
- package/dist/lsp/worker/MessageHandler.spec.js.map +0 -1
- package/dist/lsp/worker/WorkerPool.spec.d.ts +0 -1
- package/dist/lsp/worker/WorkerPool.spec.js +0 -59
- package/dist/lsp/worker/WorkerPool.spec.js.map +0 -1
- package/dist/lsp/worker/WorkerThreadProject.spec.d.ts +0 -2
- package/dist/lsp/worker/WorkerThreadProject.spec.js +0 -72
- package/dist/lsp/worker/WorkerThreadProject.spec.js.map +0 -1
- package/dist/parser/AstNode.spec.d.ts +0 -1
- package/dist/parser/AstNode.spec.js +0 -1452
- package/dist/parser/AstNode.spec.js.map +0 -1
- package/dist/parser/Expression.spec.d.ts +0 -1
- package/dist/parser/Expression.spec.js +0 -40
- package/dist/parser/Expression.spec.js.map +0 -1
- package/dist/parser/Parser.Class.spec.d.ts +0 -1
- package/dist/parser/Parser.Class.spec.js +0 -495
- 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 -1985
- 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 -131
- package/dist/parser/SGParser.spec.js.map +0 -1
- package/dist/parser/Statement.spec.d.ts +0 -1
- package/dist/parser/Statement.spec.js +0 -118
- package/dist/parser/Statement.spec.js.map +0 -1
- package/dist/parser/tests/Parser.spec.d.ts +0 -19
- package/dist/parser/tests/Parser.spec.js +0 -38
- 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 -208
- 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 -143
- 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 -570
- 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 -156
- 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 -291
- 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 -401
- 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 -242
- 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 -289
- 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 -346
- 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/RegexLiteralExpression.spec.d.ts +0 -1
- package/dist/parser/tests/expression/RegexLiteralExpression.spec.js +0 -171
- package/dist/parser/tests/expression/RegexLiteralExpression.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 -389
- 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 -876
- package/dist/parser/tests/expression/TernaryExpression.spec.js.map +0 -1
- package/dist/parser/tests/expression/UnaryExpression.spec.d.ts +0 -1
- package/dist/parser/tests/expression/UnaryExpression.spec.js +0 -52
- package/dist/parser/tests/expression/UnaryExpression.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/ConstStatement.spec.d.ts +0 -1
- package/dist/parser/tests/statement/ConstStatement.spec.js +0 -708
- package/dist/parser/tests/statement/ConstStatement.spec.js.map +0 -1
- package/dist/parser/tests/statement/Continue.spec.d.ts +0 -1
- package/dist/parser/tests/statement/Continue.spec.js +0 -119
- package/dist/parser/tests/statement/Continue.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/Enum.spec.d.ts +0 -1
- package/dist/parser/tests/statement/Enum.spec.js +0 -1307
- package/dist/parser/tests/statement/Enum.spec.js.map +0 -1
- package/dist/parser/tests/statement/For.spec.d.ts +0 -1
- package/dist/parser/tests/statement/For.spec.js +0 -45
- package/dist/parser/tests/statement/For.spec.js.map +0 -1
- package/dist/parser/tests/statement/ForEach.spec.d.ts +0 -1
- package/dist/parser/tests/statement/ForEach.spec.js +0 -36
- package/dist/parser/tests/statement/ForEach.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 -342
- 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 -51
- 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/InterfaceStatement.spec.d.ts +0 -1
- package/dist/parser/tests/statement/InterfaceStatement.spec.js +0 -102
- package/dist/parser/tests/statement/InterfaceStatement.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 -335
- 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 -195
- 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 -38
- 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 -142
- package/dist/parser/tests/statement/TryCatch.spec.js.map +0 -1
- package/dist/preprocessor/Manifest.spec.d.ts +0 -1
- package/dist/preprocessor/Manifest.spec.js +0 -80
- package/dist/preprocessor/Manifest.spec.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.spec.d.ts +0 -1
- package/dist/preprocessor/PreprocessorParser.spec.js +0 -116
- package/dist/preprocessor/PreprocessorParser.spec.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/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 -23
- 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/InterfaceType.spec.d.ts +0 -1
- package/dist/types/InterfaceType.spec.js +0 -175
- package/dist/types/InterfaceType.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/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
|
@@ -1,1307 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
const chai_config_spec_1 = require("../../../chai-config.spec");
|
|
4
|
-
const Expression_1 = require("../../Expression");
|
|
5
|
-
const DiagnosticMessages_1 = require("../../../DiagnosticMessages");
|
|
6
|
-
const testHelpers_spec_1 = require("../../../testHelpers.spec");
|
|
7
|
-
const Parser_1 = require("../../Parser");
|
|
8
|
-
const util_1 = require("../../../util");
|
|
9
|
-
const Statement_1 = require("../../Statement");
|
|
10
|
-
const Program_1 = require("../../../Program");
|
|
11
|
-
const sinon_1 = require("sinon");
|
|
12
|
-
const vscode_languageserver_protocol_1 = require("vscode-languageserver-protocol");
|
|
13
|
-
const visitors_1 = require("../../../astUtils/visitors");
|
|
14
|
-
const reflection_1 = require("../../../astUtils/reflection");
|
|
15
|
-
const vscode_uri_1 = require("vscode-uri");
|
|
16
|
-
const testHelpers_spec_2 = require("../../../testHelpers.spec");
|
|
17
|
-
const sinon = (0, sinon_1.createSandbox)();
|
|
18
|
-
describe('EnumStatement', () => {
|
|
19
|
-
let program;
|
|
20
|
-
let testTranspile = (0, testHelpers_spec_1.getTestTranspile)(() => [program, testHelpers_spec_2.rootDir]);
|
|
21
|
-
beforeEach(() => {
|
|
22
|
-
program = new Program_1.Program({ rootDir: testHelpers_spec_2.rootDir, sourceMap: true });
|
|
23
|
-
});
|
|
24
|
-
afterEach(() => {
|
|
25
|
-
sinon.restore();
|
|
26
|
-
program.dispose();
|
|
27
|
-
});
|
|
28
|
-
it('parses empty enum statement', () => {
|
|
29
|
-
const parser = Parser_1.Parser.parse(`
|
|
30
|
-
enum SomeEnum
|
|
31
|
-
end enum
|
|
32
|
-
`, { mode: Parser_1.ParseMode.BrighterScript });
|
|
33
|
-
(0, testHelpers_spec_1.expectZeroDiagnostics)(parser);
|
|
34
|
-
(0, chai_config_spec_1.expect)(parser.ast.statements[0]).to.be.instanceOf(Statement_1.EnumStatement);
|
|
35
|
-
});
|
|
36
|
-
it('supports annotations above', () => {
|
|
37
|
-
const parser = Parser_1.Parser.parse(`
|
|
38
|
-
@someAnnotation
|
|
39
|
-
enum SomeEnum
|
|
40
|
-
end enum
|
|
41
|
-
`, { mode: Parser_1.ParseMode.BrighterScript });
|
|
42
|
-
(0, testHelpers_spec_1.expectZeroDiagnostics)(parser);
|
|
43
|
-
(0, chai_config_spec_1.expect)(parser.ast.statements[0].annotations[0].name).to.eql('someAnnotation');
|
|
44
|
-
});
|
|
45
|
-
it('constructs when missing enum name', () => {
|
|
46
|
-
const parser = Parser_1.Parser.parse(`
|
|
47
|
-
enum
|
|
48
|
-
end enum
|
|
49
|
-
`, { mode: Parser_1.ParseMode.BrighterScript });
|
|
50
|
-
(0, testHelpers_spec_1.expectDiagnostics)(parser, [
|
|
51
|
-
DiagnosticMessages_1.DiagnosticMessages.expectedIdentifier()
|
|
52
|
-
]);
|
|
53
|
-
(0, chai_config_spec_1.expect)(parser.ast.statements[0]).to.be.instanceOf(Statement_1.EnumStatement);
|
|
54
|
-
});
|
|
55
|
-
it('collects uninitialized members', () => {
|
|
56
|
-
const parser = Parser_1.Parser.parse(`
|
|
57
|
-
enum Direction
|
|
58
|
-
up
|
|
59
|
-
down
|
|
60
|
-
left
|
|
61
|
-
right
|
|
62
|
-
end enum
|
|
63
|
-
`, { mode: Parser_1.ParseMode.BrighterScript });
|
|
64
|
-
(0, testHelpers_spec_1.expectZeroDiagnostics)(parser);
|
|
65
|
-
(0, chai_config_spec_1.expect)(parser.ast.statements[0].getMembers().map(x => x.tokens.name.text)).to.eql([
|
|
66
|
-
'up',
|
|
67
|
-
'down',
|
|
68
|
-
'left',
|
|
69
|
-
'right'
|
|
70
|
-
]);
|
|
71
|
-
});
|
|
72
|
-
it('collects int-initialized members', () => {
|
|
73
|
-
const parser = Parser_1.Parser.parse(`
|
|
74
|
-
enum Direction
|
|
75
|
-
up = 1
|
|
76
|
-
down = 2
|
|
77
|
-
left = 3
|
|
78
|
-
right = 4
|
|
79
|
-
end enum
|
|
80
|
-
`, { mode: Parser_1.ParseMode.BrighterScript });
|
|
81
|
-
(0, testHelpers_spec_1.expectZeroDiagnostics)(parser);
|
|
82
|
-
const values = parser.ast.statements[0].getMembers().map(x => x.value);
|
|
83
|
-
(0, testHelpers_spec_1.expectInstanceOf)(values, [
|
|
84
|
-
Expression_1.LiteralExpression,
|
|
85
|
-
Expression_1.LiteralExpression,
|
|
86
|
-
Expression_1.LiteralExpression,
|
|
87
|
-
Expression_1.LiteralExpression
|
|
88
|
-
]);
|
|
89
|
-
(0, chai_config_spec_1.expect)(values.map(x => x.token.text)).to.eql([
|
|
90
|
-
'1',
|
|
91
|
-
'2',
|
|
92
|
-
'3',
|
|
93
|
-
'4'
|
|
94
|
-
]);
|
|
95
|
-
});
|
|
96
|
-
it('collects string-initialized members', () => {
|
|
97
|
-
const parser = Parser_1.Parser.parse(`
|
|
98
|
-
enum Direction
|
|
99
|
-
up = "u"
|
|
100
|
-
down = "d"
|
|
101
|
-
left = "l"
|
|
102
|
-
right = "r"
|
|
103
|
-
end enum
|
|
104
|
-
`, { mode: Parser_1.ParseMode.BrighterScript });
|
|
105
|
-
(0, testHelpers_spec_1.expectZeroDiagnostics)(parser);
|
|
106
|
-
const values = parser.ast.statements[0].getMembers().map(x => x.value);
|
|
107
|
-
(0, testHelpers_spec_1.expectInstanceOf)(values, [
|
|
108
|
-
Expression_1.LiteralExpression,
|
|
109
|
-
Expression_1.LiteralExpression,
|
|
110
|
-
Expression_1.LiteralExpression,
|
|
111
|
-
Expression_1.LiteralExpression
|
|
112
|
-
]);
|
|
113
|
-
(0, chai_config_spec_1.expect)(values.map(x => x.token.text)).to.eql([
|
|
114
|
-
'"u"',
|
|
115
|
-
'"d"',
|
|
116
|
-
'"l"',
|
|
117
|
-
'"r"'
|
|
118
|
-
]);
|
|
119
|
-
});
|
|
120
|
-
it('flags when used in brs mode', () => {
|
|
121
|
-
const parser = Parser_1.Parser.parse(`
|
|
122
|
-
enum Direction
|
|
123
|
-
up = "u"
|
|
124
|
-
down = "d"
|
|
125
|
-
left = "l"
|
|
126
|
-
right = "r"
|
|
127
|
-
end enum
|
|
128
|
-
`, { mode: Parser_1.ParseMode.BrightScript });
|
|
129
|
-
(0, testHelpers_spec_1.expectDiagnostics)(parser, [
|
|
130
|
-
DiagnosticMessages_1.DiagnosticMessages.bsFeatureNotSupportedInBrsFiles('enum declarations')
|
|
131
|
-
]);
|
|
132
|
-
});
|
|
133
|
-
it('allows enum at top of file', () => {
|
|
134
|
-
const parser = Parser_1.Parser.parse(`
|
|
135
|
-
enum Direction
|
|
136
|
-
value1
|
|
137
|
-
end enum
|
|
138
|
-
|
|
139
|
-
interface Person
|
|
140
|
-
name as string
|
|
141
|
-
end interface
|
|
142
|
-
`, { mode: Parser_1.ParseMode.BrighterScript });
|
|
143
|
-
(0, testHelpers_spec_1.expectZeroDiagnostics)(parser);
|
|
144
|
-
(0, chai_config_spec_1.expect)(parser.statements[0]).instanceof(Statement_1.EnumStatement);
|
|
145
|
-
(0, chai_config_spec_1.expect)(parser.statements[1]).instanceof(Statement_1.InterfaceStatement);
|
|
146
|
-
});
|
|
147
|
-
it('allows enum at bottom of file', () => {
|
|
148
|
-
const parser = Parser_1.Parser.parse(`
|
|
149
|
-
interface Person
|
|
150
|
-
name as string
|
|
151
|
-
end interface
|
|
152
|
-
|
|
153
|
-
enum Direction
|
|
154
|
-
value1
|
|
155
|
-
end enum
|
|
156
|
-
`, { mode: Parser_1.ParseMode.BrighterScript });
|
|
157
|
-
(0, testHelpers_spec_1.expectZeroDiagnostics)(parser);
|
|
158
|
-
(0, chai_config_spec_1.expect)(parser.statements[0]).instanceof(Statement_1.InterfaceStatement);
|
|
159
|
-
(0, chai_config_spec_1.expect)(parser.statements[1]).instanceof(Statement_1.EnumStatement);
|
|
160
|
-
});
|
|
161
|
-
it('allows enum in namespace', () => {
|
|
162
|
-
const file = program.setFile('source/types.bs', `
|
|
163
|
-
namespace entities
|
|
164
|
-
enum Person
|
|
165
|
-
name
|
|
166
|
-
end enum
|
|
167
|
-
end namespace
|
|
168
|
-
|
|
169
|
-
enum Direction
|
|
170
|
-
up
|
|
171
|
-
end enum
|
|
172
|
-
`);
|
|
173
|
-
program.validate();
|
|
174
|
-
(0, testHelpers_spec_1.expectZeroDiagnostics)(program);
|
|
175
|
-
(0, chai_config_spec_1.expect)(file.parser.references.enumStatements.map(x => x.fullName)).to.eql([
|
|
176
|
-
'entities.Person',
|
|
177
|
-
'Direction'
|
|
178
|
-
]);
|
|
179
|
-
});
|
|
180
|
-
describe('validation', () => {
|
|
181
|
-
it('allows enums named `optional`', () => {
|
|
182
|
-
program.setFile('source/main.bs', `
|
|
183
|
-
enum optional
|
|
184
|
-
thing = 1
|
|
185
|
-
end enum
|
|
186
|
-
`);
|
|
187
|
-
program.validate();
|
|
188
|
-
(0, testHelpers_spec_1.expectZeroDiagnostics)(program);
|
|
189
|
-
});
|
|
190
|
-
it('catches duplicate enums from same file', () => {
|
|
191
|
-
program.setFile('source/main.bs', `
|
|
192
|
-
enum Direction
|
|
193
|
-
up
|
|
194
|
-
end enum
|
|
195
|
-
|
|
196
|
-
enum Direction
|
|
197
|
-
up
|
|
198
|
-
end enum
|
|
199
|
-
`);
|
|
200
|
-
program.validate();
|
|
201
|
-
(0, testHelpers_spec_1.expectDiagnostics)(program, [Object.assign(Object.assign({}, DiagnosticMessages_1.DiagnosticMessages.duplicateEnumDeclaration('source', 'Direction')), { relatedInformation: [{
|
|
202
|
-
location: util_1.util.createLocation(vscode_uri_1.URI.file((0, util_1.standardizePath) `${testHelpers_spec_2.rootDir}/source/main.bs`).toString(), util_1.util.createRange(1, 21, 1, 30)),
|
|
203
|
-
message: 'Enum declared here'
|
|
204
|
-
}] })]);
|
|
205
|
-
});
|
|
206
|
-
it('catches duplicate enums from different files in same scope', () => {
|
|
207
|
-
program.setFile('source/main.bs', `
|
|
208
|
-
enum Direction
|
|
209
|
-
up
|
|
210
|
-
end enum
|
|
211
|
-
`);
|
|
212
|
-
program.setFile('source/lib.bs', `
|
|
213
|
-
enum Direction
|
|
214
|
-
up
|
|
215
|
-
end enum
|
|
216
|
-
`);
|
|
217
|
-
program.validate();
|
|
218
|
-
(0, testHelpers_spec_1.expectDiagnostics)(program, [Object.assign(Object.assign({}, DiagnosticMessages_1.DiagnosticMessages.duplicateEnumDeclaration('source', 'Direction')), { relatedInformation: [{
|
|
219
|
-
location: util_1.util.createLocation(vscode_uri_1.URI.file((0, util_1.standardizePath) `${testHelpers_spec_2.rootDir}/source/lib.bs`).toString(), util_1.util.createRange(1, 21, 1, 30)),
|
|
220
|
-
message: 'Enum declared here'
|
|
221
|
-
}] })]);
|
|
222
|
-
});
|
|
223
|
-
it('allows duplicate enums across different scopes', () => {
|
|
224
|
-
program.setFile('source/main.bs', `
|
|
225
|
-
enum Direction
|
|
226
|
-
up
|
|
227
|
-
end enum
|
|
228
|
-
`);
|
|
229
|
-
program.setFile('components/comp1.xml', (0, testHelpers_spec_1.trim) `
|
|
230
|
-
<?xml version="1.0" encoding="utf-8" ?>
|
|
231
|
-
<component name="Comp1" extends="Scene">
|
|
232
|
-
<script uri="comp1.bs" />
|
|
233
|
-
</component>
|
|
234
|
-
`);
|
|
235
|
-
program.setFile('components/comp1.bs', `
|
|
236
|
-
enum Direction
|
|
237
|
-
up
|
|
238
|
-
end enum
|
|
239
|
-
`);
|
|
240
|
-
program.validate();
|
|
241
|
-
(0, testHelpers_spec_1.expectZeroDiagnostics)(program);
|
|
242
|
-
});
|
|
243
|
-
it('flags duplicate members', () => {
|
|
244
|
-
program.setFile('source/main.bs', `
|
|
245
|
-
enum Direction
|
|
246
|
-
name
|
|
247
|
-
name
|
|
248
|
-
end enum
|
|
249
|
-
`);
|
|
250
|
-
program.validate();
|
|
251
|
-
(0, testHelpers_spec_1.expectDiagnostics)(program, [Object.assign(Object.assign({}, DiagnosticMessages_1.DiagnosticMessages.duplicateIdentifier('name')), { range: util_1.util.createRange(3, 20, 3, 24) })]);
|
|
252
|
-
});
|
|
253
|
-
it('flags mixed enum value types with int first', () => {
|
|
254
|
-
program.setFile('source/main.bs', `
|
|
255
|
-
enum Direction
|
|
256
|
-
a = 1
|
|
257
|
-
b = "c"
|
|
258
|
-
end enum
|
|
259
|
-
`);
|
|
260
|
-
program.validate();
|
|
261
|
-
(0, testHelpers_spec_1.expectDiagnostics)(program, [Object.assign(Object.assign({}, DiagnosticMessages_1.DiagnosticMessages.enumValueMustBeType('integer')), { range: util_1.util.createRange(3, 24, 3, 27) })]);
|
|
262
|
-
});
|
|
263
|
-
it('flags mixed enum value types with string first', () => {
|
|
264
|
-
program.setFile('source/main.bs', `
|
|
265
|
-
enum Direction
|
|
266
|
-
a = "a"
|
|
267
|
-
b = 1
|
|
268
|
-
end enum
|
|
269
|
-
`);
|
|
270
|
-
program.validate();
|
|
271
|
-
(0, testHelpers_spec_1.expectDiagnostics)(program, [Object.assign(Object.assign({}, DiagnosticMessages_1.DiagnosticMessages.enumValueMustBeType('string')), { range: util_1.util.createRange(3, 24, 3, 25) })]);
|
|
272
|
-
});
|
|
273
|
-
it('flags missing value for string enum when string is first item', () => {
|
|
274
|
-
program.setFile('source/main.bs', `
|
|
275
|
-
enum Direction
|
|
276
|
-
a = "a"
|
|
277
|
-
b
|
|
278
|
-
end enum
|
|
279
|
-
`);
|
|
280
|
-
program.validate();
|
|
281
|
-
(0, testHelpers_spec_1.expectDiagnostics)(program, [Object.assign(Object.assign({}, DiagnosticMessages_1.DiagnosticMessages.enumValueIsRequired('string')), { range: util_1.util.createRange(3, 20, 3, 21) })]);
|
|
282
|
-
});
|
|
283
|
-
it('allows mixing-and-matching int and hex int', () => {
|
|
284
|
-
program.setFile('source/main.bs', `
|
|
285
|
-
enum Direction
|
|
286
|
-
a = 1
|
|
287
|
-
b = &HFF
|
|
288
|
-
end enum
|
|
289
|
-
`);
|
|
290
|
-
program.validate();
|
|
291
|
-
(0, testHelpers_spec_1.expectZeroDiagnostics)(program);
|
|
292
|
-
});
|
|
293
|
-
it('allows floats', () => {
|
|
294
|
-
program.setFile('source/main.bs', `
|
|
295
|
-
enum Direction
|
|
296
|
-
a = 1.2
|
|
297
|
-
b = 5.2345
|
|
298
|
-
end enum
|
|
299
|
-
`);
|
|
300
|
-
program.validate();
|
|
301
|
-
(0, testHelpers_spec_1.expectZeroDiagnostics)(program);
|
|
302
|
-
});
|
|
303
|
-
it('only support non-object literals', () => {
|
|
304
|
-
program.setFile('source/main.bs', `
|
|
305
|
-
enum AppConfig
|
|
306
|
-
serverInfo = {}
|
|
307
|
-
end enum
|
|
308
|
-
`);
|
|
309
|
-
program.validate();
|
|
310
|
-
(0, testHelpers_spec_1.expectDiagnostics)(program, [Object.assign(Object.assign({}, DiagnosticMessages_1.DiagnosticMessages.enumValueMustBeType('integer')), { range: util_1.util.createRange(2, 33, 2, 35) })]);
|
|
311
|
-
});
|
|
312
|
-
it('considers -1 to be an integer', () => {
|
|
313
|
-
program.setFile('source/main.bs', `
|
|
314
|
-
enum AppConfig
|
|
315
|
-
alpha = 1
|
|
316
|
-
beta = -1
|
|
317
|
-
end enum
|
|
318
|
-
`);
|
|
319
|
-
program.validate();
|
|
320
|
-
(0, testHelpers_spec_1.expectZeroDiagnostics)(program);
|
|
321
|
-
});
|
|
322
|
-
it('flags missing value for string enum where string is not first item', () => {
|
|
323
|
-
program.setFile('source/main.bs', `
|
|
324
|
-
enum Direction
|
|
325
|
-
a
|
|
326
|
-
b = "b" 'since this is the only value present, this is a string enum
|
|
327
|
-
end enum
|
|
328
|
-
`);
|
|
329
|
-
program.validate();
|
|
330
|
-
(0, testHelpers_spec_1.expectDiagnostics)(program, [Object.assign(Object.assign({}, DiagnosticMessages_1.DiagnosticMessages.enumValueIsRequired('string')), { range: util_1.util.createRange(2, 20, 2, 21) })]);
|
|
331
|
-
});
|
|
332
|
-
it('catches unknown non-namespaced enum members', () => {
|
|
333
|
-
program.setFile('source/main.bs', `
|
|
334
|
-
enum Direction
|
|
335
|
-
up
|
|
336
|
-
end enum
|
|
337
|
-
|
|
338
|
-
sub main()
|
|
339
|
-
print Direction.up
|
|
340
|
-
print Direction.DOWN
|
|
341
|
-
print Direction.down
|
|
342
|
-
end sub
|
|
343
|
-
`);
|
|
344
|
-
program.validate();
|
|
345
|
-
(0, testHelpers_spec_1.expectDiagnostics)(program, [Object.assign(Object.assign({}, DiagnosticMessages_1.DiagnosticMessages.unknownEnumValue('DOWN', 'Direction')), { range: util_1.util.createRange(7, 36, 7, 40) }), Object.assign(Object.assign({}, DiagnosticMessages_1.DiagnosticMessages.unknownEnumValue('down', 'Direction')), { range: util_1.util.createRange(8, 36, 8, 40) })]);
|
|
346
|
-
});
|
|
347
|
-
it('catches unknown namespaced enum members', () => {
|
|
348
|
-
program.setFile('source/main.bs', `
|
|
349
|
-
sub main()
|
|
350
|
-
print Enums.Direction.DOWN
|
|
351
|
-
print Enums.Direction.down
|
|
352
|
-
print Enums.Direction.up
|
|
353
|
-
end sub
|
|
354
|
-
namespace Enums
|
|
355
|
-
enum Direction
|
|
356
|
-
up
|
|
357
|
-
end enum
|
|
358
|
-
end namespace
|
|
359
|
-
|
|
360
|
-
`);
|
|
361
|
-
program.validate();
|
|
362
|
-
(0, testHelpers_spec_1.expectDiagnostics)(program, [Object.assign(Object.assign({}, DiagnosticMessages_1.DiagnosticMessages.unknownEnumValue('DOWN', 'Enums.Direction')), { range: util_1.util.createRange(2, 42, 2, 46) }), Object.assign(Object.assign({}, DiagnosticMessages_1.DiagnosticMessages.unknownEnumValue('down', 'Enums.Direction')), { range: util_1.util.createRange(3, 42, 3, 46) })]);
|
|
363
|
-
});
|
|
364
|
-
});
|
|
365
|
-
describe('getMemberValueMap', () => {
|
|
366
|
-
function expectMemberValueMap(code, expected) {
|
|
367
|
-
const file = program.setFile('source/lib.brs', code);
|
|
368
|
-
const cancel = new vscode_languageserver_protocol_1.CancellationTokenSource();
|
|
369
|
-
let firstEnum;
|
|
370
|
-
file.ast.walk(statement => {
|
|
371
|
-
if ((0, reflection_1.isEnumStatement)(statement)) {
|
|
372
|
-
firstEnum = statement;
|
|
373
|
-
cancel.cancel();
|
|
374
|
-
}
|
|
375
|
-
}, {
|
|
376
|
-
walkMode: visitors_1.WalkMode.visitStatements,
|
|
377
|
-
cancel: cancel.token
|
|
378
|
-
});
|
|
379
|
-
(0, chai_config_spec_1.expect)(firstEnum).to.exist;
|
|
380
|
-
const values = firstEnum.getMemberValueMap();
|
|
381
|
-
(0, chai_config_spec_1.expect)([...values].reduce((prev, [key, value]) => {
|
|
382
|
-
prev[key] = value;
|
|
383
|
-
return prev;
|
|
384
|
-
}, {})).to.eql(expected);
|
|
385
|
-
}
|
|
386
|
-
it('defaults first enum value to 0', () => {
|
|
387
|
-
expectMemberValueMap(`
|
|
388
|
-
enum Direction
|
|
389
|
-
up
|
|
390
|
-
down
|
|
391
|
-
left
|
|
392
|
-
right
|
|
393
|
-
end enum
|
|
394
|
-
`, {
|
|
395
|
-
up: '0',
|
|
396
|
-
down: '1',
|
|
397
|
-
left: '2',
|
|
398
|
-
right: '3'
|
|
399
|
-
});
|
|
400
|
-
});
|
|
401
|
-
it('continues incrementing after defined int value', () => {
|
|
402
|
-
expectMemberValueMap(`
|
|
403
|
-
enum Direction
|
|
404
|
-
up
|
|
405
|
-
down = 9
|
|
406
|
-
left
|
|
407
|
-
right = 20
|
|
408
|
-
other
|
|
409
|
-
end enum
|
|
410
|
-
`, {
|
|
411
|
-
up: '0',
|
|
412
|
-
down: '9',
|
|
413
|
-
left: '10',
|
|
414
|
-
right: '20',
|
|
415
|
-
other: '21'
|
|
416
|
-
});
|
|
417
|
-
});
|
|
418
|
-
it('returns string values when defined', () => {
|
|
419
|
-
expectMemberValueMap(`
|
|
420
|
-
enum Direction
|
|
421
|
-
up = "up"
|
|
422
|
-
down = "DOWN"
|
|
423
|
-
left = "LeFt"
|
|
424
|
-
right = "righT"
|
|
425
|
-
end enum
|
|
426
|
-
`, {
|
|
427
|
-
up: '"up"',
|
|
428
|
-
down: '"DOWN"',
|
|
429
|
-
left: '"LeFt"',
|
|
430
|
-
right: '"righT"'
|
|
431
|
-
});
|
|
432
|
-
});
|
|
433
|
-
});
|
|
434
|
-
describe('transpile', () => {
|
|
435
|
-
it('supports non-namespaced enum from within a namespace', () => {
|
|
436
|
-
program.options.autoImportComponentScript = true;
|
|
437
|
-
testTranspile(`
|
|
438
|
-
namespace alpha
|
|
439
|
-
sub test()
|
|
440
|
-
print Direction.up
|
|
441
|
-
end sub
|
|
442
|
-
end namespace
|
|
443
|
-
enum Direction
|
|
444
|
-
up = "up"
|
|
445
|
-
end enum
|
|
446
|
-
`, `
|
|
447
|
-
sub alpha_test()
|
|
448
|
-
print "up"
|
|
449
|
-
end sub
|
|
450
|
-
`);
|
|
451
|
-
});
|
|
452
|
-
it('transpiles negative number', () => {
|
|
453
|
-
testTranspile(`
|
|
454
|
-
sub main()
|
|
455
|
-
print Direction.up
|
|
456
|
-
end sub
|
|
457
|
-
enum Direction
|
|
458
|
-
up = -1
|
|
459
|
-
end enum
|
|
460
|
-
`, `
|
|
461
|
-
sub main()
|
|
462
|
-
print -1
|
|
463
|
-
end sub
|
|
464
|
-
`, undefined, undefined, false);
|
|
465
|
-
});
|
|
466
|
-
it('includes original value when no value could be computed', () => {
|
|
467
|
-
testTranspile(`
|
|
468
|
-
sub main()
|
|
469
|
-
print Direction.up
|
|
470
|
-
end sub
|
|
471
|
-
enum Direction
|
|
472
|
-
up = {}
|
|
473
|
-
end enum
|
|
474
|
-
`, `
|
|
475
|
-
sub main()
|
|
476
|
-
print invalid
|
|
477
|
-
end sub
|
|
478
|
-
`, undefined, undefined, false);
|
|
479
|
-
});
|
|
480
|
-
it('writes all literal values as-is (even if there are errors)', () => {
|
|
481
|
-
testTranspile(`
|
|
482
|
-
sub main()
|
|
483
|
-
print Direction.up
|
|
484
|
-
print Direction.down
|
|
485
|
-
print Direction.left
|
|
486
|
-
print Direction.right
|
|
487
|
-
print Direction.upRight
|
|
488
|
-
end sub
|
|
489
|
-
enum Direction
|
|
490
|
-
up = 1
|
|
491
|
-
down = "asdf"
|
|
492
|
-
left = 3.14
|
|
493
|
-
right = &HFF '255
|
|
494
|
-
upRight ' will be 256 since hex ints are parsed as ints
|
|
495
|
-
end enum
|
|
496
|
-
`, `
|
|
497
|
-
sub main()
|
|
498
|
-
print 1
|
|
499
|
-
print "asdf"
|
|
500
|
-
print 3.14
|
|
501
|
-
print &HFF
|
|
502
|
-
print 256
|
|
503
|
-
end sub
|
|
504
|
-
`, 'trim', undefined, false);
|
|
505
|
-
});
|
|
506
|
-
it('supports default-as-integer', () => {
|
|
507
|
-
testTranspile(`
|
|
508
|
-
enum Direction
|
|
509
|
-
up
|
|
510
|
-
down
|
|
511
|
-
left
|
|
512
|
-
right
|
|
513
|
-
end enum
|
|
514
|
-
sub main()
|
|
515
|
-
print Direction.up, Direction.down, Direction.left, Direction.right
|
|
516
|
-
end sub
|
|
517
|
-
`, `
|
|
518
|
-
sub main()
|
|
519
|
-
print 0, 1, 2, 3
|
|
520
|
-
end sub
|
|
521
|
-
`);
|
|
522
|
-
});
|
|
523
|
-
it('supports string enums', () => {
|
|
524
|
-
testTranspile(`
|
|
525
|
-
enum Direction
|
|
526
|
-
up = "up"
|
|
527
|
-
down = "down"
|
|
528
|
-
left = "left"
|
|
529
|
-
right = "right"
|
|
530
|
-
end enum
|
|
531
|
-
sub main()
|
|
532
|
-
print Direction.up, Direction.down, Direction.left, Direction.right
|
|
533
|
-
end sub
|
|
534
|
-
`, `
|
|
535
|
-
sub main()
|
|
536
|
-
print "up", "down", "left", "right"
|
|
537
|
-
end sub
|
|
538
|
-
`);
|
|
539
|
-
});
|
|
540
|
-
it('recognizes namespace-relative enums', () => {
|
|
541
|
-
program.setFile('source/main.bs', `
|
|
542
|
-
namespace MyNamespace
|
|
543
|
-
enum MyEnum
|
|
544
|
-
val1
|
|
545
|
-
val2
|
|
546
|
-
end enum
|
|
547
|
-
|
|
548
|
-
function foo() as integer
|
|
549
|
-
return MyEnum.val1
|
|
550
|
-
end function
|
|
551
|
-
end namespace
|
|
552
|
-
`);
|
|
553
|
-
program.validate();
|
|
554
|
-
(0, testHelpers_spec_1.expectZeroDiagnostics)(program);
|
|
555
|
-
});
|
|
556
|
-
it('replaces enum values from separate file with literals', () => {
|
|
557
|
-
program.setFile('source/enum.bs', `
|
|
558
|
-
enum CharacterType
|
|
559
|
-
Human = "Human"
|
|
560
|
-
Zombie = "Zombie"
|
|
561
|
-
end enum
|
|
562
|
-
namespace Locations
|
|
563
|
-
enum Houses
|
|
564
|
-
TownHouse
|
|
565
|
-
FarmHouse
|
|
566
|
-
end enum
|
|
567
|
-
end namespace
|
|
568
|
-
`);
|
|
569
|
-
testTranspile(`
|
|
570
|
-
sub test()
|
|
571
|
-
print CharacterType.Human
|
|
572
|
-
print CharacterType.Zombie
|
|
573
|
-
print Locations.Houses.TownHouse
|
|
574
|
-
print Locations.Houses.FarmHouse
|
|
575
|
-
end sub
|
|
576
|
-
`, `
|
|
577
|
-
sub test()
|
|
578
|
-
print "Human"
|
|
579
|
-
print "Zombie"
|
|
580
|
-
print 0
|
|
581
|
-
print 1
|
|
582
|
-
end sub
|
|
583
|
-
`);
|
|
584
|
-
});
|
|
585
|
-
it('replaces enums in if statements', () => {
|
|
586
|
-
testTranspile(`
|
|
587
|
-
enum CharacterType
|
|
588
|
-
zombie = "zombie"
|
|
589
|
-
end enum
|
|
590
|
-
sub main()
|
|
591
|
-
if "one" = CharacterType.zombie or "two" = CharacterType.zombie and "three" = CharacterType.zombie
|
|
592
|
-
print true
|
|
593
|
-
end if
|
|
594
|
-
end sub
|
|
595
|
-
`, `
|
|
596
|
-
sub main()
|
|
597
|
-
if "one" = "zombie" or "two" = "zombie" and "three" = "zombie"
|
|
598
|
-
print true
|
|
599
|
-
end if
|
|
600
|
-
end sub
|
|
601
|
-
`);
|
|
602
|
-
});
|
|
603
|
-
});
|
|
604
|
-
describe('completions', () => {
|
|
605
|
-
it('does not crash when completing enum members with unsupported values', () => {
|
|
606
|
-
program.setFile('source/main.bs', `
|
|
607
|
-
sub Main()
|
|
608
|
-
direction.obj
|
|
609
|
-
end sub
|
|
610
|
-
enum Direction
|
|
611
|
-
up
|
|
612
|
-
down
|
|
613
|
-
obj = {}
|
|
614
|
-
end enum
|
|
615
|
-
`);
|
|
616
|
-
// direction.|obj
|
|
617
|
-
(0, testHelpers_spec_1.expectCompletionsIncludes)(program.getCompletions('source/main.bs', util_1.util.createPosition(2, 30)), [{
|
|
618
|
-
label: 'up',
|
|
619
|
-
kind: vscode_languageserver_protocol_1.CompletionItemKind.EnumMember
|
|
620
|
-
}, {
|
|
621
|
-
label: 'down',
|
|
622
|
-
kind: vscode_languageserver_protocol_1.CompletionItemKind.EnumMember
|
|
623
|
-
}, {
|
|
624
|
-
label: 'obj',
|
|
625
|
-
kind: vscode_languageserver_protocol_1.CompletionItemKind.EnumMember
|
|
626
|
-
}]);
|
|
627
|
-
});
|
|
628
|
-
it('gets enum statement completions from global enum', () => {
|
|
629
|
-
program.setFile('source/main.bs', `
|
|
630
|
-
sub Main()
|
|
631
|
-
direction.down
|
|
632
|
-
end sub
|
|
633
|
-
enum Direction
|
|
634
|
-
up
|
|
635
|
-
down
|
|
636
|
-
end enum
|
|
637
|
-
`);
|
|
638
|
-
// |direction.down
|
|
639
|
-
(0, testHelpers_spec_1.expectCompletionsIncludes)(program.getCompletions('source/main.bs', util_1.util.createPosition(2, 20)), [{
|
|
640
|
-
label: 'Direction',
|
|
641
|
-
kind: vscode_languageserver_protocol_1.CompletionItemKind.Enum
|
|
642
|
-
}]);
|
|
643
|
-
// dire|ction.down
|
|
644
|
-
(0, testHelpers_spec_1.expectCompletionsIncludes)(program.getCompletions('source/main.bs', util_1.util.createPosition(2, 24)), [{
|
|
645
|
-
label: 'Direction',
|
|
646
|
-
kind: vscode_languageserver_protocol_1.CompletionItemKind.Enum
|
|
647
|
-
}]);
|
|
648
|
-
// direction|.down
|
|
649
|
-
(0, testHelpers_spec_1.expectCompletionsIncludes)(program.getCompletions('source/main.bs', util_1.util.createPosition(2, 29)), [{
|
|
650
|
-
label: 'Direction',
|
|
651
|
-
kind: vscode_languageserver_protocol_1.CompletionItemKind.Enum
|
|
652
|
-
}]);
|
|
653
|
-
});
|
|
654
|
-
it('gets enum member completions from global enum', () => {
|
|
655
|
-
program.setFile('source/main.bs', `
|
|
656
|
-
sub Main()
|
|
657
|
-
direction.down
|
|
658
|
-
end sub
|
|
659
|
-
enum Direction
|
|
660
|
-
up
|
|
661
|
-
down
|
|
662
|
-
end enum
|
|
663
|
-
`);
|
|
664
|
-
// direction.|down
|
|
665
|
-
(0, testHelpers_spec_1.expectCompletionsIncludes)(program.getCompletions('source/main.bs', util_1.util.createPosition(2, 30)), [{
|
|
666
|
-
label: 'up',
|
|
667
|
-
kind: vscode_languageserver_protocol_1.CompletionItemKind.EnumMember
|
|
668
|
-
}, {
|
|
669
|
-
label: 'down',
|
|
670
|
-
kind: vscode_languageserver_protocol_1.CompletionItemKind.EnumMember
|
|
671
|
-
}]);
|
|
672
|
-
// direction.do|wn
|
|
673
|
-
(0, testHelpers_spec_1.expectCompletionsIncludes)(program.getCompletions('source/main.bs', util_1.util.createPosition(2, 32)), [{
|
|
674
|
-
label: 'up',
|
|
675
|
-
kind: vscode_languageserver_protocol_1.CompletionItemKind.EnumMember
|
|
676
|
-
}, {
|
|
677
|
-
label: 'down',
|
|
678
|
-
kind: vscode_languageserver_protocol_1.CompletionItemKind.EnumMember
|
|
679
|
-
}]);
|
|
680
|
-
// direction.down|
|
|
681
|
-
(0, testHelpers_spec_1.expectCompletionsIncludes)(program.getCompletions('source/main.bs', util_1.util.createPosition(2, 34)), [{
|
|
682
|
-
label: 'up',
|
|
683
|
-
kind: vscode_languageserver_protocol_1.CompletionItemKind.EnumMember
|
|
684
|
-
}, {
|
|
685
|
-
label: 'down',
|
|
686
|
-
kind: vscode_languageserver_protocol_1.CompletionItemKind.EnumMember
|
|
687
|
-
}]);
|
|
688
|
-
});
|
|
689
|
-
it('gets enum statement completions from namespaced enum', () => {
|
|
690
|
-
program.setFile('source/main.bs', `
|
|
691
|
-
sub Main()
|
|
692
|
-
enums.direction.down
|
|
693
|
-
end sub
|
|
694
|
-
namespace enums
|
|
695
|
-
enum Direction
|
|
696
|
-
up
|
|
697
|
-
down
|
|
698
|
-
end enum
|
|
699
|
-
end namespace
|
|
700
|
-
`);
|
|
701
|
-
// enums.|direction.down
|
|
702
|
-
(0, testHelpers_spec_1.expectCompletionsIncludes)(program.getCompletions('source/main.bs', util_1.util.createPosition(2, 26)), [{
|
|
703
|
-
label: 'Direction',
|
|
704
|
-
kind: vscode_languageserver_protocol_1.CompletionItemKind.Enum
|
|
705
|
-
}]);
|
|
706
|
-
// enums.dire|ction.down
|
|
707
|
-
(0, testHelpers_spec_1.expectCompletionsIncludes)(program.getCompletions('source/main.bs', util_1.util.createPosition(2, 30)), [{
|
|
708
|
-
label: 'Direction',
|
|
709
|
-
kind: vscode_languageserver_protocol_1.CompletionItemKind.Enum
|
|
710
|
-
}]);
|
|
711
|
-
// enums.direction|.down
|
|
712
|
-
(0, testHelpers_spec_1.expectCompletionsIncludes)(program.getCompletions('source/main.bs', util_1.util.createPosition(2, 35)), [{
|
|
713
|
-
label: 'Direction',
|
|
714
|
-
kind: vscode_languageserver_protocol_1.CompletionItemKind.Enum
|
|
715
|
-
}]);
|
|
716
|
-
});
|
|
717
|
-
it('gets enum member completions from namespaced enum', () => {
|
|
718
|
-
program.setFile('source/main.bs', `
|
|
719
|
-
sub Main()
|
|
720
|
-
enums.direction.down
|
|
721
|
-
end sub
|
|
722
|
-
namespace enums
|
|
723
|
-
enum Direction
|
|
724
|
-
up
|
|
725
|
-
down
|
|
726
|
-
end enum
|
|
727
|
-
end namespace
|
|
728
|
-
`);
|
|
729
|
-
program.validate();
|
|
730
|
-
// enums.direction.|down
|
|
731
|
-
(0, testHelpers_spec_1.expectCompletionsIncludes)(program.getCompletions('source/main.bs', util_1.util.createPosition(2, 36)), [{
|
|
732
|
-
label: 'up',
|
|
733
|
-
kind: vscode_languageserver_protocol_1.CompletionItemKind.EnumMember
|
|
734
|
-
}, {
|
|
735
|
-
label: 'down',
|
|
736
|
-
kind: vscode_languageserver_protocol_1.CompletionItemKind.EnumMember
|
|
737
|
-
}]);
|
|
738
|
-
// enums.direction.do|wn
|
|
739
|
-
(0, testHelpers_spec_1.expectCompletionsIncludes)(program.getCompletions('source/main.bs', util_1.util.createPosition(2, 38)), [{
|
|
740
|
-
label: 'up',
|
|
741
|
-
kind: vscode_languageserver_protocol_1.CompletionItemKind.EnumMember
|
|
742
|
-
}, {
|
|
743
|
-
label: 'down',
|
|
744
|
-
kind: vscode_languageserver_protocol_1.CompletionItemKind.EnumMember
|
|
745
|
-
}]);
|
|
746
|
-
// enums.direction.down|
|
|
747
|
-
(0, testHelpers_spec_1.expectCompletionsIncludes)(program.getCompletions('source/main.bs', util_1.util.createPosition(2, 40)), [{
|
|
748
|
-
label: 'up',
|
|
749
|
-
kind: vscode_languageserver_protocol_1.CompletionItemKind.EnumMember
|
|
750
|
-
}, {
|
|
751
|
-
label: 'down',
|
|
752
|
-
kind: vscode_languageserver_protocol_1.CompletionItemKind.EnumMember
|
|
753
|
-
}]);
|
|
754
|
-
});
|
|
755
|
-
it('excludes enum member completions from namespace enum', () => {
|
|
756
|
-
program.setFile('source/main.bs', `
|
|
757
|
-
sub Main()
|
|
758
|
-
direction.ba
|
|
759
|
-
end sub
|
|
760
|
-
namespace enums
|
|
761
|
-
enum Direction
|
|
762
|
-
up
|
|
763
|
-
down
|
|
764
|
-
end enum
|
|
765
|
-
end namespace
|
|
766
|
-
`);
|
|
767
|
-
program.validate();
|
|
768
|
-
//should NOT find Direction because it's not directly available at the top level (you need to go through `enums.` to get at it)
|
|
769
|
-
// dire|ction.down
|
|
770
|
-
(0, testHelpers_spec_1.expectCompletionsExcludes)(program.getCompletions('source/main.bs', util_1.util.createPosition(2, 24)), [{
|
|
771
|
-
label: 'Direction',
|
|
772
|
-
kind: vscode_languageserver_protocol_1.CompletionItemKind.Enum
|
|
773
|
-
}]);
|
|
774
|
-
});
|
|
775
|
-
it('infers namespace for enum statement completions', () => {
|
|
776
|
-
program.setFile('source/main.bs', `
|
|
777
|
-
namespace enums
|
|
778
|
-
sub Main()
|
|
779
|
-
direction.down
|
|
780
|
-
end sub
|
|
781
|
-
enum Direction
|
|
782
|
-
up
|
|
783
|
-
down
|
|
784
|
-
end enum
|
|
785
|
-
end namespace
|
|
786
|
-
enum Logic
|
|
787
|
-
yes
|
|
788
|
-
no
|
|
789
|
-
end enum
|
|
790
|
-
`);
|
|
791
|
-
// dire|ction.down
|
|
792
|
-
(0, testHelpers_spec_1.expectCompletionsIncludes)(program.getCompletions('source/main.bs', util_1.util.createPosition(3, 33)), [{
|
|
793
|
-
label: 'Direction',
|
|
794
|
-
kind: vscode_languageserver_protocol_1.CompletionItemKind.Enum
|
|
795
|
-
}, {
|
|
796
|
-
label: 'Logic',
|
|
797
|
-
kind: vscode_languageserver_protocol_1.CompletionItemKind.Enum
|
|
798
|
-
}]);
|
|
799
|
-
});
|
|
800
|
-
it('infers namespace for enum member completions', () => {
|
|
801
|
-
program.setFile('source/main.bs', `
|
|
802
|
-
namespace enums
|
|
803
|
-
sub Main()
|
|
804
|
-
direction.down
|
|
805
|
-
end sub
|
|
806
|
-
enum Direction
|
|
807
|
-
up
|
|
808
|
-
down
|
|
809
|
-
end enum
|
|
810
|
-
end namespace
|
|
811
|
-
`);
|
|
812
|
-
// direction.do|wn
|
|
813
|
-
(0, testHelpers_spec_1.expectCompletionsIncludes)(program.getCompletions('source/main.bs', util_1.util.createPosition(3, 36)), [{
|
|
814
|
-
label: 'up',
|
|
815
|
-
kind: vscode_languageserver_protocol_1.CompletionItemKind.EnumMember
|
|
816
|
-
}, {
|
|
817
|
-
label: 'down',
|
|
818
|
-
kind: vscode_languageserver_protocol_1.CompletionItemKind.EnumMember
|
|
819
|
-
}]);
|
|
820
|
-
});
|
|
821
|
-
it('supports explicit namespace for enum statement completions', () => {
|
|
822
|
-
program.setFile('source/main.bs', `
|
|
823
|
-
namespace enums
|
|
824
|
-
sub Main()
|
|
825
|
-
enums.direction.down
|
|
826
|
-
end sub
|
|
827
|
-
enum Direction
|
|
828
|
-
up
|
|
829
|
-
down
|
|
830
|
-
end enum
|
|
831
|
-
end namespace
|
|
832
|
-
`);
|
|
833
|
-
// enums.dire|ction.down
|
|
834
|
-
(0, testHelpers_spec_1.expectCompletionsIncludes)(program.getCompletions('source/main.bs', util_1.util.createPosition(3, 38)), [{
|
|
835
|
-
label: 'Direction',
|
|
836
|
-
kind: vscode_languageserver_protocol_1.CompletionItemKind.Enum
|
|
837
|
-
}]);
|
|
838
|
-
});
|
|
839
|
-
it('supports explicit namespace for enum statement completions', () => {
|
|
840
|
-
program.setFile('source/main.bs', `
|
|
841
|
-
namespace logger
|
|
842
|
-
sub log()
|
|
843
|
-
enums.direction.down
|
|
844
|
-
end sub
|
|
845
|
-
end namespace
|
|
846
|
-
namespace enums
|
|
847
|
-
enum Direction
|
|
848
|
-
up
|
|
849
|
-
down
|
|
850
|
-
end enum
|
|
851
|
-
end namespace
|
|
852
|
-
`);
|
|
853
|
-
// enums.dire|ction.down
|
|
854
|
-
(0, testHelpers_spec_1.expectCompletionsIncludes)(program.getCompletions('source/main.bs', util_1.util.createPosition(3, 38)), [{
|
|
855
|
-
label: 'Direction',
|
|
856
|
-
kind: vscode_languageserver_protocol_1.CompletionItemKind.Enum
|
|
857
|
-
}]);
|
|
858
|
-
});
|
|
859
|
-
});
|
|
860
|
-
it('transpiles simple enum in a unary expression', () => {
|
|
861
|
-
testTranspile(`
|
|
862
|
-
enum SomeEnum
|
|
863
|
-
foo = 1
|
|
864
|
-
end enum
|
|
865
|
-
sub main()
|
|
866
|
-
bar = -SomeEnum.foo
|
|
867
|
-
end sub
|
|
868
|
-
`, `
|
|
869
|
-
sub main()
|
|
870
|
-
bar = - 1
|
|
871
|
-
end sub
|
|
872
|
-
`, undefined, 'source/main.bs');
|
|
873
|
-
});
|
|
874
|
-
it('transpiles comples enum in a unary expression', () => {
|
|
875
|
-
testTranspile(`
|
|
876
|
-
namespace name.space
|
|
877
|
-
enum SomeEnum
|
|
878
|
-
foo = 1
|
|
879
|
-
end enum
|
|
880
|
-
end namespace
|
|
881
|
-
sub main()
|
|
882
|
-
bar = -name.space.SomeEnum.foo
|
|
883
|
-
end sub
|
|
884
|
-
`, `
|
|
885
|
-
sub main()
|
|
886
|
-
bar = - 1
|
|
887
|
-
end sub
|
|
888
|
-
`, undefined, 'source/main.bs');
|
|
889
|
-
});
|
|
890
|
-
it('handles both sides of a logical expression', () => {
|
|
891
|
-
testTranspile(`
|
|
892
|
-
sub main()
|
|
893
|
-
dir = m.direction = Direction.up
|
|
894
|
-
dir = Direction.up = m.direction
|
|
895
|
-
end sub
|
|
896
|
-
enum Direction
|
|
897
|
-
up = "up"
|
|
898
|
-
down = "down"
|
|
899
|
-
end enum
|
|
900
|
-
`, `
|
|
901
|
-
sub main()
|
|
902
|
-
dir = m.direction = "up"
|
|
903
|
-
dir = "up" = m.direction
|
|
904
|
-
end sub
|
|
905
|
-
`);
|
|
906
|
-
});
|
|
907
|
-
it('handles when found in boolean expressions', () => {
|
|
908
|
-
testTranspile(`
|
|
909
|
-
sub main()
|
|
910
|
-
result = Direction.up = "up" or Direction.down = "down" and Direction.up = Direction.down
|
|
911
|
-
end sub
|
|
912
|
-
enum Direction
|
|
913
|
-
up = "up"
|
|
914
|
-
down = "down"
|
|
915
|
-
end enum
|
|
916
|
-
`, `
|
|
917
|
-
sub main()
|
|
918
|
-
result = "up" = "up" or "down" = "down" and "up" = "down"
|
|
919
|
-
end sub
|
|
920
|
-
`);
|
|
921
|
-
});
|
|
922
|
-
it('replaces enum values in if statements', () => {
|
|
923
|
-
testTranspile(`
|
|
924
|
-
sub main()
|
|
925
|
-
if m.direction = Direction.up
|
|
926
|
-
print Direction.up
|
|
927
|
-
end if
|
|
928
|
-
end sub
|
|
929
|
-
enum Direction
|
|
930
|
-
up = "up"
|
|
931
|
-
down = "down"
|
|
932
|
-
end enum
|
|
933
|
-
`, `
|
|
934
|
-
sub main()
|
|
935
|
-
if m.direction = "up"
|
|
936
|
-
print "up"
|
|
937
|
-
end if
|
|
938
|
-
end sub
|
|
939
|
-
`);
|
|
940
|
-
});
|
|
941
|
-
it('replaces enum values in function default parameter value expressions', () => {
|
|
942
|
-
testTranspile(`
|
|
943
|
-
sub speak(dir = Direction.up)
|
|
944
|
-
end sub
|
|
945
|
-
enum Direction
|
|
946
|
-
up = "up"
|
|
947
|
-
end enum
|
|
948
|
-
`, `
|
|
949
|
-
sub speak(dir = "up")
|
|
950
|
-
end sub
|
|
951
|
-
`);
|
|
952
|
-
});
|
|
953
|
-
it('replaces enum values in for loops', () => {
|
|
954
|
-
testTranspile(`
|
|
955
|
-
sub main()
|
|
956
|
-
for i = Loop.start to Loop.end step Loop.step
|
|
957
|
-
end for
|
|
958
|
-
end sub
|
|
959
|
-
enum Loop
|
|
960
|
-
start = 0
|
|
961
|
-
end = 10
|
|
962
|
-
step = 1
|
|
963
|
-
end enum
|
|
964
|
-
`, `
|
|
965
|
-
sub main()
|
|
966
|
-
for i = 0 to 10 step 1
|
|
967
|
-
end for
|
|
968
|
-
end sub
|
|
969
|
-
`);
|
|
970
|
-
});
|
|
971
|
-
it('transpiles enum values when used in complex expressions', () => {
|
|
972
|
-
testTranspile(`
|
|
973
|
-
sub main()
|
|
974
|
-
print Direction.up.toStr()
|
|
975
|
-
end sub
|
|
976
|
-
enum Direction
|
|
977
|
-
up = "up"
|
|
978
|
-
down = "down"
|
|
979
|
-
end enum
|
|
980
|
-
`, `
|
|
981
|
-
sub main()
|
|
982
|
-
print "up".toStr()
|
|
983
|
-
end sub
|
|
984
|
-
`);
|
|
985
|
-
});
|
|
986
|
-
describe('computed AA keys', () => {
|
|
987
|
-
it('transpiles enum member as AA key', () => {
|
|
988
|
-
testTranspile(`
|
|
989
|
-
enum MyKey
|
|
990
|
-
first = "key1"
|
|
991
|
-
end enum
|
|
992
|
-
sub main()
|
|
993
|
-
myAA = {
|
|
994
|
-
[MyKey.first]: "value1"
|
|
995
|
-
}
|
|
996
|
-
end sub
|
|
997
|
-
`, `
|
|
998
|
-
sub main()
|
|
999
|
-
myAA = {
|
|
1000
|
-
"key1": "value1"
|
|
1001
|
-
}
|
|
1002
|
-
end sub
|
|
1003
|
-
`);
|
|
1004
|
-
});
|
|
1005
|
-
it('emits diagnostic for integer enum member used as AA key', () => {
|
|
1006
|
-
program.setFile('source/main.bs', `
|
|
1007
|
-
enum MyKey
|
|
1008
|
-
first = 1
|
|
1009
|
-
end enum
|
|
1010
|
-
sub main()
|
|
1011
|
-
myAA = {
|
|
1012
|
-
[MyKey.first]: "value1"
|
|
1013
|
-
}
|
|
1014
|
-
end sub
|
|
1015
|
-
`);
|
|
1016
|
-
program.validate();
|
|
1017
|
-
(0, testHelpers_spec_1.expectDiagnostics)(program, [
|
|
1018
|
-
DiagnosticMessages_1.DiagnosticMessages.computedAAKeyMustBeStringExpression()
|
|
1019
|
-
]);
|
|
1020
|
-
});
|
|
1021
|
-
it('transpiles const as AA key', () => {
|
|
1022
|
-
testTranspile(`
|
|
1023
|
-
const MY_KEY = "myKey"
|
|
1024
|
-
sub main()
|
|
1025
|
-
myAA = {
|
|
1026
|
-
[MY_KEY]: "value1"
|
|
1027
|
-
}
|
|
1028
|
-
end sub
|
|
1029
|
-
`, `
|
|
1030
|
-
sub main()
|
|
1031
|
-
myAA = {
|
|
1032
|
-
"myKey": "value1"
|
|
1033
|
-
}
|
|
1034
|
-
end sub
|
|
1035
|
-
`);
|
|
1036
|
-
});
|
|
1037
|
-
it('transpiles namespaced enum member as AA key', () => {
|
|
1038
|
-
testTranspile(`
|
|
1039
|
-
namespace Keys
|
|
1040
|
-
enum MyKey
|
|
1041
|
-
first = "key1"
|
|
1042
|
-
end enum
|
|
1043
|
-
end namespace
|
|
1044
|
-
sub main()
|
|
1045
|
-
myAA = {
|
|
1046
|
-
[Keys.MyKey.first]: "value1"
|
|
1047
|
-
}
|
|
1048
|
-
end sub
|
|
1049
|
-
`, `
|
|
1050
|
-
sub main()
|
|
1051
|
-
myAA = {
|
|
1052
|
-
"key1": "value1"
|
|
1053
|
-
}
|
|
1054
|
-
end sub
|
|
1055
|
-
`);
|
|
1056
|
-
});
|
|
1057
|
-
it('transpiles literal string as AA key', () => {
|
|
1058
|
-
testTranspile(`
|
|
1059
|
-
sub main()
|
|
1060
|
-
myAA = {
|
|
1061
|
-
["my-hyphenated-key"]: "value1"
|
|
1062
|
-
}
|
|
1063
|
-
end sub
|
|
1064
|
-
`, `
|
|
1065
|
-
sub main()
|
|
1066
|
-
myAA = {
|
|
1067
|
-
"my-hyphenated-key": "value1"
|
|
1068
|
-
}
|
|
1069
|
-
end sub
|
|
1070
|
-
`);
|
|
1071
|
-
});
|
|
1072
|
-
it('transpiles multiple computed keys in one AA', () => {
|
|
1073
|
-
testTranspile(`
|
|
1074
|
-
enum Keys
|
|
1075
|
-
a = "keyA"
|
|
1076
|
-
b = "keyB"
|
|
1077
|
-
end enum
|
|
1078
|
-
sub main()
|
|
1079
|
-
myAA = {
|
|
1080
|
-
[Keys.a]: 1,
|
|
1081
|
-
[Keys.b]: 2
|
|
1082
|
-
}
|
|
1083
|
-
end sub
|
|
1084
|
-
`, `
|
|
1085
|
-
sub main()
|
|
1086
|
-
myAA = {
|
|
1087
|
-
"keyA": 1
|
|
1088
|
-
"keyB": 2
|
|
1089
|
-
}
|
|
1090
|
-
end sub
|
|
1091
|
-
`);
|
|
1092
|
-
});
|
|
1093
|
-
it('transpiles mixed computed and normal keys', () => {
|
|
1094
|
-
testTranspile(`
|
|
1095
|
-
enum Keys
|
|
1096
|
-
first = "key1"
|
|
1097
|
-
end enum
|
|
1098
|
-
sub main()
|
|
1099
|
-
myAA = {
|
|
1100
|
-
normalKey: 1,
|
|
1101
|
-
[Keys.first]: 2
|
|
1102
|
-
}
|
|
1103
|
-
end sub
|
|
1104
|
-
`, `
|
|
1105
|
-
sub main()
|
|
1106
|
-
myAA = {
|
|
1107
|
-
normalKey: 1
|
|
1108
|
-
"key1": 2
|
|
1109
|
-
}
|
|
1110
|
-
end sub
|
|
1111
|
-
`);
|
|
1112
|
-
});
|
|
1113
|
-
it('transpiles const from enum', () => {
|
|
1114
|
-
testTranspile(`
|
|
1115
|
-
enum Keys
|
|
1116
|
-
first = "key1"
|
|
1117
|
-
end enum
|
|
1118
|
-
const MY_KEY = Keys.first
|
|
1119
|
-
sub main()
|
|
1120
|
-
myAA = {
|
|
1121
|
-
[MY_KEY]: 2
|
|
1122
|
-
}
|
|
1123
|
-
end sub
|
|
1124
|
-
`, `
|
|
1125
|
-
sub main()
|
|
1126
|
-
myAA = {
|
|
1127
|
-
"key1": 2
|
|
1128
|
-
}
|
|
1129
|
-
end sub
|
|
1130
|
-
`);
|
|
1131
|
-
});
|
|
1132
|
-
it('emits diagnostic for non-constant computed key', () => {
|
|
1133
|
-
program.setFile('source/main.bs', `
|
|
1134
|
-
sub main()
|
|
1135
|
-
someVar = "key"
|
|
1136
|
-
myAA = {
|
|
1137
|
-
[someVar]: "value"
|
|
1138
|
-
}
|
|
1139
|
-
end sub
|
|
1140
|
-
`);
|
|
1141
|
-
program.validate();
|
|
1142
|
-
(0, testHelpers_spec_1.expectDiagnostics)(program, [
|
|
1143
|
-
DiagnosticMessages_1.DiagnosticMessages.computedPropertyKeyMustBeConstantExpression()
|
|
1144
|
-
]);
|
|
1145
|
-
});
|
|
1146
|
-
it('emits diagnostic for non-string literal used as computed key', () => {
|
|
1147
|
-
program.setFile('source/main.bs', `
|
|
1148
|
-
sub main()
|
|
1149
|
-
myAA = {
|
|
1150
|
-
[42]: "value"
|
|
1151
|
-
}
|
|
1152
|
-
end sub
|
|
1153
|
-
`);
|
|
1154
|
-
program.validate();
|
|
1155
|
-
(0, testHelpers_spec_1.expectDiagnostics)(program, [
|
|
1156
|
-
DiagnosticMessages_1.DiagnosticMessages.computedAAKeyMustBeStringExpression()
|
|
1157
|
-
]);
|
|
1158
|
-
});
|
|
1159
|
-
it('emits diagnostic for non-string const used as computed key', () => {
|
|
1160
|
-
program.setFile('source/main.bs', `
|
|
1161
|
-
const MY_INT_KEY = 42
|
|
1162
|
-
sub main()
|
|
1163
|
-
myAA = {
|
|
1164
|
-
[MY_INT_KEY]: "value"
|
|
1165
|
-
}
|
|
1166
|
-
end sub
|
|
1167
|
-
`);
|
|
1168
|
-
program.validate();
|
|
1169
|
-
(0, testHelpers_spec_1.expectDiagnostics)(program, [
|
|
1170
|
-
DiagnosticMessages_1.DiagnosticMessages.computedAAKeyMustBeStringExpression()
|
|
1171
|
-
]);
|
|
1172
|
-
});
|
|
1173
|
-
it('accepts a const that chains to a string const', () => {
|
|
1174
|
-
program.setFile('source/main.bs', `
|
|
1175
|
-
const BASE_KEY = "myKey"
|
|
1176
|
-
const ALIAS_KEY = BASE_KEY
|
|
1177
|
-
sub main()
|
|
1178
|
-
myAA = {
|
|
1179
|
-
[ALIAS_KEY]: "value"
|
|
1180
|
-
}
|
|
1181
|
-
end sub
|
|
1182
|
-
`);
|
|
1183
|
-
program.validate();
|
|
1184
|
-
(0, testHelpers_spec_1.expectZeroDiagnostics)(program);
|
|
1185
|
-
});
|
|
1186
|
-
it('emits diagnostic when a const chain resolves to a non-string', () => {
|
|
1187
|
-
program.setFile('source/main.bs', `
|
|
1188
|
-
const INT_KEY = 99
|
|
1189
|
-
const ALIAS_KEY = INT_KEY
|
|
1190
|
-
sub main()
|
|
1191
|
-
myAA = {
|
|
1192
|
-
[ALIAS_KEY]: "value"
|
|
1193
|
-
}
|
|
1194
|
-
end sub
|
|
1195
|
-
`);
|
|
1196
|
-
program.validate();
|
|
1197
|
-
(0, testHelpers_spec_1.expectDiagnostics)(program, [
|
|
1198
|
-
DiagnosticMessages_1.DiagnosticMessages.computedAAKeyMustBeStringExpression()
|
|
1199
|
-
]);
|
|
1200
|
-
});
|
|
1201
|
-
it('emits diagnostic for circular const reference', () => {
|
|
1202
|
-
program.setFile('source/main.bs', `
|
|
1203
|
-
const A = B
|
|
1204
|
-
const B = A
|
|
1205
|
-
sub main()
|
|
1206
|
-
myAA = {
|
|
1207
|
-
[A]: "value"
|
|
1208
|
-
}
|
|
1209
|
-
end sub
|
|
1210
|
-
`);
|
|
1211
|
-
program.validate();
|
|
1212
|
-
(0, testHelpers_spec_1.expectDiagnostics)(program, [
|
|
1213
|
-
DiagnosticMessages_1.DiagnosticMessages.circularReferenceDetected(['A', 'B', 'A'], 'source').message,
|
|
1214
|
-
DiagnosticMessages_1.DiagnosticMessages.circularReferenceDetected(['B', 'A', 'B'], 'source').message,
|
|
1215
|
-
DiagnosticMessages_1.DiagnosticMessages.computedAAKeyMustBeStringExpression()
|
|
1216
|
-
]);
|
|
1217
|
-
});
|
|
1218
|
-
it('emits diagnostic for boolean literal used as computed key', () => {
|
|
1219
|
-
program.setFile('source/main.bs', `
|
|
1220
|
-
sub main()
|
|
1221
|
-
myAA = {
|
|
1222
|
-
[true]: "value"
|
|
1223
|
-
}
|
|
1224
|
-
end sub
|
|
1225
|
-
`);
|
|
1226
|
-
program.validate();
|
|
1227
|
-
(0, testHelpers_spec_1.expectDiagnostics)(program, [
|
|
1228
|
-
DiagnosticMessages_1.DiagnosticMessages.computedAAKeyMustBeStringExpression()
|
|
1229
|
-
]);
|
|
1230
|
-
});
|
|
1231
|
-
it('emits diagnostic for float literal used as computed key', () => {
|
|
1232
|
-
program.setFile('source/main.bs', `
|
|
1233
|
-
sub main()
|
|
1234
|
-
myAA = {
|
|
1235
|
-
[3.14]: "value"
|
|
1236
|
-
}
|
|
1237
|
-
end sub
|
|
1238
|
-
`);
|
|
1239
|
-
program.validate();
|
|
1240
|
-
(0, testHelpers_spec_1.expectDiagnostics)(program, [
|
|
1241
|
-
DiagnosticMessages_1.DiagnosticMessages.computedAAKeyMustBeStringExpression()
|
|
1242
|
-
]);
|
|
1243
|
-
});
|
|
1244
|
-
it('emits diagnostic for function call used as computed key', () => {
|
|
1245
|
-
program.setFile('source/main.bs', `
|
|
1246
|
-
sub getKey() as string
|
|
1247
|
-
return "key"
|
|
1248
|
-
end sub
|
|
1249
|
-
sub main()
|
|
1250
|
-
myAA = {
|
|
1251
|
-
[getKey()]: "value"
|
|
1252
|
-
}
|
|
1253
|
-
end sub
|
|
1254
|
-
`);
|
|
1255
|
-
program.validate();
|
|
1256
|
-
(0, testHelpers_spec_1.expectDiagnostics)(program, [
|
|
1257
|
-
DiagnosticMessages_1.DiagnosticMessages.computedPropertyKeyMustBeConstantExpression()
|
|
1258
|
-
]);
|
|
1259
|
-
});
|
|
1260
|
-
it('emits diagnostic for arithmetic expression used as computed key', () => {
|
|
1261
|
-
program.setFile('source/main.bs', `
|
|
1262
|
-
sub main()
|
|
1263
|
-
myAA = {
|
|
1264
|
-
[1 + 2]: "value"
|
|
1265
|
-
}
|
|
1266
|
-
end sub
|
|
1267
|
-
`);
|
|
1268
|
-
program.validate();
|
|
1269
|
-
(0, testHelpers_spec_1.expectDiagnostics)(program, [
|
|
1270
|
-
DiagnosticMessages_1.DiagnosticMessages.computedPropertyKeyMustBeConstantExpression()
|
|
1271
|
-
]);
|
|
1272
|
-
});
|
|
1273
|
-
it('emits diagnostic for non-string default enum member used as computed key', () => {
|
|
1274
|
-
program.setFile('source/main.bs', `
|
|
1275
|
-
enum MyKey
|
|
1276
|
-
first
|
|
1277
|
-
end enum
|
|
1278
|
-
sub main()
|
|
1279
|
-
myAA = {
|
|
1280
|
-
[MyKey.first]: "value"
|
|
1281
|
-
}
|
|
1282
|
-
end sub
|
|
1283
|
-
`);
|
|
1284
|
-
program.validate();
|
|
1285
|
-
(0, testHelpers_spec_1.expectDiagnostics)(program, [
|
|
1286
|
-
DiagnosticMessages_1.DiagnosticMessages.computedAAKeyMustBeStringExpression()
|
|
1287
|
-
]);
|
|
1288
|
-
});
|
|
1289
|
-
it('emits diagnostic for non-string namespaced const used as computed key', () => {
|
|
1290
|
-
program.setFile('source/main.bs', `
|
|
1291
|
-
namespace Keys
|
|
1292
|
-
const MY_KEY = 42
|
|
1293
|
-
end namespace
|
|
1294
|
-
sub main()
|
|
1295
|
-
myAA = {
|
|
1296
|
-
[Keys.MY_KEY]: "value"
|
|
1297
|
-
}
|
|
1298
|
-
end sub
|
|
1299
|
-
`);
|
|
1300
|
-
program.validate();
|
|
1301
|
-
(0, testHelpers_spec_1.expectDiagnostics)(program, [
|
|
1302
|
-
DiagnosticMessages_1.DiagnosticMessages.computedAAKeyMustBeStringExpression()
|
|
1303
|
-
]);
|
|
1304
|
-
});
|
|
1305
|
-
});
|
|
1306
|
-
});
|
|
1307
|
-
//# sourceMappingURL=Enum.spec.js.map
|