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
|
@@ -16,13 +16,13 @@ const StringType_1 = require("../types/StringType");
|
|
|
16
16
|
const CustomType_1 = require("../types/CustomType");
|
|
17
17
|
const IntegerType_1 = require("../types/IntegerType");
|
|
18
18
|
const ObjectType_1 = require("../types/ObjectType");
|
|
19
|
-
const LazyType_1 = require("../types/LazyType");
|
|
20
19
|
const SymbolTable_1 = require("../SymbolTable");
|
|
21
20
|
const DynamicType_1 = require("../types/DynamicType");
|
|
22
21
|
const util_1 = require("../util");
|
|
22
|
+
const LazyType_1 = require("../types/LazyType");
|
|
23
23
|
describe('parser', () => {
|
|
24
24
|
it('emits empty object when empty token list is provided', () => {
|
|
25
|
-
chai_1.expect(Parser_1.Parser.parse([])).to.deep.include({
|
|
25
|
+
(0, chai_1.expect)(Parser_1.Parser.parse([])).to.deep.include({
|
|
26
26
|
statements: [],
|
|
27
27
|
diagnostics: []
|
|
28
28
|
});
|
|
@@ -40,7 +40,7 @@ describe('parser', () => {
|
|
|
40
40
|
humansAreAlive = false
|
|
41
41
|
end sub
|
|
42
42
|
`);
|
|
43
|
-
chai_1.expect(parser.references.functionExpressions[0].symbolTable.
|
|
43
|
+
(0, chai_1.expect)(parser.references.functionExpressions[0].symbolTable.getOwnSymbols().map(x => x.name).sort()).to.eql([
|
|
44
44
|
'herd',
|
|
45
45
|
'humansAreAlive',
|
|
46
46
|
'i',
|
|
@@ -49,7 +49,7 @@ describe('parser', () => {
|
|
|
49
49
|
'zombie'
|
|
50
50
|
]);
|
|
51
51
|
parser.invalidateReferences();
|
|
52
|
-
chai_1.expect(parser.references.functionExpressions[0].symbolTable.
|
|
52
|
+
(0, chai_1.expect)(parser.references.functionExpressions[0].symbolTable.getOwnSymbols().map(x => x.name).sort()).to.eql([
|
|
53
53
|
'herd',
|
|
54
54
|
'humansAreAlive',
|
|
55
55
|
'i',
|
|
@@ -69,12 +69,12 @@ describe('parser', () => {
|
|
|
69
69
|
end sub
|
|
70
70
|
`);
|
|
71
71
|
parser.invalidateReferences();
|
|
72
|
-
chai_1.expect(parser.references.functionExpressions[0].symbolTable.
|
|
72
|
+
(0, chai_1.expect)(parser.references.functionExpressions[0].symbolTable.getOwnSymbols().map(x => x.name)).to.eql([
|
|
73
73
|
'outerName',
|
|
74
74
|
'speak',
|
|
75
75
|
'age'
|
|
76
76
|
]);
|
|
77
|
-
chai_1.expect(parser.references.functionExpressions[1].symbolTable.
|
|
77
|
+
(0, chai_1.expect)(parser.references.functionExpressions[1].symbolTable.getOwnSymbols().map(x => x.name)).to.eql([
|
|
78
78
|
'innerName'
|
|
79
79
|
]);
|
|
80
80
|
});
|
|
@@ -86,7 +86,7 @@ describe('parser', () => {
|
|
|
86
86
|
sub UnusedFunction()
|
|
87
87
|
end sub
|
|
88
88
|
`);
|
|
89
|
-
chai_1.expect(parser.references.functionStatements.map(x => x.name.text)).to.eql([
|
|
89
|
+
(0, chai_1.expect)(parser.references.functionStatements.map(x => x.name.text)).to.eql([
|
|
90
90
|
'main',
|
|
91
91
|
'UnusedFunction'
|
|
92
92
|
]);
|
|
@@ -94,9 +94,9 @@ describe('parser', () => {
|
|
|
94
94
|
parser.ast.statements.splice(1);
|
|
95
95
|
//tell the parser we modified the AST and need to regenerate references
|
|
96
96
|
parser.invalidateReferences();
|
|
97
|
-
chai_1.expect(parser['_references']).not.to.exist;
|
|
97
|
+
(0, chai_1.expect)(parser['_references']).not.to.exist;
|
|
98
98
|
//calling `references` automatically regenerates the references
|
|
99
|
-
chai_1.expect(parser.references.functionStatements.map(x => x.name.text)).to.eql([
|
|
99
|
+
(0, chai_1.expect)(parser.references.functionStatements.map(x => x.name.text)).to.eql([
|
|
100
100
|
'main'
|
|
101
101
|
]);
|
|
102
102
|
});
|
|
@@ -109,7 +109,7 @@ describe('parser', () => {
|
|
|
109
109
|
node@.doSomething(1, 2)
|
|
110
110
|
end sub
|
|
111
111
|
`, Parser_1.ParseMode.BrightScript);
|
|
112
|
-
chai_1.expect((_a = parser.diagnostics[0]) === null || _a === void 0 ? void 0 : _a.message).to.equal(DiagnosticMessages_1.DiagnosticMessages.bsFeatureNotSupportedInBrsFiles('callfunc operator').message);
|
|
112
|
+
(0, chai_1.expect)((_a = parser.diagnostics[0]) === null || _a === void 0 ? void 0 : _a.message).to.equal(DiagnosticMessages_1.DiagnosticMessages.bsFeatureNotSupportedInBrsFiles('callfunc operator').message);
|
|
113
113
|
});
|
|
114
114
|
it('does not cause parse errors', () => {
|
|
115
115
|
var _a, _b, _c, _d, _e;
|
|
@@ -118,13 +118,13 @@ describe('parser', () => {
|
|
|
118
118
|
node@.doSomething(1, 2)
|
|
119
119
|
end sub
|
|
120
120
|
`, Parser_1.ParseMode.BrighterScript);
|
|
121
|
-
chai_1.expect((_a = parser.diagnostics[0]) === null || _a === void 0 ? void 0 : _a.message).not.to.exist;
|
|
122
|
-
chai_1.expect((_e = (_d = (_c = (_b = parser.statements[0]) === null || _b === void 0 ? void 0 : _b.func) === null || _c === void 0 ? void 0 : _c.body) === null || _d === void 0 ? void 0 : _d.statements[0]) === null || _e === void 0 ? void 0 : _e.expression).to.be.instanceof(Expression_1.CallfuncExpression);
|
|
121
|
+
(0, chai_1.expect)((_a = parser.diagnostics[0]) === null || _a === void 0 ? void 0 : _a.message).not.to.exist;
|
|
122
|
+
(0, chai_1.expect)((_e = (_d = (_c = (_b = parser.statements[0]) === null || _b === void 0 ? void 0 : _b.func) === null || _c === void 0 ? void 0 : _c.body) === null || _d === void 0 ? void 0 : _d.statements[0]) === null || _e === void 0 ? void 0 : _e.expression).to.be.instanceof(Expression_1.CallfuncExpression);
|
|
123
123
|
});
|
|
124
124
|
});
|
|
125
125
|
describe('diagnostic locations', () => {
|
|
126
126
|
it('tracks basic diagnostic locations', () => {
|
|
127
|
-
chai_1.expect(parse(`
|
|
127
|
+
(0, chai_1.expect)(parse(`
|
|
128
128
|
sub main()
|
|
129
129
|
call()a
|
|
130
130
|
end sub
|
|
@@ -140,8 +140,8 @@ describe('parser', () => {
|
|
|
140
140
|
return "6c5cdf1"
|
|
141
141
|
end functionasdf
|
|
142
142
|
`).diagnostics;
|
|
143
|
-
chai_1.expect((_a = diagnostics[0]) === null || _a === void 0 ? void 0 : _a.message).to.exist.and.to.eql(DiagnosticMessages_1.DiagnosticMessages.expectedStatementOrFunctionCallButReceivedExpression().message);
|
|
144
|
-
chai_1.expect((_b = diagnostics[0]) === null || _b === void 0 ? void 0 : _b.range).to.eql(vscode_languageserver_1.Range.create(3, 20, 3, 32));
|
|
143
|
+
(0, chai_1.expect)((_a = diagnostics[0]) === null || _a === void 0 ? void 0 : _a.message).to.exist.and.to.eql(DiagnosticMessages_1.DiagnosticMessages.expectedStatementOrFunctionCallButReceivedExpression().message);
|
|
144
|
+
(0, chai_1.expect)((_b = diagnostics[0]) === null || _b === void 0 ? void 0 : _b.range).to.eql(vscode_languageserver_1.Range.create(3, 20, 3, 32));
|
|
145
145
|
});
|
|
146
146
|
});
|
|
147
147
|
describe('parse', () => {
|
|
@@ -154,7 +154,7 @@ describe('parser', () => {
|
|
|
154
154
|
end function()
|
|
155
155
|
end sub
|
|
156
156
|
`);
|
|
157
|
-
testHelpers_spec_1.expectZeroDiagnostics(parser);
|
|
157
|
+
(0, testHelpers_spec_1.expectZeroDiagnostics)(parser);
|
|
158
158
|
});
|
|
159
159
|
it('supports grouped iife in assignment', () => {
|
|
160
160
|
const parser = parse(`
|
|
@@ -165,7 +165,7 @@ describe('parser', () => {
|
|
|
165
165
|
end function)()
|
|
166
166
|
end sub
|
|
167
167
|
`);
|
|
168
|
-
testHelpers_spec_1.expectZeroDiagnostics(parser);
|
|
168
|
+
(0, testHelpers_spec_1.expectZeroDiagnostics)(parser);
|
|
169
169
|
});
|
|
170
170
|
it('supports returning iife call', () => {
|
|
171
171
|
const parser = parse(`
|
|
@@ -174,11 +174,11 @@ describe('parser', () => {
|
|
|
174
174
|
end sub)()
|
|
175
175
|
end sub
|
|
176
176
|
`);
|
|
177
|
-
testHelpers_spec_1.expectZeroDiagnostics(parser);
|
|
177
|
+
(0, testHelpers_spec_1.expectZeroDiagnostics)(parser);
|
|
178
178
|
});
|
|
179
179
|
it('supports using "interface" as parameter name', () => {
|
|
180
180
|
var _a;
|
|
181
|
-
chai_1.expect((_a = parse(`
|
|
181
|
+
(0, chai_1.expect)((_a = parse(`
|
|
182
182
|
sub main(interface as object)
|
|
183
183
|
end sub
|
|
184
184
|
`, Parser_1.ParseMode.BrighterScript).diagnostics[0]) === null || _a === void 0 ? void 0 : _a.message).not.to.exist;
|
|
@@ -186,7 +186,7 @@ describe('parser', () => {
|
|
|
186
186
|
describe('namespace', () => {
|
|
187
187
|
it('catches namespaces declared not at root level', () => {
|
|
188
188
|
var _a;
|
|
189
|
-
chai_1.expect((_a = parse(`
|
|
189
|
+
(0, chai_1.expect)((_a = parse(`
|
|
190
190
|
sub main()
|
|
191
191
|
namespace Name.Space
|
|
192
192
|
end namespace
|
|
@@ -199,8 +199,8 @@ describe('parser', () => {
|
|
|
199
199
|
namespace Name.Space
|
|
200
200
|
end namespace
|
|
201
201
|
`, Parser_1.ParseMode.BrighterScript);
|
|
202
|
-
chai_1.expect((_a = diagnostics[0]) === null || _a === void 0 ? void 0 : _a.message).not.to.exist;
|
|
203
|
-
chai_1.expect(statements[0]).to.be.instanceof(Statement_1.NamespaceStatement);
|
|
202
|
+
(0, chai_1.expect)((_a = diagnostics[0]) === null || _a === void 0 ? void 0 : _a.message).not.to.exist;
|
|
203
|
+
(0, chai_1.expect)(statements[0]).to.be.instanceof(Statement_1.NamespaceStatement);
|
|
204
204
|
});
|
|
205
205
|
it('includes body', () => {
|
|
206
206
|
var _a;
|
|
@@ -210,9 +210,9 @@ describe('parser', () => {
|
|
|
210
210
|
end sub
|
|
211
211
|
end namespace
|
|
212
212
|
`, Parser_1.ParseMode.BrighterScript);
|
|
213
|
-
chai_1.expect((_a = diagnostics[0]) === null || _a === void 0 ? void 0 : _a.message).not.to.exist;
|
|
214
|
-
chai_1.expect(statements[0]).to.be.instanceof(Statement_1.NamespaceStatement);
|
|
215
|
-
chai_1.expect(statements[0].body.statements[0]).to.be.instanceof(Statement_1.FunctionStatement);
|
|
213
|
+
(0, chai_1.expect)((_a = diagnostics[0]) === null || _a === void 0 ? void 0 : _a.message).not.to.exist;
|
|
214
|
+
(0, chai_1.expect)(statements[0]).to.be.instanceof(Statement_1.NamespaceStatement);
|
|
215
|
+
(0, chai_1.expect)(statements[0].body.statements[0]).to.be.instanceof(Statement_1.FunctionStatement);
|
|
216
216
|
});
|
|
217
217
|
it('supports comments and newlines', () => {
|
|
218
218
|
var _a;
|
|
@@ -228,7 +228,7 @@ describe('parser', () => {
|
|
|
228
228
|
'comment
|
|
229
229
|
end namespace 'comment
|
|
230
230
|
`, Parser_1.ParseMode.BrighterScript);
|
|
231
|
-
chai_1.expect((_a = diagnostics[0]) === null || _a === void 0 ? void 0 : _a.message).not.to.exist;
|
|
231
|
+
(0, chai_1.expect)((_a = diagnostics[0]) === null || _a === void 0 ? void 0 : _a.message).not.to.exist;
|
|
232
232
|
});
|
|
233
233
|
it('catches missing name', () => {
|
|
234
234
|
var _a;
|
|
@@ -236,7 +236,7 @@ describe('parser', () => {
|
|
|
236
236
|
namespace
|
|
237
237
|
end namespace
|
|
238
238
|
`, Parser_1.ParseMode.BrighterScript);
|
|
239
|
-
chai_1.expect((_a = diagnostics[0]) === null || _a === void 0 ? void 0 : _a.message).to.equal(DiagnosticMessages_1.DiagnosticMessages.expectedIdentifierAfterKeyword('namespace').message);
|
|
239
|
+
(0, chai_1.expect)((_a = diagnostics[0]) === null || _a === void 0 ? void 0 : _a.message).to.equal(DiagnosticMessages_1.DiagnosticMessages.expectedIdentifierAfterKeyword('namespace').message);
|
|
240
240
|
});
|
|
241
241
|
it('recovers after missing `end namespace`', () => {
|
|
242
242
|
var _a, _b, _c;
|
|
@@ -245,9 +245,9 @@ describe('parser', () => {
|
|
|
245
245
|
sub main()
|
|
246
246
|
end sub
|
|
247
247
|
`, Parser_1.ParseMode.BrighterScript);
|
|
248
|
-
chai_1.expect(parser.ast.statements[0]).to.be.instanceof(Statement_1.NamespaceStatement);
|
|
249
|
-
chai_1.expect((_a = parser.diagnostics[0]) === null || _a === void 0 ? void 0 : _a.message).to.equal(DiagnosticMessages_1.DiagnosticMessages.couldNotFindMatchingEndKeyword('namespace').message);
|
|
250
|
-
chai_1.expect((_c = (_b = parser.ast.statements[0]) === null || _b === void 0 ? void 0 : _b.body) === null || _c === void 0 ? void 0 : _c.statements[0]).to.be.instanceof(Statement_1.FunctionStatement);
|
|
248
|
+
(0, chai_1.expect)(parser.ast.statements[0]).to.be.instanceof(Statement_1.NamespaceStatement);
|
|
249
|
+
(0, chai_1.expect)((_a = parser.diagnostics[0]) === null || _a === void 0 ? void 0 : _a.message).to.equal(DiagnosticMessages_1.DiagnosticMessages.couldNotFindMatchingEndKeyword('namespace').message);
|
|
250
|
+
(0, chai_1.expect)((_c = (_b = parser.ast.statements[0]) === null || _b === void 0 ? void 0 : _b.body) === null || _c === void 0 ? void 0 : _c.statements[0]).to.be.instanceof(Statement_1.FunctionStatement);
|
|
251
251
|
});
|
|
252
252
|
it('adds diagnostic when encountering namespace in brightscript mode', () => {
|
|
253
253
|
var _a;
|
|
@@ -255,7 +255,7 @@ describe('parser', () => {
|
|
|
255
255
|
namespace Name.Space
|
|
256
256
|
end namespace
|
|
257
257
|
`);
|
|
258
|
-
chai_1.expect((_a = parser.diagnostics[0]) === null || _a === void 0 ? void 0 : _a.message).to.equal(DiagnosticMessages_1.DiagnosticMessages.bsFeatureNotSupportedInBrsFiles('namespace').message);
|
|
258
|
+
(0, chai_1.expect)((_a = parser.diagnostics[0]) === null || _a === void 0 ? void 0 : _a.message).to.equal(DiagnosticMessages_1.DiagnosticMessages.bsFeatureNotSupportedInBrsFiles('namespace').message);
|
|
259
259
|
});
|
|
260
260
|
it('declares a symbol table for the namespace', () => {
|
|
261
261
|
let parser = parse(`
|
|
@@ -269,13 +269,13 @@ describe('parser', () => {
|
|
|
269
269
|
end function
|
|
270
270
|
end namespace
|
|
271
271
|
`, Parser_1.ParseMode.BrighterScript);
|
|
272
|
-
chai_1.expect(parser.ast.statements[0]).to.be.instanceof(Statement_1.NamespaceStatement);
|
|
272
|
+
(0, chai_1.expect)(parser.ast.statements[0]).to.be.instanceof(Statement_1.NamespaceStatement);
|
|
273
273
|
const namespaceStmt = parser.ast.statements[0];
|
|
274
|
-
chai_1.expect(namespaceStmt.symbolTable).to.be.instanceof(SymbolTable_1.SymbolTable);
|
|
275
|
-
chai_1.expect(namespaceStmt.symbolTable.getSymbolType('funcInt').toString()).to.equal('function funcInt() as integer');
|
|
276
|
-
chai_1.expect(namespaceStmt.symbolTable.getSymbolType('funcStr')).to.be.instanceof(FunctionType_1.FunctionType);
|
|
274
|
+
(0, chai_1.expect)(namespaceStmt.symbolTable).to.be.instanceof(SymbolTable_1.SymbolTable);
|
|
275
|
+
(0, chai_1.expect)(namespaceStmt.symbolTable.getSymbolType('funcInt').toString()).to.equal('function funcInt() as integer');
|
|
276
|
+
(0, chai_1.expect)(namespaceStmt.symbolTable.getSymbolType('funcStr')).to.be.instanceof(FunctionType_1.FunctionType);
|
|
277
277
|
const strFunctionType = namespaceStmt.symbolTable.getSymbolType('funcStr');
|
|
278
|
-
chai_1.expect(strFunctionType.returnType.toString()).to.equal('string');
|
|
278
|
+
(0, chai_1.expect)(strFunctionType.returnType.toString()).to.equal('string');
|
|
279
279
|
});
|
|
280
280
|
it('adds a fully qualified name of a function in a namespace to the parsers symbol table', () => {
|
|
281
281
|
let parser = parse(`
|
|
@@ -289,13 +289,13 @@ describe('parser', () => {
|
|
|
289
289
|
end function
|
|
290
290
|
end namespace
|
|
291
291
|
`, Parser_1.ParseMode.BrighterScript);
|
|
292
|
-
chai_1.expect(parser.symbolTable.getSymbolType('Name.Space.funcInt')).to.be.instanceof(FunctionType_1.FunctionType);
|
|
293
|
-
chai_1.expect(parser.symbolTable.getSymbolType('Name.Space.funcStr')).to.be.instanceof(FunctionType_1.FunctionType);
|
|
292
|
+
(0, chai_1.expect)(parser.symbolTable.getSymbolType('Name.Space.funcInt')).to.be.instanceof(FunctionType_1.FunctionType);
|
|
293
|
+
(0, chai_1.expect)(parser.symbolTable.getSymbolType('Name.Space.funcStr')).to.be.instanceof(FunctionType_1.FunctionType);
|
|
294
294
|
});
|
|
295
295
|
});
|
|
296
296
|
it('supports << operator', () => {
|
|
297
297
|
var _a;
|
|
298
|
-
chai_1.expect((_a = parse(`
|
|
298
|
+
(0, chai_1.expect)((_a = parse(`
|
|
299
299
|
sub main()
|
|
300
300
|
print ((r << 24) + (g << 16) + (b << 8) + a)
|
|
301
301
|
end sub
|
|
@@ -303,7 +303,7 @@ describe('parser', () => {
|
|
|
303
303
|
});
|
|
304
304
|
it('supports >> operator', () => {
|
|
305
305
|
var _a;
|
|
306
|
-
chai_1.expect((_a = parse(`
|
|
306
|
+
(0, chai_1.expect)((_a = parse(`
|
|
307
307
|
sub main()
|
|
308
308
|
print ((r >> 24) + (g >> 16) + (b >> 8) + a)
|
|
309
309
|
end sub
|
|
@@ -311,7 +311,7 @@ describe('parser', () => {
|
|
|
311
311
|
});
|
|
312
312
|
it('allows global function names with same as token to be called', () => {
|
|
313
313
|
var _a;
|
|
314
|
-
chai_1.expect((_a = parse(`
|
|
314
|
+
(0, chai_1.expect)((_a = parse(`
|
|
315
315
|
sub main()
|
|
316
316
|
print string(123)
|
|
317
317
|
end sub
|
|
@@ -325,18 +325,18 @@ describe('parser', () => {
|
|
|
325
325
|
age = personXml.firstChild@age
|
|
326
326
|
end sub
|
|
327
327
|
`);
|
|
328
|
-
chai_1.expect((_a = parser.diagnostics[0]) === null || _a === void 0 ? void 0 : _a.message).to.not.exist;
|
|
328
|
+
(0, chai_1.expect)((_a = parser.diagnostics[0]) === null || _a === void 0 ? void 0 : _a.message).to.not.exist;
|
|
329
329
|
let statements = parser.statements[0].func.body.statements;
|
|
330
330
|
let first = statements[0].value;
|
|
331
|
-
chai_1.expect(first).to.be.instanceof(Expression_1.XmlAttributeGetExpression);
|
|
332
|
-
chai_1.expect(first.name.text).to.equal('firstName');
|
|
333
|
-
chai_1.expect(first.at.text).to.equal('@');
|
|
334
|
-
chai_1.expect(first.obj.name.text).to.equal('personXml');
|
|
331
|
+
(0, chai_1.expect)(first).to.be.instanceof(Expression_1.XmlAttributeGetExpression);
|
|
332
|
+
(0, chai_1.expect)(first.name.text).to.equal('firstName');
|
|
333
|
+
(0, chai_1.expect)(first.at.text).to.equal('@');
|
|
334
|
+
(0, chai_1.expect)(first.obj.name.text).to.equal('personXml');
|
|
335
335
|
let second = statements[1].value;
|
|
336
|
-
chai_1.expect(second).to.be.instanceof(Expression_1.XmlAttributeGetExpression);
|
|
337
|
-
chai_1.expect(second.name.text).to.equal('age');
|
|
338
|
-
chai_1.expect(second.at.text).to.equal('@');
|
|
339
|
-
chai_1.expect(second.obj.name.text).to.equal('firstChild');
|
|
336
|
+
(0, chai_1.expect)(second).to.be.instanceof(Expression_1.XmlAttributeGetExpression);
|
|
337
|
+
(0, chai_1.expect)(second.name.text).to.equal('age');
|
|
338
|
+
(0, chai_1.expect)(second.at.text).to.equal('@');
|
|
339
|
+
(0, chai_1.expect)(second.obj.name.text).to.equal('firstChild');
|
|
340
340
|
});
|
|
341
341
|
it('does not allow chaining of @ symbols', () => {
|
|
342
342
|
let parser = parse(`
|
|
@@ -345,58 +345,58 @@ describe('parser', () => {
|
|
|
345
345
|
name = personXml@name@age@shoeSize
|
|
346
346
|
end sub
|
|
347
347
|
`);
|
|
348
|
-
chai_1.expect(parser.diagnostics).not.to.be.empty;
|
|
348
|
+
(0, chai_1.expect)(parser.diagnostics).not.to.be.empty;
|
|
349
349
|
});
|
|
350
350
|
it('unknown function type does not invalidate rest of function', () => {
|
|
351
351
|
let { statements, diagnostics } = parse(`
|
|
352
352
|
function log() as UNKNOWN_TYPE
|
|
353
353
|
end function
|
|
354
354
|
`, Parser_1.ParseMode.BrightScript);
|
|
355
|
-
chai_1.expect(diagnostics.length).to.be.greaterThan(0);
|
|
356
|
-
chai_1.expect(statements[0]).to.exist;
|
|
355
|
+
(0, chai_1.expect)(diagnostics.length).to.be.greaterThan(0);
|
|
356
|
+
(0, chai_1.expect)(statements[0]).to.exist;
|
|
357
357
|
});
|
|
358
358
|
it('unknown function type is not a problem in Brighterscript mode', () => {
|
|
359
359
|
let { statements, diagnostics } = parse(`
|
|
360
360
|
function log() as UNKNOWN_TYPE
|
|
361
361
|
end function
|
|
362
362
|
`, Parser_1.ParseMode.BrighterScript);
|
|
363
|
-
chai_1.expect(diagnostics.length).to.equal(0);
|
|
364
|
-
chai_1.expect(statements[0]).to.exist;
|
|
363
|
+
(0, chai_1.expect)(diagnostics.length).to.equal(0);
|
|
364
|
+
(0, chai_1.expect)(statements[0]).to.exist;
|
|
365
365
|
});
|
|
366
366
|
it('allows namespaced function type in Brighterscript mode', () => {
|
|
367
367
|
let { statements, diagnostics } = parse(`
|
|
368
368
|
function log() as SOME_NAMESPACE.UNKNOWN_TYPE
|
|
369
369
|
end function
|
|
370
370
|
`, Parser_1.ParseMode.BrighterScript);
|
|
371
|
-
chai_1.expect(diagnostics.length).to.equal(0);
|
|
372
|
-
chai_1.expect(statements[0]).to.exist;
|
|
371
|
+
(0, chai_1.expect)(diagnostics.length).to.equal(0);
|
|
372
|
+
(0, chai_1.expect)(statements[0]).to.exist;
|
|
373
373
|
});
|
|
374
374
|
it('allows custom parameter types in BrighterscriptMode', () => {
|
|
375
375
|
let { statements, diagnostics } = parse(`
|
|
376
376
|
sub foo(value as UNKNOWN_TYPE)
|
|
377
377
|
end sub
|
|
378
378
|
`, Parser_1.ParseMode.BrighterScript);
|
|
379
|
-
chai_1.expect(diagnostics.length).to.equal(0);
|
|
380
|
-
chai_1.expect(statements[0]).to.exist;
|
|
379
|
+
(0, chai_1.expect)(diagnostics.length).to.equal(0);
|
|
380
|
+
(0, chai_1.expect)(statements[0]).to.exist;
|
|
381
381
|
});
|
|
382
382
|
it('does not allow custom parameter types in Brightscript Mode', () => {
|
|
383
383
|
let { diagnostics } = parse(`
|
|
384
384
|
sub foo(value as UNKNOWN_TYPE)
|
|
385
385
|
end sub
|
|
386
386
|
`, Parser_1.ParseMode.BrightScript);
|
|
387
|
-
chai_1.expect(diagnostics.length).not.to.equal(0);
|
|
387
|
+
(0, chai_1.expect)(diagnostics.length).not.to.equal(0);
|
|
388
388
|
});
|
|
389
389
|
it('allows custom namespaced parameter types in BrighterscriptMode', () => {
|
|
390
390
|
let { statements, diagnostics } = parse(`
|
|
391
391
|
sub foo(value as SOME_NAMESPACE.UNKNOWN_TYPE)
|
|
392
392
|
end sub
|
|
393
393
|
`, Parser_1.ParseMode.BrighterScript);
|
|
394
|
-
chai_1.expect(diagnostics.length).to.equal(0);
|
|
395
|
-
chai_1.expect(statements[0]).to.exist;
|
|
394
|
+
(0, chai_1.expect)(diagnostics.length).to.equal(0);
|
|
395
|
+
(0, chai_1.expect)(statements[0]).to.exist;
|
|
396
396
|
});
|
|
397
397
|
it('works with conditionals', () => {
|
|
398
398
|
var _a;
|
|
399
|
-
chai_1.expect((_a = parse(`
|
|
399
|
+
(0, chai_1.expect)((_a = parse(`
|
|
400
400
|
function printNumber()
|
|
401
401
|
if true then
|
|
402
402
|
print 1
|
|
@@ -408,7 +408,7 @@ describe('parser', () => {
|
|
|
408
408
|
});
|
|
409
409
|
it('supports single-line if statements', () => {
|
|
410
410
|
var _a;
|
|
411
|
-
chai_1.expect((_a = parse(`If true Then print "error" : Stop`).diagnostics[0]) === null || _a === void 0 ? void 0 : _a.message).to.not.exist;
|
|
411
|
+
(0, chai_1.expect)((_a = parse(`If true Then print "error" : Stop`).diagnostics[0]) === null || _a === void 0 ? void 0 : _a.message).to.not.exist;
|
|
412
412
|
});
|
|
413
413
|
it('works with excess newlines', () => {
|
|
414
414
|
var _a;
|
|
@@ -421,7 +421,7 @@ describe('parser', () => {
|
|
|
421
421
|
' print 1\n\n' +
|
|
422
422
|
' end if\n\n' +
|
|
423
423
|
'end function\n\n');
|
|
424
|
-
chai_1.expect((_a = Parser_1.Parser.parse(tokens).diagnostics[0]) === null || _a === void 0 ? void 0 : _a.message).to.not.exist;
|
|
424
|
+
(0, chai_1.expect)((_a = Parser_1.Parser.parse(tokens).diagnostics[0]) === null || _a === void 0 ? void 0 : _a.message).to.not.exist;
|
|
425
425
|
});
|
|
426
426
|
it('does not invalidate entire file when line ends with a period', () => {
|
|
427
427
|
let { tokens } = lexer_1.Lexer.scan(`
|
|
@@ -431,15 +431,15 @@ describe('parser', () => {
|
|
|
431
431
|
|
|
432
432
|
`);
|
|
433
433
|
let { diagnostics } = Parser_1.Parser.parse(tokens);
|
|
434
|
-
chai_1.expect(diagnostics).to.be.lengthOf(1, 'Error count should be 0');
|
|
434
|
+
(0, chai_1.expect)(diagnostics).to.be.lengthOf(1, 'Error count should be 0');
|
|
435
435
|
});
|
|
436
436
|
it.skip('allows printing object with trailing period', () => {
|
|
437
437
|
let { tokens } = lexer_1.Lexer.scan(`print a.`);
|
|
438
438
|
let { statements, diagnostics } = Parser_1.Parser.parse(tokens);
|
|
439
439
|
let printStatement = statements[0];
|
|
440
|
-
chai_1.expect(diagnostics).to.be.empty;
|
|
441
|
-
chai_1.expect(printStatement).to.be.instanceof(Statement_1.PrintStatement);
|
|
442
|
-
chai_1.expect(printStatement.expressions[0]).to.be.instanceof(Expression_1.DottedGetExpression);
|
|
440
|
+
(0, chai_1.expect)(diagnostics).to.be.empty;
|
|
441
|
+
(0, chai_1.expect)(printStatement).to.be.instanceof(Statement_1.PrintStatement);
|
|
442
|
+
(0, chai_1.expect)(printStatement.expressions[0]).to.be.instanceof(Expression_1.DottedGetExpression);
|
|
443
443
|
});
|
|
444
444
|
describe('comments', () => {
|
|
445
445
|
it('combines multi-line comments', () => {
|
|
@@ -449,8 +449,8 @@ describe('parser', () => {
|
|
|
449
449
|
'line 3
|
|
450
450
|
`);
|
|
451
451
|
let { diagnostics, statements } = Parser_1.Parser.parse(tokens);
|
|
452
|
-
chai_1.expect(diagnostics).to.be.lengthOf(0, 'Error count should be 0');
|
|
453
|
-
chai_1.expect(statements[0].text).to.equal(`'line 1\n'line 2\n'line 3`);
|
|
452
|
+
(0, chai_1.expect)(diagnostics).to.be.lengthOf(0, 'Error count should be 0');
|
|
453
|
+
(0, chai_1.expect)(statements[0].text).to.equal(`'line 1\n'line 2\n'line 3`);
|
|
454
454
|
});
|
|
455
455
|
it('does not combile comments separated by newlines', () => {
|
|
456
456
|
let { tokens } = lexer_1.Lexer.scan(`
|
|
@@ -461,11 +461,11 @@ describe('parser', () => {
|
|
|
461
461
|
'line 3
|
|
462
462
|
`);
|
|
463
463
|
let { diagnostics, statements } = Parser_1.Parser.parse(tokens);
|
|
464
|
-
chai_1.expect(diagnostics).to.be.lengthOf(0, 'Error count should be 0');
|
|
465
|
-
chai_1.expect(statements).to.be.lengthOf(3);
|
|
466
|
-
chai_1.expect(statements[0].text).to.equal(`'line 1`);
|
|
467
|
-
chai_1.expect(statements[1].text).to.equal(`'line 2`);
|
|
468
|
-
chai_1.expect(statements[2].text).to.equal(`'line 3`);
|
|
464
|
+
(0, chai_1.expect)(diagnostics).to.be.lengthOf(0, 'Error count should be 0');
|
|
465
|
+
(0, chai_1.expect)(statements).to.be.lengthOf(3);
|
|
466
|
+
(0, chai_1.expect)(statements[0].text).to.equal(`'line 1`);
|
|
467
|
+
(0, chai_1.expect)(statements[1].text).to.equal(`'line 2`);
|
|
468
|
+
(0, chai_1.expect)(statements[2].text).to.equal(`'line 3`);
|
|
469
469
|
});
|
|
470
470
|
it('works after print statement', () => {
|
|
471
471
|
let { tokens } = lexer_1.Lexer.scan(`
|
|
@@ -474,8 +474,8 @@ describe('parser', () => {
|
|
|
474
474
|
end sub
|
|
475
475
|
`);
|
|
476
476
|
let { diagnostics, statements } = Parser_1.Parser.parse(tokens);
|
|
477
|
-
chai_1.expect(diagnostics).to.be.lengthOf(0, 'Error count should be 0');
|
|
478
|
-
chai_1.expect(statements[0].func.body.statements[1].text).to.equal(`'comment 1`);
|
|
477
|
+
(0, chai_1.expect)(diagnostics).to.be.lengthOf(0, 'Error count should be 0');
|
|
478
|
+
(0, chai_1.expect)(statements[0].func.body.statements[1].text).to.equal(`'comment 1`);
|
|
479
479
|
});
|
|
480
480
|
it('declaration-level', () => {
|
|
481
481
|
let { tokens } = lexer_1.Lexer.scan(`
|
|
@@ -485,9 +485,9 @@ describe('parser', () => {
|
|
|
485
485
|
'comment 2
|
|
486
486
|
`);
|
|
487
487
|
let { diagnostics, statements } = Parser_1.Parser.parse(tokens);
|
|
488
|
-
chai_1.expect(diagnostics).to.be.lengthOf(0, 'Error count should be 0');
|
|
489
|
-
chai_1.expect(statements[0].text).to.equal(`'comment 1`);
|
|
490
|
-
chai_1.expect(statements[2].text).to.equal(`'comment 2`);
|
|
488
|
+
(0, chai_1.expect)(diagnostics).to.be.lengthOf(0, 'Error count should be 0');
|
|
489
|
+
(0, chai_1.expect)(statements[0].text).to.equal(`'comment 1`);
|
|
490
|
+
(0, chai_1.expect)(statements[2].text).to.equal(`'comment 2`);
|
|
491
491
|
});
|
|
492
492
|
it('works in aa literal as its own statement', () => {
|
|
493
493
|
let { tokens } = lexer_1.Lexer.scan(`
|
|
@@ -497,7 +497,7 @@ describe('parser', () => {
|
|
|
497
497
|
}
|
|
498
498
|
`);
|
|
499
499
|
let { diagnostics } = Parser_1.Parser.parse(tokens);
|
|
500
|
-
chai_1.expect(diagnostics).to.be.lengthOf(0, 'Error count should be 0');
|
|
500
|
+
(0, chai_1.expect)(diagnostics).to.be.lengthOf(0, 'Error count should be 0');
|
|
501
501
|
});
|
|
502
502
|
it('parses after function call', () => {
|
|
503
503
|
let { tokens } = lexer_1.Lexer.scan(`
|
|
@@ -507,8 +507,8 @@ describe('parser', () => {
|
|
|
507
507
|
end sub
|
|
508
508
|
`);
|
|
509
509
|
let { diagnostics, statements } = Parser_1.Parser.parse(tokens);
|
|
510
|
-
chai_1.expect(diagnostics).to.be.lengthOf(0, 'Should have zero diagnostics');
|
|
511
|
-
chai_1.expect(statements[0].func.body.statements[2].text).to.equal(`'comment 1`);
|
|
510
|
+
(0, chai_1.expect)(diagnostics).to.be.lengthOf(0, 'Should have zero diagnostics');
|
|
511
|
+
(0, chai_1.expect)(statements[0].func.body.statements[2].text).to.equal(`'comment 1`);
|
|
512
512
|
});
|
|
513
513
|
it('function', () => {
|
|
514
514
|
let { tokens } = lexer_1.Lexer.scan(`
|
|
@@ -519,11 +519,11 @@ describe('parser', () => {
|
|
|
519
519
|
end function 'comment 4
|
|
520
520
|
`);
|
|
521
521
|
let { diagnostics, statements } = Parser_1.Parser.parse(tokens);
|
|
522
|
-
chai_1.expect(diagnostics).to.be.lengthOf(0, 'Should have zero diagnostics');
|
|
523
|
-
chai_1.expect(statements[0].func.body.statements[0].text).to.equal(`'comment 1`);
|
|
524
|
-
chai_1.expect(statements[0].func.body.statements[1].text).to.equal(`'comment 2`);
|
|
525
|
-
chai_1.expect(statements[0].func.body.statements[3].text).to.equal(`'comment 3`);
|
|
526
|
-
chai_1.expect(statements[1].text).to.equal(`'comment 4`);
|
|
522
|
+
(0, chai_1.expect)(diagnostics).to.be.lengthOf(0, 'Should have zero diagnostics');
|
|
523
|
+
(0, chai_1.expect)(statements[0].func.body.statements[0].text).to.equal(`'comment 1`);
|
|
524
|
+
(0, chai_1.expect)(statements[0].func.body.statements[1].text).to.equal(`'comment 2`);
|
|
525
|
+
(0, chai_1.expect)(statements[0].func.body.statements[3].text).to.equal(`'comment 3`);
|
|
526
|
+
(0, chai_1.expect)(statements[1].text).to.equal(`'comment 4`);
|
|
527
527
|
});
|
|
528
528
|
it('if statement`', () => {
|
|
529
529
|
let { tokens } = lexer_1.Lexer.scan(`
|
|
@@ -544,21 +544,21 @@ describe('parser', () => {
|
|
|
544
544
|
end function
|
|
545
545
|
`);
|
|
546
546
|
let { diagnostics, statements } = Parser_1.Parser.parse(tokens);
|
|
547
|
-
chai_1.expect(diagnostics).to.be.lengthOf(0, 'Should have zero diagnostics');
|
|
547
|
+
(0, chai_1.expect)(diagnostics).to.be.lengthOf(0, 'Should have zero diagnostics');
|
|
548
548
|
let fnSmt = statements[0];
|
|
549
|
-
if (reflection_1.isFunctionStatement(fnSmt)) {
|
|
549
|
+
if ((0, reflection_1.isFunctionStatement)(fnSmt)) {
|
|
550
550
|
let ifStmt = fnSmt.func.body.statements[0];
|
|
551
|
-
if (reflection_1.isIfStatement(ifStmt)) {
|
|
551
|
+
if ((0, reflection_1.isIfStatement)(ifStmt)) {
|
|
552
552
|
expectCommentWithText(ifStmt.thenBranch.statements[0], `'comment 1`);
|
|
553
553
|
expectCommentWithText(ifStmt.thenBranch.statements[1], `'comment 2`);
|
|
554
554
|
expectCommentWithText(ifStmt.thenBranch.statements[3], `'comment 3`);
|
|
555
555
|
let elseIfBranch = ifStmt.elseBranch;
|
|
556
|
-
if (reflection_1.isIfStatement(elseIfBranch)) {
|
|
556
|
+
if ((0, reflection_1.isIfStatement)(elseIfBranch)) {
|
|
557
557
|
expectCommentWithText(elseIfBranch.thenBranch.statements[0], `'comment 4`);
|
|
558
558
|
expectCommentWithText(elseIfBranch.thenBranch.statements[1], `'comment 5`);
|
|
559
559
|
expectCommentWithText(elseIfBranch.thenBranch.statements[3], `'comment 6`);
|
|
560
560
|
let elseBranch = elseIfBranch.elseBranch;
|
|
561
|
-
if (reflection_1.isBlock(elseBranch)) {
|
|
561
|
+
if ((0, reflection_1.isBlock)(elseBranch)) {
|
|
562
562
|
expectCommentWithText(elseBranch.statements[0], `'comment 7`);
|
|
563
563
|
expectCommentWithText(elseBranch.statements[1], `'comment 8`);
|
|
564
564
|
expectCommentWithText(elseBranch.statements[3], `'comment 9`);
|
|
@@ -591,12 +591,12 @@ describe('parser', () => {
|
|
|
591
591
|
end function
|
|
592
592
|
`);
|
|
593
593
|
let { diagnostics, statements } = Parser_1.Parser.parse(tokens);
|
|
594
|
-
chai_1.expect(diagnostics).to.be.lengthOf(0, 'Error count should be zero');
|
|
594
|
+
(0, chai_1.expect)(diagnostics).to.be.lengthOf(0, 'Error count should be zero');
|
|
595
595
|
let stmt = statements[0].func.body.statements[0];
|
|
596
|
-
chai_1.expect(stmt.body.statements[0].text).to.equal(`'comment 1`);
|
|
597
|
-
chai_1.expect(stmt.body.statements[1].text).to.equal(`'comment 2`);
|
|
598
|
-
chai_1.expect(stmt.body.statements[3].text).to.equal(`'comment 3`);
|
|
599
|
-
chai_1.expect(statements[0].func.body.statements[1].text).to.equal(`'comment 4`);
|
|
596
|
+
(0, chai_1.expect)(stmt.body.statements[0].text).to.equal(`'comment 1`);
|
|
597
|
+
(0, chai_1.expect)(stmt.body.statements[1].text).to.equal(`'comment 2`);
|
|
598
|
+
(0, chai_1.expect)(stmt.body.statements[3].text).to.equal(`'comment 3`);
|
|
599
|
+
(0, chai_1.expect)(statements[0].func.body.statements[1].text).to.equal(`'comment 4`);
|
|
600
600
|
});
|
|
601
601
|
it('for', () => {
|
|
602
602
|
let { tokens } = lexer_1.Lexer.scan(`
|
|
@@ -609,12 +609,12 @@ describe('parser', () => {
|
|
|
609
609
|
end function
|
|
610
610
|
`);
|
|
611
611
|
let { diagnostics, statements } = Parser_1.Parser.parse(tokens);
|
|
612
|
-
chai_1.expect(diagnostics).to.be.lengthOf(0, 'Error count should be zero');
|
|
612
|
+
(0, chai_1.expect)(diagnostics).to.be.lengthOf(0, 'Error count should be zero');
|
|
613
613
|
let stmt = statements[0].func.body.statements[0];
|
|
614
|
-
chai_1.expect(stmt.body.statements[0].text).to.equal(`'comment 1`);
|
|
615
|
-
chai_1.expect(stmt.body.statements[1].text).to.equal(`'comment 2`);
|
|
616
|
-
chai_1.expect(stmt.body.statements[3].text).to.equal(`'comment 3`);
|
|
617
|
-
chai_1.expect(statements[0].func.body.statements[1].text).to.equal(`'comment 4`);
|
|
614
|
+
(0, chai_1.expect)(stmt.body.statements[0].text).to.equal(`'comment 1`);
|
|
615
|
+
(0, chai_1.expect)(stmt.body.statements[1].text).to.equal(`'comment 2`);
|
|
616
|
+
(0, chai_1.expect)(stmt.body.statements[3].text).to.equal(`'comment 3`);
|
|
617
|
+
(0, chai_1.expect)(statements[0].func.body.statements[1].text).to.equal(`'comment 4`);
|
|
618
618
|
});
|
|
619
619
|
it('for each', () => {
|
|
620
620
|
let { tokens } = lexer_1.Lexer.scan(`
|
|
@@ -627,12 +627,12 @@ describe('parser', () => {
|
|
|
627
627
|
end function
|
|
628
628
|
`);
|
|
629
629
|
let { diagnostics, statements } = Parser_1.Parser.parse(tokens);
|
|
630
|
-
chai_1.expect(diagnostics).to.be.lengthOf(0, 'Error count should be zero');
|
|
630
|
+
(0, chai_1.expect)(diagnostics).to.be.lengthOf(0, 'Error count should be zero');
|
|
631
631
|
let stmt = statements[0].func.body.statements[0];
|
|
632
|
-
chai_1.expect(stmt.body.statements[0].text).to.equal(`'comment 1`);
|
|
633
|
-
chai_1.expect(stmt.body.statements[1].text).to.equal(`'comment 2`);
|
|
634
|
-
chai_1.expect(stmt.body.statements[3].text).to.equal(`'comment 3`);
|
|
635
|
-
chai_1.expect(statements[0].func.body.statements[1].text).to.equal(`'comment 4`);
|
|
632
|
+
(0, chai_1.expect)(stmt.body.statements[0].text).to.equal(`'comment 1`);
|
|
633
|
+
(0, chai_1.expect)(stmt.body.statements[1].text).to.equal(`'comment 2`);
|
|
634
|
+
(0, chai_1.expect)(stmt.body.statements[3].text).to.equal(`'comment 3`);
|
|
635
|
+
(0, chai_1.expect)(statements[0].func.body.statements[1].text).to.equal(`'comment 4`);
|
|
636
636
|
});
|
|
637
637
|
});
|
|
638
638
|
});
|
|
@@ -644,7 +644,7 @@ describe('parser', () => {
|
|
|
644
644
|
then = true
|
|
645
645
|
end sub
|
|
646
646
|
`);
|
|
647
|
-
chai_1.expect(diagnostics).to.be.lengthOf(1);
|
|
647
|
+
(0, chai_1.expect)(diagnostics).to.be.lengthOf(1);
|
|
648
648
|
});
|
|
649
649
|
it('is allowed as an AA property name', () => {
|
|
650
650
|
var _a;
|
|
@@ -657,7 +657,7 @@ describe('parser', () => {
|
|
|
657
657
|
print person.then
|
|
658
658
|
end sub
|
|
659
659
|
`);
|
|
660
|
-
chai_1.expect((_a = diagnostics[0]) === null || _a === void 0 ? void 0 : _a.message).not.to.exist;
|
|
660
|
+
(0, chai_1.expect)((_a = diagnostics[0]) === null || _a === void 0 ? void 0 : _a.message).not.to.exist;
|
|
661
661
|
});
|
|
662
662
|
});
|
|
663
663
|
it('"end" is not allowed as a local identifier', () => {
|
|
@@ -666,7 +666,7 @@ describe('parser', () => {
|
|
|
666
666
|
end = true
|
|
667
667
|
end sub
|
|
668
668
|
`);
|
|
669
|
-
chai_1.expect(diagnostics).to.be.length.greaterThan(0);
|
|
669
|
+
(0, chai_1.expect)(diagnostics).to.be.length.greaterThan(0);
|
|
670
670
|
});
|
|
671
671
|
it('none of them can be used as local variables', () => {
|
|
672
672
|
let reservedWords = new Set(lexer_1.ReservedWords);
|
|
@@ -679,7 +679,7 @@ describe('parser', () => {
|
|
|
679
679
|
end sub
|
|
680
680
|
`);
|
|
681
681
|
let { diagnostics } = Parser_1.Parser.parse(tokens);
|
|
682
|
-
chai_1.expect(diagnostics, `assigning to reserved word "${reservedWord}" should have been an error`).to.be.length.greaterThan(0);
|
|
682
|
+
(0, chai_1.expect)(diagnostics, `assigning to reserved word "${reservedWord}" should have been an error`).to.be.length.greaterThan(0);
|
|
683
683
|
}
|
|
684
684
|
});
|
|
685
685
|
});
|
|
@@ -689,24 +689,24 @@ describe('parser', () => {
|
|
|
689
689
|
let { statements, diagnostics } = parse(`
|
|
690
690
|
import "somePath"
|
|
691
691
|
`, Parser_1.ParseMode.BrighterScript);
|
|
692
|
-
chai_1.expect((_a = diagnostics[0]) === null || _a === void 0 ? void 0 : _a.message).not.to.exist;
|
|
693
|
-
chai_1.expect(statements[0]).to.be.instanceof(Statement_1.ImportStatement);
|
|
692
|
+
(0, chai_1.expect)((_a = diagnostics[0]) === null || _a === void 0 ? void 0 : _a.message).not.to.exist;
|
|
693
|
+
(0, chai_1.expect)(statements[0]).to.be.instanceof(Statement_1.ImportStatement);
|
|
694
694
|
});
|
|
695
695
|
it('catches import statements used in brightscript files', () => {
|
|
696
696
|
var _a;
|
|
697
697
|
let { statements, diagnostics } = parse(`
|
|
698
698
|
import "somePath"
|
|
699
699
|
`, Parser_1.ParseMode.BrightScript);
|
|
700
|
-
chai_1.expect((_a = diagnostics[0]) === null || _a === void 0 ? void 0 : _a.message).to.eql(DiagnosticMessages_1.DiagnosticMessages.bsFeatureNotSupportedInBrsFiles('import statements').message);
|
|
701
|
-
chai_1.expect(statements[0]).to.be.instanceof(Statement_1.ImportStatement);
|
|
700
|
+
(0, chai_1.expect)((_a = diagnostics[0]) === null || _a === void 0 ? void 0 : _a.message).to.eql(DiagnosticMessages_1.DiagnosticMessages.bsFeatureNotSupportedInBrsFiles('import statements').message);
|
|
701
|
+
(0, chai_1.expect)(statements[0]).to.be.instanceof(Statement_1.ImportStatement);
|
|
702
702
|
});
|
|
703
|
-
it('
|
|
703
|
+
it('catches missing file path', () => {
|
|
704
704
|
var _a;
|
|
705
705
|
let { statements, diagnostics } = parse(`
|
|
706
706
|
import
|
|
707
707
|
`, Parser_1.ParseMode.BrighterScript);
|
|
708
|
-
chai_1.expect((_a = diagnostics[0]) === null || _a === void 0 ? void 0 : _a.message).to.equal(DiagnosticMessages_1.DiagnosticMessages.expectedStringLiteralAfterKeyword('import').message);
|
|
709
|
-
chai_1.expect(statements[0]).to.be.instanceof(Statement_1.ImportStatement);
|
|
708
|
+
(0, chai_1.expect)((_a = diagnostics[0]) === null || _a === void 0 ? void 0 : _a.message).to.equal(DiagnosticMessages_1.DiagnosticMessages.expectedStringLiteralAfterKeyword('import').message);
|
|
709
|
+
(0, chai_1.expect)(statements[0]).to.be.instanceof(Statement_1.ImportStatement);
|
|
710
710
|
});
|
|
711
711
|
});
|
|
712
712
|
describe('Annotations', () => {
|
|
@@ -717,7 +717,7 @@ describe('parser', () => {
|
|
|
717
717
|
sub main()
|
|
718
718
|
end sub
|
|
719
719
|
`, Parser_1.ParseMode.BrighterScript);
|
|
720
|
-
chai_1.expect((_a = diagnostics[0]) === null || _a === void 0 ? void 0 : _a.message).to.equal(DiagnosticMessages_1.DiagnosticMessages.
|
|
720
|
+
(0, chai_1.expect)((_a = diagnostics[0]) === null || _a === void 0 ? void 0 : _a.message).to.equal(DiagnosticMessages_1.DiagnosticMessages.unexpectedToken('@').message);
|
|
721
721
|
});
|
|
722
722
|
it('properly handles empty annotation above class method', () => {
|
|
723
723
|
var _a;
|
|
@@ -729,7 +729,7 @@ describe('parser', () => {
|
|
|
729
729
|
end sub
|
|
730
730
|
end class
|
|
731
731
|
`, Parser_1.ParseMode.BrighterScript);
|
|
732
|
-
chai_1.expect((_a = diagnostics[0]) === null || _a === void 0 ? void 0 : _a.message).to.equal(DiagnosticMessages_1.DiagnosticMessages.expectedIdentifier().message);
|
|
732
|
+
(0, chai_1.expect)((_a = diagnostics[0]) === null || _a === void 0 ? void 0 : _a.message).to.equal(DiagnosticMessages_1.DiagnosticMessages.expectedIdentifier().message);
|
|
733
733
|
});
|
|
734
734
|
it('parses with error if annotation is not followed by a statement', () => {
|
|
735
735
|
var _a, _b, _c, _d;
|
|
@@ -743,11 +743,11 @@ describe('parser', () => {
|
|
|
743
743
|
end class
|
|
744
744
|
@meta1
|
|
745
745
|
`, Parser_1.ParseMode.BrighterScript);
|
|
746
|
-
chai_1.expect(diagnostics.length).to.equal(4);
|
|
747
|
-
chai_1.expect((_a = diagnostics[0]) === null || _a === void 0 ? void 0 : _a.message).to.equal(DiagnosticMessages_1.DiagnosticMessages.unusedAnnotation().message);
|
|
748
|
-
chai_1.expect((_b = diagnostics[1]) === null || _b === void 0 ? void 0 : _b.message).to.equal(DiagnosticMessages_1.DiagnosticMessages.unusedAnnotation().message);
|
|
749
|
-
chai_1.expect((_c = diagnostics[2]) === null || _c === void 0 ? void 0 : _c.message).to.equal(DiagnosticMessages_1.DiagnosticMessages.unusedAnnotation().message);
|
|
750
|
-
chai_1.expect((_d = diagnostics[3]) === null || _d === void 0 ? void 0 : _d.message).to.equal(DiagnosticMessages_1.DiagnosticMessages.unusedAnnotation().message);
|
|
746
|
+
(0, chai_1.expect)(diagnostics.length).to.equal(4);
|
|
747
|
+
(0, chai_1.expect)((_a = diagnostics[0]) === null || _a === void 0 ? void 0 : _a.message).to.equal(DiagnosticMessages_1.DiagnosticMessages.unusedAnnotation().message);
|
|
748
|
+
(0, chai_1.expect)((_b = diagnostics[1]) === null || _b === void 0 ? void 0 : _b.message).to.equal(DiagnosticMessages_1.DiagnosticMessages.unusedAnnotation().message);
|
|
749
|
+
(0, chai_1.expect)((_c = diagnostics[2]) === null || _c === void 0 ? void 0 : _c.message).to.equal(DiagnosticMessages_1.DiagnosticMessages.unusedAnnotation().message);
|
|
750
|
+
(0, chai_1.expect)((_d = diagnostics[3]) === null || _d === void 0 ? void 0 : _d.message).to.equal(DiagnosticMessages_1.DiagnosticMessages.unusedAnnotation().message);
|
|
751
751
|
});
|
|
752
752
|
it('attaches an annotation to next statement', () => {
|
|
753
753
|
var _a;
|
|
@@ -759,18 +759,18 @@ describe('parser', () => {
|
|
|
759
759
|
@meta2 sub init()
|
|
760
760
|
end sub
|
|
761
761
|
`, Parser_1.ParseMode.BrighterScript);
|
|
762
|
-
chai_1.expect((_a = diagnostics[0]) === null || _a === void 0 ? void 0 : _a.message).not.to.exist;
|
|
763
|
-
chai_1.expect(statements[0]).to.be.instanceof(Statement_1.FunctionStatement);
|
|
762
|
+
(0, chai_1.expect)((_a = diagnostics[0]) === null || _a === void 0 ? void 0 : _a.message).not.to.exist;
|
|
763
|
+
(0, chai_1.expect)(statements[0]).to.be.instanceof(Statement_1.FunctionStatement);
|
|
764
764
|
let fn = statements[0];
|
|
765
|
-
chai_1.expect(fn.annotations).to.exist;
|
|
766
|
-
chai_1.expect(fn.annotations[0]).to.be.instanceof(Expression_1.AnnotationExpression);
|
|
767
|
-
chai_1.expect(fn.annotations[0].nameToken.text).to.equal('meta1');
|
|
768
|
-
chai_1.expect(fn.annotations[0].name).to.equal('meta1');
|
|
769
|
-
chai_1.expect(statements[1]).to.be.instanceof(Statement_1.FunctionStatement);
|
|
765
|
+
(0, chai_1.expect)(fn.annotations).to.exist;
|
|
766
|
+
(0, chai_1.expect)(fn.annotations[0]).to.be.instanceof(Expression_1.AnnotationExpression);
|
|
767
|
+
(0, chai_1.expect)(fn.annotations[0].nameToken.text).to.equal('meta1');
|
|
768
|
+
(0, chai_1.expect)(fn.annotations[0].name).to.equal('meta1');
|
|
769
|
+
(0, chai_1.expect)(statements[1]).to.be.instanceof(Statement_1.FunctionStatement);
|
|
770
770
|
fn = statements[1];
|
|
771
|
-
chai_1.expect(fn.annotations).to.exist;
|
|
772
|
-
chai_1.expect(fn.annotations[0]).to.be.instanceof(Expression_1.AnnotationExpression);
|
|
773
|
-
chai_1.expect(fn.annotations[0].nameToken.text).to.equal('meta2');
|
|
771
|
+
(0, chai_1.expect)(fn.annotations).to.exist;
|
|
772
|
+
(0, chai_1.expect)(fn.annotations[0]).to.be.instanceof(Expression_1.AnnotationExpression);
|
|
773
|
+
(0, chai_1.expect)(fn.annotations[0].nameToken.text).to.equal('meta2');
|
|
774
774
|
});
|
|
775
775
|
it('attaches annotations inside a function body', () => {
|
|
776
776
|
var _a, _b;
|
|
@@ -780,13 +780,13 @@ describe('parser', () => {
|
|
|
780
780
|
print "hello"
|
|
781
781
|
end function
|
|
782
782
|
`, Parser_1.ParseMode.BrighterScript);
|
|
783
|
-
chai_1.expect((_a = diagnostics[0]) === null || _a === void 0 ? void 0 : _a.message).not.to.exist;
|
|
783
|
+
(0, chai_1.expect)((_a = diagnostics[0]) === null || _a === void 0 ? void 0 : _a.message).not.to.exist;
|
|
784
784
|
let fn = statements[0];
|
|
785
785
|
let fnStatements = fn.func.body.statements;
|
|
786
786
|
let stat = fnStatements[0];
|
|
787
|
-
chai_1.expect(stat).to.exist;
|
|
788
|
-
chai_1.expect((_b = stat.annotations) === null || _b === void 0 ? void 0 : _b.length).to.equal(1);
|
|
789
|
-
chai_1.expect(stat.annotations[0]).to.be.instanceof(Expression_1.AnnotationExpression);
|
|
787
|
+
(0, chai_1.expect)(stat).to.exist;
|
|
788
|
+
(0, chai_1.expect)((_b = stat.annotations) === null || _b === void 0 ? void 0 : _b.length).to.equal(1);
|
|
789
|
+
(0, chai_1.expect)(stat.annotations[0]).to.be.instanceof(Expression_1.AnnotationExpression);
|
|
790
790
|
});
|
|
791
791
|
it('attaches multiple annotations to next statement', () => {
|
|
792
792
|
var _a;
|
|
@@ -796,14 +796,14 @@ describe('parser', () => {
|
|
|
796
796
|
function main()
|
|
797
797
|
end function
|
|
798
798
|
`, Parser_1.ParseMode.BrighterScript);
|
|
799
|
-
chai_1.expect((_a = diagnostics[0]) === null || _a === void 0 ? void 0 : _a.message).not.to.exist;
|
|
800
|
-
chai_1.expect(statements[0]).to.be.instanceof(Statement_1.FunctionStatement);
|
|
799
|
+
(0, chai_1.expect)((_a = diagnostics[0]) === null || _a === void 0 ? void 0 : _a.message).not.to.exist;
|
|
800
|
+
(0, chai_1.expect)(statements[0]).to.be.instanceof(Statement_1.FunctionStatement);
|
|
801
801
|
let fn = statements[0];
|
|
802
|
-
chai_1.expect(fn.annotations).to.exist;
|
|
803
|
-
chai_1.expect(fn.annotations.length).to.equal(3);
|
|
804
|
-
chai_1.expect(fn.annotations[0]).to.be.instanceof(Expression_1.AnnotationExpression);
|
|
805
|
-
chai_1.expect(fn.annotations[1]).to.be.instanceof(Expression_1.AnnotationExpression);
|
|
806
|
-
chai_1.expect(fn.annotations[2]).to.be.instanceof(Expression_1.AnnotationExpression);
|
|
802
|
+
(0, chai_1.expect)(fn.annotations).to.exist;
|
|
803
|
+
(0, chai_1.expect)(fn.annotations.length).to.equal(3);
|
|
804
|
+
(0, chai_1.expect)(fn.annotations[0]).to.be.instanceof(Expression_1.AnnotationExpression);
|
|
805
|
+
(0, chai_1.expect)(fn.annotations[1]).to.be.instanceof(Expression_1.AnnotationExpression);
|
|
806
|
+
(0, chai_1.expect)(fn.annotations[2]).to.be.instanceof(Expression_1.AnnotationExpression);
|
|
807
807
|
});
|
|
808
808
|
it('allows annotations with parameters', () => {
|
|
809
809
|
var _a;
|
|
@@ -812,12 +812,12 @@ describe('parser', () => {
|
|
|
812
812
|
function main()
|
|
813
813
|
end function
|
|
814
814
|
`, Parser_1.ParseMode.BrighterScript);
|
|
815
|
-
chai_1.expect((_a = diagnostics[0]) === null || _a === void 0 ? void 0 : _a.message).not.to.exist;
|
|
815
|
+
(0, chai_1.expect)((_a = diagnostics[0]) === null || _a === void 0 ? void 0 : _a.message).not.to.exist;
|
|
816
816
|
let fn = statements[0];
|
|
817
|
-
chai_1.expect(fn.annotations).to.exist;
|
|
818
|
-
chai_1.expect(fn.annotations[0]).to.be.instanceof(Expression_1.AnnotationExpression);
|
|
819
|
-
chai_1.expect(fn.annotations[0].nameToken.text).to.equal('meta1');
|
|
820
|
-
chai_1.expect(fn.annotations[0].call).to.be.instanceof(Expression_1.CallExpression);
|
|
817
|
+
(0, chai_1.expect)(fn.annotations).to.exist;
|
|
818
|
+
(0, chai_1.expect)(fn.annotations[0]).to.be.instanceof(Expression_1.AnnotationExpression);
|
|
819
|
+
(0, chai_1.expect)(fn.annotations[0].nameToken.text).to.equal('meta1');
|
|
820
|
+
(0, chai_1.expect)(fn.annotations[0].call).to.be.instanceof(Expression_1.CallExpression);
|
|
821
821
|
});
|
|
822
822
|
it('attaches annotations to a class', () => {
|
|
823
823
|
var _a, _b;
|
|
@@ -829,10 +829,10 @@ describe('parser', () => {
|
|
|
829
829
|
end function
|
|
830
830
|
end class
|
|
831
831
|
`, Parser_1.ParseMode.BrighterScript);
|
|
832
|
-
chai_1.expect((_a = diagnostics[0]) === null || _a === void 0 ? void 0 : _a.message).not.to.exist;
|
|
832
|
+
(0, chai_1.expect)((_a = diagnostics[0]) === null || _a === void 0 ? void 0 : _a.message).not.to.exist;
|
|
833
833
|
let cs = statements[0];
|
|
834
|
-
chai_1.expect((_b = cs.annotations) === null || _b === void 0 ? void 0 : _b.length).to.equal(1);
|
|
835
|
-
chai_1.expect(cs.annotations[0]).to.be.instanceof(Expression_1.AnnotationExpression);
|
|
834
|
+
(0, chai_1.expect)((_b = cs.annotations) === null || _b === void 0 ? void 0 : _b.length).to.equal(1);
|
|
835
|
+
(0, chai_1.expect)(cs.annotations[0]).to.be.instanceof(Expression_1.AnnotationExpression);
|
|
836
836
|
});
|
|
837
837
|
it('attaches annotations to multiple clases', () => {
|
|
838
838
|
var _a, _b, _c;
|
|
@@ -850,15 +850,15 @@ describe('parser', () => {
|
|
|
850
850
|
end function
|
|
851
851
|
end class
|
|
852
852
|
`, Parser_1.ParseMode.BrighterScript);
|
|
853
|
-
chai_1.expect((_a = diagnostics[0]) === null || _a === void 0 ? void 0 : _a.message).not.to.exist;
|
|
853
|
+
(0, chai_1.expect)((_a = diagnostics[0]) === null || _a === void 0 ? void 0 : _a.message).not.to.exist;
|
|
854
854
|
let cs = statements[0];
|
|
855
|
-
chai_1.expect((_b = cs.annotations) === null || _b === void 0 ? void 0 : _b.length).to.equal(1);
|
|
856
|
-
chai_1.expect(cs.annotations[0]).to.be.instanceof(Expression_1.AnnotationExpression);
|
|
857
|
-
chai_1.expect(cs.annotations[0].name).to.equal('meta1');
|
|
855
|
+
(0, chai_1.expect)((_b = cs.annotations) === null || _b === void 0 ? void 0 : _b.length).to.equal(1);
|
|
856
|
+
(0, chai_1.expect)(cs.annotations[0]).to.be.instanceof(Expression_1.AnnotationExpression);
|
|
857
|
+
(0, chai_1.expect)(cs.annotations[0].name).to.equal('meta1');
|
|
858
858
|
let cs2 = statements[1];
|
|
859
|
-
chai_1.expect((_c = cs2.annotations) === null || _c === void 0 ? void 0 : _c.length).to.equal(1);
|
|
860
|
-
chai_1.expect(cs2.annotations[0]).to.be.instanceof(Expression_1.AnnotationExpression);
|
|
861
|
-
chai_1.expect(cs2.annotations[0].name).to.equal('meta2');
|
|
859
|
+
(0, chai_1.expect)((_c = cs2.annotations) === null || _c === void 0 ? void 0 : _c.length).to.equal(1);
|
|
860
|
+
(0, chai_1.expect)(cs2.annotations[0]).to.be.instanceof(Expression_1.AnnotationExpression);
|
|
861
|
+
(0, chai_1.expect)(cs2.annotations[0].name).to.equal('meta2');
|
|
862
862
|
});
|
|
863
863
|
it('attaches annotations to a namespaced class', () => {
|
|
864
864
|
var _a, _b;
|
|
@@ -872,11 +872,11 @@ describe('parser', () => {
|
|
|
872
872
|
end class
|
|
873
873
|
end namespace
|
|
874
874
|
`, Parser_1.ParseMode.BrighterScript);
|
|
875
|
-
chai_1.expect((_a = diagnostics[0]) === null || _a === void 0 ? void 0 : _a.message).not.to.exist;
|
|
875
|
+
(0, chai_1.expect)((_a = diagnostics[0]) === null || _a === void 0 ? void 0 : _a.message).not.to.exist;
|
|
876
876
|
let ns = statements[0];
|
|
877
877
|
let cs = ns.body.statements[0];
|
|
878
|
-
chai_1.expect((_b = cs.annotations) === null || _b === void 0 ? void 0 : _b.length).to.equal(1);
|
|
879
|
-
chai_1.expect(cs.annotations[0]).to.be.instanceof(Expression_1.AnnotationExpression);
|
|
878
|
+
(0, chai_1.expect)((_b = cs.annotations) === null || _b === void 0 ? void 0 : _b.length).to.equal(1);
|
|
879
|
+
(0, chai_1.expect)(cs.annotations[0]).to.be.instanceof(Expression_1.AnnotationExpression);
|
|
880
880
|
});
|
|
881
881
|
it('attaches annotations to a namespaced class - multiple', () => {
|
|
882
882
|
var _a, _b, _c;
|
|
@@ -896,16 +896,16 @@ describe('parser', () => {
|
|
|
896
896
|
end class
|
|
897
897
|
end namespace
|
|
898
898
|
`, Parser_1.ParseMode.BrighterScript);
|
|
899
|
-
chai_1.expect((_a = diagnostics[0]) === null || _a === void 0 ? void 0 : _a.message).not.to.exist;
|
|
899
|
+
(0, chai_1.expect)((_a = diagnostics[0]) === null || _a === void 0 ? void 0 : _a.message).not.to.exist;
|
|
900
900
|
let ns = statements[0];
|
|
901
901
|
let cs = ns.body.statements[0];
|
|
902
|
-
chai_1.expect((_b = cs.annotations) === null || _b === void 0 ? void 0 : _b.length).to.equal(1);
|
|
903
|
-
chai_1.expect(cs.annotations[0]).to.be.instanceof(Expression_1.AnnotationExpression);
|
|
904
|
-
chai_1.expect(cs.annotations[0].name).to.equal('meta1');
|
|
902
|
+
(0, chai_1.expect)((_b = cs.annotations) === null || _b === void 0 ? void 0 : _b.length).to.equal(1);
|
|
903
|
+
(0, chai_1.expect)(cs.annotations[0]).to.be.instanceof(Expression_1.AnnotationExpression);
|
|
904
|
+
(0, chai_1.expect)(cs.annotations[0].name).to.equal('meta1');
|
|
905
905
|
let cs2 = ns.body.statements[1];
|
|
906
|
-
chai_1.expect((_c = cs2.annotations) === null || _c === void 0 ? void 0 : _c.length).to.equal(1);
|
|
907
|
-
chai_1.expect(cs2.annotations[0]).to.be.instanceof(Expression_1.AnnotationExpression);
|
|
908
|
-
chai_1.expect(cs2.annotations[0].name).to.equal('meta2');
|
|
906
|
+
(0, chai_1.expect)((_c = cs2.annotations) === null || _c === void 0 ? void 0 : _c.length).to.equal(1);
|
|
907
|
+
(0, chai_1.expect)(cs2.annotations[0]).to.be.instanceof(Expression_1.AnnotationExpression);
|
|
908
|
+
(0, chai_1.expect)(cs2.annotations[0].name).to.equal('meta2');
|
|
909
909
|
});
|
|
910
910
|
it('attaches annotations to a class constructor', () => {
|
|
911
911
|
var _a, _b;
|
|
@@ -920,11 +920,11 @@ describe('parser', () => {
|
|
|
920
920
|
end function
|
|
921
921
|
end class
|
|
922
922
|
`, Parser_1.ParseMode.BrighterScript);
|
|
923
|
-
chai_1.expect((_a = diagnostics[0]) === null || _a === void 0 ? void 0 : _a.message).not.to.exist;
|
|
923
|
+
(0, chai_1.expect)((_a = diagnostics[0]) === null || _a === void 0 ? void 0 : _a.message).not.to.exist;
|
|
924
924
|
let cs = statements[0];
|
|
925
925
|
let stat = cs.body[0];
|
|
926
|
-
chai_1.expect((_b = stat.annotations) === null || _b === void 0 ? void 0 : _b.length).to.equal(1);
|
|
927
|
-
chai_1.expect(stat.annotations[0]).to.be.instanceof(Expression_1.AnnotationExpression);
|
|
926
|
+
(0, chai_1.expect)((_b = stat.annotations) === null || _b === void 0 ? void 0 : _b.length).to.equal(1);
|
|
927
|
+
(0, chai_1.expect)(stat.annotations[0]).to.be.instanceof(Expression_1.AnnotationExpression);
|
|
928
928
|
});
|
|
929
929
|
it('attaches annotations to a class methods', () => {
|
|
930
930
|
var _a, _b;
|
|
@@ -939,11 +939,11 @@ describe('parser', () => {
|
|
|
939
939
|
end function
|
|
940
940
|
end class
|
|
941
941
|
`, Parser_1.ParseMode.BrighterScript);
|
|
942
|
-
chai_1.expect((_a = diagnostics[0]) === null || _a === void 0 ? void 0 : _a.message).not.to.exist;
|
|
942
|
+
(0, chai_1.expect)((_a = diagnostics[0]) === null || _a === void 0 ? void 0 : _a.message).not.to.exist;
|
|
943
943
|
let cs = statements[0];
|
|
944
944
|
let stat = cs.body[1];
|
|
945
|
-
chai_1.expect((_b = stat.annotations) === null || _b === void 0 ? void 0 : _b.length).to.equal(1);
|
|
946
|
-
chai_1.expect(stat.annotations[0]).to.be.instanceof(Expression_1.AnnotationExpression);
|
|
945
|
+
(0, chai_1.expect)((_b = stat.annotations) === null || _b === void 0 ? void 0 : _b.length).to.equal(1);
|
|
946
|
+
(0, chai_1.expect)(stat.annotations[0]).to.be.instanceof(Expression_1.AnnotationExpression);
|
|
947
947
|
});
|
|
948
948
|
it('attaches annotations to a class methods, fields and constructor', () => {
|
|
949
949
|
var _a, _b, _c, _d, _e;
|
|
@@ -967,19 +967,19 @@ describe('parser', () => {
|
|
|
967
967
|
public foo="bar"
|
|
968
968
|
end class
|
|
969
969
|
`, Parser_1.ParseMode.BrighterScript);
|
|
970
|
-
chai_1.expect((_a = diagnostics[0]) === null || _a === void 0 ? void 0 : _a.message).not.to.exist;
|
|
970
|
+
(0, chai_1.expect)((_a = diagnostics[0]) === null || _a === void 0 ? void 0 : _a.message).not.to.exist;
|
|
971
971
|
let cs = statements[0];
|
|
972
|
-
chai_1.expect((_b = cs.annotations) === null || _b === void 0 ? void 0 : _b.length).to.equal(2);
|
|
973
|
-
chai_1.expect(cs.annotations[0]).to.be.instanceof(Expression_1.AnnotationExpression);
|
|
972
|
+
(0, chai_1.expect)((_b = cs.annotations) === null || _b === void 0 ? void 0 : _b.length).to.equal(2);
|
|
973
|
+
(0, chai_1.expect)(cs.annotations[0]).to.be.instanceof(Expression_1.AnnotationExpression);
|
|
974
974
|
let stat1 = cs.body[0];
|
|
975
975
|
let stat2 = cs.body[1];
|
|
976
976
|
let f1 = cs.body[2];
|
|
977
|
-
chai_1.expect((_c = stat1.annotations) === null || _c === void 0 ? void 0 : _c.length).to.equal(2);
|
|
978
|
-
chai_1.expect(stat1.annotations[0]).to.be.instanceof(Expression_1.AnnotationExpression);
|
|
979
|
-
chai_1.expect((_d = stat2.annotations) === null || _d === void 0 ? void 0 : _d.length).to.equal(2);
|
|
980
|
-
chai_1.expect(stat2.annotations[0]).to.be.instanceof(Expression_1.AnnotationExpression);
|
|
981
|
-
chai_1.expect((_e = f1.annotations) === null || _e === void 0 ? void 0 : _e.length).to.equal(2);
|
|
982
|
-
chai_1.expect(f1.annotations[0]).to.be.instanceof(Expression_1.AnnotationExpression);
|
|
977
|
+
(0, chai_1.expect)((_c = stat1.annotations) === null || _c === void 0 ? void 0 : _c.length).to.equal(2);
|
|
978
|
+
(0, chai_1.expect)(stat1.annotations[0]).to.be.instanceof(Expression_1.AnnotationExpression);
|
|
979
|
+
(0, chai_1.expect)((_d = stat2.annotations) === null || _d === void 0 ? void 0 : _d.length).to.equal(2);
|
|
980
|
+
(0, chai_1.expect)(stat2.annotations[0]).to.be.instanceof(Expression_1.AnnotationExpression);
|
|
981
|
+
(0, chai_1.expect)((_e = f1.annotations) === null || _e === void 0 ? void 0 : _e.length).to.equal(2);
|
|
982
|
+
(0, chai_1.expect)(f1.annotations[0]).to.be.instanceof(Expression_1.AnnotationExpression);
|
|
983
983
|
});
|
|
984
984
|
it('ignores annotations on commented out lines', () => {
|
|
985
985
|
var _a;
|
|
@@ -990,9 +990,9 @@ describe('parser', () => {
|
|
|
990
990
|
print "hello"
|
|
991
991
|
end function
|
|
992
992
|
`, Parser_1.ParseMode.BrighterScript);
|
|
993
|
-
chai_1.expect((_a = diagnostics[0]) === null || _a === void 0 ? void 0 : _a.message).not.to.exist;
|
|
993
|
+
(0, chai_1.expect)((_a = diagnostics[0]) === null || _a === void 0 ? void 0 : _a.message).not.to.exist;
|
|
994
994
|
let cs = statements[0];
|
|
995
|
-
chai_1.expect(cs.annotations).to.be.undefined;
|
|
995
|
+
(0, chai_1.expect)(cs.annotations).to.be.undefined;
|
|
996
996
|
});
|
|
997
997
|
it('can convert argument of an annotation to JS types', () => {
|
|
998
998
|
var _a;
|
|
@@ -1010,22 +1010,22 @@ describe('parser', () => {
|
|
|
1010
1010
|
sub init()
|
|
1011
1011
|
end sub
|
|
1012
1012
|
`, Parser_1.ParseMode.BrighterScript);
|
|
1013
|
-
chai_1.expect((_a = diagnostics[0]) === null || _a === void 0 ? void 0 : _a.message).not.to.exist;
|
|
1014
|
-
chai_1.expect(statements[0]).to.be.instanceof(Statement_1.FunctionStatement);
|
|
1013
|
+
(0, chai_1.expect)((_a = diagnostics[0]) === null || _a === void 0 ? void 0 : _a.message).not.to.exist;
|
|
1014
|
+
(0, chai_1.expect)(statements[0]).to.be.instanceof(Statement_1.FunctionStatement);
|
|
1015
1015
|
let fn = statements[0];
|
|
1016
|
-
chai_1.expect(fn.annotations).to.exist;
|
|
1017
|
-
chai_1.expect(fn.annotations[0].getArguments()).to.deep.equal([]);
|
|
1018
|
-
chai_1.expect(statements[1]).to.be.instanceof(Statement_1.FunctionStatement);
|
|
1016
|
+
(0, chai_1.expect)(fn.annotations).to.exist;
|
|
1017
|
+
(0, chai_1.expect)(fn.annotations[0].getArguments()).to.deep.equal([]);
|
|
1018
|
+
(0, chai_1.expect)(statements[1]).to.be.instanceof(Statement_1.FunctionStatement);
|
|
1019
1019
|
fn = statements[1];
|
|
1020
|
-
chai_1.expect(fn.annotations).to.exist;
|
|
1021
|
-
chai_1.expect(fn.annotations[0]).to.be.instanceof(Expression_1.AnnotationExpression);
|
|
1022
|
-
chai_1.expect(fn.annotations[0].getArguments()).to.deep.equal([
|
|
1020
|
+
(0, chai_1.expect)(fn.annotations).to.exist;
|
|
1021
|
+
(0, chai_1.expect)(fn.annotations[0]).to.be.instanceof(Expression_1.AnnotationExpression);
|
|
1022
|
+
(0, chai_1.expect)(fn.annotations[0].getArguments()).to.deep.equal([
|
|
1023
1023
|
'arg', 2, true,
|
|
1024
1024
|
{ prop: 'value' }, [1, 2],
|
|
1025
1025
|
null
|
|
1026
1026
|
]);
|
|
1027
1027
|
let allArgs = fn.annotations[0].getArguments(false);
|
|
1028
|
-
chai_1.expect(allArgs.pop()).to.be.instanceOf(Expression_1.FunctionExpression);
|
|
1028
|
+
(0, chai_1.expect)(allArgs.pop()).to.be.instanceOf(Expression_1.FunctionExpression);
|
|
1029
1029
|
});
|
|
1030
1030
|
it('can handle negative numbers', () => {
|
|
1031
1031
|
var _a;
|
|
@@ -1037,11 +1037,11 @@ describe('parser', () => {
|
|
|
1037
1037
|
sub init()
|
|
1038
1038
|
end sub
|
|
1039
1039
|
`, Parser_1.ParseMode.BrighterScript);
|
|
1040
|
-
chai_1.expect((_a = diagnostics[0]) === null || _a === void 0 ? void 0 : _a.message).not.to.exist;
|
|
1041
|
-
chai_1.expect(statements[0]).to.be.instanceof(Statement_1.FunctionStatement);
|
|
1040
|
+
(0, chai_1.expect)((_a = diagnostics[0]) === null || _a === void 0 ? void 0 : _a.message).not.to.exist;
|
|
1041
|
+
(0, chai_1.expect)(statements[0]).to.be.instanceof(Statement_1.FunctionStatement);
|
|
1042
1042
|
let fn = statements[0];
|
|
1043
|
-
chai_1.expect(fn.annotations).to.exist;
|
|
1044
|
-
chai_1.expect(fn.annotations[0].getArguments()).to.deep.equal([-100]);
|
|
1043
|
+
(0, chai_1.expect)(fn.annotations).to.exist;
|
|
1044
|
+
(0, chai_1.expect)(fn.annotations[0].getArguments()).to.deep.equal([-100]);
|
|
1045
1045
|
});
|
|
1046
1046
|
});
|
|
1047
1047
|
describe('getBscTypeFromExpression', () => {
|
|
@@ -1054,8 +1054,8 @@ describe('parser', () => {
|
|
|
1054
1054
|
end sub
|
|
1055
1055
|
`);
|
|
1056
1056
|
const func = parser.ast.statements[0].func;
|
|
1057
|
-
const type = Parser_1.getBscTypeFromExpression(func.body.statements[0].value, func);
|
|
1058
|
-
chai_1.expect(type.returnType).to.be.instanceof(VoidType_1.VoidType);
|
|
1057
|
+
const type = (0, Parser_1.getBscTypeFromExpression)(func.body.statements[0].value, func);
|
|
1058
|
+
(0, chai_1.expect)(type.returnType).to.be.instanceof(VoidType_1.VoidType);
|
|
1059
1059
|
});
|
|
1060
1060
|
it('computes return type for sub with explicit return type', () => {
|
|
1061
1061
|
const parser = parse(`
|
|
@@ -1066,8 +1066,8 @@ describe('parser', () => {
|
|
|
1066
1066
|
end sub
|
|
1067
1067
|
`);
|
|
1068
1068
|
const func = parser.ast.statements[0].func;
|
|
1069
|
-
const type = Parser_1.getBscTypeFromExpression(func.body.statements[0].value, func);
|
|
1070
|
-
chai_1.expect(type.returnType).to.be.instanceof(StringType_1.StringType);
|
|
1069
|
+
const type = (0, Parser_1.getBscTypeFromExpression)(func.body.statements[0].value, func);
|
|
1070
|
+
(0, chai_1.expect)(type.returnType).to.be.instanceof(StringType_1.StringType);
|
|
1071
1071
|
});
|
|
1072
1072
|
it('supports sub with custom return type', () => {
|
|
1073
1073
|
const parser = parse(`
|
|
@@ -1080,10 +1080,11 @@ describe('parser', () => {
|
|
|
1080
1080
|
class Person
|
|
1081
1081
|
end class
|
|
1082
1082
|
`, Parser_1.ParseMode.BrighterScript);
|
|
1083
|
-
testHelpers_spec_1.expectZeroDiagnostics(parser.diagnostics);
|
|
1083
|
+
(0, testHelpers_spec_1.expectZeroDiagnostics)(parser.diagnostics);
|
|
1084
1084
|
const func = parser.ast.statements[0].func;
|
|
1085
|
-
const type = Parser_1.getBscTypeFromExpression(func.body.statements[0].value, func);
|
|
1086
|
-
|
|
1085
|
+
const type = (0, Parser_1.getBscTypeFromExpression)(func.body.statements[0].value, func);
|
|
1086
|
+
// Return type is LazyType, because "Person" is not fully known yet
|
|
1087
|
+
(0, chai_1.expect)(type.returnType).to.be.instanceof(LazyType_1.LazyType);
|
|
1087
1088
|
});
|
|
1088
1089
|
});
|
|
1089
1090
|
describe('symbolTable', () => {
|
|
@@ -1099,39 +1100,39 @@ describe('parser', () => {
|
|
|
1099
1100
|
class CustomKlass
|
|
1100
1101
|
end class
|
|
1101
1102
|
`, Parser_1.ParseMode.BrighterScript);
|
|
1102
|
-
testHelpers_spec_1.expectZeroDiagnostics(parser.diagnostics);
|
|
1103
|
+
(0, testHelpers_spec_1.expectZeroDiagnostics)(parser.diagnostics);
|
|
1103
1104
|
const mainSymbolTable = parser.references.functionExpressions[0].symbolTable;
|
|
1104
|
-
chai_1.expect(mainSymbolTable.getSymbolType('someNum')).to.be.instanceof(IntegerType_1.IntegerType);
|
|
1105
|
-
chai_1.expect(mainSymbolTable.getSymbolType('someString')).to.be.instanceof(StringType_1.StringType);
|
|
1106
|
-
chai_1.expect(mainSymbolTable.getSymbolType('someObj')).to.be.instanceof(ObjectType_1.ObjectType);
|
|
1107
|
-
chai_1.expect(mainSymbolTable.getSymbolType('someCustom')).to.be.instanceof(CustomType_1.CustomType);
|
|
1105
|
+
(0, chai_1.expect)(mainSymbolTable.getSymbolType('someNum')).to.be.instanceof(IntegerType_1.IntegerType);
|
|
1106
|
+
(0, chai_1.expect)(mainSymbolTable.getSymbolType('someString')).to.be.instanceof(StringType_1.StringType);
|
|
1107
|
+
(0, chai_1.expect)(mainSymbolTable.getSymbolType('someObj')).to.be.instanceof(ObjectType_1.ObjectType);
|
|
1108
|
+
(0, chai_1.expect)(mainSymbolTable.getSymbolType('someCustom')).to.be.instanceof(CustomType_1.CustomType);
|
|
1108
1109
|
});
|
|
1109
1110
|
it('stores typed parameters in functions', () => {
|
|
1110
1111
|
const parser = parse(`
|
|
1111
1112
|
sub someFunc(param1 as string, param2 as integer)
|
|
1112
|
-
|
|
1113
|
+
temp = param2
|
|
1113
1114
|
end sub
|
|
1114
1115
|
`, Parser_1.ParseMode.BrighterScript);
|
|
1115
|
-
testHelpers_spec_1.expectZeroDiagnostics(parser.diagnostics);
|
|
1116
|
+
(0, testHelpers_spec_1.expectZeroDiagnostics)(parser.diagnostics);
|
|
1116
1117
|
const someFuncSymbolTable = parser.references.functionExpressions[0].symbolTable;
|
|
1117
|
-
chai_1.expect(someFuncSymbolTable.getSymbolType('param1')).to.be.instanceof(StringType_1.StringType);
|
|
1118
|
-
chai_1.expect(someFuncSymbolTable.getSymbolType('param2')).to.be.instanceof(IntegerType_1.IntegerType);
|
|
1119
|
-
chai_1.expect(someFuncSymbolTable.getSymbolType('temp')).to.be.instanceof(IntegerType_1.IntegerType);
|
|
1118
|
+
(0, chai_1.expect)(someFuncSymbolTable.getSymbolType('param1')).to.be.instanceof(StringType_1.StringType);
|
|
1119
|
+
(0, chai_1.expect)(someFuncSymbolTable.getSymbolType('param2')).to.be.instanceof(IntegerType_1.IntegerType);
|
|
1120
|
+
(0, chai_1.expect)(someFuncSymbolTable.getSymbolType('temp')).to.be.instanceof(IntegerType_1.IntegerType);
|
|
1120
1121
|
});
|
|
1121
1122
|
it('properly defers typing lazy types', () => {
|
|
1122
1123
|
const parser = parse(`
|
|
1123
1124
|
sub someFunc()
|
|
1124
|
-
|
|
1125
|
+
temp = foo()
|
|
1125
1126
|
end sub
|
|
1126
1127
|
|
|
1127
1128
|
function foo() as string
|
|
1128
|
-
|
|
1129
|
+
return "foo"
|
|
1129
1130
|
end function
|
|
1130
1131
|
`, Parser_1.ParseMode.BrighterScript);
|
|
1131
|
-
testHelpers_spec_1.expectZeroDiagnostics(parser.diagnostics);
|
|
1132
|
+
(0, testHelpers_spec_1.expectZeroDiagnostics)(parser.diagnostics);
|
|
1132
1133
|
const someFuncSymbolTable = parser.references.functionExpressions[0].symbolTable;
|
|
1133
|
-
chai_1.expect(someFuncSymbolTable.
|
|
1134
|
-
chai_1.expect(someFuncSymbolTable.getSymbolType('temp').toTypeString()).to.eq('string');
|
|
1134
|
+
(0, chai_1.expect)((0, reflection_1.isLazyType)(someFuncSymbolTable.getSymbol('temp')[0].type)).to.be.true;
|
|
1135
|
+
(0, chai_1.expect)(someFuncSymbolTable.getSymbolType('temp').toTypeString()).to.eq('string');
|
|
1135
1136
|
});
|
|
1136
1137
|
it('does not know about symbols declared in parent functions', () => {
|
|
1137
1138
|
const parser = parse(`
|
|
@@ -1142,17 +1143,17 @@ describe('parser', () => {
|
|
|
1142
1143
|
end sub
|
|
1143
1144
|
end sub
|
|
1144
1145
|
`, Parser_1.ParseMode.BrighterScript);
|
|
1145
|
-
testHelpers_spec_1.expectZeroDiagnostics(parser.diagnostics);
|
|
1146
|
+
(0, testHelpers_spec_1.expectZeroDiagnostics)(parser.diagnostics);
|
|
1146
1147
|
const addOneSymbolTable = parser.references.functionExpressions[0].childFunctionExpressions[0].symbolTable;
|
|
1147
|
-
chai_1.expect(addOneSymbolTable.getSymbolType('oldVal')
|
|
1148
|
+
(0, chai_1.expect)((0, reflection_1.isUninitializedType)(addOneSymbolTable.getSymbolType('oldVal'))).to.be.true;
|
|
1148
1149
|
});
|
|
1149
1150
|
it('finds params', () => {
|
|
1150
1151
|
const parser = parse(`
|
|
1151
1152
|
sub alert(p1, p2 as string, p3 = 1)
|
|
1152
1153
|
end sub
|
|
1153
1154
|
`, Parser_1.ParseMode.BrighterScript);
|
|
1154
|
-
testHelpers_spec_1.expectZeroDiagnostics(parser.diagnostics);
|
|
1155
|
-
testHelpers_spec_1.expectSymbolTableEquals(parser.references.functionExpressions[0].symbolTable, [
|
|
1155
|
+
(0, testHelpers_spec_1.expectZeroDiagnostics)(parser.diagnostics);
|
|
1156
|
+
(0, testHelpers_spec_1.expectSymbolTableEquals)(parser.references.functionExpressions[0].symbolTable, [
|
|
1156
1157
|
['p1', new DynamicType_1.DynamicType(), util_1.default.createRange(1, 26, 1, 28)],
|
|
1157
1158
|
['p2', new StringType_1.StringType(), util_1.default.createRange(1, 30, 1, 32)],
|
|
1158
1159
|
['p3', new IntegerType_1.IntegerType(), util_1.default.createRange(1, 44, 1, 46)]
|
|
@@ -1167,9 +1168,9 @@ describe('parser', () => {
|
|
|
1167
1168
|
end for
|
|
1168
1169
|
end sub
|
|
1169
1170
|
`, Parser_1.ParseMode.BrighterScript);
|
|
1170
|
-
testHelpers_spec_1.expectZeroDiagnostics(parser.diagnostics);
|
|
1171
|
+
(0, testHelpers_spec_1.expectZeroDiagnostics)(parser.diagnostics);
|
|
1171
1172
|
const currentSymbolTable = parser.references.functionExpressions[0].symbolTable;
|
|
1172
|
-
chai_1.expect(currentSymbolTable.getSymbolType('i').toString()).to.eq('integer');
|
|
1173
|
+
(0, chai_1.expect)(currentSymbolTable.getSymbolType('i').toString()).to.eq('integer');
|
|
1173
1174
|
});
|
|
1174
1175
|
it('stores the loop variable in a for each loop', () => {
|
|
1175
1176
|
const parser = parse(`
|
|
@@ -1179,12 +1180,172 @@ describe('parser', () => {
|
|
|
1179
1180
|
end for
|
|
1180
1181
|
end sub
|
|
1181
1182
|
`, Parser_1.ParseMode.BrighterScript);
|
|
1182
|
-
testHelpers_spec_1.expectZeroDiagnostics(parser.diagnostics);
|
|
1183
|
+
(0, testHelpers_spec_1.expectZeroDiagnostics)(parser.diagnostics);
|
|
1183
1184
|
const currentSymbolTable = parser.references.functionExpressions[0].symbolTable;
|
|
1184
|
-
chai_1.expect(currentSymbolTable.getSymbolType('datum').toString()).to.eq('dynamic');
|
|
1185
|
+
(0, chai_1.expect)(currentSymbolTable.getSymbolType('datum').toString()).to.eq('dynamic');
|
|
1185
1186
|
});
|
|
1186
1187
|
});
|
|
1187
1188
|
});
|
|
1189
|
+
describe('tokenChain', () => {
|
|
1190
|
+
it('can find a chain of tokens', () => {
|
|
1191
|
+
const parser = parse(`
|
|
1192
|
+
sub someFunc()
|
|
1193
|
+
print m.field.childField
|
|
1194
|
+
end sub
|
|
1195
|
+
`, Parser_1.ParseMode.BrighterScript);
|
|
1196
|
+
const childFieldToken = parser.getTokenAt(vscode_languageserver_1.Position.create(2, 38));
|
|
1197
|
+
const tokenChain = parser.getTokenChain(childFieldToken).chain;
|
|
1198
|
+
const tokenChainTokens = tokenChain.map(tcm => tcm.token);
|
|
1199
|
+
(0, chai_1.expect)(tokenChain.length).to.equal(3);
|
|
1200
|
+
(0, chai_1.expect)(tokenChainTokens.map(token => token.text)).to.eql(['m', 'field', 'childField']);
|
|
1201
|
+
(0, chai_1.expect)(tokenChain.map(tcm => tcm.usage)).to.eql([Parser_1.TokenUsage.Direct, Parser_1.TokenUsage.Direct, Parser_1.TokenUsage.Direct]);
|
|
1202
|
+
});
|
|
1203
|
+
it('can find a chain of tokens with function call with no args in the middle', () => {
|
|
1204
|
+
const parser = parse(`
|
|
1205
|
+
sub someFunc()
|
|
1206
|
+
print var.field.funcCall().childField
|
|
1207
|
+
end sub
|
|
1208
|
+
`, Parser_1.ParseMode.BrighterScript);
|
|
1209
|
+
const childFieldToken = parser.getTokenAt(vscode_languageserver_1.Position.create(2, 49));
|
|
1210
|
+
const tokenChain = parser.getTokenChain(childFieldToken).chain;
|
|
1211
|
+
const tokenChainTokens = tokenChain.map(tcm => tcm.token);
|
|
1212
|
+
(0, chai_1.expect)(tokenChain.length).to.equal(4);
|
|
1213
|
+
(0, chai_1.expect)(tokenChainTokens.map(token => token.text)).to.eql(['var', 'field', 'funcCall', 'childField']);
|
|
1214
|
+
(0, chai_1.expect)(tokenChain[2].usage).to.eql(Parser_1.TokenUsage.Call);
|
|
1215
|
+
});
|
|
1216
|
+
it('can find a chain of tokens with function call with multiple args in the middle', () => {
|
|
1217
|
+
const parser = parse(`
|
|
1218
|
+
sub someFunc()
|
|
1219
|
+
print var.field.funcCall(1, "string", {key: value}).childField
|
|
1220
|
+
end sub
|
|
1221
|
+
`, Parser_1.ParseMode.BrighterScript);
|
|
1222
|
+
const childFieldToken = parser.getTokenAt(vscode_languageserver_1.Position.create(2, 75));
|
|
1223
|
+
const tokenChain = parser.getTokenChain(childFieldToken).chain;
|
|
1224
|
+
const tokenChainTokens = tokenChain.map(tcm => tcm.token);
|
|
1225
|
+
(0, chai_1.expect)(tokenChain.length).to.equal(4);
|
|
1226
|
+
(0, chai_1.expect)(tokenChainTokens.map(token => token.text)).to.eql(['var', 'field', 'funcCall', 'childField']);
|
|
1227
|
+
(0, chai_1.expect)(tokenChain[2].usage).to.eql(Parser_1.TokenUsage.Call);
|
|
1228
|
+
});
|
|
1229
|
+
it('can find a chain of tokens with function call with function call inside', () => {
|
|
1230
|
+
const parser = parse(`
|
|
1231
|
+
sub someFunc()
|
|
1232
|
+
print var.field.funcCall(a(), b(), otherFunc2(c(), {d: func3(e)})).childField
|
|
1233
|
+
end sub
|
|
1234
|
+
`, Parser_1.ParseMode.BrighterScript);
|
|
1235
|
+
const childFieldToken = parser.getTokenAt(vscode_languageserver_1.Position.create(2, 90));
|
|
1236
|
+
const tokenChain = parser.getTokenChain(childFieldToken).chain;
|
|
1237
|
+
const tokenChainTokens = tokenChain.map(tcm => tcm.token);
|
|
1238
|
+
(0, chai_1.expect)(tokenChain.length).to.equal(4);
|
|
1239
|
+
(0, chai_1.expect)(tokenChainTokens.map(token => token.text)).to.eql(['var', 'field', 'funcCall', 'childField']);
|
|
1240
|
+
(0, chai_1.expect)(tokenChain[2].usage).to.eql(Parser_1.TokenUsage.Call);
|
|
1241
|
+
});
|
|
1242
|
+
it('can find a chain of tokens with array references inside', () => {
|
|
1243
|
+
const parser = parse(`
|
|
1244
|
+
sub someFunc()
|
|
1245
|
+
print var.field.myArray[0].childField
|
|
1246
|
+
end sub
|
|
1247
|
+
`, Parser_1.ParseMode.BrighterScript);
|
|
1248
|
+
const childFieldToken = parser.getTokenAt(vscode_languageserver_1.Position.create(2, 50));
|
|
1249
|
+
const tokenChain = parser.getTokenChain(childFieldToken).chain;
|
|
1250
|
+
const tokenChainTokens = tokenChain.map(tcm => tcm.token);
|
|
1251
|
+
(0, chai_1.expect)(tokenChain.length).to.equal(4);
|
|
1252
|
+
(0, chai_1.expect)(tokenChainTokens.map(token => token.text)).to.eql(['var', 'field', 'myArray', 'childField']);
|
|
1253
|
+
(0, chai_1.expect)(tokenChain[2].usage).to.eql(Parser_1.TokenUsage.ArrayReference);
|
|
1254
|
+
});
|
|
1255
|
+
it('includes unknown when an expression in brackets is part of the chain', () => {
|
|
1256
|
+
const parser = parse(`
|
|
1257
|
+
sub someFunc()
|
|
1258
|
+
print (1 + 1).toStr()
|
|
1259
|
+
end sub
|
|
1260
|
+
`, Parser_1.ParseMode.BrighterScript);
|
|
1261
|
+
const toStrToken = parser.getTokenAt(vscode_languageserver_1.Position.create(2, 34));
|
|
1262
|
+
const tokenChainResponse = parser.getTokenChain(toStrToken);
|
|
1263
|
+
(0, chai_1.expect)(tokenChainResponse.includesUnknowableTokenType).to.be.true;
|
|
1264
|
+
});
|
|
1265
|
+
it('includes unknown when an expression in double brackets is part of the chain', () => {
|
|
1266
|
+
const parser = parse(`
|
|
1267
|
+
sub someFunc()
|
|
1268
|
+
print ((2 + 1)*3).toStr()
|
|
1269
|
+
end sub
|
|
1270
|
+
`, Parser_1.ParseMode.BrighterScript);
|
|
1271
|
+
const toStrToken = parser.getTokenAt(vscode_languageserver_1.Position.create(2, 38));
|
|
1272
|
+
const tokenChainResponse = parser.getTokenChain(toStrToken);
|
|
1273
|
+
(0, chai_1.expect)(tokenChainResponse.includesUnknowableTokenType).to.be.true;
|
|
1274
|
+
});
|
|
1275
|
+
it('includes unknown when a complicated expression in brackets is part of the chain', () => {
|
|
1276
|
+
const parser = parse(`
|
|
1277
|
+
sub someFunc(currentDate, lastUpdate)
|
|
1278
|
+
print (INT((currentDate.asSeconds() - lastUpdate) / 86400)).toStr()
|
|
1279
|
+
end sub
|
|
1280
|
+
`, Parser_1.ParseMode.BrighterScript);
|
|
1281
|
+
const toStrToken = parser.getTokenAt(vscode_languageserver_1.Position.create(2, 81));
|
|
1282
|
+
const tokenChainResponse = parser.getTokenChain(toStrToken);
|
|
1283
|
+
(0, chai_1.expect)(tokenChainResponse.includesUnknowableTokenType).to.be.true;
|
|
1284
|
+
});
|
|
1285
|
+
});
|
|
1286
|
+
it('includes unknown when property is referenced via brackets', () => {
|
|
1287
|
+
const parser = parse(`
|
|
1288
|
+
sub someFunc()
|
|
1289
|
+
complexObj = {prop: "hello", subObj: {prop: "foo", grandChildObj:{prop:"bar"}}}
|
|
1290
|
+
print complexObj.subObj.prop
|
|
1291
|
+
print complexObj["subObj"].prop
|
|
1292
|
+
print complexObj["subObj"]["grandChildObj"].prop
|
|
1293
|
+
end sub
|
|
1294
|
+
`, Parser_1.ParseMode.BrighterScript);
|
|
1295
|
+
const propAsChainToken = parser.getTokenAt(vscode_languageserver_1.Position.create(3, 44)); // complexObj.subObj.prop
|
|
1296
|
+
const propAsAsBracketToken = parser.getTokenAt(vscode_languageserver_1.Position.create(4, 47)); // complexObj["subObj"].prop
|
|
1297
|
+
const propAsAsDoubleBracketToken = parser.getTokenAt(vscode_languageserver_1.Position.create(5, 64)); // complexObj["subObj"]["grandChildObj"].prop
|
|
1298
|
+
let tokenChainResponse = parser.getTokenChain(propAsChainToken);
|
|
1299
|
+
(0, chai_1.expect)(tokenChainResponse.includesUnknowableTokenType).to.be.false;
|
|
1300
|
+
(0, chai_1.expect)(tokenChainResponse.chain.map(tcm => tcm.token).map(token => token.text)).to.eql(['complexObj', 'subObj', 'prop']);
|
|
1301
|
+
tokenChainResponse = parser.getTokenChain(propAsAsBracketToken);
|
|
1302
|
+
(0, chai_1.expect)(tokenChainResponse.includesUnknowableTokenType).to.be.false;
|
|
1303
|
+
(0, chai_1.expect)(tokenChainResponse.chain[0].usage).to.eql(Parser_1.TokenUsage.ArrayReference);
|
|
1304
|
+
tokenChainResponse = parser.getTokenChain(propAsAsDoubleBracketToken);
|
|
1305
|
+
(0, chai_1.expect)(tokenChainResponse.includesUnknowableTokenType).to.be.true;
|
|
1306
|
+
});
|
|
1307
|
+
it('allows token kinds from AllowedLocalIdentifiers as start of a chain', () => {
|
|
1308
|
+
const parser = parse(`
|
|
1309
|
+
sub testLocalIdentifiers(override, string, float)
|
|
1310
|
+
override.someProp.someFunc()
|
|
1311
|
+
string.someProp.someFunc()
|
|
1312
|
+
float.someProp.someFunc()
|
|
1313
|
+
end sub
|
|
1314
|
+
`, Parser_1.ParseMode.BrightScript);
|
|
1315
|
+
const overrideFuncToken = parser.getTokenAt(vscode_languageserver_1.Position.create(2, 40)); // override.someProp.someFunc()
|
|
1316
|
+
const stringFuncToken = parser.getTokenAt(vscode_languageserver_1.Position.create(3, 40)); // string.someProp.someFunc()
|
|
1317
|
+
const floatFuncToken = parser.getTokenAt(vscode_languageserver_1.Position.create(4, 38)); // float.someProp.someFunc()
|
|
1318
|
+
let tokenChainResponse = parser.getTokenChain(overrideFuncToken);
|
|
1319
|
+
(0, chai_1.expect)(tokenChainResponse.includesUnknowableTokenType).to.be.false;
|
|
1320
|
+
(0, chai_1.expect)(tokenChainResponse.chain.map(tcm => tcm.token).map(token => token.text)).to.eql(['override', 'someProp', 'someFunc']);
|
|
1321
|
+
tokenChainResponse = parser.getTokenChain(stringFuncToken);
|
|
1322
|
+
(0, chai_1.expect)(tokenChainResponse.includesUnknowableTokenType).to.be.false;
|
|
1323
|
+
(0, chai_1.expect)(tokenChainResponse.chain.map(tcm => tcm.token).map(token => token.text)).to.eql(['string', 'someProp', 'someFunc']);
|
|
1324
|
+
tokenChainResponse = parser.getTokenChain(floatFuncToken);
|
|
1325
|
+
(0, chai_1.expect)(tokenChainResponse.includesUnknowableTokenType).to.be.false;
|
|
1326
|
+
(0, chai_1.expect)(tokenChainResponse.chain.map(tcm => tcm.token).map(token => token.text)).to.eql(['float', 'someProp', 'someFunc']);
|
|
1327
|
+
});
|
|
1328
|
+
it('allows token kinds from AllowedProperties in middle of a chain', () => {
|
|
1329
|
+
const parser = parse(`
|
|
1330
|
+
sub testAllowedProperties(someObj)
|
|
1331
|
+
someObj.override.someFunc()
|
|
1332
|
+
someObj.string.someFunc()
|
|
1333
|
+
someObj.float.someFunc()
|
|
1334
|
+
end sub
|
|
1335
|
+
`, Parser_1.ParseMode.BrightScript);
|
|
1336
|
+
const overrideFuncToken = parser.getTokenAt(vscode_languageserver_1.Position.create(2, 36)); // someObj.override.someFunc()
|
|
1337
|
+
const stringFuncToken = parser.getTokenAt(vscode_languageserver_1.Position.create(3, 36)); // someObj.string.someFunc()
|
|
1338
|
+
const floatFuncToken = parser.getTokenAt(vscode_languageserver_1.Position.create(4, 36)); // someObj.float.someFunc()
|
|
1339
|
+
let tokenChainResponse = parser.getTokenChain(overrideFuncToken);
|
|
1340
|
+
(0, chai_1.expect)(tokenChainResponse.includesUnknowableTokenType).to.be.false;
|
|
1341
|
+
(0, chai_1.expect)(tokenChainResponse.chain.map(tcm => tcm.token).map(token => token.text)).to.eql(['someObj', 'override', 'someFunc']);
|
|
1342
|
+
tokenChainResponse = parser.getTokenChain(stringFuncToken);
|
|
1343
|
+
(0, chai_1.expect)(tokenChainResponse.includesUnknowableTokenType).to.be.false;
|
|
1344
|
+
(0, chai_1.expect)(tokenChainResponse.chain.map(tcm => tcm.token).map(token => token.text)).to.eql(['someObj', 'string', 'someFunc']);
|
|
1345
|
+
tokenChainResponse = parser.getTokenChain(floatFuncToken);
|
|
1346
|
+
(0, chai_1.expect)(tokenChainResponse.includesUnknowableTokenType).to.be.false;
|
|
1347
|
+
(0, chai_1.expect)(tokenChainResponse.chain.map(tcm => tcm.token).map(token => token.text)).to.eql(['someObj', 'float', 'someFunc']);
|
|
1348
|
+
});
|
|
1188
1349
|
});
|
|
1189
1350
|
function parse(text, mode) {
|
|
1190
1351
|
let { tokens } = lexer_1.Lexer.scan(text);
|
|
@@ -1202,8 +1363,8 @@ function rangeToArray(range) {
|
|
|
1202
1363
|
}
|
|
1203
1364
|
exports.rangeToArray = rangeToArray;
|
|
1204
1365
|
function expectCommentWithText(stat, text) {
|
|
1205
|
-
if (reflection_1.isCommentStatement(stat)) {
|
|
1206
|
-
chai_1.expect(stat.text).to.equal(text);
|
|
1366
|
+
if ((0, reflection_1.isCommentStatement)(stat)) {
|
|
1367
|
+
(0, chai_1.expect)(stat.text).to.equal(text);
|
|
1207
1368
|
}
|
|
1208
1369
|
else {
|
|
1209
1370
|
failStatementType(stat, 'Comment');
|