brighterscript 0.57.2 → 0.58.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.
Files changed (85) hide show
  1. package/CHANGELOG.md +19 -0
  2. package/README.md +2 -0
  3. package/dist/Program.d.ts +7 -1
  4. package/dist/Program.js +49 -18
  5. package/dist/Program.js.map +1 -1
  6. package/dist/Scope.d.ts +2 -1
  7. package/dist/Scope.js +8 -8
  8. package/dist/Scope.js.map +1 -1
  9. package/dist/astUtils/AstEditor.d.ts +2 -3
  10. package/dist/astUtils/AstEditor.js.map +1 -1
  11. package/dist/astUtils/creators.d.ts +4 -4
  12. package/dist/astUtils/creators.js +6 -6
  13. package/dist/astUtils/creators.js.map +1 -1
  14. package/dist/astUtils/reflection.d.ts +65 -64
  15. package/dist/astUtils/reflection.js.map +1 -1
  16. package/dist/astUtils/reflection.spec.js +3 -3
  17. package/dist/astUtils/reflection.spec.js.map +1 -1
  18. package/dist/astUtils/visitors.d.ts +32 -31
  19. package/dist/astUtils/visitors.js.map +1 -1
  20. package/dist/astUtils/visitors.spec.js.map +1 -1
  21. package/dist/bscPlugin/BscPlugin.js +4 -0
  22. package/dist/bscPlugin/BscPlugin.js.map +1 -1
  23. package/dist/bscPlugin/hover/HoverProcessor.spec.js +6 -0
  24. package/dist/bscPlugin/hover/HoverProcessor.spec.js.map +1 -1
  25. package/dist/bscPlugin/semanticTokens/BrsFileSemanticTokensProcessor.js +2 -2
  26. package/dist/bscPlugin/semanticTokens/BrsFileSemanticTokensProcessor.js.map +1 -1
  27. package/dist/bscPlugin/validation/BrsFileValidator.d.ts +1 -0
  28. package/dist/bscPlugin/validation/BrsFileValidator.js +118 -6
  29. package/dist/bscPlugin/validation/BrsFileValidator.js.map +1 -1
  30. package/dist/bscPlugin/validation/ScopeValidator.d.ts +21 -19
  31. package/dist/bscPlugin/validation/ScopeValidator.js +164 -179
  32. package/dist/bscPlugin/validation/ScopeValidator.js.map +1 -1
  33. package/dist/bscPlugin/validation/XmlFileValidator.d.ts +8 -0
  34. package/dist/bscPlugin/validation/XmlFileValidator.js +44 -0
  35. package/dist/bscPlugin/validation/XmlFileValidator.js.map +1 -0
  36. package/dist/files/BrsFile.Class.spec.js.map +1 -1
  37. package/dist/files/BrsFile.d.ts +11 -5
  38. package/dist/files/BrsFile.js +15 -47
  39. package/dist/files/BrsFile.js.map +1 -1
  40. package/dist/files/BrsFile.spec.js +29 -0
  41. package/dist/files/BrsFile.spec.js.map +1 -1
  42. package/dist/files/XmlFile.d.ts +9 -4
  43. package/dist/files/XmlFile.js +6 -30
  44. package/dist/files/XmlFile.js.map +1 -1
  45. package/dist/files/tests/optionalChaning.spec.js +2 -1
  46. package/dist/files/tests/optionalChaning.spec.js.map +1 -1
  47. package/dist/index.d.ts +1 -0
  48. package/dist/index.js +1 -0
  49. package/dist/index.js.map +1 -1
  50. package/dist/interfaces.d.ts +2 -3
  51. package/dist/parser/AstNode.d.ts +65 -0
  52. package/dist/parser/AstNode.js +93 -0
  53. package/dist/parser/AstNode.js.map +1 -0
  54. package/dist/parser/AstNode.spec.d.ts +1 -0
  55. package/dist/parser/AstNode.spec.js +44 -0
  56. package/dist/parser/AstNode.spec.js.map +1 -0
  57. package/dist/parser/Expression.d.ts +6 -43
  58. package/dist/parser/Expression.js +53 -81
  59. package/dist/parser/Expression.js.map +1 -1
  60. package/dist/parser/Parser.d.ts +11 -12
  61. package/dist/parser/Parser.js +118 -117
  62. package/dist/parser/Parser.js.map +1 -1
  63. package/dist/parser/Parser.spec.d.ts +1 -1
  64. package/dist/parser/Parser.spec.js.map +1 -1
  65. package/dist/parser/Statement.d.ts +15 -44
  66. package/dist/parser/Statement.js +91 -102
  67. package/dist/parser/Statement.js.map +1 -1
  68. package/dist/parser/Statement.spec.js +14 -7
  69. package/dist/parser/Statement.spec.js.map +1 -1
  70. package/dist/parser/tests/expression/ArrayLiterals.spec.js +37 -0
  71. package/dist/parser/tests/expression/ArrayLiterals.spec.js.map +1 -1
  72. package/dist/parser/tests/expression/AssociativeArrayLiterals.spec.js +41 -0
  73. package/dist/parser/tests/expression/AssociativeArrayLiterals.spec.js.map +1 -1
  74. package/dist/parser/tests/expression/Call.spec.js +109 -1
  75. package/dist/parser/tests/expression/Call.spec.js.map +1 -1
  76. package/dist/parser/tests/expression/Indexing.spec.js +49 -4
  77. package/dist/parser/tests/expression/Indexing.spec.js.map +1 -1
  78. package/dist/parser/tests/statement/Enum.spec.js +7 -4
  79. package/dist/parser/tests/statement/Enum.spec.js.map +1 -1
  80. package/dist/util.d.ts +11 -5
  81. package/dist/util.js +50 -0
  82. package/dist/util.js.map +1 -1
  83. package/dist/validators/ClassValidator.js +22 -19
  84. package/dist/validators/ClassValidator.js.map +1 -1
  85. package/package.json +2 -2
@@ -19,154 +19,105 @@ const platformComponentNames = new Set(Object.values(roku_types_1.components).ma
19
19
  */
20
20
  class ScopeValidator {
21
21
  constructor() {
22
- this.events = [];
22
+ this.expressionsByFile = new Cache_1.Cache();
23
23
  this.onceCache = new Cache_1.Cache();
24
24
  this.multiScopeCache = new Cache_1.Cache();
25
25
  }
26
26
  processEvent(event) {
27
- this.events.push(event);
28
- event.scope.linkSymbolTable();
29
- this.detectDuplicateEnums(event);
30
- this.validateCreateObjectCalls(event);
31
- this.iterateExpressions(event);
32
- event.scope.unlinkSymbolTable();
27
+ this.event = event;
28
+ this.walkFiles();
29
+ this.detectDuplicateEnums();
33
30
  }
34
31
  reset() {
32
+ this.event = undefined;
35
33
  this.onceCache.clear();
36
34
  this.multiScopeCache.clear();
37
- this.events = [];
38
35
  }
39
- /**
40
- * Adds a diagnostic to the first scope for this key. Prevents duplicate diagnostics
41
- * for diagnostics where scope isn't important. (i.e. CreateObject validations)
42
- */
43
- addDiagnosticOnce(event, diagnostic) {
44
- this.onceCache.getOrAdd(`${diagnostic.code}-${diagnostic.message}-${util_1.default.rangeToString(diagnostic.range)}`, () => {
45
- event.scope.addDiagnostics([diagnostic]);
46
- return true;
36
+ walkFiles() {
37
+ this.event.scope.enumerateOwnFiles((file) => {
38
+ if ((0, reflection_1.isBrsFile)(file)) {
39
+ this.iterateFileExpressions(file);
40
+ this.validateCreateObjectCalls(file);
41
+ }
47
42
  });
48
43
  }
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, _b;
57
- diagnostic = this.multiScopeCache.getOrAdd(`${(_a = diagnostic.file) === null || _a === void 0 ? void 0 : _a.srcPath}-${diagnostic.code}-${diagnostic.message}-${util_1.default.rangeToString(diagnostic.range)}`, () => {
58
- if (!diagnostic.relatedInformation) {
59
- diagnostic.relatedInformation = [];
44
+ iterateFileExpressions(file) {
45
+ var _a, _b, _c, _d;
46
+ const { scope } = this.event;
47
+ //build an expression collection ONCE per file
48
+ const expressionInfos = this.expressionsByFile.getOrAdd(file, () => {
49
+ const result = [];
50
+ const expressions = [
51
+ ...file.parser.references.expressions,
52
+ //all class "extends <whatever>" expressions
53
+ ...file.parser.references.classStatements.map(x => { var _a; return (_a = x.parentClassName) === null || _a === void 0 ? void 0 : _a.expression; }),
54
+ //all interface "extends <whatever>" expressions
55
+ ...file.parser.references.interfaceStatements.map(x => { var _a; return (_a = x.parentInterfaceName) === null || _a === void 0 ? void 0 : _a.expression; })
56
+ ];
57
+ for (let expression of expressions) {
58
+ if (!expression) {
59
+ continue;
60
+ }
61
+ //walk left-to-right on every expression, only keep the ones that start with VariableExpression, and then keep subsequent DottedGet parts
62
+ const parts = util_1.default.getDottedGetPath(expression);
63
+ if (parts.length > 0) {
64
+ result.push({
65
+ parts: parts,
66
+ expression: expression
67
+ });
68
+ }
60
69
  }
61
- this.addDiagnostic(event, diagnostic);
62
- return diagnostic;
70
+ return result;
63
71
  });
64
- const info = {
65
- message: `${message} '${event.scope.name}'`
66
- };
67
- if ((0, reflection_1.isXmlScope)(event.scope) && ((_b = event.scope.xmlFile) === null || _b === void 0 ? void 0 : _b.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));
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);
74
- }
75
- /**
76
- * Find the closest symbol table for the given position
77
- */
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;
84
- }
85
- if (!symbolTable) {
86
- symbolTable = scope.symbolTable;
87
- }
88
- return symbolTable;
89
- }
90
- iterateExpressions(event) {
91
- const { scope } = event;
92
- event.scope.enumerateOwnFiles((file) => {
93
- var _a, _b, _c;
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;
72
+ outer: for (const info of expressionInfos) {
73
+ const symbolTable = info.expression.getSymbolTable();
74
+ const firstPart = info.parts[0];
75
+ //flag all unknown left-most variables
76
+ if (!symbolTable.hasSymbol((_a = firstPart.name) === null || _a === void 0 ? void 0 : _a.text)) {
77
+ this.addMultiScopeDiagnostic(Object.assign(Object.assign({ file: file }, DiagnosticMessages_1.DiagnosticMessages.cannotFindName((_b = firstPart.name) === null || _b === void 0 ? void 0 : _b.text)), { range: firstPart.name.range }));
78
+ //skip to the next expression
79
+ continue;
80
+ }
81
+ const firstNamespacePart = info.parts[0].name.text;
82
+ const firstNamespacePartLower = firstNamespacePart === null || firstNamespacePart === void 0 ? void 0 : firstNamespacePart.toLowerCase();
83
+ const namespaceContainer = scope.namespaceLookup.get(firstNamespacePartLower);
84
+ const enumStatement = scope.getEnum(firstNamespacePartLower);
85
+ //if this isn't a namespace, skip it
86
+ if (!namespaceContainer && !enumStatement) {
87
+ continue;
88
+ }
89
+ //catch unknown namespace items
90
+ const processedNames = [firstNamespacePart];
91
+ for (let i = 1; i < info.parts.length; i++) {
92
+ const part = info.parts[i];
93
+ processedNames.push(part.name.text);
94
+ const entityName = processedNames.join('.');
95
+ const entityNameLower = entityName.toLowerCase();
96
+ //if this is an enum member, stop validating here to prevent errors further down the chain
97
+ if (scope.getEnumMemberMap().has(entityNameLower)) {
98
+ break;
99
+ }
100
+ if (!scope.getEnumMap().has(entityNameLower) &&
101
+ !scope.getClassMap().has(entityNameLower) &&
102
+ !scope.getConstMap().has(entityNameLower) &&
103
+ !scope.getCallableByName(entityNameLower) &&
104
+ !scope.namespaceLookup.has(entityNameLower)) {
105
+ //if this looks like an enum, provide a nicer error message
106
+ const theEnum = (_c = this.getEnum(scope, entityNameLower)) === null || _c === void 0 ? void 0 : _c.item;
107
+ if (theEnum) {
108
+ this.addMultiScopeDiagnostic(Object.assign(Object.assign({ file: file }, DiagnosticMessages_1.DiagnosticMessages.unknownEnumValue((_d = part.name.text) === null || _d === void 0 ? void 0 : _d.split('.').pop(), theEnum.fullName)), { range: part.name.range, relatedInformation: [{
109
+ message: 'Enum declared here',
110
+ location: util_1.default.createLocation(vscode_uri_1.URI.file(file.srcPath).toString(), theEnum.tokens.name.range)
111
+ }] }));
113
112
  }
114
113
  else {
115
- expression = referenceExpression;
116
- }
117
- const tokens = util_1.default.getAllDottedGetParts(expression);
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 = tokens.shift().text;
128
- const firstNamespacePartLower = firstNamespacePart === null || firstNamespacePart === void 0 ? void 0 : firstNamespacePart.toLowerCase();
129
- const namespaceContainer = scope.namespaceLookup.get(firstNamespacePartLower);
130
- const enumStatement = scope.getEnum(firstNamespacePartLower);
131
- //if this isn't a namespace, skip it
132
- if (!namespaceContainer && !enumStatement) {
133
- continue;
134
- }
135
- //catch unknown namespace items
136
- const processedNames = [firstNamespacePart];
137
- for (const token of tokens !== null && tokens !== void 0 ? tokens : []) {
138
- processedNames.push(token.text);
139
- const entityName = processedNames.join('.');
140
- const entityNameLower = entityName.toLowerCase();
141
- //if this is an enum member, stop validating here to prevent errors further down the chain
142
- if (scope.getEnumMemberMap().has(entityNameLower)) {
143
- break;
144
- }
145
- if (!scope.getEnumMap().has(entityNameLower) &&
146
- !scope.getClassMap().has(entityNameLower) &&
147
- !scope.getConstMap().has(entityNameLower) &&
148
- !scope.getCallableByName(entityNameLower) &&
149
- !scope.namespaceLookup.has(entityNameLower)) {
150
- //if this looks like an enum, provide a nicer error message
151
- const theEnum = (_b = this.getEnum(scope, entityNameLower)) === null || _b === void 0 ? void 0 : _b.item;
152
- if (theEnum) {
153
- this.addMultiScopeDiagnostic(event, Object.assign(Object.assign({ file: file }, DiagnosticMessages_1.DiagnosticMessages.unknownEnumValue((_c = token.text) === null || _c === void 0 ? void 0 : _c.split('.').pop(), theEnum.fullName)), { range: tokens[tokens.length - 1].range, relatedInformation: [{
154
- message: 'Enum declared here',
155
- location: util_1.default.createLocation(vscode_uri_1.URI.file(file.srcPath).toString(), theEnum.tokens.name.range)
156
- }] }));
157
- }
158
- else {
159
- this.addMultiScopeDiagnostic(event, Object.assign(Object.assign({}, DiagnosticMessages_1.DiagnosticMessages.cannotFindName(token.text, entityName)), { range: token.range, file: file }));
160
- }
161
- //no need to add another diagnostic for future unknown items
162
- continue outer;
163
- }
164
- }
165
- }
114
+ this.addMultiScopeDiagnostic(Object.assign(Object.assign({}, DiagnosticMessages_1.DiagnosticMessages.cannotFindName(part.name.text, entityName)), { range: part.name.range, file: file }));
166
115
  }
116
+ //no need to add another diagnostic for future unknown items
117
+ continue outer;
167
118
  }
168
119
  }
169
- });
120
+ }
170
121
  }
171
122
  /**
172
123
  * Given a string optionally separated by dots, find an enum related to it.
@@ -186,10 +137,10 @@ class ScopeValidator {
186
137
  /**
187
138
  * Flag duplicate enums
188
139
  */
189
- detectDuplicateEnums(event) {
140
+ detectDuplicateEnums() {
190
141
  const diagnostics = [];
191
142
  const enumLocationsByName = new Cache_1.Cache();
192
- event.scope.enumerateBrsFiles((file) => {
143
+ this.event.scope.enumerateBrsFiles((file) => {
193
144
  for (const enumStatement of file.parser.references.enumStatements) {
194
145
  const fullName = enumStatement.fullName;
195
146
  const nameLower = fullName === null || fullName === void 0 ? void 0 : fullName.toLowerCase();
@@ -219,13 +170,13 @@ class ScopeValidator {
219
170
  const primaryEnum = enumLocations.shift();
220
171
  const fullName = primaryEnum.statement.fullName;
221
172
  for (const duplicateEnumInfo of enumLocations) {
222
- diagnostics.push(Object.assign(Object.assign({}, DiagnosticMessages_1.DiagnosticMessages.duplicateEnumDeclaration(event.scope.name, fullName)), { file: duplicateEnumInfo.file, range: duplicateEnumInfo.statement.tokens.name.range, relatedInformation: [{
173
+ diagnostics.push(Object.assign(Object.assign({}, DiagnosticMessages_1.DiagnosticMessages.duplicateEnumDeclaration(this.event.scope.name, fullName)), { file: duplicateEnumInfo.file, range: duplicateEnumInfo.statement.tokens.name.range, relatedInformation: [{
223
174
  message: 'Enum declared here',
224
175
  location: util_1.default.createLocation(vscode_uri_1.URI.file(primaryEnum.file.srcPath).toString(), primaryEnum.statement.tokens.name.range)
225
176
  }] }));
226
177
  }
227
178
  }
228
- event.scope.addDiagnostics(diagnostics);
179
+ this.event.scope.addDiagnostics(diagnostics);
229
180
  }
230
181
  /**
231
182
  * Validate every function call to `CreateObject`.
@@ -233,59 +184,93 @@ class ScopeValidator {
233
184
  * what these calls are supposed to look like, and this is a very common thing for brs devs to do, so just
234
185
  * do this manually for now.
235
186
  */
236
- validateCreateObjectCalls(event) {
187
+ validateCreateObjectCalls(file) {
188
+ var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k;
237
189
  const diagnostics = [];
238
- event.scope.enumerateBrsFiles((file) => {
239
- var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k;
240
- for (const call of file.functionCalls) {
241
- //skip non CreateObject function calls
242
- if (((_a = call.name) === null || _a === void 0 ? void 0 : _a.toLowerCase()) !== 'createobject' || !(0, reflection_1.isLiteralExpression)((_b = call === null || call === void 0 ? void 0 : call.args[0]) === null || _b === void 0 ? void 0 : _b.expression)) {
190
+ for (const call of file.functionCalls) {
191
+ //skip non CreateObject function calls
192
+ if (((_a = call.name) === null || _a === void 0 ? void 0 : _a.toLowerCase()) !== 'createobject' || !(0, reflection_1.isLiteralExpression)((_b = call === null || call === void 0 ? void 0 : call.args[0]) === null || _b === void 0 ? void 0 : _b.expression)) {
193
+ continue;
194
+ }
195
+ const firstParamToken = (_d = (_c = call === null || call === void 0 ? void 0 : call.args[0]) === null || _c === void 0 ? void 0 : _c.expression) === null || _d === void 0 ? void 0 : _d.token;
196
+ const firstParamStringValue = (_e = firstParamToken === null || firstParamToken === void 0 ? void 0 : firstParamToken.text) === null || _e === void 0 ? void 0 : _e.replace(/"/g, '');
197
+ //if this is a `createObject('roSGNode'` call, only support known sg node types
198
+ if ((firstParamStringValue === null || firstParamStringValue === void 0 ? void 0 : firstParamStringValue.toLowerCase()) === 'rosgnode' && (0, reflection_1.isLiteralExpression)((_f = call === null || call === void 0 ? void 0 : call.args[1]) === null || _f === void 0 ? void 0 : _f.expression)) {
199
+ const componentName = (_h = (_g = call === null || call === void 0 ? void 0 : call.args[1]) === null || _g === void 0 ? void 0 : _g.expression) === null || _h === void 0 ? void 0 : _h.token;
200
+ //don't validate any components with a colon in their name (probably component libraries, but regular components can have them too).
201
+ if ((_j = componentName === null || componentName === void 0 ? void 0 : componentName.text) === null || _j === void 0 ? void 0 : _j.includes(':')) {
243
202
  continue;
244
203
  }
245
- const firstParamToken = (_d = (_c = call === null || call === void 0 ? void 0 : call.args[0]) === null || _c === void 0 ? void 0 : _c.expression) === null || _d === void 0 ? void 0 : _d.token;
246
- const firstParamStringValue = (_e = firstParamToken === null || firstParamToken === void 0 ? void 0 : firstParamToken.text) === null || _e === void 0 ? void 0 : _e.replace(/"/g, '');
247
- //if this is a `createObject('roSGNode'` call, only support known sg node types
248
- if ((firstParamStringValue === null || firstParamStringValue === void 0 ? void 0 : firstParamStringValue.toLowerCase()) === 'rosgnode' && (0, reflection_1.isLiteralExpression)((_f = call === null || call === void 0 ? void 0 : call.args[1]) === null || _f === void 0 ? void 0 : _f.expression)) {
249
- const componentName = (_h = (_g = call === null || call === void 0 ? void 0 : call.args[1]) === null || _g === void 0 ? void 0 : _g.expression) === null || _h === void 0 ? void 0 : _h.token;
250
- //don't validate any components with a colon in their name (probably component libraries, but regular components can have them too).
251
- if ((_j = componentName === null || componentName === void 0 ? void 0 : componentName.text) === null || _j === void 0 ? void 0 : _j.includes(':')) {
252
- continue;
253
- }
254
- //add diagnostic for unknown components
255
- const unquotedComponentName = (_k = componentName === null || componentName === void 0 ? void 0 : componentName.text) === null || _k === void 0 ? void 0 : _k.replace(/"/g, '');
256
- if (unquotedComponentName && !platformNodeNames.has(unquotedComponentName.toLowerCase()) && !event.program.getComponent(unquotedComponentName)) {
257
- this.addDiagnosticOnce(event, Object.assign(Object.assign({ file: file }, DiagnosticMessages_1.DiagnosticMessages.unknownRoSGNode(unquotedComponentName)), { range: componentName.range }));
258
- }
259
- else if ((call === null || call === void 0 ? void 0 : call.args.length) !== 2) {
260
- // roSgNode should only ever have 2 args in `createObject`
261
- this.addDiagnosticOnce(event, Object.assign(Object.assign({ file: file }, DiagnosticMessages_1.DiagnosticMessages.mismatchCreateObjectArgumentCount(firstParamStringValue, [2], call === null || call === void 0 ? void 0 : call.args.length)), { range: call.range }));
262
- }
204
+ //add diagnostic for unknown components
205
+ const unquotedComponentName = (_k = componentName === null || componentName === void 0 ? void 0 : componentName.text) === null || _k === void 0 ? void 0 : _k.replace(/"/g, '');
206
+ if (unquotedComponentName && !platformNodeNames.has(unquotedComponentName.toLowerCase()) && !this.event.program.getComponent(unquotedComponentName)) {
207
+ this.addDiagnosticOnce(Object.assign(Object.assign({ file: file }, DiagnosticMessages_1.DiagnosticMessages.unknownRoSGNode(unquotedComponentName)), { range: componentName.range }));
263
208
  }
264
- else if (!platformComponentNames.has(firstParamStringValue.toLowerCase())) {
265
- this.addDiagnosticOnce(event, Object.assign(Object.assign({ file: file }, DiagnosticMessages_1.DiagnosticMessages.unknownBrightScriptComponent(firstParamStringValue)), { range: firstParamToken.range }));
209
+ else if ((call === null || call === void 0 ? void 0 : call.args.length) !== 2) {
210
+ // roSgNode should only ever have 2 args in `createObject`
211
+ this.addDiagnosticOnce(Object.assign(Object.assign({ file: file }, DiagnosticMessages_1.DiagnosticMessages.mismatchCreateObjectArgumentCount(firstParamStringValue, [2], call === null || call === void 0 ? void 0 : call.args.length)), { range: call.range }));
266
212
  }
267
- else {
268
- // This is valid brightscript component
269
- // Test for invalid arg counts
270
- const brightScriptComponent = roku_types_1.components[firstParamStringValue.toLowerCase()];
271
- // Valid arg counts for createObject are 1+ number of args for constructor
272
- let validArgCounts = brightScriptComponent.constructors.map(cnstr => cnstr.params.length + 1);
273
- if (validArgCounts.length === 0) {
274
- // no constructors for this component, so createObject only takes 1 arg
275
- validArgCounts = [1];
276
- }
277
- if (!validArgCounts.includes(call === null || call === void 0 ? void 0 : call.args.length)) {
278
- // Incorrect number of arguments included in `createObject()`
279
- this.addDiagnosticOnce(event, Object.assign(Object.assign({ file: file }, DiagnosticMessages_1.DiagnosticMessages.mismatchCreateObjectArgumentCount(firstParamStringValue, validArgCounts, call === null || call === void 0 ? void 0 : call.args.length)), { range: call.range }));
280
- }
281
- // Test for deprecation
282
- if (brightScriptComponent.isDeprecated) {
283
- this.addDiagnosticOnce(event, Object.assign(Object.assign({ file: file }, DiagnosticMessages_1.DiagnosticMessages.deprecatedBrightScriptComponent(firstParamStringValue, brightScriptComponent.deprecatedDescription)), { range: call.range }));
284
- }
213
+ }
214
+ else if (!platformComponentNames.has(firstParamStringValue.toLowerCase())) {
215
+ this.addDiagnosticOnce(Object.assign(Object.assign({ file: file }, DiagnosticMessages_1.DiagnosticMessages.unknownBrightScriptComponent(firstParamStringValue)), { range: firstParamToken.range }));
216
+ }
217
+ else {
218
+ // This is valid brightscript component
219
+ // Test for invalid arg counts
220
+ const brightScriptComponent = roku_types_1.components[firstParamStringValue.toLowerCase()];
221
+ // Valid arg counts for createObject are 1+ number of args for constructor
222
+ let validArgCounts = brightScriptComponent.constructors.map(cnstr => cnstr.params.length + 1);
223
+ if (validArgCounts.length === 0) {
224
+ // no constructors for this component, so createObject only takes 1 arg
225
+ validArgCounts = [1];
226
+ }
227
+ if (!validArgCounts.includes(call === null || call === void 0 ? void 0 : call.args.length)) {
228
+ // Incorrect number of arguments included in `createObject()`
229
+ this.addDiagnosticOnce(Object.assign(Object.assign({ file: file }, DiagnosticMessages_1.DiagnosticMessages.mismatchCreateObjectArgumentCount(firstParamStringValue, validArgCounts, call === null || call === void 0 ? void 0 : call.args.length)), { range: call.range }));
230
+ }
231
+ // Test for deprecation
232
+ if (brightScriptComponent.isDeprecated) {
233
+ this.addDiagnosticOnce(Object.assign(Object.assign({ file: file }, DiagnosticMessages_1.DiagnosticMessages.deprecatedBrightScriptComponent(firstParamStringValue, brightScriptComponent.deprecatedDescription)), { range: call.range }));
285
234
  }
286
235
  }
236
+ }
237
+ this.event.scope.addDiagnostics(diagnostics);
238
+ }
239
+ /**
240
+ * Adds a diagnostic to the first scope for this key. Prevents duplicate diagnostics
241
+ * for diagnostics where scope isn't important. (i.e. CreateObject validations)
242
+ */
243
+ addDiagnosticOnce(diagnostic) {
244
+ this.onceCache.getOrAdd(`${diagnostic.code}-${diagnostic.message}-${util_1.default.rangeToString(diagnostic.range)}`, () => {
245
+ this.event.scope.addDiagnostics([diagnostic]);
246
+ return true;
247
+ });
248
+ }
249
+ addDiagnostic(diagnostic) {
250
+ this.event.scope.addDiagnostics([diagnostic]);
251
+ }
252
+ /**
253
+ * Add a diagnostic (to the first scope) that will have `relatedInformation` for each affected scope
254
+ */
255
+ addMultiScopeDiagnostic(diagnostic, message = 'Not defined in scope') {
256
+ var _a, _b;
257
+ diagnostic = this.multiScopeCache.getOrAdd(`${(_a = diagnostic.file) === null || _a === void 0 ? void 0 : _a.srcPath}-${diagnostic.code}-${diagnostic.message}-${util_1.default.rangeToString(diagnostic.range)}`, () => {
258
+ if (!diagnostic.relatedInformation) {
259
+ diagnostic.relatedInformation = [];
260
+ }
261
+ this.addDiagnostic(diagnostic);
262
+ return diagnostic;
287
263
  });
288
- event.scope.addDiagnostics(diagnostics);
264
+ const info = {
265
+ message: `${message} '${this.event.scope.name}'`
266
+ };
267
+ if ((0, reflection_1.isXmlScope)(this.event.scope) && ((_b = this.event.scope.xmlFile) === null || _b === void 0 ? void 0 : _b.srcPath)) {
268
+ info.location = util_1.default.createLocation(vscode_uri_1.URI.file(this.event.scope.xmlFile.srcPath).toString(), util_1.default.createRange(0, 0, 0, 10));
269
+ }
270
+ else {
271
+ info.location = util_1.default.createLocation(vscode_uri_1.URI.file(diagnostic.file.srcPath).toString(), diagnostic.range);
272
+ }
273
+ diagnostic.relatedInformation.push(info);
289
274
  }
290
275
  }
291
276
  exports.ScopeValidator = ScopeValidator;
@@ -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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"}
@@ -0,0 +1,8 @@
1
+ import type { XmlFile } from '../../files/XmlFile';
2
+ import type { OnFileValidateEvent } from '../../interfaces';
3
+ export declare class XmlFileValidator {
4
+ event: OnFileValidateEvent<XmlFile>;
5
+ constructor(event: OnFileValidateEvent<XmlFile>);
6
+ process(): void;
7
+ private validateComponent;
8
+ }
@@ -0,0 +1,44 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.XmlFileValidator = void 0;
4
+ const DiagnosticMessages_1 = require("../../DiagnosticMessages");
5
+ const util_1 = require("../../util");
6
+ class XmlFileValidator {
7
+ constructor(event) {
8
+ this.event = event;
9
+ }
10
+ process() {
11
+ util_1.default.validateTooDeepFile(this.event.file);
12
+ if (this.event.file.parser.ast.root) {
13
+ this.validateComponent(this.event.file.parser.ast);
14
+ }
15
+ else {
16
+ //skip empty XML
17
+ }
18
+ }
19
+ validateComponent(ast) {
20
+ const { root, component } = ast;
21
+ if (!component) {
22
+ //not a SG component
23
+ this.event.file.diagnostics.push(Object.assign(Object.assign({}, DiagnosticMessages_1.DiagnosticMessages.xmlComponentMissingComponentDeclaration()), { range: root.range, file: this.event.file }));
24
+ return;
25
+ }
26
+ //component name/extends
27
+ if (!component.name) {
28
+ this.event.file.diagnostics.push(Object.assign(Object.assign({}, DiagnosticMessages_1.DiagnosticMessages.xmlComponentMissingNameAttribute()), { range: component.tag.range, file: this.event.file }));
29
+ }
30
+ if (!component.extends) {
31
+ this.event.file.diagnostics.push(Object.assign(Object.assign({}, DiagnosticMessages_1.DiagnosticMessages.xmlComponentMissingExtendsAttribute()), { range: component.tag.range, file: this.event.file }));
32
+ }
33
+ //catch script imports with same path as the auto-imported codebehind file
34
+ const scriptTagImports = this.event.file.parser.references.scriptTagImports;
35
+ let explicitCodebehindScriptTag = this.event.file.program.options.autoImportComponentScript === true
36
+ ? scriptTagImports.find(x => this.event.file.possibleCodebehindPkgPaths.includes(x.pkgPath))
37
+ : undefined;
38
+ if (explicitCodebehindScriptTag) {
39
+ this.event.file.diagnostics.push(Object.assign(Object.assign({}, DiagnosticMessages_1.DiagnosticMessages.unnecessaryCodebehindScriptImport()), { file: this.event.file, range: explicitCodebehindScriptTag.filePathRange }));
40
+ }
41
+ }
42
+ }
43
+ exports.XmlFileValidator = XmlFileValidator;
44
+ //# sourceMappingURL=XmlFileValidator.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"XmlFileValidator.js","sourceRoot":"","sources":["../../../src/bscPlugin/validation/XmlFileValidator.ts"],"names":[],"mappings":";;;AAAA,iEAA8D;AAI9D,qCAA8B;AAE9B,MAAa,gBAAgB;IACzB,YACW,KAAmC;QAAnC,UAAK,GAAL,KAAK,CAA8B;IAE9C,CAAC;IAEM,OAAO;QACV,cAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QAC1C,IAAI,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,EAAE;YACjC,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;SACtD;aAAM;YACH,gBAAgB;SACnB;IACL,CAAC;IAEO,iBAAiB,CAAC,GAAU;QAChC,MAAM,EAAE,IAAI,EAAE,SAAS,EAAE,GAAG,GAAG,CAAC;QAChC,IAAI,CAAC,SAAS,EAAE;YACZ,oBAAoB;YACpB,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,WAAW,CAAC,IAAI,iCACzB,uCAAkB,CAAC,uCAAuC,EAAE,KAC/D,KAAK,EAAE,IAAI,CAAC,KAAK,EACjB,IAAI,EAAE,IAAI,CAAC,KAAK,CAAC,IAAI,IACvB,CAAC;YACH,OAAO;SACV;QAED,wBAAwB;QACxB,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE;YACjB,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,WAAW,CAAC,IAAI,iCACzB,uCAAkB,CAAC,gCAAgC,EAAE,KACxD,KAAK,EAAE,SAAS,CAAC,GAAG,CAAC,KAAK,EAC1B,IAAI,EAAE,IAAI,CAAC,KAAK,CAAC,IAAI,IACvB,CAAC;SACN;QACD,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE;YACpB,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,WAAW,CAAC,IAAI,iCACzB,uCAAkB,CAAC,mCAAmC,EAAE,KAC3D,KAAK,EAAE,SAAS,CAAC,GAAG,CAAC,KAAK,EAC1B,IAAI,EAAE,IAAI,CAAC,KAAK,CAAC,IAAI,IACvB,CAAC;SACN;QAGD,0EAA0E;QAC1E,MAAM,gBAAgB,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,gBAAgB,CAAC;QAC5E,IAAI,2BAA2B,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,yBAAyB,KAAK,IAAI;YAChG,CAAC,CAAC,gBAAgB,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,0BAA0B,CAAC,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC;YAC5F,CAAC,CAAC,SAAS,CAAC;QAChB,IAAI,2BAA2B,EAAE;YAC7B,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,WAAW,CAAC,IAAI,iCACzB,uCAAkB,CAAC,iCAAiC,EAAE,KACzD,IAAI,EAAE,IAAI,CAAC,KAAK,CAAC,IAAI,EACrB,KAAK,EAAE,2BAA2B,CAAC,aAAa,IAClD,CAAC;SACN;IACL,CAAC;CAEJ;AA1DD,4CA0DC"}