brighterscript 0.52.3 → 0.53.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 +11 -0
- package/dist/DiagnosticMessages.d.ts +8 -3
- package/dist/DiagnosticMessages.js +8 -3
- package/dist/DiagnosticMessages.js.map +1 -1
- package/dist/LanguageServer.js +27 -6
- package/dist/LanguageServer.js.map +1 -1
- package/dist/Program.d.ts +4 -3
- package/dist/Program.js +36 -5
- package/dist/Program.js.map +1 -1
- package/dist/Scope.d.ts +24 -9
- package/dist/Scope.js +96 -50
- package/dist/Scope.js.map +1 -1
- package/dist/SymbolTable.d.ts +62 -0
- package/dist/SymbolTable.js +101 -0
- package/dist/SymbolTable.js.map +1 -0
- package/dist/astUtils/reflection.d.ts +2 -1
- package/dist/astUtils/reflection.js +6 -2
- package/dist/astUtils/reflection.js.map +1 -1
- package/dist/astUtils/visitors.d.ts +2 -1
- package/dist/astUtils/visitors.js.map +1 -1
- package/dist/bscPlugin/codeActions/CodeActionsProcessor.d.ts +1 -1
- package/dist/bscPlugin/codeActions/CodeActionsProcessor.js +10 -5
- package/dist/bscPlugin/codeActions/CodeActionsProcessor.js.map +1 -1
- package/dist/bscPlugin/transpile/BrsFilePreTranspileProcessor.d.ts +7 -1
- package/dist/bscPlugin/transpile/BrsFilePreTranspileProcessor.js +81 -22
- package/dist/bscPlugin/transpile/BrsFilePreTranspileProcessor.js.map +1 -1
- package/dist/bscPlugin/validation/BrsFileValidator.d.ts +5 -1
- package/dist/bscPlugin/validation/BrsFileValidator.js +28 -2
- package/dist/bscPlugin/validation/BrsFileValidator.js.map +1 -1
- package/dist/bscPlugin/validation/ScopeValidator.d.ts +18 -3
- package/dist/bscPlugin/validation/ScopeValidator.js +137 -47
- package/dist/bscPlugin/validation/ScopeValidator.js.map +1 -1
- package/dist/files/BrsFile.Class.spec.js +10 -10
- package/dist/files/BrsFile.Class.spec.js.map +1 -1
- package/dist/files/BrsFile.d.ts +10 -4
- package/dist/files/BrsFile.js +68 -21
- package/dist/files/BrsFile.js.map +1 -1
- package/dist/files/BrsFile.spec.js +120 -91
- package/dist/files/BrsFile.spec.js.map +1 -1
- package/dist/files/tests/imports.spec.js +1 -1
- package/dist/files/tests/imports.spec.js.map +1 -1
- package/dist/files/tests/optionalChaning.spec.js +20 -16
- package/dist/files/tests/optionalChaning.spec.js.map +1 -1
- package/dist/globalCallables.js +3 -0
- package/dist/globalCallables.js.map +1 -1
- package/dist/lexer/Lexer.spec.js +7 -0
- package/dist/lexer/Lexer.spec.js.map +1 -1
- package/dist/lexer/TokenKind.d.ts +1 -0
- package/dist/lexer/TokenKind.js +7 -3
- package/dist/lexer/TokenKind.js.map +1 -1
- package/dist/parser/Expression.d.ts +4 -1
- package/dist/parser/Expression.js +8 -2
- package/dist/parser/Expression.js.map +1 -1
- package/dist/parser/Parser.Class.spec.js +1 -1
- package/dist/parser/Parser.d.ts +13 -2
- package/dist/parser/Parser.js +137 -60
- package/dist/parser/Parser.js.map +1 -1
- package/dist/parser/Statement.d.ts +29 -1
- package/dist/parser/Statement.js +66 -4
- package/dist/parser/Statement.js.map +1 -1
- package/dist/parser/tests/expression/NullCoalescenceExpression.spec.js +73 -31
- package/dist/parser/tests/expression/NullCoalescenceExpression.spec.js.map +1 -1
- package/dist/parser/tests/expression/TemplateStringExpression.spec.js +148 -47
- package/dist/parser/tests/expression/TemplateStringExpression.spec.js.map +1 -1
- package/dist/parser/tests/expression/TernaryExpression.spec.js +219 -37
- package/dist/parser/tests/expression/TernaryExpression.spec.js.map +1 -1
- package/dist/parser/tests/statement/ConstStatement.spec.d.ts +1 -0
- package/dist/parser/tests/statement/ConstStatement.spec.js +182 -0
- package/dist/parser/tests/statement/ConstStatement.spec.js.map +1 -0
- package/dist/parser/tests/statement/Enum.spec.js +17 -2
- package/dist/parser/tests/statement/Enum.spec.js.map +1 -1
- package/dist/parser/tests/statement/PrintStatement.spec.js +72 -57
- package/dist/parser/tests/statement/PrintStatement.spec.js.map +1 -1
- package/dist/types/DynamicType.d.ts +1 -0
- package/dist/types/DynamicType.js +1 -0
- package/dist/types/DynamicType.js.map +1 -1
- package/dist/util.d.ts +15 -5
- package/dist/util.js +51 -5
- package/dist/util.js.map +1 -1
- package/dist/validators/ClassValidator.js +4 -6
- package/dist/validators/ClassValidator.js.map +1 -1
- package/package.json +1 -1
|
@@ -1,38 +1,97 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.BrsFilePreTranspileProcessor = void 0;
|
|
4
|
-
const
|
|
4
|
+
const creators_1 = require("../../astUtils/creators");
|
|
5
|
+
const reflection_1 = require("../../astUtils/reflection");
|
|
6
|
+
const TokenKind_1 = require("../../lexer/TokenKind");
|
|
7
|
+
const Expression_1 = require("../../parser/Expression");
|
|
8
|
+
const Parser_1 = require("../../parser/Parser");
|
|
5
9
|
const util_1 = require("../../util");
|
|
6
10
|
class BrsFilePreTranspileProcessor {
|
|
7
11
|
constructor(event) {
|
|
8
12
|
this.event = event;
|
|
9
13
|
}
|
|
10
14
|
process() {
|
|
11
|
-
this.
|
|
15
|
+
if ((0, reflection_1.isBrsFile)(this.event.file)) {
|
|
16
|
+
this.iterateExpressions();
|
|
17
|
+
}
|
|
12
18
|
}
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
19
|
+
iterateExpressions() {
|
|
20
|
+
const scope = this.event.program.getFirstScopeForFile(this.event.file);
|
|
21
|
+
for (let expression of this.event.file.parser.references.expressions) {
|
|
22
|
+
if (expression) {
|
|
23
|
+
this.processExpression(expression, scope);
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
/**
|
|
28
|
+
* Given a string optionally separated by dots, find an enum related to it.
|
|
29
|
+
* For example, all of these would return the enum: `SomeNamespace.SomeEnum.SomeMember`, SomeEnum.SomeMember, `SomeEnum`
|
|
30
|
+
*/
|
|
31
|
+
getEnumInfo(name, containingNamespace, scope) {
|
|
32
|
+
//look for the enum directly
|
|
33
|
+
let result = scope.getEnumFileLink(name, containingNamespace);
|
|
34
|
+
if (result) {
|
|
35
|
+
return {
|
|
36
|
+
enum: result.item
|
|
37
|
+
};
|
|
38
|
+
}
|
|
39
|
+
//assume we've been given the enum.member syntax, so pop the member and try again
|
|
40
|
+
const parts = name.split('.');
|
|
41
|
+
const memberName = parts.pop();
|
|
42
|
+
result = scope.getEnumMap().get(parts.join('.'));
|
|
43
|
+
if (result) {
|
|
44
|
+
const value = result.item.getMemberValue(memberName);
|
|
45
|
+
return {
|
|
46
|
+
enum: result.item,
|
|
47
|
+
value: new Expression_1.LiteralExpression((0, creators_1.createToken)(
|
|
48
|
+
//just use float literal for now...it will transpile properly with any literal value
|
|
49
|
+
value.startsWith('"') ? TokenKind_1.TokenKind.StringLiteral : TokenKind_1.TokenKind.FloatLiteral, value))
|
|
50
|
+
};
|
|
20
51
|
}
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
52
|
+
}
|
|
53
|
+
processExpression(expression, scope) {
|
|
54
|
+
var _a, _b, _c, _d;
|
|
55
|
+
let containingNamespace = (_a = this.event.file.getNamespaceStatementForPosition(expression.range.start)) === null || _a === void 0 ? void 0 : _a.getName(Parser_1.ParseMode.BrighterScript);
|
|
56
|
+
const parts = util_1.default.splitExpression(expression);
|
|
57
|
+
const processedNames = [];
|
|
58
|
+
for (let i = 0; i < parts.length; i++) {
|
|
59
|
+
const part = parts[i];
|
|
60
|
+
let entityName;
|
|
61
|
+
if ((0, reflection_1.isVariableExpression)(part) || (0, reflection_1.isDottedGetExpression)(part)) {
|
|
62
|
+
processedNames.push((_c = (_b = part === null || part === void 0 ? void 0 : part.name) === null || _b === void 0 ? void 0 : _b.text) === null || _c === void 0 ? void 0 : _c.toLocaleLowerCase());
|
|
63
|
+
entityName = processedNames.join('.');
|
|
64
|
+
}
|
|
65
|
+
else {
|
|
66
|
+
return;
|
|
67
|
+
}
|
|
68
|
+
let value;
|
|
69
|
+
//did we find a const? transpile the value
|
|
70
|
+
let constStatement = (_d = scope.getConstFileLink(entityName, containingNamespace)) === null || _d === void 0 ? void 0 : _d.item;
|
|
71
|
+
if (constStatement) {
|
|
72
|
+
value = constStatement.value;
|
|
73
|
+
}
|
|
74
|
+
else {
|
|
75
|
+
//did we find an enum member? transpile that
|
|
76
|
+
let enumInfo = this.getEnumInfo(entityName, containingNamespace, scope);
|
|
77
|
+
if (enumInfo === null || enumInfo === void 0 ? void 0 : enumInfo.value) {
|
|
78
|
+
value = enumInfo.value;
|
|
34
79
|
}
|
|
35
80
|
}
|
|
81
|
+
if (value) {
|
|
82
|
+
//override the transpile for this item.
|
|
83
|
+
this.event.editor.setProperty(part, 'transpile', (state) => {
|
|
84
|
+
if ((0, reflection_1.isLiteralExpression)(value)) {
|
|
85
|
+
return value.transpile(state);
|
|
86
|
+
}
|
|
87
|
+
else {
|
|
88
|
+
//wrap non-literals with parens to prevent on-device compile errors
|
|
89
|
+
return ['(', ...value.transpile(state), ')'];
|
|
90
|
+
}
|
|
91
|
+
});
|
|
92
|
+
//we are finished handling this expression
|
|
93
|
+
return;
|
|
94
|
+
}
|
|
36
95
|
}
|
|
37
96
|
}
|
|
38
97
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"BrsFilePreTranspileProcessor.js","sourceRoot":"","sources":["../../../src/bscPlugin/transpile/BrsFilePreTranspileProcessor.ts"],"names":[],"mappings":";;;AAAA,
|
|
1
|
+
{"version":3,"file":"BrsFilePreTranspileProcessor.js","sourceRoot":"","sources":["../../../src/bscPlugin/transpile/BrsFilePreTranspileProcessor.ts"],"names":[],"mappings":"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"}
|
|
@@ -4,6 +4,10 @@ export declare class BrsFileValidator {
|
|
|
4
4
|
event: OnFileValidateEvent<BrsFile>;
|
|
5
5
|
constructor(event: OnFileValidateEvent<BrsFile>);
|
|
6
6
|
process(): void;
|
|
7
|
-
validateEnumDeclarations
|
|
7
|
+
private validateEnumDeclarations;
|
|
8
8
|
private validateEnumValueTypes;
|
|
9
|
+
/**
|
|
10
|
+
* Find statements defined at the top level (or inside a namespace body) that are not allowed to be there
|
|
11
|
+
*/
|
|
12
|
+
private flagTopLevelStatements;
|
|
9
13
|
}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.BrsFileValidator = void 0;
|
|
4
|
-
const
|
|
4
|
+
const reflection_1 = require("../../astUtils/reflection");
|
|
5
5
|
const DiagnosticMessages_1 = require("../../DiagnosticMessages");
|
|
6
6
|
const TokenKind_1 = require("../../lexer/TokenKind");
|
|
7
7
|
class BrsFileValidator {
|
|
@@ -10,6 +10,7 @@ class BrsFileValidator {
|
|
|
10
10
|
}
|
|
11
11
|
process() {
|
|
12
12
|
this.validateEnumDeclarations();
|
|
13
|
+
this.flagTopLevelStatements();
|
|
13
14
|
}
|
|
14
15
|
validateEnumDeclarations() {
|
|
15
16
|
var _a, _b, _c, _d, _e;
|
|
@@ -43,7 +44,7 @@ class BrsFileValidator {
|
|
|
43
44
|
//is integer enum, has value, that value type is not integer
|
|
44
45
|
(enumValueKind === TokenKind_1.TokenKind.IntegerLiteral && memberValueKind && memberValueKind !== enumValueKind) ||
|
|
45
46
|
//has value, that value is not a literal
|
|
46
|
-
(member.value && !(0,
|
|
47
|
+
(member.value && !(0, reflection_1.isLiteralExpression)(member.value))) {
|
|
47
48
|
diagnostics.push(Object.assign(Object.assign({ file: this.event.file }, DiagnosticMessages_1.DiagnosticMessages.enumValueMustBeType(enumValueKind.replace(/literal$/i, '').toLowerCase())), { range: (_d = ((_c = member.value) !== null && _c !== void 0 ? _c : member)) === null || _d === void 0 ? void 0 : _d.range }));
|
|
48
49
|
}
|
|
49
50
|
//is non integer value
|
|
@@ -61,6 +62,31 @@ class BrsFileValidator {
|
|
|
61
62
|
}
|
|
62
63
|
}
|
|
63
64
|
}
|
|
65
|
+
/**
|
|
66
|
+
* Find statements defined at the top level (or inside a namespace body) that are not allowed to be there
|
|
67
|
+
*/
|
|
68
|
+
flagTopLevelStatements() {
|
|
69
|
+
const statements = [...this.event.file.ast.statements];
|
|
70
|
+
while (statements.length > 0) {
|
|
71
|
+
const statement = statements.pop();
|
|
72
|
+
if ((0, reflection_1.isNamespaceStatement)(statement)) {
|
|
73
|
+
statements.push(...statement.body.statements);
|
|
74
|
+
}
|
|
75
|
+
else {
|
|
76
|
+
//only allow these statement types
|
|
77
|
+
if (!(0, reflection_1.isFunctionStatement)(statement) &&
|
|
78
|
+
!(0, reflection_1.isClassStatement)(statement) &&
|
|
79
|
+
!(0, reflection_1.isEnumStatement)(statement) &&
|
|
80
|
+
!(0, reflection_1.isInterfaceStatement)(statement) &&
|
|
81
|
+
!(0, reflection_1.isCommentStatement)(statement) &&
|
|
82
|
+
!(0, reflection_1.isLibraryStatement)(statement) &&
|
|
83
|
+
!(0, reflection_1.isImportStatement)(statement) &&
|
|
84
|
+
!(0, reflection_1.isConstStatement)(statement)) {
|
|
85
|
+
this.event.file.addDiagnostic(Object.assign(Object.assign({}, DiagnosticMessages_1.DiagnosticMessages.unexpectedStatementOutsideFunction()), { range: statement.range }));
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
}
|
|
64
90
|
}
|
|
65
91
|
exports.BrsFileValidator = BrsFileValidator;
|
|
66
92
|
//# sourceMappingURL=BrsFileValidator.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"BrsFileValidator.js","sourceRoot":"","sources":["../../../src/bscPlugin/validation/BrsFileValidator.ts"],"names":[],"mappings":";;;AAAA,
|
|
1
|
+
{"version":3,"file":"BrsFileValidator.js","sourceRoot":"","sources":["../../../src/bscPlugin/validation/BrsFileValidator.ts"],"names":[],"mappings":"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"}
|
|
@@ -13,11 +13,26 @@ export declare class ScopeValidator {
|
|
|
13
13
|
* for diagnostics where scope isn't important. (i.e. CreateObject validations)
|
|
14
14
|
*/
|
|
15
15
|
private addDiagnosticOnce;
|
|
16
|
-
private
|
|
16
|
+
private onceCache;
|
|
17
|
+
private addDiagnostic;
|
|
17
18
|
/**
|
|
18
|
-
*
|
|
19
|
+
* Add a diagnostic (to the first scope) that will have `relatedInformation` for each affected scope
|
|
20
|
+
*/
|
|
21
|
+
private addMultiScopeDiagnostic;
|
|
22
|
+
/**
|
|
23
|
+
* Find the closest symbol table for the given position
|
|
24
|
+
*/
|
|
25
|
+
private getSymbolTable;
|
|
26
|
+
private multiScopeCache;
|
|
27
|
+
private iterateExpressions;
|
|
28
|
+
/**
|
|
29
|
+
* Given a string optionally separated by dots, find an enum related to it.
|
|
30
|
+
* For example, all of these would return the enum: `SomeNamespace.SomeEnum.SomeMember`, SomeEnum.SomeMember, `SomeEnum`
|
|
31
|
+
*/
|
|
32
|
+
private getEnum;
|
|
33
|
+
/**
|
|
34
|
+
* Flag duplicate enums
|
|
19
35
|
*/
|
|
20
|
-
validateEnumUsage(event: OnScopeValidateEvent): void;
|
|
21
36
|
private detectDuplicateEnums;
|
|
22
37
|
/**
|
|
23
38
|
* Validate every function call to `CreateObject`.
|
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.ScopeValidator = void 0;
|
|
4
|
-
const vscode_languageserver_1 = require("vscode-languageserver");
|
|
5
4
|
const vscode_uri_1 = require("vscode-uri");
|
|
6
5
|
const reflection_1 = require("../../astUtils/reflection");
|
|
7
6
|
const Cache_1 = require("../../Cache");
|
|
@@ -21,16 +20,20 @@ const platformComponentNames = new Set(Object.values(roku_types_1.components).ma
|
|
|
21
20
|
class ScopeValidator {
|
|
22
21
|
constructor() {
|
|
23
22
|
this.events = [];
|
|
24
|
-
this.
|
|
23
|
+
this.onceCache = new Cache_1.Cache();
|
|
24
|
+
this.multiScopeCache = new Cache_1.Cache();
|
|
25
25
|
}
|
|
26
26
|
processEvent(event) {
|
|
27
27
|
this.events.push(event);
|
|
28
|
-
|
|
28
|
+
event.scope.linkSymbolTable();
|
|
29
29
|
this.detectDuplicateEnums(event);
|
|
30
30
|
this.validateCreateObjectCalls(event);
|
|
31
|
+
this.iterateExpressions(event);
|
|
32
|
+
event.scope.unlinkSymbolTable();
|
|
31
33
|
}
|
|
32
34
|
reset() {
|
|
33
|
-
this.
|
|
35
|
+
this.onceCache.clear();
|
|
36
|
+
this.multiScopeCache.clear();
|
|
34
37
|
this.events = [];
|
|
35
38
|
}
|
|
36
39
|
/**
|
|
@@ -38,62 +41,149 @@ class ScopeValidator {
|
|
|
38
41
|
* for diagnostics where scope isn't important. (i.e. CreateObject validations)
|
|
39
42
|
*/
|
|
40
43
|
addDiagnosticOnce(event, diagnostic) {
|
|
41
|
-
|
|
42
|
-
if (!this.cache.has(key)) {
|
|
43
|
-
this.cache.set(key, true);
|
|
44
|
+
this.onceCache.getOrAdd(`${diagnostic.code}-${diagnostic.message}-${util_1.default.rangeToString(diagnostic.range)}`, () => {
|
|
44
45
|
event.scope.addDiagnostics([diagnostic]);
|
|
46
|
+
return true;
|
|
47
|
+
});
|
|
48
|
+
}
|
|
49
|
+
addDiagnostic(event, diagnostic) {
|
|
50
|
+
event.scope.addDiagnostics([diagnostic]);
|
|
51
|
+
}
|
|
52
|
+
/**
|
|
53
|
+
* Add a diagnostic (to the first scope) that will have `relatedInformation` for each affected scope
|
|
54
|
+
*/
|
|
55
|
+
addMultiScopeDiagnostic(event, diagnostic, message = 'Not defined in scope') {
|
|
56
|
+
var _a;
|
|
57
|
+
diagnostic = this.multiScopeCache.getOrAdd(`${diagnostic.code}-${diagnostic.message}-${util_1.default.rangeToString(diagnostic.range)}`, () => {
|
|
58
|
+
if (!diagnostic.relatedInformation) {
|
|
59
|
+
diagnostic.relatedInformation = [];
|
|
60
|
+
}
|
|
61
|
+
this.addDiagnostic(event, diagnostic);
|
|
62
|
+
return diagnostic;
|
|
63
|
+
});
|
|
64
|
+
const info = {
|
|
65
|
+
message: `${message} '${event.scope.name}'`
|
|
66
|
+
};
|
|
67
|
+
if ((0, reflection_1.isXmlScope)(event.scope) && ((_a = event.scope.xmlFile) === null || _a === void 0 ? void 0 : _a.srcPath)) {
|
|
68
|
+
info.location = util_1.default.createLocation(vscode_uri_1.URI.file(event.scope.xmlFile.srcPath).toString(), util_1.default.createRange(0, 0, 0, 10));
|
|
45
69
|
}
|
|
70
|
+
else {
|
|
71
|
+
info.location = util_1.default.createLocation(vscode_uri_1.URI.file(diagnostic.file.srcPath).toString(), diagnostic.range);
|
|
72
|
+
}
|
|
73
|
+
diagnostic.relatedInformation.push(info);
|
|
46
74
|
}
|
|
47
75
|
/**
|
|
48
|
-
* Find
|
|
76
|
+
* Find the closest symbol table for the given position
|
|
49
77
|
*/
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
return;
|
|
78
|
+
getSymbolTable(scope, file, position) {
|
|
79
|
+
var _a, _b;
|
|
80
|
+
let symbolTable;
|
|
81
|
+
symbolTable = (_a = file.getFunctionScopeAtPosition(position)) === null || _a === void 0 ? void 0 : _a.func.symbolTable;
|
|
82
|
+
if (!symbolTable) {
|
|
83
|
+
symbolTable = (_b = file.getNamespaceStatementForPosition(position)) === null || _b === void 0 ? void 0 : _b.symbolTable;
|
|
57
84
|
}
|
|
85
|
+
if (!symbolTable) {
|
|
86
|
+
symbolTable = scope.symbolTable;
|
|
87
|
+
}
|
|
88
|
+
return symbolTable;
|
|
89
|
+
}
|
|
90
|
+
iterateExpressions(event) {
|
|
91
|
+
const { scope } = event;
|
|
58
92
|
event.scope.enumerateOwnFiles((file) => {
|
|
59
|
-
var _a;
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
93
|
+
var _a, _b, _c, _d, _e;
|
|
94
|
+
if ((0, reflection_1.isBrsFile)(file)) {
|
|
95
|
+
const expressions = [
|
|
96
|
+
...file.parser.references.expressions,
|
|
97
|
+
//all class "extends <whatever>" expressions
|
|
98
|
+
...file.parser.references.classStatements.map(x => { var _a; return (_a = x.parentClassName) === null || _a === void 0 ? void 0 : _a.expression; }),
|
|
99
|
+
//all interface "extends <whatever>" expressions
|
|
100
|
+
...file.parser.references.interfaceStatements.map(x => { var _a; return (_a = x.parentInterfaceName) === null || _a === void 0 ? void 0 : _a.expression; })
|
|
101
|
+
];
|
|
102
|
+
outer: for (let referenceExpression of expressions) {
|
|
103
|
+
if (!referenceExpression) {
|
|
104
|
+
continue;
|
|
105
|
+
}
|
|
106
|
+
let expression;
|
|
107
|
+
//lift the callee from call expressions to handle namespaced function calls
|
|
108
|
+
if ((0, reflection_1.isCallExpression)(referenceExpression)) {
|
|
109
|
+
expression = referenceExpression.callee;
|
|
110
|
+
}
|
|
111
|
+
else if ((0, reflection_1.isNewExpression)(referenceExpression)) {
|
|
112
|
+
expression = referenceExpression.call.callee;
|
|
113
|
+
}
|
|
114
|
+
else {
|
|
115
|
+
expression = referenceExpression;
|
|
116
|
+
}
|
|
76
117
|
const tokens = util_1.default.getAllDottedGetParts(expression);
|
|
77
|
-
if (tokens) {
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
//is
|
|
85
|
-
if (
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
118
|
+
if ((tokens === null || tokens === void 0 ? void 0 : tokens.length) > 0) {
|
|
119
|
+
const symbolTable = this.getSymbolTable(scope, file, tokens[0].range.start); //flag all unknown left-most variables
|
|
120
|
+
if (!symbolTable.hasSymbol((_a = tokens[0]) === null || _a === void 0 ? void 0 : _a.text)) {
|
|
121
|
+
this.addMultiScopeDiagnostic(event, Object.assign(Object.assign({ file: file }, DiagnosticMessages_1.DiagnosticMessages.cannotFindName(tokens[0].text)), { range: tokens[0].range }));
|
|
122
|
+
//skip to the next expression
|
|
123
|
+
continue;
|
|
124
|
+
}
|
|
125
|
+
//at this point, we know the first item is a known symbol. find unknown namespace parts after the first part
|
|
126
|
+
if (tokens.length > 1) {
|
|
127
|
+
const firstNamespacePart = (_b = tokens.shift().text) === null || _b === void 0 ? void 0 : _b.toLowerCase();
|
|
128
|
+
const namespaceContainer = scope.namespaceLookup.get(firstNamespacePart);
|
|
129
|
+
const enumStatement = scope.getEnum(firstNamespacePart);
|
|
130
|
+
//if this isn't a namespace, skip it
|
|
131
|
+
if (!namespaceContainer && !enumStatement) {
|
|
132
|
+
continue;
|
|
133
|
+
}
|
|
134
|
+
//catch unknown namespace items
|
|
135
|
+
const processedNames = [firstNamespacePart];
|
|
136
|
+
for (const token of tokens !== null && tokens !== void 0 ? tokens : []) {
|
|
137
|
+
processedNames.push((_c = token.text) === null || _c === void 0 ? void 0 : _c.toLowerCase());
|
|
138
|
+
const entityName = processedNames.join('.');
|
|
139
|
+
//if this is an enum member, stop validating here to prevent errors further down the chain
|
|
140
|
+
if (scope.getEnumMemberMap().has(entityName)) {
|
|
141
|
+
break;
|
|
142
|
+
}
|
|
143
|
+
if (!scope.getEnumMap().has(entityName) &&
|
|
144
|
+
!scope.getClassMap().has(entityName) &&
|
|
145
|
+
!scope.getConstMap().has(entityName) &&
|
|
146
|
+
!scope.getCallableByName(entityName) &&
|
|
147
|
+
!scope.namespaceLookup.has(entityName)) {
|
|
148
|
+
//if this looks like an enum, provide a nicer error message
|
|
149
|
+
const theEnum = (_d = this.getEnum(scope, entityName)) === null || _d === void 0 ? void 0 : _d.item;
|
|
150
|
+
if (theEnum) {
|
|
151
|
+
this.addMultiScopeDiagnostic(event, Object.assign(Object.assign({ file: file }, DiagnosticMessages_1.DiagnosticMessages.unknownEnumValue((_e = token.text) === null || _e === void 0 ? void 0 : _e.split('.').pop(), theEnum.fullName)), { range: tokens[tokens.length - 1].range, relatedInformation: [{
|
|
152
|
+
message: 'Enum declared here',
|
|
153
|
+
location: util_1.default.createLocation(vscode_uri_1.URI.file(file.srcPath).toString(), theEnum.tokens.name.range)
|
|
154
|
+
}] }));
|
|
155
|
+
}
|
|
156
|
+
else {
|
|
157
|
+
this.addMultiScopeDiagnostic(event, Object.assign(Object.assign({}, DiagnosticMessages_1.DiagnosticMessages.cannotFindName(token.text)), { range: token.range, file: file }));
|
|
158
|
+
}
|
|
159
|
+
//no need to add another diagnostic for future unknown items
|
|
160
|
+
continue outer;
|
|
161
|
+
}
|
|
162
|
+
}
|
|
90
163
|
}
|
|
91
164
|
}
|
|
92
165
|
}
|
|
93
166
|
}
|
|
94
167
|
});
|
|
95
|
-
event.scope.addDiagnostics(diagnostics);
|
|
96
168
|
}
|
|
169
|
+
/**
|
|
170
|
+
* Given a string optionally separated by dots, find an enum related to it.
|
|
171
|
+
* For example, all of these would return the enum: `SomeNamespace.SomeEnum.SomeMember`, SomeEnum.SomeMember, `SomeEnum`
|
|
172
|
+
*/
|
|
173
|
+
getEnum(scope, name) {
|
|
174
|
+
//look for the enum directly
|
|
175
|
+
let result = scope.getEnumMap().get(name);
|
|
176
|
+
//assume we've been given the enum.member syntax, so pop the member and try again
|
|
177
|
+
if (!result) {
|
|
178
|
+
const parts = name.split('.');
|
|
179
|
+
parts.pop();
|
|
180
|
+
result = scope.getEnumMap().get(parts.join('.'));
|
|
181
|
+
}
|
|
182
|
+
return result;
|
|
183
|
+
}
|
|
184
|
+
/**
|
|
185
|
+
* Flag duplicate enums
|
|
186
|
+
*/
|
|
97
187
|
detectDuplicateEnums(event) {
|
|
98
188
|
const diagnostics = [];
|
|
99
189
|
const enumLocationsByName = new Cache_1.Cache();
|
|
@@ -118,7 +208,7 @@ class ScopeValidator {
|
|
|
118
208
|
for (const duplicateEnumInfo of enumLocations) {
|
|
119
209
|
diagnostics.push(Object.assign(Object.assign({}, DiagnosticMessages_1.DiagnosticMessages.duplicateEnumDeclaration(event.scope.name, fullName)), { file: duplicateEnumInfo.file, range: duplicateEnumInfo.statement.tokens.name.range, relatedInformation: [{
|
|
120
210
|
message: 'Enum declared here',
|
|
121
|
-
location:
|
|
211
|
+
location: util_1.default.createLocation(vscode_uri_1.URI.file(primaryEnum.file.srcPath).toString(), primaryEnum.statement.tokens.name.range)
|
|
122
212
|
}] }));
|
|
123
213
|
}
|
|
124
214
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ScopeValidator.js","sourceRoot":"","sources":["../../../src/bscPlugin/validation/ScopeValidator.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"ScopeValidator.js","sourceRoot":"","sources":["../../../src/bscPlugin/validation/ScopeValidator.ts"],"names":[],"mappings":"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"}
|
|
@@ -1016,7 +1016,7 @@ describe('BrsFile BrighterScript classes', () => {
|
|
|
1016
1016
|
end namespace
|
|
1017
1017
|
`);
|
|
1018
1018
|
program.validate();
|
|
1019
|
-
(0, testHelpers_spec_1.expectDiagnostics)(program, [Object.assign(Object.assign({}, DiagnosticMessages_1.DiagnosticMessages.
|
|
1019
|
+
(0, testHelpers_spec_1.expectDiagnostics)(program, [Object.assign(Object.assign({}, DiagnosticMessages_1.DiagnosticMessages.cannotFindName('Animal')), { range: vscode_languageserver_1.Range.create(1, 35, 1, 41) })]);
|
|
1020
1020
|
});
|
|
1021
1021
|
it('non-namespaced parent from within namespace', () => {
|
|
1022
1022
|
program.setFile('source/main.bs', `
|
|
@@ -1029,7 +1029,7 @@ describe('BrsFile BrighterScript classes', () => {
|
|
|
1029
1029
|
`);
|
|
1030
1030
|
program.validate();
|
|
1031
1031
|
(0, testHelpers_spec_1.expectDiagnostics)(program, [
|
|
1032
|
-
DiagnosticMessages_1.DiagnosticMessages.
|
|
1032
|
+
DiagnosticMessages_1.DiagnosticMessages.cannotFindName('Animal')
|
|
1033
1033
|
]);
|
|
1034
1034
|
});
|
|
1035
1035
|
it('non-namespaced name from outside namespace alongside existing namespace', () => {
|
|
@@ -1046,7 +1046,7 @@ describe('BrsFile BrighterScript classes', () => {
|
|
|
1046
1046
|
`);
|
|
1047
1047
|
program.validate();
|
|
1048
1048
|
(0, testHelpers_spec_1.expectDiagnostics)(program, [
|
|
1049
|
-
DiagnosticMessages_1.DiagnosticMessages.
|
|
1049
|
+
DiagnosticMessages_1.DiagnosticMessages.cannotFindName('Animal')
|
|
1050
1050
|
]);
|
|
1051
1051
|
});
|
|
1052
1052
|
it('namespaced parent class from outside namespace', () => {
|
|
@@ -1064,7 +1064,7 @@ describe('BrsFile BrighterScript classes', () => {
|
|
|
1064
1064
|
`);
|
|
1065
1065
|
program.validate();
|
|
1066
1066
|
(0, testHelpers_spec_1.expectDiagnostics)(program, [
|
|
1067
|
-
DiagnosticMessages_1.DiagnosticMessages.
|
|
1067
|
+
DiagnosticMessages_1.DiagnosticMessages.cannotFindName('GroundedBird')
|
|
1068
1068
|
]);
|
|
1069
1069
|
});
|
|
1070
1070
|
it('namespaced parent class from inside namespace', () => {
|
|
@@ -1083,9 +1083,9 @@ describe('BrsFile BrighterScript classes', () => {
|
|
|
1083
1083
|
end namespace
|
|
1084
1084
|
`);
|
|
1085
1085
|
program.validate();
|
|
1086
|
-
(0, testHelpers_spec_1.expectDiagnostics)(program, [
|
|
1087
|
-
|
|
1088
|
-
|
|
1086
|
+
(0, testHelpers_spec_1.expectDiagnostics)(program, [Object.assign(Object.assign({}, DiagnosticMessages_1.DiagnosticMessages.cannotFindName('GroundedBird')), { relatedInformation: [{
|
|
1087
|
+
message: `Not defined in scope 'source'`
|
|
1088
|
+
}] })]);
|
|
1089
1089
|
});
|
|
1090
1090
|
});
|
|
1091
1091
|
it('catches newable class without namespace name', () => {
|
|
@@ -1101,7 +1101,7 @@ describe('BrsFile BrighterScript classes', () => {
|
|
|
1101
1101
|
`);
|
|
1102
1102
|
program.validate();
|
|
1103
1103
|
(0, testHelpers_spec_1.expectDiagnostics)(program, [
|
|
1104
|
-
DiagnosticMessages_1.DiagnosticMessages.
|
|
1104
|
+
DiagnosticMessages_1.DiagnosticMessages.cannotFindName('Duck')
|
|
1105
1105
|
]);
|
|
1106
1106
|
});
|
|
1107
1107
|
it('supports newable class namespace inference', () => {
|
|
@@ -1122,13 +1122,13 @@ describe('BrsFile BrighterScript classes', () => {
|
|
|
1122
1122
|
namespace NameA.NameB
|
|
1123
1123
|
class Animal
|
|
1124
1124
|
end class
|
|
1125
|
-
class Duck extends NameA.NameB.
|
|
1125
|
+
class Duck extends NameA.NameB.AnimalNotDefined
|
|
1126
1126
|
end class
|
|
1127
1127
|
end namespace
|
|
1128
1128
|
`);
|
|
1129
1129
|
program.validate();
|
|
1130
1130
|
(0, testHelpers_spec_1.expectDiagnostics)(program, [
|
|
1131
|
-
DiagnosticMessages_1.DiagnosticMessages.
|
|
1131
|
+
DiagnosticMessages_1.DiagnosticMessages.cannotFindName('AnimalNotDefined')
|
|
1132
1132
|
]);
|
|
1133
1133
|
});
|
|
1134
1134
|
it('supports omitting namespace prefix for items in same namespace', () => {
|