brighterscript 0.57.2 → 0.59.0
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 +31 -0
- package/README.md +16 -6
- package/bsconfig.schema.json +11 -0
- package/dist/BsConfig.d.ts +11 -0
- package/dist/DiagnosticMessages.d.ts +7 -2
- package/dist/DiagnosticMessages.js +7 -2
- package/dist/DiagnosticMessages.js.map +1 -1
- package/dist/Program.d.ts +12 -2
- package/dist/Program.js +69 -24
- package/dist/Program.js.map +1 -1
- package/dist/ProgramBuilder.js +1 -1
- package/dist/ProgramBuilder.js.map +1 -1
- package/dist/Scope.d.ts +6 -3
- package/dist/Scope.js +24 -17
- package/dist/Scope.js.map +1 -1
- package/dist/astUtils/AstEditor.d.ts +2 -3
- package/dist/astUtils/AstEditor.js.map +1 -1
- package/dist/astUtils/creators.d.ts +4 -4
- package/dist/astUtils/creators.js +6 -6
- package/dist/astUtils/creators.js.map +1 -1
- package/dist/astUtils/reflection.d.ts +67 -64
- package/dist/astUtils/reflection.js +10 -2
- package/dist/astUtils/reflection.js.map +1 -1
- package/dist/astUtils/reflection.spec.js +8 -3
- package/dist/astUtils/reflection.spec.js.map +1 -1
- package/dist/astUtils/visitors.d.ts +33 -31
- package/dist/astUtils/visitors.js.map +1 -1
- package/dist/astUtils/visitors.spec.js.map +1 -1
- package/dist/bscPlugin/BscPlugin.js +4 -0
- package/dist/bscPlugin/BscPlugin.js.map +1 -1
- package/dist/bscPlugin/codeActions/CodeActionsProcessor.spec.js +6 -6
- package/dist/bscPlugin/codeActions/CodeActionsProcessor.spec.js.map +1 -1
- package/dist/bscPlugin/hover/HoverProcessor.spec.js +40 -34
- package/dist/bscPlugin/hover/HoverProcessor.spec.js.map +1 -1
- package/dist/bscPlugin/semanticTokens/BrsFileSemanticTokensProcessor.js +2 -2
- package/dist/bscPlugin/semanticTokens/BrsFileSemanticTokensProcessor.js.map +1 -1
- package/dist/bscPlugin/semanticTokens/BrsFileSemanticTokensProcessor.spec.js +2 -2
- package/dist/bscPlugin/semanticTokens/BrsFileSemanticTokensProcessor.spec.js.map +1 -1
- package/dist/bscPlugin/transpile/BrsFilePreTranspileProcessor.spec.js +4 -5
- package/dist/bscPlugin/transpile/BrsFilePreTranspileProcessor.spec.js.map +1 -1
- package/dist/bscPlugin/validation/BrsFileValidator.d.ts +2 -0
- package/dist/bscPlugin/validation/BrsFileValidator.js +166 -12
- package/dist/bscPlugin/validation/BrsFileValidator.js.map +1 -1
- package/dist/bscPlugin/validation/ScopeValidator.d.ts +21 -19
- package/dist/bscPlugin/validation/ScopeValidator.js +164 -179
- package/dist/bscPlugin/validation/ScopeValidator.js.map +1 -1
- package/dist/bscPlugin/validation/XmlFileValidator.d.ts +8 -0
- package/dist/bscPlugin/validation/XmlFileValidator.js +44 -0
- package/dist/bscPlugin/validation/XmlFileValidator.js.map +1 -0
- package/dist/files/BrsFile.Class.spec.js +33 -35
- package/dist/files/BrsFile.Class.spec.js.map +1 -1
- package/dist/files/BrsFile.d.ts +11 -5
- package/dist/files/BrsFile.js +15 -47
- package/dist/files/BrsFile.js.map +1 -1
- package/dist/files/BrsFile.spec.js +107 -79
- package/dist/files/BrsFile.spec.js.map +1 -1
- package/dist/files/XmlFile.d.ts +9 -4
- package/dist/files/XmlFile.js +6 -30
- package/dist/files/XmlFile.js.map +1 -1
- package/dist/files/XmlFile.spec.js +57 -90
- package/dist/files/XmlFile.spec.js.map +1 -1
- package/dist/files/tests/imports.spec.js +13 -15
- package/dist/files/tests/imports.spec.js.map +1 -1
- package/dist/files/tests/optionalChaning.spec.js +10 -12
- package/dist/files/tests/optionalChaning.spec.js.map +1 -1
- package/dist/index.d.ts +1 -0
- package/dist/index.js +1 -0
- package/dist/index.js.map +1 -1
- package/dist/interfaces.d.ts +2 -3
- package/dist/lexer/Lexer.spec.js +6 -0
- package/dist/lexer/Lexer.spec.js.map +1 -1
- package/dist/lexer/TokenKind.d.ts +1 -0
- package/dist/lexer/TokenKind.js +6 -2
- package/dist/lexer/TokenKind.js.map +1 -1
- package/dist/parser/AstNode.d.ts +65 -0
- package/dist/parser/AstNode.js +93 -0
- package/dist/parser/AstNode.js.map +1 -0
- package/dist/parser/AstNode.spec.d.ts +1 -0
- package/dist/parser/AstNode.spec.js +42 -0
- package/dist/parser/AstNode.spec.js.map +1 -0
- package/dist/parser/Expression.d.ts +6 -43
- package/dist/parser/Expression.js +53 -81
- package/dist/parser/Expression.js.map +1 -1
- package/dist/parser/Parser.d.ts +15 -12
- package/dist/parser/Parser.js +130 -117
- package/dist/parser/Parser.js.map +1 -1
- package/dist/parser/Parser.spec.d.ts +1 -1
- package/dist/parser/Parser.spec.js.map +1 -1
- package/dist/parser/SGParser.spec.js +2 -3
- package/dist/parser/SGParser.spec.js.map +1 -1
- package/dist/parser/Statement.d.ts +28 -44
- package/dist/parser/Statement.js +118 -104
- package/dist/parser/Statement.js.map +1 -1
- package/dist/parser/Statement.spec.js +16 -10
- package/dist/parser/Statement.spec.js.map +1 -1
- package/dist/parser/tests/expression/ArrayLiterals.spec.js +37 -0
- package/dist/parser/tests/expression/ArrayLiterals.spec.js.map +1 -1
- package/dist/parser/tests/expression/AssociativeArrayLiterals.spec.js +41 -0
- package/dist/parser/tests/expression/AssociativeArrayLiterals.spec.js.map +1 -1
- package/dist/parser/tests/expression/Call.spec.js +109 -1
- package/dist/parser/tests/expression/Call.spec.js.map +1 -1
- package/dist/parser/tests/expression/Indexing.spec.js +49 -4
- package/dist/parser/tests/expression/Indexing.spec.js.map +1 -1
- package/dist/parser/tests/statement/ConstStatement.spec.js +7 -7
- package/dist/parser/tests/statement/ConstStatement.spec.js.map +1 -1
- package/dist/parser/tests/statement/Continue.spec.d.ts +1 -0
- package/dist/parser/tests/statement/Continue.spec.js +92 -0
- package/dist/parser/tests/statement/Continue.spec.js.map +1 -0
- package/dist/parser/tests/statement/Enum.spec.js +36 -9
- package/dist/parser/tests/statement/Enum.spec.js.map +1 -1
- package/dist/parser/tests/statement/For.spec.js +3 -4
- package/dist/parser/tests/statement/For.spec.js.map +1 -1
- package/dist/parser/tests/statement/ForEach.spec.js +4 -5
- package/dist/parser/tests/statement/ForEach.spec.js.map +1 -1
- package/dist/parser/tests/statement/InterfaceStatement.spec.js +4 -5
- package/dist/parser/tests/statement/InterfaceStatement.spec.js.map +1 -1
- package/dist/parser/tests/statement/PrintStatement.spec.js +3 -4
- package/dist/parser/tests/statement/PrintStatement.spec.js.map +1 -1
- package/dist/util.d.ts +11 -5
- package/dist/util.js +57 -6
- package/dist/util.js.map +1 -1
- package/dist/validators/ClassValidator.js +22 -19
- package/dist/validators/ClassValidator.js.map +1 -1
- package/package.json +2 -2
|
@@ -6,6 +6,9 @@ const Lexer_1 = require("../../../lexer/Lexer");
|
|
|
6
6
|
const TokenKind_1 = require("../../../lexer/TokenKind");
|
|
7
7
|
const Parser_spec_1 = require("../Parser.spec");
|
|
8
8
|
const vscode_languageserver_1 = require("vscode-languageserver");
|
|
9
|
+
const DiagnosticMessages_1 = require("../../../DiagnosticMessages");
|
|
10
|
+
const testHelpers_spec_1 = require("../../../testHelpers.spec");
|
|
11
|
+
const reflection_1 = require("../../../astUtils/reflection");
|
|
9
12
|
describe('parser call expressions', () => {
|
|
10
13
|
it('parses named function calls', () => {
|
|
11
14
|
const { statements, diagnostics } = Parser_1.Parser.parse([
|
|
@@ -45,7 +48,10 @@ describe('parser call expressions', () => {
|
|
|
45
48
|
`);
|
|
46
49
|
const { statements, diagnostics } = Parser_1.Parser.parse(tokens);
|
|
47
50
|
//there should only be 1 error
|
|
48
|
-
(0,
|
|
51
|
+
(0, testHelpers_spec_1.expectDiagnostics)(diagnostics, [
|
|
52
|
+
DiagnosticMessages_1.DiagnosticMessages.unexpectedToken(':'),
|
|
53
|
+
DiagnosticMessages_1.DiagnosticMessages.expectedRightParenAfterFunctionCallArguments()
|
|
54
|
+
]);
|
|
49
55
|
(0, chai_1.expect)(statements).to.be.length.greaterThan(0);
|
|
50
56
|
//the error should be BEFORE the `name = "bob"` statement
|
|
51
57
|
(0, chai_1.expect)(diagnostics[0].range.end.character).to.be.lessThan(25);
|
|
@@ -62,6 +68,49 @@ describe('parser call expressions', () => {
|
|
|
62
68
|
(0, chai_1.expect)(diagnostics).to.be.lengthOf(0);
|
|
63
69
|
(0, chai_1.expect)(statements).to.be.length.greaterThan(0);
|
|
64
70
|
});
|
|
71
|
+
it('includes partial statements and expressions', () => {
|
|
72
|
+
const { statements, diagnostics } = Parser_1.Parser.parse(`
|
|
73
|
+
function processData(data)
|
|
74
|
+
data.foo.bar. = "hello"
|
|
75
|
+
data.foo.func().
|
|
76
|
+
result = data.foo.
|
|
77
|
+
return result.
|
|
78
|
+
end function
|
|
79
|
+
`);
|
|
80
|
+
(0, chai_1.expect)(diagnostics).to.be.lengthOf(4);
|
|
81
|
+
(0, testHelpers_spec_1.expectDiagnostics)(diagnostics, [
|
|
82
|
+
DiagnosticMessages_1.DiagnosticMessages.expectedPropertyNameAfterPeriod(),
|
|
83
|
+
DiagnosticMessages_1.DiagnosticMessages.expectedPropertyNameAfterPeriod(),
|
|
84
|
+
DiagnosticMessages_1.DiagnosticMessages.expectedPropertyNameAfterPeriod(),
|
|
85
|
+
DiagnosticMessages_1.DiagnosticMessages.expectedPropertyNameAfterPeriod()
|
|
86
|
+
]);
|
|
87
|
+
(0, chai_1.expect)(statements).to.be.lengthOf(1);
|
|
88
|
+
const bodyStatements = statements[0].func.body.statements;
|
|
89
|
+
(0, chai_1.expect)(bodyStatements).to.be.lengthOf(4); // each line is a statement
|
|
90
|
+
// first should be: data.foo.bar = "hello"
|
|
91
|
+
(0, chai_1.expect)((0, reflection_1.isDottedSetStatement)(bodyStatements[0])).to.be.true;
|
|
92
|
+
const setStmt = bodyStatements[0];
|
|
93
|
+
(0, chai_1.expect)(setStmt.name.text).to.equal('bar');
|
|
94
|
+
(0, chai_1.expect)(setStmt.obj.name.text).to.equal('foo');
|
|
95
|
+
(0, chai_1.expect)(setStmt.obj.obj.name.text).to.equal('data');
|
|
96
|
+
(0, chai_1.expect)(setStmt.value.token.text).to.equal('"hello"');
|
|
97
|
+
// 2nd should be: data.foo.func()
|
|
98
|
+
(0, chai_1.expect)((0, reflection_1.isExpressionStatement)(bodyStatements[1])).to.be.true;
|
|
99
|
+
(0, chai_1.expect)((0, reflection_1.isCallExpression)(bodyStatements[1].expression)).to.be.true;
|
|
100
|
+
const callExpr = bodyStatements[1].expression;
|
|
101
|
+
(0, chai_1.expect)(callExpr.callee.name.text).to.be.equal('func');
|
|
102
|
+
(0, chai_1.expect)(callExpr.callee.obj.name.text).to.be.equal('foo');
|
|
103
|
+
(0, chai_1.expect)(callExpr.callee.obj.obj.name.text).to.be.equal('data');
|
|
104
|
+
// 3rd should be: result = data.foo
|
|
105
|
+
(0, chai_1.expect)((0, reflection_1.isAssignmentStatement)(bodyStatements[2])).to.be.true;
|
|
106
|
+
const assignStmt = bodyStatements[2];
|
|
107
|
+
(0, chai_1.expect)(assignStmt.name.text).to.equal('result');
|
|
108
|
+
(0, chai_1.expect)(assignStmt.value.name.text).to.equal('foo');
|
|
109
|
+
// 4th should be: return result
|
|
110
|
+
(0, chai_1.expect)((0, reflection_1.isReturnStatement)(bodyStatements[3])).to.be.true;
|
|
111
|
+
const returnStmt = bodyStatements[3];
|
|
112
|
+
(0, chai_1.expect)(returnStmt.value.name.text).to.equal('result');
|
|
113
|
+
});
|
|
65
114
|
it('accepts arguments', () => {
|
|
66
115
|
const { statements, diagnostics } = Parser_1.Parser.parse([
|
|
67
116
|
(0, Parser_spec_1.identifier)('add'),
|
|
@@ -131,5 +180,64 @@ describe('parser call expressions', () => {
|
|
|
131
180
|
(0, chai_1.expect)(statements).to.be.lengthOf(1);
|
|
132
181
|
(0, chai_1.expect)(statements[0].range).to.deep.include(vscode_languageserver_1.Range.create(0, 0, 0, 17));
|
|
133
182
|
});
|
|
183
|
+
describe('unfinished', () => {
|
|
184
|
+
it('continues parsing inside unfinished function calls', () => {
|
|
185
|
+
const { statements, diagnostics } = Parser_1.Parser.parse(`
|
|
186
|
+
sub doSomething(data)
|
|
187
|
+
otherFunc(data.foo, data.bar[0]
|
|
188
|
+
end sub
|
|
189
|
+
`);
|
|
190
|
+
(0, chai_1.expect)(diagnostics).to.be.lengthOf(2);
|
|
191
|
+
(0, testHelpers_spec_1.expectDiagnostics)(diagnostics, [
|
|
192
|
+
DiagnosticMessages_1.DiagnosticMessages.expectedRightParenAfterFunctionCallArguments(),
|
|
193
|
+
DiagnosticMessages_1.DiagnosticMessages.expectedNewlineOrColon()
|
|
194
|
+
]);
|
|
195
|
+
(0, chai_1.expect)(statements).to.be.lengthOf(1);
|
|
196
|
+
const bodyStatements = statements[0].func.body.statements;
|
|
197
|
+
(0, chai_1.expect)(bodyStatements).to.be.lengthOf(1);
|
|
198
|
+
// Function statement should still be parsed
|
|
199
|
+
(0, chai_1.expect)((0, reflection_1.isExpressionStatement)(bodyStatements[0])).to.be.true;
|
|
200
|
+
(0, chai_1.expect)((0, reflection_1.isCallExpression)(bodyStatements[0].expression)).to.be.true;
|
|
201
|
+
const callExpr = bodyStatements[0].expression;
|
|
202
|
+
(0, chai_1.expect)(callExpr.callee.name.text).to.equal('otherFunc');
|
|
203
|
+
// args should still be parsed, as well!
|
|
204
|
+
(0, chai_1.expect)(callExpr.args).to.be.lengthOf(2);
|
|
205
|
+
(0, chai_1.expect)((0, reflection_1.isDottedGetExpression)(callExpr.args[0])).to.be.true;
|
|
206
|
+
(0, chai_1.expect)((0, reflection_1.isIndexedGetExpression)(callExpr.args[1])).to.be.true;
|
|
207
|
+
});
|
|
208
|
+
it('gets correct diagnostic for missing close paren without args', () => {
|
|
209
|
+
let { diagnostics } = Parser_1.Parser.parse(`
|
|
210
|
+
sub process()
|
|
211
|
+
someFunc(
|
|
212
|
+
end sub
|
|
213
|
+
`);
|
|
214
|
+
(0, testHelpers_spec_1.expectDiagnosticsIncludes)(diagnostics, [
|
|
215
|
+
DiagnosticMessages_1.DiagnosticMessages.expectedRightParenAfterFunctionCallArguments()
|
|
216
|
+
]);
|
|
217
|
+
});
|
|
218
|
+
it('gets correct diagnostic for missing close paren with args', () => {
|
|
219
|
+
let { diagnostics } = Parser_1.Parser.parse(`
|
|
220
|
+
sub process()
|
|
221
|
+
someFunc("hello"
|
|
222
|
+
end sub
|
|
223
|
+
`);
|
|
224
|
+
(0, testHelpers_spec_1.expectDiagnosticsIncludes)(diagnostics, [
|
|
225
|
+
DiagnosticMessages_1.DiagnosticMessages.expectedRightParenAfterFunctionCallArguments()
|
|
226
|
+
]);
|
|
227
|
+
});
|
|
228
|
+
it('gets correct diagnostic for missing close paren with invalid expression as arg', () => {
|
|
229
|
+
let { diagnostics, statements } = Parser_1.Parser.parse(`
|
|
230
|
+
sub process(data)
|
|
231
|
+
someFunc(data.name. ,
|
|
232
|
+
end sub
|
|
233
|
+
`);
|
|
234
|
+
(0, testHelpers_spec_1.expectDiagnosticsIncludes)(diagnostics, [
|
|
235
|
+
DiagnosticMessages_1.DiagnosticMessages.expectedRightParenAfterFunctionCallArguments()
|
|
236
|
+
]);
|
|
237
|
+
(0, chai_1.expect)(statements).to.be.lengthOf(1);
|
|
238
|
+
const bodyStatements = statements[0].func.body.statements;
|
|
239
|
+
(0, chai_1.expect)(bodyStatements).to.be.lengthOf(1);
|
|
240
|
+
});
|
|
241
|
+
});
|
|
134
242
|
});
|
|
135
243
|
//# sourceMappingURL=Call.spec.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Call.spec.js","sourceRoot":"","sources":["../../../../src/parser/tests/expression/Call.spec.ts"],"names":[],"mappings":";;AAAA,+BAA8B;AAE9B,yCAAsC;AACtC,gDAA6C;AAC7C,wDAAqD;AACrD,gDAAwD;AACxD,iEAA8C;AAE9C,QAAQ,CAAC,yBAAyB,EAAE,GAAG,EAAE;IACrC,EAAE,CAAC,6BAA6B,EAAE,GAAG,EAAE;QACnC,MAAM,EAAE,UAAU,EAAE,WAAW,EAAE,GAAG,eAAM,CAAC,KAAK,CAAC;YAC7C,IAAA,wBAAU,EAAC,cAAc,CAAC;YAC1B,EAAE,IAAI,EAAE,qBAAS,CAAC,SAAS,EAAE,IAAI,EAAE,GAAG,EAAE,KAAK,EAAE,IAAI,EAAE;YACrD,IAAA,mBAAK,EAAC,qBAAS,CAAC,UAAU,EAAE,GAAG,CAAC;YAChC,iBAAG;SACN,CAAC,CAAC;QAEH,IAAA,aAAM,EAAC,WAAW,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;QACtC,IAAA,aAAM,EAAC,UAAU,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC;IACnD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,kEAAkE,EAAE,GAAG,EAAE;QACxE,MAAM,EAAE,MAAM,EAAE,GAAG,aAAK,CAAC,IAAI,CAAC;;;;;;SAM7B,CAAC,CAAC;QACH,MAAM,EAAE,UAAU,EAAE,WAAW,EAAE,GAAG,eAAM,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;QACzD,IAAA,aAAM,EAAC,WAAW,CAAC,CAAC,EAAE,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC;QAC7C,IAAA,aAAM,EAAC,UAAU,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC;QAE/C,uDAAuD;QACvD,IAAI,WAAW,GAAG,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QAC3D,KAAK,IAAI,UAAU,IAAI,WAAW,EAAE;YAChC,IAAA,aAAM,EAAC,UAAU,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;SAClC;IACL,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,kEAAkE,EAAE,GAAG,EAAE;QACxE,MAAM,EAAE,MAAM,EAAE,GAAG,aAAK,CAAC,IAAI,CAAC;;;;;;;SAO7B,CAAC,CAAC;QACH,MAAM,EAAE,UAAU,EAAE,WAAW,EAAE,GAAG,eAAM,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;QACzD,8BAA8B;QAC9B,IAAA,
|
|
1
|
+
{"version":3,"file":"Call.spec.js","sourceRoot":"","sources":["../../../../src/parser/tests/expression/Call.spec.ts"],"names":[],"mappings":"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"}
|
|
@@ -7,6 +7,8 @@ const Parser_spec_1 = require("../Parser.spec");
|
|
|
7
7
|
const vscode_languageserver_1 = require("vscode-languageserver");
|
|
8
8
|
const DiagnosticMessages_1 = require("../../../DiagnosticMessages");
|
|
9
9
|
const Statement_1 = require("../../Statement");
|
|
10
|
+
const testHelpers_spec_1 = require("../../../testHelpers.spec");
|
|
11
|
+
const reflection_1 = require("../../../astUtils/reflection");
|
|
10
12
|
describe('parser indexing', () => {
|
|
11
13
|
describe('one level', () => {
|
|
12
14
|
it('dotted', () => {
|
|
@@ -52,8 +54,7 @@ describe('parser indexing', () => {
|
|
|
52
54
|
(0, chai_1.expect)(statements[0]).to.be.instanceof(Statement_1.AssignmentStatement);
|
|
53
55
|
});
|
|
54
56
|
it('multiple dots', () => {
|
|
55
|
-
|
|
56
|
-
let { diagnostics } = Parser_1.Parser.parse([
|
|
57
|
+
let { diagnostics, statements } = Parser_1.Parser.parse([
|
|
57
58
|
(0, Parser_spec_1.identifier)('_'),
|
|
58
59
|
(0, Parser_spec_1.token)(TokenKind_1.TokenKind.Equal, '='),
|
|
59
60
|
(0, Parser_spec_1.identifier)('foo'),
|
|
@@ -63,10 +64,17 @@ describe('parser indexing', () => {
|
|
|
63
64
|
(0, Parser_spec_1.token)(TokenKind_1.TokenKind.LeftSquareBracket, '['),
|
|
64
65
|
(0, Parser_spec_1.token)(TokenKind_1.TokenKind.Integer, '2'),
|
|
65
66
|
(0, Parser_spec_1.token)(TokenKind_1.TokenKind.RightSquareBracket, ']'),
|
|
67
|
+
(0, Parser_spec_1.token)(TokenKind_1.TokenKind.Newline),
|
|
66
68
|
Parser_spec_1.EOF
|
|
67
69
|
]);
|
|
68
|
-
(0, chai_1.expect)(diagnostics.length).to.equal(
|
|
69
|
-
(0,
|
|
70
|
+
(0, chai_1.expect)(diagnostics.length).to.equal(3);
|
|
71
|
+
(0, testHelpers_spec_1.expectDiagnostics)(diagnostics, [
|
|
72
|
+
DiagnosticMessages_1.DiagnosticMessages.expectedPropertyNameAfterPeriod(),
|
|
73
|
+
DiagnosticMessages_1.DiagnosticMessages.expectedNewlineOrColon(),
|
|
74
|
+
DiagnosticMessages_1.DiagnosticMessages.unexpectedToken('.') // everything after the 2nd dot is ignored
|
|
75
|
+
]);
|
|
76
|
+
// expect statement "_ = foo" to still be included
|
|
77
|
+
(0, chai_1.expect)(statements.length).to.equal(1);
|
|
70
78
|
});
|
|
71
79
|
});
|
|
72
80
|
it('location tracking', () => {
|
|
@@ -215,5 +223,42 @@ describe('parser indexing', () => {
|
|
|
215
223
|
(0, chai_1.expect)(statements).to.be.length.greaterThan(0);
|
|
216
224
|
});
|
|
217
225
|
});
|
|
226
|
+
describe('unfinished brackets', () => {
|
|
227
|
+
it('parses expression inside of brackets', () => {
|
|
228
|
+
let { statements, diagnostics } = Parser_1.Parser.parse(`_ = foo[bar.baz.`);
|
|
229
|
+
(0, chai_1.expect)(diagnostics.length).to.be.greaterThan(0);
|
|
230
|
+
(0, chai_1.expect)(statements).to.be.lengthOf(1);
|
|
231
|
+
(0, chai_1.expect)((0, reflection_1.isAssignmentStatement)(statements[0])).to.be.true;
|
|
232
|
+
const assignStmt = statements[0];
|
|
233
|
+
(0, chai_1.expect)(assignStmt.name.text).to.equal('_');
|
|
234
|
+
(0, chai_1.expect)((0, reflection_1.isIndexedGetExpression)(assignStmt.value)).to.be.true;
|
|
235
|
+
const indexedGetExpr = assignStmt.value;
|
|
236
|
+
(0, chai_1.expect)(indexedGetExpr.obj.name.text).to.equal('foo');
|
|
237
|
+
(0, chai_1.expect)((0, reflection_1.isDottedGetExpression)(indexedGetExpr.index)).to.be.true;
|
|
238
|
+
const dottedGetExpr = indexedGetExpr.index;
|
|
239
|
+
(0, chai_1.expect)(dottedGetExpr.name.text).to.equal('baz');
|
|
240
|
+
(0, chai_1.expect)((0, reflection_1.isVariableExpression)(dottedGetExpr.obj)).to.be.true;
|
|
241
|
+
});
|
|
242
|
+
it('gets correct diagnostic for missing square brace without index', () => {
|
|
243
|
+
let { diagnostics } = Parser_1.Parser.parse(`
|
|
244
|
+
sub setData(obj)
|
|
245
|
+
m.data = obj[
|
|
246
|
+
end sub
|
|
247
|
+
`);
|
|
248
|
+
(0, testHelpers_spec_1.expectDiagnosticsIncludes)(diagnostics, [
|
|
249
|
+
DiagnosticMessages_1.DiagnosticMessages.expectedRightSquareBraceAfterArrayOrObjectIndex()
|
|
250
|
+
]);
|
|
251
|
+
});
|
|
252
|
+
it('gets correct diagnostic for missing square brace with index', () => {
|
|
253
|
+
let { diagnostics } = Parser_1.Parser.parse(`
|
|
254
|
+
sub setData(obj)
|
|
255
|
+
m.data = obj[1
|
|
256
|
+
end sub
|
|
257
|
+
`);
|
|
258
|
+
(0, testHelpers_spec_1.expectDiagnosticsIncludes)(diagnostics, [
|
|
259
|
+
DiagnosticMessages_1.DiagnosticMessages.expectedRightSquareBraceAfterArrayOrObjectIndex()
|
|
260
|
+
]);
|
|
261
|
+
});
|
|
262
|
+
});
|
|
218
263
|
});
|
|
219
264
|
//# sourceMappingURL=Indexing.spec.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Indexing.spec.js","sourceRoot":"","sources":["../../../../src/parser/tests/expression/Indexing.spec.ts"],"names":[],"mappings":";;AAAA,+BAA8B;AAE9B,yCAAsC;AACtC,wDAAqD;AACrD,gDAAwD;AACxD,iEAA8C;AAC9C,oEAAiE;AACjE,+CAAsD;
|
|
1
|
+
{"version":3,"file":"Indexing.spec.js","sourceRoot":"","sources":["../../../../src/parser/tests/expression/Indexing.spec.ts"],"names":[],"mappings":"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"}
|
|
@@ -9,15 +9,15 @@ const chai_1 = require("chai");
|
|
|
9
9
|
const TokenKind_1 = require("../../../lexer/TokenKind");
|
|
10
10
|
const Expression_1 = require("../../Expression");
|
|
11
11
|
const vscode_languageserver_protocol_1 = require("vscode-languageserver-protocol");
|
|
12
|
+
const testHelpers_spec_2 = require("../../../testHelpers.spec");
|
|
12
13
|
const sinon = (0, sinon_1.createSandbox)();
|
|
13
14
|
describe('ConstStatement', () => {
|
|
14
|
-
let rootDir = (0, util_1.standardizePath) `${process.cwd()}/.tmp/rootDir`;
|
|
15
15
|
let program;
|
|
16
16
|
let parser;
|
|
17
|
-
let testTranspile = (0, testHelpers_spec_1.getTestTranspile)(() => [program, rootDir]);
|
|
18
|
-
let testGetTypedef = (0, testHelpers_spec_1.getTestGetTypedef)(() => [program, rootDir]);
|
|
17
|
+
let testTranspile = (0, testHelpers_spec_1.getTestTranspile)(() => [program, testHelpers_spec_2.rootDir]);
|
|
18
|
+
let testGetTypedef = (0, testHelpers_spec_1.getTestGetTypedef)(() => [program, testHelpers_spec_2.rootDir]);
|
|
19
19
|
beforeEach(() => {
|
|
20
|
-
program = new Program_1.Program({ rootDir: rootDir, sourceMap: true });
|
|
20
|
+
program = new Program_1.Program({ rootDir: testHelpers_spec_2.rootDir, sourceMap: true });
|
|
21
21
|
parser = new Parser_1.Parser();
|
|
22
22
|
});
|
|
23
23
|
afterEach(() => {
|
|
@@ -50,7 +50,7 @@ describe('ConstStatement', () => {
|
|
|
50
50
|
(0, chai_1.expect)(value).to.be.instanceof(Expression_1.LiteralExpression);
|
|
51
51
|
(0, chai_1.expect)((_b = value.token) === null || _b === void 0 ? void 0 : _b.text).to.eql('"abc"');
|
|
52
52
|
//ensure range is correct
|
|
53
|
-
(0, chai_1.expect)(statement.range).to.eql(util_1.
|
|
53
|
+
(0, chai_1.expect)(statement.range).to.eql(util_1.util.createRange(0, 0, 0, 21));
|
|
54
54
|
});
|
|
55
55
|
it('produces typedef', () => {
|
|
56
56
|
testGetTypedef(`
|
|
@@ -187,7 +187,7 @@ describe('ConstStatement', () => {
|
|
|
187
187
|
`);
|
|
188
188
|
(0, testHelpers_spec_1.expectCompletionsIncludes)(
|
|
189
189
|
// log(|)
|
|
190
|
-
program.getCompletions('source/main.bs', util_1.
|
|
190
|
+
program.getCompletions('source/main.bs', util_1.util.createPosition(3, 24)), [{
|
|
191
191
|
label: 'API_KEY',
|
|
192
192
|
kind: vscode_languageserver_protocol_1.CompletionItemKind.Constant
|
|
193
193
|
}]);
|
|
@@ -203,7 +203,7 @@ describe('ConstStatement', () => {
|
|
|
203
203
|
`);
|
|
204
204
|
(0, testHelpers_spec_1.expectCompletionsIncludes)(
|
|
205
205
|
// log(|)
|
|
206
|
-
program.getCompletions('source/main.bs', util_1.
|
|
206
|
+
program.getCompletions('source/main.bs', util_1.util.createPosition(5, 34)), [{
|
|
207
207
|
label: 'API_KEY',
|
|
208
208
|
kind: vscode_languageserver_protocol_1.CompletionItemKind.Constant
|
|
209
209
|
}]);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ConstStatement.spec.js","sourceRoot":"","sources":["../../../../src/parser/tests/statement/ConstStatement.spec.ts"],"names":[],"mappings":";;AAAA,gEAAkI;AAClI,
|
|
1
|
+
{"version":3,"file":"ConstStatement.spec.js","sourceRoot":"","sources":["../../../../src/parser/tests/statement/ConstStatement.spec.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,92 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
const chai_1 = require("chai");
|
|
4
|
+
const sinon_1 = require("sinon");
|
|
5
|
+
const reflection_1 = require("../../../astUtils/reflection");
|
|
6
|
+
const DiagnosticMessages_1 = require("../../../DiagnosticMessages");
|
|
7
|
+
const TokenKind_1 = require("../../../lexer/TokenKind");
|
|
8
|
+
const Program_1 = require("../../../Program");
|
|
9
|
+
const testHelpers_spec_1 = require("../../../testHelpers.spec");
|
|
10
|
+
const testHelpers_spec_2 = require("../../../testHelpers.spec");
|
|
11
|
+
const sinon = (0, sinon_1.createSandbox)();
|
|
12
|
+
describe('parser continue statements', () => {
|
|
13
|
+
let program;
|
|
14
|
+
let testTranspile = (0, testHelpers_spec_1.getTestTranspile)(() => [program, testHelpers_spec_2.rootDir]);
|
|
15
|
+
beforeEach(() => {
|
|
16
|
+
program = new Program_1.Program({ rootDir: testHelpers_spec_2.rootDir, sourceMap: true });
|
|
17
|
+
});
|
|
18
|
+
afterEach(() => {
|
|
19
|
+
sinon.restore();
|
|
20
|
+
program.dispose();
|
|
21
|
+
});
|
|
22
|
+
it('parses standalone statement properly', () => {
|
|
23
|
+
const file = program.setFile('source/main.bs', `
|
|
24
|
+
sub main()
|
|
25
|
+
for i = 0 to 10
|
|
26
|
+
continue for
|
|
27
|
+
end for
|
|
28
|
+
end sub
|
|
29
|
+
`);
|
|
30
|
+
(0, testHelpers_spec_1.expectZeroDiagnostics)(program);
|
|
31
|
+
(0, chai_1.expect)(file.ast.findChild(reflection_1.isContinueStatement)).to.exist;
|
|
32
|
+
});
|
|
33
|
+
it('flags incorrect loop type', () => {
|
|
34
|
+
const file = program.setFile('source/main.bs', `
|
|
35
|
+
sub main()
|
|
36
|
+
for i = 0 to 10
|
|
37
|
+
continue while
|
|
38
|
+
end for
|
|
39
|
+
for each item in [1, 2, 3]
|
|
40
|
+
continue while
|
|
41
|
+
end for
|
|
42
|
+
while true
|
|
43
|
+
continue for
|
|
44
|
+
end while
|
|
45
|
+
end sub
|
|
46
|
+
`);
|
|
47
|
+
program.validate();
|
|
48
|
+
(0, testHelpers_spec_1.expectDiagnostics)(program, [
|
|
49
|
+
DiagnosticMessages_1.DiagnosticMessages.expectedToken(TokenKind_1.TokenKind.For),
|
|
50
|
+
DiagnosticMessages_1.DiagnosticMessages.expectedToken(TokenKind_1.TokenKind.For),
|
|
51
|
+
DiagnosticMessages_1.DiagnosticMessages.expectedToken(TokenKind_1.TokenKind.While)
|
|
52
|
+
]);
|
|
53
|
+
(0, chai_1.expect)(file.ast.findChild(reflection_1.isContinueStatement)).to.exist;
|
|
54
|
+
});
|
|
55
|
+
it('flags missing `for` or `while` but still creates the node', () => {
|
|
56
|
+
const file = program.setFile('source/main.bs', `
|
|
57
|
+
sub main()
|
|
58
|
+
for i = 0 to 10
|
|
59
|
+
continue
|
|
60
|
+
end for
|
|
61
|
+
end sub
|
|
62
|
+
`);
|
|
63
|
+
(0, testHelpers_spec_1.expectDiagnostics)(program, [
|
|
64
|
+
DiagnosticMessages_1.DiagnosticMessages.expectedToken(TokenKind_1.TokenKind.While, TokenKind_1.TokenKind.For)
|
|
65
|
+
]);
|
|
66
|
+
(0, chai_1.expect)(file.ast.findChild(reflection_1.isContinueStatement)).to.exist;
|
|
67
|
+
});
|
|
68
|
+
it('detects `continue` used outside of a loop', () => {
|
|
69
|
+
program.setFile('source/main.bs', `
|
|
70
|
+
sub main()
|
|
71
|
+
continue for
|
|
72
|
+
end sub
|
|
73
|
+
`);
|
|
74
|
+
program.validate();
|
|
75
|
+
(0, testHelpers_spec_1.expectDiagnostics)(program, [
|
|
76
|
+
DiagnosticMessages_1.DiagnosticMessages.illegalContinueStatement().message
|
|
77
|
+
]);
|
|
78
|
+
});
|
|
79
|
+
it('transpiles properly', () => {
|
|
80
|
+
testTranspile(`
|
|
81
|
+
sub main()
|
|
82
|
+
while true
|
|
83
|
+
continue while
|
|
84
|
+
end while
|
|
85
|
+
for i = 0 to 10
|
|
86
|
+
continue for
|
|
87
|
+
end for
|
|
88
|
+
end sub
|
|
89
|
+
`);
|
|
90
|
+
});
|
|
91
|
+
});
|
|
92
|
+
//# sourceMappingURL=Continue.spec.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Continue.spec.js","sourceRoot":"","sources":["../../../../src/parser/tests/statement/Continue.spec.ts"],"names":[],"mappings":";;AAAA,+BAA8B;AAC9B,iCAAsC;AACtC,6DAAmE;AACnE,oEAAiE;AACjE,wDAAqD;AACrD,8CAA2C;AAC3C,gEAAuG;AACvG,gEAAoD;AAEpD,MAAM,KAAK,GAAG,IAAA,qBAAa,GAAE,CAAC;AAE9B,QAAQ,CAAC,4BAA4B,EAAE,GAAG,EAAE;IACxC,IAAI,OAAgB,CAAC;IACrB,IAAI,aAAa,GAAG,IAAA,mCAAgB,EAAC,GAAG,EAAE,CAAC,CAAC,OAAO,EAAE,0BAAO,CAAC,CAAC,CAAC;IAE/D,UAAU,CAAC,GAAG,EAAE;QACZ,OAAO,GAAG,IAAI,iBAAO,CAAC,EAAE,OAAO,EAAE,0BAAO,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IACjE,CAAC,CAAC,CAAC;IACH,SAAS,CAAC,GAAG,EAAE;QACX,KAAK,CAAC,OAAO,EAAE,CAAC;QAChB,OAAO,CAAC,OAAO,EAAE,CAAC;IACtB,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,sCAAsC,EAAE,GAAG,EAAE;QAC5C,MAAM,IAAI,GAAG,OAAO,CAAC,OAAO,CAAU,gBAAgB,EAAE;;;;;;SAMvD,CAAC,CAAC;QACH,IAAA,wCAAqB,EAAC,OAAO,CAAC,CAAC;QAC/B,IAAA,aAAM,EAAC,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,gCAAmB,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC;IAC7D,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,2BAA2B,EAAE,GAAG,EAAE;QACjC,MAAM,IAAI,GAAG,OAAO,CAAC,OAAO,CAAU,gBAAgB,EAAE;;;;;;;;;;;;SAYvD,CAAC,CAAC;QACH,OAAO,CAAC,QAAQ,EAAE,CAAC;QACnB,IAAA,oCAAiB,EAAC,OAAO,EAAE;YACvB,uCAAkB,CAAC,aAAa,CAAC,qBAAS,CAAC,GAAG,CAAC;YAC/C,uCAAkB,CAAC,aAAa,CAAC,qBAAS,CAAC,GAAG,CAAC;YAC/C,uCAAkB,CAAC,aAAa,CAAC,qBAAS,CAAC,KAAK,CAAC;SACpD,CAAC,CAAC;QACH,IAAA,aAAM,EAAC,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,gCAAmB,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC;IAC7D,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,2DAA2D,EAAE,GAAG,EAAE;QACjE,MAAM,IAAI,GAAG,OAAO,CAAC,OAAO,CAAU,gBAAgB,EAAE;;;;;;SAMvD,CAAC,CAAC;QACH,IAAA,oCAAiB,EAAC,OAAO,EAAE;YACvB,uCAAkB,CAAC,aAAa,CAAC,qBAAS,CAAC,KAAK,EAAE,qBAAS,CAAC,GAAG,CAAC;SACnE,CAAC,CAAC;QACH,IAAA,aAAM,EAAC,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,gCAAmB,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC;IAC7D,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,2CAA2C,EAAE,GAAG,EAAE;QACjD,OAAO,CAAC,OAAO,CAAU,gBAAgB,EAAE;;;;SAI1C,CAAC,CAAC;QACH,OAAO,CAAC,QAAQ,EAAE,CAAC;QACnB,IAAA,oCAAiB,EAAC,OAAO,EAAE;YACvB,uCAAkB,CAAC,wBAAwB,EAAE,CAAC,OAAO;SACxD,CAAC,CAAC;IACP,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,qBAAqB,EAAE,GAAG,EAAE;QAC3B,aAAa,CAAC;;;;;;;;;SASb,CAAC,CAAC;IACP,CAAC,CAAC,CAAC;AACP,CAAC,CAAC,CAAC"}
|
|
@@ -13,13 +13,13 @@ const vscode_languageserver_protocol_1 = require("vscode-languageserver-protocol
|
|
|
13
13
|
const visitors_1 = require("../../../astUtils/visitors");
|
|
14
14
|
const reflection_1 = require("../../../astUtils/reflection");
|
|
15
15
|
const vscode_uri_1 = require("vscode-uri");
|
|
16
|
+
const testHelpers_spec_2 = require("../../../testHelpers.spec");
|
|
16
17
|
const sinon = (0, sinon_1.createSandbox)();
|
|
17
18
|
describe('EnumStatement', () => {
|
|
18
|
-
let rootDir = (0, util_1.standardizePath) `${process.cwd()}/.tmp/rootDir`;
|
|
19
19
|
let program;
|
|
20
|
-
let testTranspile = (0, testHelpers_spec_1.getTestTranspile)(() => [program, rootDir]);
|
|
20
|
+
let testTranspile = (0, testHelpers_spec_1.getTestTranspile)(() => [program, testHelpers_spec_2.rootDir]);
|
|
21
21
|
beforeEach(() => {
|
|
22
|
-
program = new Program_1.Program({ rootDir: rootDir, sourceMap: true });
|
|
22
|
+
program = new Program_1.Program({ rootDir: testHelpers_spec_2.rootDir, sourceMap: true });
|
|
23
23
|
});
|
|
24
24
|
afterEach(() => {
|
|
25
25
|
sinon.restore();
|
|
@@ -159,7 +159,7 @@ describe('EnumStatement', () => {
|
|
|
159
159
|
(0, chai_1.expect)(parser.statements[1]).instanceof(Statement_1.EnumStatement);
|
|
160
160
|
});
|
|
161
161
|
it('allows enum in namespace', () => {
|
|
162
|
-
const
|
|
162
|
+
const file = program.setFile('source/types.bs', `
|
|
163
163
|
namespace entities
|
|
164
164
|
enum Person
|
|
165
165
|
name
|
|
@@ -169,9 +169,10 @@ describe('EnumStatement', () => {
|
|
|
169
169
|
enum Direction
|
|
170
170
|
up
|
|
171
171
|
end enum
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
(0,
|
|
172
|
+
`);
|
|
173
|
+
program.validate();
|
|
174
|
+
(0, testHelpers_spec_1.expectZeroDiagnostics)(program);
|
|
175
|
+
(0, chai_1.expect)(file.parser.references.enumStatements.map(x => x.fullName)).to.eql([
|
|
175
176
|
'entities.Person',
|
|
176
177
|
'Direction'
|
|
177
178
|
]);
|
|
@@ -189,7 +190,7 @@ describe('EnumStatement', () => {
|
|
|
189
190
|
`);
|
|
190
191
|
program.validate();
|
|
191
192
|
(0, testHelpers_spec_1.expectDiagnostics)(program, [Object.assign(Object.assign({}, DiagnosticMessages_1.DiagnosticMessages.duplicateEnumDeclaration('source', 'Direction')), { relatedInformation: [{
|
|
192
|
-
location: util_1.util.createLocation(vscode_uri_1.URI.file((0, util_1.standardizePath) `${rootDir}/source/main.bs`).toString(), util_1.util.createRange(1, 21, 1, 30)),
|
|
193
|
+
location: util_1.util.createLocation(vscode_uri_1.URI.file((0, util_1.standardizePath) `${testHelpers_spec_2.rootDir}/source/main.bs`).toString(), util_1.util.createRange(1, 21, 1, 30)),
|
|
193
194
|
message: 'Enum declared here'
|
|
194
195
|
}] })]);
|
|
195
196
|
});
|
|
@@ -206,7 +207,7 @@ describe('EnumStatement', () => {
|
|
|
206
207
|
`);
|
|
207
208
|
program.validate();
|
|
208
209
|
(0, testHelpers_spec_1.expectDiagnostics)(program, [Object.assign(Object.assign({}, DiagnosticMessages_1.DiagnosticMessages.duplicateEnumDeclaration('source', 'Direction')), { relatedInformation: [{
|
|
209
|
-
location: util_1.util.createLocation(vscode_uri_1.URI.file((0, util_1.standardizePath) `${rootDir}/source/lib.bs`).toString(), util_1.util.createRange(1, 21, 1, 30)),
|
|
210
|
+
location: util_1.util.createLocation(vscode_uri_1.URI.file((0, util_1.standardizePath) `${testHelpers_spec_2.rootDir}/source/lib.bs`).toString(), util_1.util.createRange(1, 21, 1, 30)),
|
|
210
211
|
message: 'Enum declared here'
|
|
211
212
|
}] })]);
|
|
212
213
|
});
|
|
@@ -299,6 +300,16 @@ describe('EnumStatement', () => {
|
|
|
299
300
|
program.validate();
|
|
300
301
|
(0, testHelpers_spec_1.expectDiagnostics)(program, [Object.assign(Object.assign({}, DiagnosticMessages_1.DiagnosticMessages.enumValueMustBeType('integer')), { range: util_1.util.createRange(2, 33, 2, 35) })]);
|
|
301
302
|
});
|
|
303
|
+
it('considers -1 to be an integer', () => {
|
|
304
|
+
program.setFile('source/main.bs', `
|
|
305
|
+
enum AppConfig
|
|
306
|
+
alpha = 1
|
|
307
|
+
beta = -1
|
|
308
|
+
end enum
|
|
309
|
+
`);
|
|
310
|
+
program.validate();
|
|
311
|
+
(0, testHelpers_spec_1.expectZeroDiagnostics)(program);
|
|
312
|
+
});
|
|
302
313
|
it('flags missing value for string enum where string is not first item', () => {
|
|
303
314
|
program.setFile('source/main.bs', `
|
|
304
315
|
enum Direction
|
|
@@ -412,6 +423,20 @@ describe('EnumStatement', () => {
|
|
|
412
423
|
});
|
|
413
424
|
});
|
|
414
425
|
describe('transpile', () => {
|
|
426
|
+
it('transpiles negative number', () => {
|
|
427
|
+
testTranspile(`
|
|
428
|
+
sub main()
|
|
429
|
+
print Direction.up
|
|
430
|
+
end sub
|
|
431
|
+
enum Direction
|
|
432
|
+
up = -1
|
|
433
|
+
end enum
|
|
434
|
+
`, `
|
|
435
|
+
sub main()
|
|
436
|
+
print -1
|
|
437
|
+
end sub
|
|
438
|
+
`, undefined, undefined, false);
|
|
439
|
+
});
|
|
415
440
|
it('includes original value when no value could be computed', () => {
|
|
416
441
|
testTranspile(`
|
|
417
442
|
sub main()
|
|
@@ -659,6 +684,7 @@ describe('EnumStatement', () => {
|
|
|
659
684
|
end enum
|
|
660
685
|
end namespace
|
|
661
686
|
`);
|
|
687
|
+
program.validate();
|
|
662
688
|
// enums.direction.|down
|
|
663
689
|
(0, testHelpers_spec_1.expectCompletionsIncludes)(program.getCompletions('source/main.bs', util_1.util.createPosition(2, 36)), [{
|
|
664
690
|
label: 'up',
|
|
@@ -696,6 +722,7 @@ describe('EnumStatement', () => {
|
|
|
696
722
|
end enum
|
|
697
723
|
end namespace
|
|
698
724
|
`);
|
|
725
|
+
program.validate();
|
|
699
726
|
//should NOT find Direction because it's not directly available at the top level (you need to go through `enums.` to get at it)
|
|
700
727
|
// dire|ction.down
|
|
701
728
|
(0, testHelpers_spec_1.expectCompletionsExcludes)(program.getCompletions('source/main.bs', util_1.util.createPosition(2, 24)), [{
|