brighterscript 1.0.0-alpha.1 → 1.0.0-alpha.13
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +362 -248
- package/README.md +2 -2
- package/bsconfig.schema.json +1 -1
- package/dist/CodeActionUtil.d.ts +11 -2
- package/dist/CodeActionUtil.js +17 -3
- package/dist/CodeActionUtil.js.map +1 -1
- package/dist/CommentFlagProcessor.d.ts +4 -4
- package/dist/CommentFlagProcessor.js +5 -3
- package/dist/CommentFlagProcessor.js.map +1 -1
- package/dist/DependencyGraph.js.map +1 -1
- package/dist/DiagnosticCollection.js +2 -2
- package/dist/DiagnosticCollection.js.map +1 -1
- package/dist/DiagnosticFilterer.js +3 -3
- package/dist/DiagnosticFilterer.js.map +1 -1
- package/dist/DiagnosticMessages.d.ts +15 -5
- package/dist/DiagnosticMessages.js +19 -9
- package/dist/DiagnosticMessages.js.map +1 -1
- package/dist/LanguageServer.d.ts +11 -10
- package/dist/LanguageServer.js +87 -58
- package/dist/LanguageServer.js.map +1 -1
- package/dist/Logger.d.ts +2 -0
- package/dist/Logger.js +5 -3
- package/dist/Logger.js.map +1 -1
- package/dist/Program.d.ts +76 -46
- package/dist/Program.js +254 -180
- package/dist/Program.js.map +1 -1
- package/dist/ProgramBuilder.d.ts +7 -7
- package/dist/ProgramBuilder.js +37 -43
- package/dist/ProgramBuilder.js.map +1 -1
- package/dist/Scope.d.ts +33 -23
- package/dist/Scope.js +222 -147
- package/dist/Scope.js.map +1 -1
- package/dist/SemanticTokenUtils.d.ts +14 -0
- package/dist/SemanticTokenUtils.js +81 -0
- package/dist/SemanticTokenUtils.js.map +1 -0
- package/dist/SymbolTable.d.ts +9 -3
- package/dist/SymbolTable.js +40 -13
- package/dist/SymbolTable.js.map +1 -1
- package/dist/XmlScope.d.ts +7 -2
- package/dist/XmlScope.js +67 -29
- package/dist/XmlScope.js.map +1 -1
- package/dist/astUtils/AstEditor.d.ts +27 -0
- package/dist/astUtils/AstEditor.js +97 -0
- package/dist/astUtils/AstEditor.js.map +1 -0
- package/dist/astUtils/AstEditor.spec.d.ts +1 -0
- package/dist/astUtils/AstEditor.spec.js +133 -0
- package/dist/astUtils/AstEditor.spec.js.map +1 -0
- package/dist/astUtils/creators.d.ts +15 -1
- package/dist/astUtils/creators.js +39 -9
- package/dist/astUtils/creators.js.map +1 -1
- package/dist/astUtils/creators.spec.js +4 -4
- package/dist/astUtils/creators.spec.js.map +1 -1
- package/dist/astUtils/index.js +1 -1
- package/dist/astUtils/reflection.d.ts +20 -8
- package/dist/astUtils/reflection.js +42 -1
- package/dist/astUtils/reflection.js.map +1 -1
- package/dist/astUtils/reflection.spec.js +115 -115
- package/dist/astUtils/reflection.spec.js.map +1 -1
- package/dist/astUtils/stackedVisitor.js.map +1 -1
- package/dist/astUtils/stackedVisitor.spec.js +13 -13
- package/dist/astUtils/stackedVisitor.spec.js.map +1 -1
- package/dist/astUtils/visitors.js +1 -1
- package/dist/astUtils/visitors.js.map +1 -1
- package/dist/astUtils/visitors.spec.js +28 -28
- package/dist/astUtils/visitors.spec.js.map +1 -1
- package/dist/astUtils/xml.d.ts +4 -3
- package/dist/astUtils/xml.js +8 -3
- package/dist/astUtils/xml.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/codeActions/CodeActionsProcessor.js +5 -6
- package/dist/bscPlugin/codeActions/CodeActionsProcessor.js.map +1 -1
- package/dist/bscPlugin/codeActions/CodeActionsProcessor.spec.js +30 -30
- package/dist/bscPlugin/codeActions/CodeActionsProcessor.spec.js.map +1 -1
- package/dist/bscPlugin/semanticTokens/SemanticTokensProcessor.d.ts +7 -0
- package/dist/bscPlugin/semanticTokens/SemanticTokensProcessor.js +63 -0
- package/dist/bscPlugin/semanticTokens/SemanticTokensProcessor.js.map +1 -0
- package/dist/bscPlugin/semanticTokens/SemanticTokensProcessor.spec.d.ts +1 -0
- package/dist/bscPlugin/semanticTokens/SemanticTokensProcessor.spec.js +45 -0
- package/dist/bscPlugin/semanticTokens/SemanticTokensProcessor.spec.js.map +1 -0
- package/dist/diagnosticUtils.d.ts +1 -0
- package/dist/diagnosticUtils.js +14 -7
- package/dist/diagnosticUtils.js.map +1 -1
- package/dist/examples/plugins/removePrint.js +2 -2
- package/dist/examples/plugins/removePrint.js.map +1 -1
- package/dist/files/BrsFile.Class.spec.js +486 -71
- package/dist/files/BrsFile.Class.spec.js.map +1 -1
- package/dist/files/BrsFile.d.ts +48 -23
- package/dist/files/BrsFile.js +403 -233
- package/dist/files/BrsFile.js.map +1 -1
- package/dist/files/BrsFile.spec.js +367 -316
- package/dist/files/BrsFile.spec.js.map +1 -1
- package/dist/files/XmlFile.d.ts +13 -6
- package/dist/files/XmlFile.js +27 -21
- package/dist/files/XmlFile.js.map +1 -1
- package/dist/files/XmlFile.spec.js +274 -228
- package/dist/files/XmlFile.spec.js.map +1 -1
- package/dist/files/tests/imports.spec.js +49 -49
- package/dist/files/tests/imports.spec.js.map +1 -1
- package/dist/globalCallables.d.ts +3 -1
- package/dist/globalCallables.js +359 -87
- package/dist/globalCallables.js.map +1 -1
- package/dist/index.js +2 -1
- package/dist/index.js.map +1 -1
- package/dist/interfaces.d.ts +51 -14
- package/dist/lexer/Lexer.d.ts +14 -1
- package/dist/lexer/Lexer.js +91 -21
- package/dist/lexer/Lexer.js.map +1 -1
- package/dist/lexer/Lexer.spec.js +187 -132
- package/dist/lexer/Lexer.spec.js.map +1 -1
- package/dist/lexer/Token.d.ts +2 -2
- package/dist/lexer/TokenKind.d.ts +7 -1
- package/dist/lexer/TokenKind.js +51 -3
- package/dist/lexer/TokenKind.js.map +1 -1
- package/dist/lexer/index.js +2 -1
- package/dist/lexer/index.js.map +1 -1
- package/dist/parser/BrsTranspileState.d.ts +7 -0
- package/dist/parser/BrsTranspileState.js +10 -1
- package/dist/parser/BrsTranspileState.js.map +1 -1
- package/dist/parser/Expression.d.ts +23 -5
- package/dist/parser/Expression.js +124 -75
- package/dist/parser/Expression.js.map +1 -1
- package/dist/parser/Parser.Class.spec.js +159 -60
- package/dist/parser/Parser.Class.spec.js.map +1 -1
- package/dist/parser/Parser.d.ts +114 -26
- package/dist/parser/Parser.js +471 -126
- package/dist/parser/Parser.js.map +1 -1
- package/dist/parser/Parser.spec.js +396 -235
- package/dist/parser/Parser.spec.js.map +1 -1
- package/dist/parser/SGParser.d.ts +41 -4
- package/dist/parser/SGParser.js +186 -175
- package/dist/parser/SGParser.js.map +1 -1
- package/dist/parser/SGParser.spec.js +35 -22
- package/dist/parser/SGParser.spec.js.map +1 -1
- package/dist/parser/SGTypes.d.ts +206 -38
- package/dist/parser/SGTypes.js +470 -161
- package/dist/parser/SGTypes.js.map +1 -1
- package/dist/parser/SGTypes.spec.d.ts +1 -0
- package/dist/parser/SGTypes.spec.js +351 -0
- package/dist/parser/SGTypes.spec.js.map +1 -0
- package/dist/parser/Statement.d.ts +92 -18
- package/dist/parser/Statement.js +287 -58
- package/dist/parser/Statement.js.map +1 -1
- package/dist/parser/Statement.spec.js +11 -11
- package/dist/parser/Statement.spec.js.map +1 -1
- package/dist/parser/TranspileState.d.ts +1 -1
- package/dist/parser/TranspileState.js +15 -7
- package/dist/parser/TranspileState.js.map +1 -1
- package/dist/parser/index.js +1 -1
- package/dist/parser/tests/Parser.spec.d.ts +8 -7
- package/dist/parser/tests/Parser.spec.js +12 -8
- package/dist/parser/tests/Parser.spec.js.map +1 -1
- package/dist/parser/tests/controlFlow/For.spec.js +50 -50
- package/dist/parser/tests/controlFlow/For.spec.js.map +1 -1
- package/dist/parser/tests/controlFlow/ForEach.spec.js +31 -31
- package/dist/parser/tests/controlFlow/ForEach.spec.js.map +1 -1
- package/dist/parser/tests/controlFlow/If.spec.js +174 -156
- package/dist/parser/tests/controlFlow/If.spec.js.map +1 -1
- package/dist/parser/tests/controlFlow/While.spec.js +32 -32
- package/dist/parser/tests/controlFlow/While.spec.js.map +1 -1
- package/dist/parser/tests/expression/Additive.spec.js +21 -21
- package/dist/parser/tests/expression/Additive.spec.js.map +1 -1
- package/dist/parser/tests/expression/ArrayLiterals.spec.js +105 -105
- package/dist/parser/tests/expression/ArrayLiterals.spec.js.map +1 -1
- package/dist/parser/tests/expression/AssociativeArrayLiterals.spec.js +148 -124
- package/dist/parser/tests/expression/AssociativeArrayLiterals.spec.js.map +1 -1
- package/dist/parser/tests/expression/Boolean.spec.js +17 -17
- package/dist/parser/tests/expression/Boolean.spec.js.map +1 -1
- package/dist/parser/tests/expression/Call.spec.js +30 -30
- package/dist/parser/tests/expression/Call.spec.js.map +1 -1
- package/dist/parser/tests/expression/Exponential.spec.js +16 -16
- package/dist/parser/tests/expression/Exponential.spec.js.map +1 -1
- package/dist/parser/tests/expression/Function.spec.js +247 -247
- package/dist/parser/tests/expression/Function.spec.js.map +1 -1
- package/dist/parser/tests/expression/Indexing.spec.js +73 -73
- package/dist/parser/tests/expression/Indexing.spec.js.map +1 -1
- package/dist/parser/tests/expression/Multiplicative.spec.js +36 -36
- package/dist/parser/tests/expression/Multiplicative.spec.js.map +1 -1
- package/dist/parser/tests/expression/NullCoalescenceExpression.spec.js +59 -47
- package/dist/parser/tests/expression/NullCoalescenceExpression.spec.js.map +1 -1
- package/dist/parser/tests/expression/PrefixUnary.spec.js +35 -35
- package/dist/parser/tests/expression/PrefixUnary.spec.js.map +1 -1
- package/dist/parser/tests/expression/Primary.spec.js +26 -26
- package/dist/parser/tests/expression/Primary.spec.js.map +1 -1
- package/dist/parser/tests/expression/RegexLiteralExpression.spec.d.ts +1 -0
- package/dist/parser/tests/expression/RegexLiteralExpression.spec.js +170 -0
- package/dist/parser/tests/expression/RegexLiteralExpression.spec.js.map +1 -0
- package/dist/parser/tests/expression/Relational.spec.js +42 -42
- package/dist/parser/tests/expression/Relational.spec.js.map +1 -1
- package/dist/parser/tests/expression/SourceLiteralExpression.spec.js +8 -8
- package/dist/parser/tests/expression/SourceLiteralExpression.spec.js.map +1 -1
- package/dist/parser/tests/expression/TemplateStringExpression.spec.js +12 -12
- package/dist/parser/tests/expression/TemplateStringExpression.spec.js.map +1 -1
- package/dist/parser/tests/expression/TernaryExpression.spec.js +100 -100
- package/dist/parser/tests/expression/TernaryExpression.spec.js.map +1 -1
- package/dist/parser/tests/statement/AssignmentOperators.spec.js +35 -35
- package/dist/parser/tests/statement/AssignmentOperators.spec.js.map +1 -1
- package/dist/parser/tests/statement/Declaration.spec.js +39 -39
- package/dist/parser/tests/statement/Declaration.spec.js.map +1 -1
- package/dist/parser/tests/statement/Dim.spec.js +21 -21
- package/dist/parser/tests/statement/Dim.spec.js.map +1 -1
- package/dist/parser/tests/statement/Function.spec.js +192 -192
- package/dist/parser/tests/statement/Function.spec.js.map +1 -1
- package/dist/parser/tests/statement/Goto.spec.js +11 -11
- package/dist/parser/tests/statement/Goto.spec.js.map +1 -1
- package/dist/parser/tests/statement/Increment.spec.js +46 -46
- package/dist/parser/tests/statement/Increment.spec.js.map +1 -1
- package/dist/parser/tests/statement/InterfaceStatement.spec.d.ts +1 -0
- package/dist/parser/tests/statement/InterfaceStatement.spec.js +61 -0
- package/dist/parser/tests/statement/InterfaceStatement.spec.js.map +1 -0
- package/dist/parser/tests/statement/LibraryStatement.spec.js +10 -10
- package/dist/parser/tests/statement/LibraryStatement.spec.js.map +1 -1
- package/dist/parser/tests/statement/Misc.spec.js +37 -36
- package/dist/parser/tests/statement/Misc.spec.js.map +1 -1
- package/dist/parser/tests/statement/PrintStatement.spec.js +30 -30
- package/dist/parser/tests/statement/PrintStatement.spec.js.map +1 -1
- package/dist/parser/tests/statement/ReturnStatement.spec.js +43 -43
- package/dist/parser/tests/statement/ReturnStatement.spec.js.map +1 -1
- package/dist/parser/tests/statement/Set.spec.js +69 -69
- package/dist/parser/tests/statement/Set.spec.js.map +1 -1
- package/dist/parser/tests/statement/Stop.spec.js +9 -9
- package/dist/parser/tests/statement/Stop.spec.js.map +1 -1
- package/dist/parser/tests/statement/Throw.spec.js +5 -5
- package/dist/parser/tests/statement/Throw.spec.js.map +1 -1
- package/dist/parser/tests/statement/TryCatch.spec.js +13 -13
- package/dist/parser/tests/statement/TryCatch.spec.js.map +1 -1
- package/dist/preprocessor/Chunk.js.map +1 -1
- package/dist/preprocessor/Manifest.d.ts +1 -1
- package/dist/preprocessor/Preprocessor.js +1 -1
- package/dist/preprocessor/Preprocessor.js.map +1 -1
- package/dist/preprocessor/Preprocessor.spec.js +49 -49
- package/dist/preprocessor/Preprocessor.spec.js.map +1 -1
- package/dist/preprocessor/PreprocessorParser.spec.js +72 -72
- package/dist/preprocessor/PreprocessorParser.spec.js.map +1 -1
- package/dist/preprocessor/index.js +1 -1
- package/dist/types/ArrayType.js +5 -4
- package/dist/types/ArrayType.js.map +1 -1
- package/dist/types/ArrayType.spec.js +8 -8
- package/dist/types/ArrayType.spec.js.map +1 -1
- package/dist/types/BooleanType.js +3 -3
- package/dist/types/BooleanType.js.map +1 -1
- package/dist/types/BooleanType.spec.js +2 -2
- package/dist/types/BooleanType.spec.js.map +1 -1
- package/dist/types/BscType.d.ts +19 -5
- package/dist/types/BscType.js +9 -0
- package/dist/types/BscType.js.map +1 -1
- package/dist/types/CustomType.d.ts +8 -5
- package/dist/types/CustomType.js +17 -6
- package/dist/types/CustomType.js.map +1 -1
- package/dist/types/DoubleType.js +8 -8
- package/dist/types/DoubleType.js.map +1 -1
- package/dist/types/DoubleType.spec.js +2 -2
- package/dist/types/DoubleType.spec.js.map +1 -1
- package/dist/types/DynamicType.js +1 -1
- package/dist/types/DynamicType.js.map +1 -1
- package/dist/types/DynamicType.spec.js +2 -2
- package/dist/types/DynamicType.spec.js.map +1 -1
- package/dist/types/FloatType.d.ts +1 -1
- package/dist/types/FloatType.js +8 -8
- package/dist/types/FloatType.js.map +1 -1
- package/dist/types/FloatType.spec.js +2 -2
- package/dist/types/FloatType.spec.js.map +1 -1
- package/dist/types/FunctionType.d.ts +5 -11
- package/dist/types/FunctionType.js +24 -13
- package/dist/types/FunctionType.js.map +1 -1
- package/dist/types/FunctionType.spec.js +11 -5
- package/dist/types/FunctionType.spec.js.map +1 -1
- package/dist/types/IntegerType.d.ts +1 -1
- package/dist/types/IntegerType.js +8 -8
- package/dist/types/IntegerType.js.map +1 -1
- package/dist/types/IntegerType.spec.js +2 -2
- package/dist/types/IntegerType.spec.js.map +1 -1
- package/dist/types/InterfaceType.d.ts +8 -2
- package/dist/types/InterfaceType.js +42 -6
- package/dist/types/InterfaceType.js.map +1 -1
- package/dist/types/InterfaceType.spec.d.ts +1 -0
- package/dist/types/InterfaceType.spec.js +174 -0
- package/dist/types/InterfaceType.spec.js.map +1 -0
- package/dist/types/InvalidType.js +4 -4
- package/dist/types/InvalidType.js.map +1 -1
- package/dist/types/InvalidType.spec.js +2 -2
- package/dist/types/InvalidType.spec.js.map +1 -1
- package/dist/types/LazyType.d.ts +9 -7
- package/dist/types/LazyType.js +22 -10
- package/dist/types/LazyType.js.map +1 -1
- package/dist/types/LongIntegerType.d.ts +1 -1
- package/dist/types/LongIntegerType.js +8 -8
- package/dist/types/LongIntegerType.js.map +1 -1
- package/dist/types/LongIntegerType.spec.js +2 -2
- package/dist/types/LongIntegerType.spec.js.map +1 -1
- package/dist/types/ObjectType.d.ts +7 -4
- package/dist/types/ObjectType.js +6 -3
- package/dist/types/ObjectType.js.map +1 -1
- package/dist/types/ObjectType.spec.js +2 -2
- package/dist/types/ObjectType.spec.js.map +1 -1
- package/dist/types/StringType.js +3 -3
- package/dist/types/StringType.js.map +1 -1
- package/dist/types/StringType.spec.js +2 -2
- package/dist/types/StringType.spec.js.map +1 -1
- package/dist/types/UninitializedType.js +3 -3
- package/dist/types/UninitializedType.js.map +1 -1
- package/dist/types/VoidType.js +3 -3
- package/dist/types/VoidType.js.map +1 -1
- package/dist/types/VoidType.spec.js +2 -2
- package/dist/types/VoidType.spec.js.map +1 -1
- package/dist/types/helpers.d.ts +42 -0
- package/dist/types/helpers.js +113 -0
- package/dist/types/helpers.js.map +1 -0
- package/dist/util.d.ts +77 -17
- package/dist/util.js +247 -59
- package/dist/util.js.map +1 -1
- package/dist/validators/ClassValidator.d.ts +5 -1
- package/dist/validators/ClassValidator.js +59 -24
- package/dist/validators/ClassValidator.js.map +1 -1
- package/package.json +13 -13
|
@@ -19,8 +19,8 @@ describe('parser if statements', () => {
|
|
|
19
19
|
end if
|
|
20
20
|
`);
|
|
21
21
|
let { statements, diagnostics } = Parser_1.Parser.parse(tokens);
|
|
22
|
-
chai_1.expect((_a = diagnostics[0]) === null || _a === void 0 ? void 0 : _a.message).not.to.exist;
|
|
23
|
-
chai_1.expect(statements).to.be.length.greaterThan(0);
|
|
22
|
+
(0, chai_1.expect)((_a = diagnostics[0]) === null || _a === void 0 ? void 0 : _a.message).not.to.exist;
|
|
23
|
+
(0, chai_1.expect)(statements).to.be.length.greaterThan(0);
|
|
24
24
|
});
|
|
25
25
|
it('allows empty elseif blocks', () => {
|
|
26
26
|
var _a;
|
|
@@ -34,8 +34,8 @@ describe('parser if statements', () => {
|
|
|
34
34
|
end if
|
|
35
35
|
`);
|
|
36
36
|
let { statements, diagnostics } = Parser_1.Parser.parse(tokens);
|
|
37
|
-
chai_1.expect((_a = diagnostics[0]) === null || _a === void 0 ? void 0 : _a.message).not.to.exist;
|
|
38
|
-
chai_1.expect(statements).to.be.length.greaterThan(0);
|
|
37
|
+
(0, chai_1.expect)((_a = diagnostics[0]) === null || _a === void 0 ? void 0 : _a.message).not.to.exist;
|
|
38
|
+
(0, chai_1.expect)(statements).to.be.length.greaterThan(0);
|
|
39
39
|
});
|
|
40
40
|
it('allows empty else blocks', () => {
|
|
41
41
|
var _a;
|
|
@@ -49,8 +49,8 @@ describe('parser if statements', () => {
|
|
|
49
49
|
end if
|
|
50
50
|
`);
|
|
51
51
|
let { statements, diagnostics } = Parser_1.Parser.parse(tokens);
|
|
52
|
-
chai_1.expect((_a = diagnostics[0]) === null || _a === void 0 ? void 0 : _a.message).not.to.exist;
|
|
53
|
-
chai_1.expect(statements).to.be.length.greaterThan(0);
|
|
52
|
+
(0, chai_1.expect)((_a = diagnostics[0]) === null || _a === void 0 ? void 0 : _a.message).not.to.exist;
|
|
53
|
+
(0, chai_1.expect)(statements).to.be.length.greaterThan(0);
|
|
54
54
|
});
|
|
55
55
|
it('single-line if next to else or endif', () => {
|
|
56
56
|
var _a;
|
|
@@ -65,16 +65,16 @@ describe('parser if statements', () => {
|
|
|
65
65
|
end if
|
|
66
66
|
`);
|
|
67
67
|
let { statements, diagnostics } = Parser_1.Parser.parse(tokens);
|
|
68
|
-
chai_1.expect(diagnostics).to.be.lengthOf(0);
|
|
69
|
-
chai_1.expect(statements).to.be.length.greaterThan(0);
|
|
68
|
+
(0, chai_1.expect)(diagnostics).to.be.lengthOf(0);
|
|
69
|
+
(0, chai_1.expect)(statements).to.be.length.greaterThan(0);
|
|
70
70
|
let ifs = statements[0];
|
|
71
|
-
if (!astUtils_1.isIfStatement(ifs) || !astUtils_1.isIfStatement((_a = ifs.thenBranch) === null || _a === void 0 ? void 0 : _a.statements[1])) {
|
|
71
|
+
if (!(0, astUtils_1.isIfStatement)(ifs) || !(0, astUtils_1.isIfStatement)((_a = ifs.thenBranch) === null || _a === void 0 ? void 0 : _a.statements[1])) {
|
|
72
72
|
assert.fail('Missing single-line if inside if-then');
|
|
73
73
|
}
|
|
74
|
-
if (!astUtils_1.isIfStatement(ifs.elseBranch)) {
|
|
74
|
+
if (!(0, astUtils_1.isIfStatement)(ifs.elseBranch)) {
|
|
75
75
|
assert.fail('Missing chained else-if statement');
|
|
76
76
|
}
|
|
77
|
-
chai_1.expect(ifs.elseBranch.elseBranch).to.exist;
|
|
77
|
+
(0, chai_1.expect)(ifs.elseBranch.elseBranch).to.exist;
|
|
78
78
|
});
|
|
79
79
|
it('single-line if inside multi-line if', () => {
|
|
80
80
|
var _a;
|
|
@@ -86,14 +86,14 @@ describe('parser if statements', () => {
|
|
|
86
86
|
end if
|
|
87
87
|
`);
|
|
88
88
|
let { statements, diagnostics } = Parser_1.Parser.parse(tokens);
|
|
89
|
-
chai_1.expect(diagnostics).to.be.lengthOf(0);
|
|
90
|
-
chai_1.expect(statements).to.be.length.greaterThan(0);
|
|
89
|
+
(0, chai_1.expect)(diagnostics).to.be.lengthOf(0);
|
|
90
|
+
(0, chai_1.expect)(statements).to.be.length.greaterThan(0);
|
|
91
91
|
let ifs = statements[0];
|
|
92
|
-
if (!astUtils_1.isIfStatement(ifs) || !astUtils_1.isIfStatement((_a = ifs.thenBranch) === null || _a === void 0 ? void 0 : _a.statements[0])) {
|
|
92
|
+
if (!(0, astUtils_1.isIfStatement)(ifs) || !(0, astUtils_1.isIfStatement)((_a = ifs.thenBranch) === null || _a === void 0 ? void 0 : _a.statements[0])) {
|
|
93
93
|
assert.fail('Missing single-line if inside if-then');
|
|
94
94
|
}
|
|
95
|
-
chai_1.expect(ifs.elseBranch).to.exist;
|
|
96
|
-
if (!astUtils_1.isBlock(ifs.elseBranch) || !astUtils_1.isCommentStatement(ifs.elseBranch.statements[0])) {
|
|
95
|
+
(0, chai_1.expect)(ifs.elseBranch).to.exist;
|
|
96
|
+
if (!(0, astUtils_1.isBlock)(ifs.elseBranch) || !(0, astUtils_1.isCommentStatement)(ifs.elseBranch.statements[0])) {
|
|
97
97
|
assert.fail('Missing comment inside else branch');
|
|
98
98
|
}
|
|
99
99
|
});
|
|
@@ -105,102 +105,102 @@ describe('parser if statements', () => {
|
|
|
105
105
|
if (diagnostics.length > 0) {
|
|
106
106
|
console.log(diagnostics);
|
|
107
107
|
}
|
|
108
|
-
chai_1.expect(diagnostics).to.be.lengthOf(0);
|
|
109
|
-
chai_1.expect(statements).to.be.length.greaterThan(0);
|
|
108
|
+
(0, chai_1.expect)(diagnostics).to.be.lengthOf(0);
|
|
109
|
+
(0, chai_1.expect)(statements).to.be.length.greaterThan(0);
|
|
110
110
|
});
|
|
111
111
|
describe('single-line if', () => {
|
|
112
112
|
it('parses if only', () => {
|
|
113
113
|
let { statements, diagnostics } = Parser_1.Parser.parse([
|
|
114
|
-
Parser_spec_1.token(lexer_1.TokenKind.If, 'if'),
|
|
115
|
-
Parser_spec_1.token(lexer_1.TokenKind.IntegerLiteral, '1'),
|
|
116
|
-
Parser_spec_1.token(lexer_1.TokenKind.Less, '<'),
|
|
117
|
-
Parser_spec_1.token(lexer_1.TokenKind.IntegerLiteral, '2'),
|
|
118
|
-
Parser_spec_1.token(lexer_1.TokenKind.Then, 'then'),
|
|
119
|
-
Parser_spec_1.identifier('foo'),
|
|
120
|
-
Parser_spec_1.token(lexer_1.TokenKind.Equal, '='),
|
|
121
|
-
Parser_spec_1.token(lexer_1.TokenKind.True, 'true'),
|
|
122
|
-
Parser_spec_1.token(lexer_1.TokenKind.Newline, '\n'),
|
|
114
|
+
(0, Parser_spec_1.token)(lexer_1.TokenKind.If, 'if'),
|
|
115
|
+
(0, Parser_spec_1.token)(lexer_1.TokenKind.IntegerLiteral, '1'),
|
|
116
|
+
(0, Parser_spec_1.token)(lexer_1.TokenKind.Less, '<'),
|
|
117
|
+
(0, Parser_spec_1.token)(lexer_1.TokenKind.IntegerLiteral, '2'),
|
|
118
|
+
(0, Parser_spec_1.token)(lexer_1.TokenKind.Then, 'then'),
|
|
119
|
+
(0, Parser_spec_1.identifier)('foo'),
|
|
120
|
+
(0, Parser_spec_1.token)(lexer_1.TokenKind.Equal, '='),
|
|
121
|
+
(0, Parser_spec_1.token)(lexer_1.TokenKind.True, 'true'),
|
|
122
|
+
(0, Parser_spec_1.token)(lexer_1.TokenKind.Newline, '\n'),
|
|
123
123
|
Parser_spec_1.EOF
|
|
124
124
|
]);
|
|
125
|
-
chai_1.expect(diagnostics).to.be.lengthOf(0);
|
|
126
|
-
chai_1.expect(statements).to.be.length.greaterThan(0);
|
|
125
|
+
(0, chai_1.expect)(diagnostics).to.be.lengthOf(0);
|
|
126
|
+
(0, chai_1.expect)(statements).to.be.length.greaterThan(0);
|
|
127
127
|
});
|
|
128
128
|
it('parses if-else', () => {
|
|
129
129
|
let { statements, diagnostics } = Parser_1.Parser.parse([
|
|
130
|
-
Parser_spec_1.token(lexer_1.TokenKind.If, 'if'),
|
|
131
|
-
Parser_spec_1.token(lexer_1.TokenKind.IntegerLiteral, '1'),
|
|
132
|
-
Parser_spec_1.token(lexer_1.TokenKind.Less, '<'),
|
|
133
|
-
Parser_spec_1.token(lexer_1.TokenKind.IntegerLiteral, '2'),
|
|
134
|
-
Parser_spec_1.token(lexer_1.TokenKind.Then, 'then'),
|
|
135
|
-
Parser_spec_1.identifier('foo'),
|
|
136
|
-
Parser_spec_1.token(lexer_1.TokenKind.Equal, '='),
|
|
137
|
-
Parser_spec_1.token(lexer_1.TokenKind.True, 'true'),
|
|
138
|
-
Parser_spec_1.token(lexer_1.TokenKind.Else, 'else'),
|
|
139
|
-
Parser_spec_1.identifier('foo'),
|
|
140
|
-
Parser_spec_1.token(lexer_1.TokenKind.Equal, '='),
|
|
141
|
-
Parser_spec_1.token(lexer_1.TokenKind.False, 'true'),
|
|
142
|
-
Parser_spec_1.token(lexer_1.TokenKind.Newline, '\n'),
|
|
130
|
+
(0, Parser_spec_1.token)(lexer_1.TokenKind.If, 'if'),
|
|
131
|
+
(0, Parser_spec_1.token)(lexer_1.TokenKind.IntegerLiteral, '1'),
|
|
132
|
+
(0, Parser_spec_1.token)(lexer_1.TokenKind.Less, '<'),
|
|
133
|
+
(0, Parser_spec_1.token)(lexer_1.TokenKind.IntegerLiteral, '2'),
|
|
134
|
+
(0, Parser_spec_1.token)(lexer_1.TokenKind.Then, 'then'),
|
|
135
|
+
(0, Parser_spec_1.identifier)('foo'),
|
|
136
|
+
(0, Parser_spec_1.token)(lexer_1.TokenKind.Equal, '='),
|
|
137
|
+
(0, Parser_spec_1.token)(lexer_1.TokenKind.True, 'true'),
|
|
138
|
+
(0, Parser_spec_1.token)(lexer_1.TokenKind.Else, 'else'),
|
|
139
|
+
(0, Parser_spec_1.identifier)('foo'),
|
|
140
|
+
(0, Parser_spec_1.token)(lexer_1.TokenKind.Equal, '='),
|
|
141
|
+
(0, Parser_spec_1.token)(lexer_1.TokenKind.False, 'true'),
|
|
142
|
+
(0, Parser_spec_1.token)(lexer_1.TokenKind.Newline, '\n'),
|
|
143
143
|
Parser_spec_1.EOF
|
|
144
144
|
]);
|
|
145
|
-
chai_1.expect(diagnostics).to.be.lengthOf(0);
|
|
146
|
-
chai_1.expect(statements).to.be.length.greaterThan(0);
|
|
145
|
+
(0, chai_1.expect)(diagnostics).to.be.lengthOf(0);
|
|
146
|
+
(0, chai_1.expect)(statements).to.be.length.greaterThan(0);
|
|
147
147
|
});
|
|
148
148
|
it('parses if-elseif-else', () => {
|
|
149
149
|
let { statements, diagnostics } = Parser_1.Parser.parse([
|
|
150
|
-
Parser_spec_1.token(lexer_1.TokenKind.If, 'if'),
|
|
151
|
-
Parser_spec_1.token(lexer_1.TokenKind.IntegerLiteral, '1'),
|
|
152
|
-
Parser_spec_1.token(lexer_1.TokenKind.Less, '<'),
|
|
153
|
-
Parser_spec_1.token(lexer_1.TokenKind.IntegerLiteral, '2'),
|
|
154
|
-
Parser_spec_1.token(lexer_1.TokenKind.Then, 'then'),
|
|
155
|
-
Parser_spec_1.identifier('foo'),
|
|
156
|
-
Parser_spec_1.token(lexer_1.TokenKind.Equal, '='),
|
|
157
|
-
Parser_spec_1.token(lexer_1.TokenKind.True, 'true'),
|
|
158
|
-
Parser_spec_1.token(lexer_1.TokenKind.Else, 'else'),
|
|
159
|
-
Parser_spec_1.token(lexer_1.TokenKind.If, 'if'),
|
|
160
|
-
Parser_spec_1.token(lexer_1.TokenKind.IntegerLiteral, '1'),
|
|
161
|
-
Parser_spec_1.token(lexer_1.TokenKind.Equal, '='),
|
|
162
|
-
Parser_spec_1.token(lexer_1.TokenKind.IntegerLiteral, '2'),
|
|
163
|
-
Parser_spec_1.token(lexer_1.TokenKind.Then, 'then'),
|
|
164
|
-
Parser_spec_1.identifier('same'),
|
|
165
|
-
Parser_spec_1.token(lexer_1.TokenKind.Equal, '='),
|
|
166
|
-
Parser_spec_1.token(lexer_1.TokenKind.True, 'true'),
|
|
167
|
-
Parser_spec_1.token(lexer_1.TokenKind.Else, 'else'),
|
|
168
|
-
Parser_spec_1.identifier('foo'),
|
|
169
|
-
Parser_spec_1.token(lexer_1.TokenKind.Equal, '='),
|
|
170
|
-
Parser_spec_1.token(lexer_1.TokenKind.True, 'true'),
|
|
171
|
-
Parser_spec_1.token(lexer_1.TokenKind.Newline, '\n'),
|
|
150
|
+
(0, Parser_spec_1.token)(lexer_1.TokenKind.If, 'if'),
|
|
151
|
+
(0, Parser_spec_1.token)(lexer_1.TokenKind.IntegerLiteral, '1'),
|
|
152
|
+
(0, Parser_spec_1.token)(lexer_1.TokenKind.Less, '<'),
|
|
153
|
+
(0, Parser_spec_1.token)(lexer_1.TokenKind.IntegerLiteral, '2'),
|
|
154
|
+
(0, Parser_spec_1.token)(lexer_1.TokenKind.Then, 'then'),
|
|
155
|
+
(0, Parser_spec_1.identifier)('foo'),
|
|
156
|
+
(0, Parser_spec_1.token)(lexer_1.TokenKind.Equal, '='),
|
|
157
|
+
(0, Parser_spec_1.token)(lexer_1.TokenKind.True, 'true'),
|
|
158
|
+
(0, Parser_spec_1.token)(lexer_1.TokenKind.Else, 'else'),
|
|
159
|
+
(0, Parser_spec_1.token)(lexer_1.TokenKind.If, 'if'),
|
|
160
|
+
(0, Parser_spec_1.token)(lexer_1.TokenKind.IntegerLiteral, '1'),
|
|
161
|
+
(0, Parser_spec_1.token)(lexer_1.TokenKind.Equal, '='),
|
|
162
|
+
(0, Parser_spec_1.token)(lexer_1.TokenKind.IntegerLiteral, '2'),
|
|
163
|
+
(0, Parser_spec_1.token)(lexer_1.TokenKind.Then, 'then'),
|
|
164
|
+
(0, Parser_spec_1.identifier)('same'),
|
|
165
|
+
(0, Parser_spec_1.token)(lexer_1.TokenKind.Equal, '='),
|
|
166
|
+
(0, Parser_spec_1.token)(lexer_1.TokenKind.True, 'true'),
|
|
167
|
+
(0, Parser_spec_1.token)(lexer_1.TokenKind.Else, 'else'),
|
|
168
|
+
(0, Parser_spec_1.identifier)('foo'),
|
|
169
|
+
(0, Parser_spec_1.token)(lexer_1.TokenKind.Equal, '='),
|
|
170
|
+
(0, Parser_spec_1.token)(lexer_1.TokenKind.True, 'true'),
|
|
171
|
+
(0, Parser_spec_1.token)(lexer_1.TokenKind.Newline, '\n'),
|
|
172
172
|
Parser_spec_1.EOF
|
|
173
173
|
]);
|
|
174
|
-
chai_1.expect(diagnostics).to.be.lengthOf(0);
|
|
175
|
-
chai_1.expect(statements).to.be.length.greaterThan(0);
|
|
174
|
+
(0, chai_1.expect)(diagnostics).to.be.lengthOf(0);
|
|
175
|
+
(0, chai_1.expect)(statements).to.be.length.greaterThan(0);
|
|
176
176
|
});
|
|
177
177
|
it('allows \'then\' to be skipped', () => {
|
|
178
178
|
// if 1 < 2 foo = true else if 1 = 2 same = true
|
|
179
179
|
let { statements, diagnostics } = Parser_1.Parser.parse([
|
|
180
|
-
Parser_spec_1.token(lexer_1.TokenKind.If, 'if'),
|
|
181
|
-
Parser_spec_1.token(lexer_1.TokenKind.IntegerLiteral, '1'),
|
|
182
|
-
Parser_spec_1.token(lexer_1.TokenKind.Less, '<'),
|
|
183
|
-
Parser_spec_1.token(lexer_1.TokenKind.IntegerLiteral, '2'),
|
|
184
|
-
Parser_spec_1.identifier('foo'),
|
|
185
|
-
Parser_spec_1.token(lexer_1.TokenKind.Equal, '='),
|
|
186
|
-
Parser_spec_1.token(lexer_1.TokenKind.True, 'true'),
|
|
187
|
-
Parser_spec_1.token(lexer_1.TokenKind.Else, 'else'),
|
|
188
|
-
Parser_spec_1.token(lexer_1.TokenKind.If, 'if'),
|
|
189
|
-
Parser_spec_1.token(lexer_1.TokenKind.IntegerLiteral, '1'),
|
|
190
|
-
Parser_spec_1.token(lexer_1.TokenKind.Equal, '='),
|
|
191
|
-
Parser_spec_1.token(lexer_1.TokenKind.IntegerLiteral, '2'),
|
|
192
|
-
Parser_spec_1.identifier('same'),
|
|
193
|
-
Parser_spec_1.token(lexer_1.TokenKind.Equal, '='),
|
|
194
|
-
Parser_spec_1.token(lexer_1.TokenKind.True, 'true'),
|
|
195
|
-
Parser_spec_1.token(lexer_1.TokenKind.Else, 'else'),
|
|
196
|
-
Parser_spec_1.identifier('foo'),
|
|
197
|
-
Parser_spec_1.token(lexer_1.TokenKind.Equal, '='),
|
|
198
|
-
Parser_spec_1.token(lexer_1.TokenKind.False, 'false'),
|
|
199
|
-
Parser_spec_1.token(lexer_1.TokenKind.Newline, '\n'),
|
|
180
|
+
(0, Parser_spec_1.token)(lexer_1.TokenKind.If, 'if'),
|
|
181
|
+
(0, Parser_spec_1.token)(lexer_1.TokenKind.IntegerLiteral, '1'),
|
|
182
|
+
(0, Parser_spec_1.token)(lexer_1.TokenKind.Less, '<'),
|
|
183
|
+
(0, Parser_spec_1.token)(lexer_1.TokenKind.IntegerLiteral, '2'),
|
|
184
|
+
(0, Parser_spec_1.identifier)('foo'),
|
|
185
|
+
(0, Parser_spec_1.token)(lexer_1.TokenKind.Equal, '='),
|
|
186
|
+
(0, Parser_spec_1.token)(lexer_1.TokenKind.True, 'true'),
|
|
187
|
+
(0, Parser_spec_1.token)(lexer_1.TokenKind.Else, 'else'),
|
|
188
|
+
(0, Parser_spec_1.token)(lexer_1.TokenKind.If, 'if'),
|
|
189
|
+
(0, Parser_spec_1.token)(lexer_1.TokenKind.IntegerLiteral, '1'),
|
|
190
|
+
(0, Parser_spec_1.token)(lexer_1.TokenKind.Equal, '='),
|
|
191
|
+
(0, Parser_spec_1.token)(lexer_1.TokenKind.IntegerLiteral, '2'),
|
|
192
|
+
(0, Parser_spec_1.identifier)('same'),
|
|
193
|
+
(0, Parser_spec_1.token)(lexer_1.TokenKind.Equal, '='),
|
|
194
|
+
(0, Parser_spec_1.token)(lexer_1.TokenKind.True, 'true'),
|
|
195
|
+
(0, Parser_spec_1.token)(lexer_1.TokenKind.Else, 'else'),
|
|
196
|
+
(0, Parser_spec_1.identifier)('foo'),
|
|
197
|
+
(0, Parser_spec_1.token)(lexer_1.TokenKind.Equal, '='),
|
|
198
|
+
(0, Parser_spec_1.token)(lexer_1.TokenKind.False, 'false'),
|
|
199
|
+
(0, Parser_spec_1.token)(lexer_1.TokenKind.Newline, '\n'),
|
|
200
200
|
Parser_spec_1.EOF
|
|
201
201
|
]);
|
|
202
|
-
chai_1.expect(diagnostics).to.be.lengthOf(0);
|
|
203
|
-
chai_1.expect(statements).to.be.length.greaterThan(0);
|
|
202
|
+
(0, chai_1.expect)(diagnostics).to.be.lengthOf(0);
|
|
203
|
+
(0, chai_1.expect)(statements).to.be.length.greaterThan(0);
|
|
204
204
|
});
|
|
205
205
|
it('parses special statements in inline block', () => {
|
|
206
206
|
const { statements, diagnostics } = Parser_1.Parser.parse(`
|
|
@@ -212,8 +212,8 @@ describe('parser if statements', () => {
|
|
|
212
212
|
if true return else print 1
|
|
213
213
|
if true then return else print 1
|
|
214
214
|
`);
|
|
215
|
-
chai_1.expect(diagnostics).to.be.lengthOf(0);
|
|
216
|
-
chai_1.expect(statements).to.be.length.greaterThan(0);
|
|
215
|
+
(0, chai_1.expect)(diagnostics).to.be.lengthOf(0);
|
|
216
|
+
(0, chai_1.expect)(statements).to.be.length.greaterThan(0);
|
|
217
217
|
});
|
|
218
218
|
});
|
|
219
219
|
describe('block if', () => {
|
|
@@ -226,8 +226,8 @@ describe('parser if statements', () => {
|
|
|
226
226
|
end if
|
|
227
227
|
`);
|
|
228
228
|
let { statements, diagnostics } = Parser_1.Parser.parse(tokens);
|
|
229
|
-
chai_1.expect(diagnostics).to.be.lengthOf(0);
|
|
230
|
-
chai_1.expect(statements).to.be.length.greaterThan(0);
|
|
229
|
+
(0, chai_1.expect)(diagnostics).to.be.lengthOf(0);
|
|
230
|
+
(0, chai_1.expect)(statements).to.be.length.greaterThan(0);
|
|
231
231
|
});
|
|
232
232
|
it('parses if-else', () => {
|
|
233
233
|
//this test requires token locations, so use the lexer
|
|
@@ -240,8 +240,8 @@ describe('parser if statements', () => {
|
|
|
240
240
|
end if
|
|
241
241
|
`);
|
|
242
242
|
let { statements, diagnostics } = Parser_1.Parser.parse(tokens);
|
|
243
|
-
chai_1.expect(diagnostics).to.be.lengthOf(0);
|
|
244
|
-
chai_1.expect(statements).to.be.length.greaterThan(0);
|
|
243
|
+
(0, chai_1.expect)(diagnostics).to.be.lengthOf(0);
|
|
244
|
+
(0, chai_1.expect)(statements).to.be.length.greaterThan(0);
|
|
245
245
|
});
|
|
246
246
|
it('parses if-elseif-else', () => {
|
|
247
247
|
//this test requires token locations, so use the lexer
|
|
@@ -256,8 +256,8 @@ describe('parser if statements', () => {
|
|
|
256
256
|
end if
|
|
257
257
|
`);
|
|
258
258
|
let { statements, diagnostics } = Parser_1.Parser.parse(tokens);
|
|
259
|
-
chai_1.expect(diagnostics).to.be.lengthOf(0);
|
|
260
|
-
chai_1.expect(statements).to.be.length.greaterThan(0);
|
|
259
|
+
(0, chai_1.expect)(diagnostics).to.be.lengthOf(0);
|
|
260
|
+
(0, chai_1.expect)(statements).to.be.length.greaterThan(0);
|
|
261
261
|
});
|
|
262
262
|
it('allows \'then\' to be skipped', () => {
|
|
263
263
|
//this test requires token locations, so use the lexer
|
|
@@ -272,8 +272,8 @@ describe('parser if statements', () => {
|
|
|
272
272
|
end if
|
|
273
273
|
`);
|
|
274
274
|
let { statements, diagnostics } = Parser_1.Parser.parse(tokens);
|
|
275
|
-
chai_1.expect(diagnostics).to.be.lengthOf(0);
|
|
276
|
-
chai_1.expect(statements).to.be.length.greaterThan(0);
|
|
275
|
+
(0, chai_1.expect)(diagnostics).to.be.lengthOf(0);
|
|
276
|
+
(0, chai_1.expect)(statements).to.be.length.greaterThan(0);
|
|
277
277
|
});
|
|
278
278
|
it('sets endif token properly', () => {
|
|
279
279
|
//this test requires token locations, so use the lexer
|
|
@@ -289,15 +289,15 @@ describe('parser if statements', () => {
|
|
|
289
289
|
end sub
|
|
290
290
|
`);
|
|
291
291
|
let { statements, diagnostics } = Parser_1.Parser.parse(tokens);
|
|
292
|
-
chai_1.expect(diagnostics).to.be.lengthOf(0);
|
|
293
|
-
chai_1.expect(statements).to.be.length.greaterThan(0);
|
|
292
|
+
(0, chai_1.expect)(diagnostics).to.be.lengthOf(0);
|
|
293
|
+
(0, chai_1.expect)(statements).to.be.length.greaterThan(0);
|
|
294
294
|
//the endif token should be set
|
|
295
295
|
let ifs = statements[0].func.body.statements[0];
|
|
296
|
-
if (!astUtils_1.isIfStatement(ifs) || !astUtils_1.isIfStatement(ifs.elseBranch)) {
|
|
296
|
+
if (!(0, astUtils_1.isIfStatement)(ifs) || !(0, astUtils_1.isIfStatement)(ifs.elseBranch)) {
|
|
297
297
|
assert.fail('Unexpected statement found');
|
|
298
298
|
}
|
|
299
|
-
chai_1.expect(ifs.tokens.endIf).to.not.exist;
|
|
300
|
-
chai_1.expect(ifs.elseBranch.tokens.endIf).to.exist;
|
|
299
|
+
(0, chai_1.expect)(ifs.tokens.endIf).to.not.exist;
|
|
300
|
+
(0, chai_1.expect)(ifs.elseBranch.tokens.endIf).to.exist;
|
|
301
301
|
});
|
|
302
302
|
});
|
|
303
303
|
it('supports trailing colons after conditional statements', () => {
|
|
@@ -313,16 +313,16 @@ describe('parser if statements', () => {
|
|
|
313
313
|
end sub
|
|
314
314
|
`);
|
|
315
315
|
let { statements, diagnostics } = Parser_1.Parser.parse(tokens);
|
|
316
|
-
chai_1.expect(diagnostics).to.be.lengthOf(0);
|
|
317
|
-
chai_1.expect(statements).to.be.length.greaterThan(0);
|
|
316
|
+
(0, chai_1.expect)(diagnostics).to.be.lengthOf(0);
|
|
317
|
+
(0, chai_1.expect)(statements).to.be.length.greaterThan(0);
|
|
318
318
|
});
|
|
319
319
|
it('supports trailing colons for one-line if statements', () => {
|
|
320
320
|
let { tokens } = lexer_1.Lexer.scan(`
|
|
321
321
|
if 1 < 2: return true: end if
|
|
322
322
|
`);
|
|
323
323
|
let { statements, diagnostics } = Parser_1.Parser.parse(tokens);
|
|
324
|
-
chai_1.expect(diagnostics).to.be.lengthOf(0);
|
|
325
|
-
chai_1.expect(statements).to.be.length.greaterThan(0);
|
|
324
|
+
(0, chai_1.expect)(diagnostics).to.be.lengthOf(0);
|
|
325
|
+
(0, chai_1.expect)(statements).to.be.length.greaterThan(0);
|
|
326
326
|
});
|
|
327
327
|
it('catches one-line if statement missing first colon', () => {
|
|
328
328
|
//missing colon after 2
|
|
@@ -330,8 +330,8 @@ describe('parser if statements', () => {
|
|
|
330
330
|
if 1 < 2 return true : end if
|
|
331
331
|
`);
|
|
332
332
|
let { statements, diagnostics } = Parser_1.Parser.parse(tokens);
|
|
333
|
-
chai_1.expect(diagnostics).to.be.length.greaterThan(0);
|
|
334
|
-
chai_1.expect(statements).to.be.length.greaterThan(0);
|
|
333
|
+
(0, chai_1.expect)(diagnostics).to.be.length.greaterThan(0);
|
|
334
|
+
(0, chai_1.expect)(statements).to.be.length.greaterThan(0);
|
|
335
335
|
});
|
|
336
336
|
it('catches one-line if statement with multiple statements missing first colon', () => {
|
|
337
337
|
//missing colon after 2
|
|
@@ -339,8 +339,8 @@ describe('parser if statements', () => {
|
|
|
339
339
|
if 1 < 2 print "ok" : return true : end if
|
|
340
340
|
`);
|
|
341
341
|
let { statements, diagnostics } = Parser_1.Parser.parse(tokens);
|
|
342
|
-
chai_1.expect(diagnostics).to.be.length.greaterThan(0);
|
|
343
|
-
chai_1.expect(statements).to.be.length.greaterThan(0);
|
|
342
|
+
(0, chai_1.expect)(diagnostics).to.be.length.greaterThan(0);
|
|
343
|
+
(0, chai_1.expect)(statements).to.be.length.greaterThan(0);
|
|
344
344
|
});
|
|
345
345
|
it('catches one-line if statement missing second colon', () => {
|
|
346
346
|
//missing colon after `2`
|
|
@@ -348,8 +348,8 @@ describe('parser if statements', () => {
|
|
|
348
348
|
if 1 < 2 : return true end if
|
|
349
349
|
`);
|
|
350
350
|
let { statements, diagnostics } = Parser_1.Parser.parse(tokens);
|
|
351
|
-
chai_1.expect(diagnostics).to.be.length.greaterThan(0);
|
|
352
|
-
chai_1.expect(statements).to.be.length.greaterThan(0);
|
|
351
|
+
(0, chai_1.expect)(diagnostics).to.be.length.greaterThan(0);
|
|
352
|
+
(0, chai_1.expect)(statements).to.be.length.greaterThan(0);
|
|
353
353
|
});
|
|
354
354
|
it('catches one-line if statement with else missing colons', () => {
|
|
355
355
|
//missing colon after `2`
|
|
@@ -357,8 +357,8 @@ describe('parser if statements', () => {
|
|
|
357
357
|
if 1 < 2 : return true: else return false end if
|
|
358
358
|
`);
|
|
359
359
|
let { statements, diagnostics } = Parser_1.Parser.parse(tokens);
|
|
360
|
-
chai_1.expect(diagnostics).to.be.length.greaterThan(0);
|
|
361
|
-
chai_1.expect(statements).to.be.length.greaterThan(0);
|
|
360
|
+
(0, chai_1.expect)(diagnostics).to.be.length.greaterThan(0);
|
|
361
|
+
(0, chai_1.expect)(statements).to.be.length.greaterThan(0);
|
|
362
362
|
});
|
|
363
363
|
it('catches one-line if statement with colon and missing end if', () => {
|
|
364
364
|
//missing colon after `2`
|
|
@@ -366,8 +366,8 @@ describe('parser if statements', () => {
|
|
|
366
366
|
if 1 < 2: return true
|
|
367
367
|
`);
|
|
368
368
|
let { statements, diagnostics } = Parser_1.Parser.parse(tokens);
|
|
369
|
-
chai_1.expect(diagnostics).to.be.length.greaterThan(0);
|
|
370
|
-
chai_1.expect(statements).to.be.lengthOf(0);
|
|
369
|
+
(0, chai_1.expect)(diagnostics).to.be.length.greaterThan(0);
|
|
370
|
+
(0, chai_1.expect)(statements).to.be.lengthOf(0);
|
|
371
371
|
});
|
|
372
372
|
it('catches one-line if multi-statement with colon and missing end if', () => {
|
|
373
373
|
//missing colon after `2`
|
|
@@ -375,8 +375,8 @@ describe('parser if statements', () => {
|
|
|
375
375
|
if 1 < 2: print "ok": return true
|
|
376
376
|
`);
|
|
377
377
|
let { statements, diagnostics } = Parser_1.Parser.parse(tokens);
|
|
378
|
-
chai_1.expect(diagnostics).to.be.length.greaterThan(0);
|
|
379
|
-
chai_1.expect(statements).to.be.lengthOf(0);
|
|
378
|
+
(0, chai_1.expect)(diagnostics).to.be.length.greaterThan(0);
|
|
379
|
+
(0, chai_1.expect)(statements).to.be.lengthOf(0);
|
|
380
380
|
});
|
|
381
381
|
it('catches one-line if statement with colon and missing endif inside a function', () => {
|
|
382
382
|
//missing 'end if'
|
|
@@ -386,8 +386,8 @@ describe('parser if statements', () => {
|
|
|
386
386
|
end function
|
|
387
387
|
`);
|
|
388
388
|
let { statements, diagnostics } = Parser_1.Parser.parse(tokens);
|
|
389
|
-
chai_1.expect(diagnostics).to.be.lengthOf(2);
|
|
390
|
-
chai_1.expect(statements).to.be.length.greaterThan(0);
|
|
389
|
+
(0, chai_1.expect)(diagnostics).to.be.lengthOf(2);
|
|
390
|
+
(0, chai_1.expect)(statements).to.be.length.greaterThan(0);
|
|
391
391
|
});
|
|
392
392
|
it('catches extraneous colon at the end of one-line if-else', () => {
|
|
393
393
|
//colon at the end not allowed
|
|
@@ -395,8 +395,8 @@ describe('parser if statements', () => {
|
|
|
395
395
|
if 1 < 2 then return true else return false:
|
|
396
396
|
`);
|
|
397
397
|
let { statements, diagnostics } = Parser_1.Parser.parse(tokens);
|
|
398
|
-
chai_1.expect(diagnostics).to.be.lengthOf(1);
|
|
399
|
-
chai_1.expect(statements).to.be.length.greaterThan(0);
|
|
398
|
+
(0, chai_1.expect)(diagnostics).to.be.lengthOf(1);
|
|
399
|
+
(0, chai_1.expect)(statements).to.be.length.greaterThan(0);
|
|
400
400
|
});
|
|
401
401
|
it('catches colon before if, unless there is `then` before', () => {
|
|
402
402
|
//colon before if isn't allowed
|
|
@@ -406,8 +406,8 @@ describe('parser if statements', () => {
|
|
|
406
406
|
end if
|
|
407
407
|
`);
|
|
408
408
|
let { statements, diagnostics } = Parser_1.Parser.parse(tokens);
|
|
409
|
-
chai_1.expect(diagnostics).to.be.lengthOf(1);
|
|
410
|
-
chai_1.expect(statements).to.be.length.greaterThan(0);
|
|
409
|
+
(0, chai_1.expect)(diagnostics).to.be.lengthOf(1);
|
|
410
|
+
(0, chai_1.expect)(statements).to.be.length.greaterThan(0);
|
|
411
411
|
});
|
|
412
412
|
it('catches extraneous colon+end if at the end of one-line if-else', () => {
|
|
413
413
|
//expected newline + unexpected endif
|
|
@@ -415,8 +415,8 @@ describe('parser if statements', () => {
|
|
|
415
415
|
if 1 < 2 then return true else return false: end if
|
|
416
416
|
`);
|
|
417
417
|
let { statements, diagnostics } = Parser_1.Parser.parse(tokens);
|
|
418
|
-
chai_1.expect(diagnostics).to.be.lengthOf(2);
|
|
419
|
-
chai_1.expect(statements).to.be.length.greaterThan(0);
|
|
418
|
+
(0, chai_1.expect)(diagnostics).to.be.lengthOf(2);
|
|
419
|
+
(0, chai_1.expect)(statements).to.be.length.greaterThan(0);
|
|
420
420
|
});
|
|
421
421
|
it('recovers from extraneous endif at the end of one-line if-else', () => {
|
|
422
422
|
//unexpected endif
|
|
@@ -426,8 +426,8 @@ describe('parser if statements', () => {
|
|
|
426
426
|
end function
|
|
427
427
|
`);
|
|
428
428
|
let { statements, diagnostics } = Parser_1.Parser.parse(tokens);
|
|
429
|
-
chai_1.expect(diagnostics).to.be.lengthOf(2);
|
|
430
|
-
chai_1.expect(statements).to.be.length.greaterThan(0);
|
|
429
|
+
(0, chai_1.expect)(diagnostics).to.be.lengthOf(2);
|
|
430
|
+
(0, chai_1.expect)(statements).to.be.length.greaterThan(0);
|
|
431
431
|
});
|
|
432
432
|
it('recovers from missing end-if', () => {
|
|
433
433
|
//unexpected endif
|
|
@@ -440,9 +440,9 @@ describe('parser if statements', () => {
|
|
|
440
440
|
end function
|
|
441
441
|
`);
|
|
442
442
|
let { statements, diagnostics, references } = Parser_1.Parser.parse(tokens);
|
|
443
|
-
chai_1.expect(diagnostics).to.be.length.greaterThan(0);
|
|
444
|
-
chai_1.expect(statements).to.be.lengthOf(2);
|
|
445
|
-
chai_1.expect(references.functionStatements).to.be.lengthOf(2);
|
|
443
|
+
(0, chai_1.expect)(diagnostics).to.be.length.greaterThan(0);
|
|
444
|
+
(0, chai_1.expect)(statements).to.be.lengthOf(2);
|
|
445
|
+
(0, chai_1.expect)(references.functionStatements).to.be.lengthOf(2);
|
|
446
446
|
});
|
|
447
447
|
it('catches extraneous colon at the end of one-line if', () => {
|
|
448
448
|
//colon at the end not allowed
|
|
@@ -450,8 +450,8 @@ describe('parser if statements', () => {
|
|
|
450
450
|
if 1 < 2 then return true:
|
|
451
451
|
`);
|
|
452
452
|
let { statements, diagnostics } = Parser_1.Parser.parse(tokens);
|
|
453
|
-
chai_1.expect(diagnostics).to.be.lengthOf(1);
|
|
454
|
-
chai_1.expect(statements).to.be.length.greaterThan(0);
|
|
453
|
+
(0, chai_1.expect)(diagnostics).to.be.lengthOf(1);
|
|
454
|
+
(0, chai_1.expect)(statements).to.be.length.greaterThan(0);
|
|
455
455
|
});
|
|
456
456
|
it('catches multi-line if inside a one-line if branch', () => {
|
|
457
457
|
//second if should be inline
|
|
@@ -461,8 +461,8 @@ describe('parser if statements', () => {
|
|
|
461
461
|
end if
|
|
462
462
|
`);
|
|
463
463
|
let { statements, diagnostics } = Parser_1.Parser.parse(tokens);
|
|
464
|
-
chai_1.expect(diagnostics).to.be.lengthOf(1);
|
|
465
|
-
chai_1.expect(statements).to.be.length.greaterThan(0);
|
|
464
|
+
(0, chai_1.expect)(diagnostics).to.be.lengthOf(1);
|
|
465
|
+
(0, chai_1.expect)(statements).to.be.length.greaterThan(0);
|
|
466
466
|
});
|
|
467
467
|
it('supports multiple statements in one-line if statements', () => {
|
|
468
468
|
//second if should be inline
|
|
@@ -472,8 +472,8 @@ describe('parser if statements', () => {
|
|
|
472
472
|
end if
|
|
473
473
|
`);
|
|
474
474
|
let { statements, diagnostics } = Parser_1.Parser.parse(tokens);
|
|
475
|
-
chai_1.expect(diagnostics).to.be.lengthOf(1);
|
|
476
|
-
chai_1.expect(statements).to.be.length.greaterThan(0);
|
|
475
|
+
(0, chai_1.expect)(diagnostics).to.be.lengthOf(1);
|
|
476
|
+
(0, chai_1.expect)(statements).to.be.length.greaterThan(0);
|
|
477
477
|
});
|
|
478
478
|
it('catches multi-line if inside a one-line if else branch', () => {
|
|
479
479
|
//second if should be inline
|
|
@@ -483,8 +483,8 @@ describe('parser if statements', () => {
|
|
|
483
483
|
end if
|
|
484
484
|
`);
|
|
485
485
|
let { statements, diagnostics } = Parser_1.Parser.parse(tokens);
|
|
486
|
-
chai_1.expect(diagnostics).to.be.lengthOf(1);
|
|
487
|
-
chai_1.expect(statements).to.be.length.greaterThan(0);
|
|
486
|
+
(0, chai_1.expect)(diagnostics).to.be.lengthOf(1);
|
|
487
|
+
(0, chai_1.expect)(statements).to.be.length.greaterThan(0);
|
|
488
488
|
});
|
|
489
489
|
it('catches else statement missing colon', () => {
|
|
490
490
|
//missing colon before `end if`
|
|
@@ -494,8 +494,8 @@ describe('parser if statements', () => {
|
|
|
494
494
|
else return false end if
|
|
495
495
|
`);
|
|
496
496
|
let { statements, diagnostics } = Parser_1.Parser.parse(tokens);
|
|
497
|
-
chai_1.expect(diagnostics).to.be.length.greaterThan(0);
|
|
498
|
-
chai_1.expect(statements).to.be.lengthOf(1);
|
|
497
|
+
(0, chai_1.expect)(diagnostics).to.be.length.greaterThan(0);
|
|
498
|
+
(0, chai_1.expect)(statements).to.be.lengthOf(1);
|
|
499
499
|
});
|
|
500
500
|
it('supports if statement with condition and action on one line, but end if on separate line', () => {
|
|
501
501
|
let { tokens } = lexer_1.Lexer.scan(`
|
|
@@ -503,32 +503,32 @@ describe('parser if statements', () => {
|
|
|
503
503
|
end if
|
|
504
504
|
`);
|
|
505
505
|
let { statements, diagnostics } = Parser_1.Parser.parse(tokens);
|
|
506
|
-
chai_1.expect(diagnostics).to.be.lengthOf(0);
|
|
507
|
-
chai_1.expect(statements).to.be.length.greaterThan(0);
|
|
506
|
+
(0, chai_1.expect)(diagnostics).to.be.lengthOf(0);
|
|
507
|
+
(0, chai_1.expect)(statements).to.be.length.greaterThan(0);
|
|
508
508
|
});
|
|
509
509
|
it('supports colon after return in single-line if statement', () => {
|
|
510
510
|
let { tokens } = lexer_1.Lexer.scan(`
|
|
511
511
|
if false : print "true" : end if
|
|
512
512
|
`);
|
|
513
513
|
let { statements, diagnostics } = Parser_1.Parser.parse(tokens);
|
|
514
|
-
chai_1.expect(diagnostics).to.be.lengthOf(0);
|
|
515
|
-
chai_1.expect(statements).to.be.length.greaterThan(0);
|
|
514
|
+
(0, chai_1.expect)(diagnostics).to.be.lengthOf(0);
|
|
515
|
+
(0, chai_1.expect)(statements).to.be.length.greaterThan(0);
|
|
516
516
|
});
|
|
517
517
|
it('supports if elseif endif single line', () => {
|
|
518
518
|
let { tokens } = lexer_1.Lexer.scan(`
|
|
519
519
|
if true: print "8 worked": else if true: print "not run": else: print "not run": end if
|
|
520
520
|
`);
|
|
521
521
|
let { statements, diagnostics } = Parser_1.Parser.parse(tokens);
|
|
522
|
-
chai_1.expect(diagnostics).to.be.lengthOf(0);
|
|
523
|
-
chai_1.expect(statements).to.be.length.greaterThan(0);
|
|
522
|
+
(0, chai_1.expect)(diagnostics).to.be.lengthOf(0);
|
|
523
|
+
(0, chai_1.expect)(statements).to.be.length.greaterThan(0);
|
|
524
524
|
});
|
|
525
525
|
it('supports comment at the end of one-line if', () => {
|
|
526
526
|
let { tokens } = lexer_1.Lexer.scan(`
|
|
527
527
|
if 1 > 2 then return true 'OK
|
|
528
528
|
`);
|
|
529
529
|
let { statements, diagnostics } = Parser_1.Parser.parse(tokens);
|
|
530
|
-
chai_1.expect(diagnostics).to.be.lengthOf(0);
|
|
531
|
-
chai_1.expect(statements).to.be.length.greaterThan(0);
|
|
530
|
+
(0, chai_1.expect)(diagnostics).to.be.lengthOf(0);
|
|
531
|
+
(0, chai_1.expect)(statements).to.be.length.greaterThan(0);
|
|
532
532
|
});
|
|
533
533
|
it('supports colon at the beginning of a line', () => {
|
|
534
534
|
let { tokens } = lexer_1.Lexer.scan(`
|
|
@@ -536,16 +536,34 @@ describe('parser if statements', () => {
|
|
|
536
536
|
: end if
|
|
537
537
|
`);
|
|
538
538
|
let { statements, diagnostics } = Parser_1.Parser.parse(tokens);
|
|
539
|
-
chai_1.expect(diagnostics).to.be.lengthOf(0);
|
|
540
|
-
chai_1.expect(statements).to.be.length.greaterThan(0);
|
|
539
|
+
(0, chai_1.expect)(diagnostics).to.be.lengthOf(0);
|
|
540
|
+
(0, chai_1.expect)(statements).to.be.length.greaterThan(0);
|
|
541
541
|
});
|
|
542
542
|
it('supports one-line functions inside of one-line if statement', () => {
|
|
543
543
|
let { tokens } = lexer_1.Lexer.scan(`
|
|
544
544
|
if true then : test = sub() : print "yes" : end sub : end if
|
|
545
545
|
`);
|
|
546
546
|
let { statements, diagnostics } = Parser_1.Parser.parse(tokens);
|
|
547
|
-
chai_1.expect(diagnostics).to.be.lengthOf(0);
|
|
548
|
-
chai_1.expect(statements).to.be.length.greaterThan(0);
|
|
547
|
+
(0, chai_1.expect)(diagnostics).to.be.lengthOf(0);
|
|
548
|
+
(0, chai_1.expect)(statements).to.be.length.greaterThan(0);
|
|
549
|
+
});
|
|
550
|
+
it('single-line if block statements have correct range', () => {
|
|
551
|
+
let { tokens } = lexer_1.Lexer.scan(`
|
|
552
|
+
if false then print "true"
|
|
553
|
+
if false then print "true": a = 10
|
|
554
|
+
if false then print "true" else print "false"
|
|
555
|
+
if false then print "true" else print "false": a = 20
|
|
556
|
+
`);
|
|
557
|
+
let { statements, diagnostics } = Parser_1.Parser.parse(tokens);
|
|
558
|
+
(0, chai_1.expect)(diagnostics).to.be.lengthOf(0);
|
|
559
|
+
const then1 = statements[0].thenBranch;
|
|
560
|
+
(0, chai_1.expect)((0, Parser_spec_1.rangeMatch)(then1.range, then1.statements)).to.be.true;
|
|
561
|
+
const then2 = statements[1].thenBranch;
|
|
562
|
+
(0, chai_1.expect)((0, Parser_spec_1.rangeMatch)(then2.range, then2.statements)).to.be.true;
|
|
563
|
+
const else1 = statements[2].elseBranch;
|
|
564
|
+
(0, chai_1.expect)((0, Parser_spec_1.rangeMatch)(else1.range, else1.statements)).to.be.true;
|
|
565
|
+
const else2 = statements[3].elseBranch;
|
|
566
|
+
(0, chai_1.expect)((0, Parser_spec_1.rangeMatch)(else2.range, else2.statements)).to.be.true;
|
|
549
567
|
});
|
|
550
568
|
});
|
|
551
569
|
//# sourceMappingURL=If.spec.js.map
|