brighterscript 1.0.0-alpha.22 → 1.0.0-alpha.24

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 (132) hide show
  1. package/CHANGELOG.md +140 -0
  2. package/dist/DiagnosticCollection.d.ts +3 -1
  3. package/dist/DiagnosticCollection.js +3 -5
  4. package/dist/DiagnosticCollection.js.map +1 -1
  5. package/dist/DiagnosticMessages.d.ts +24 -3
  6. package/dist/DiagnosticMessages.js +28 -7
  7. package/dist/DiagnosticMessages.js.map +1 -1
  8. package/dist/LanguageServer.d.ts +2 -1
  9. package/dist/LanguageServer.js +96 -31
  10. package/dist/LanguageServer.js.map +1 -1
  11. package/dist/Program.d.ts +14 -8
  12. package/dist/Program.js +125 -71
  13. package/dist/Program.js.map +1 -1
  14. package/dist/ProgramBuilder.js +2 -1
  15. package/dist/ProgramBuilder.js.map +1 -1
  16. package/dist/Scope.d.ts +23 -15
  17. package/dist/Scope.js +124 -122
  18. package/dist/Scope.js.map +1 -1
  19. package/dist/SymbolTable.d.ts +17 -6
  20. package/dist/SymbolTable.js +38 -9
  21. package/dist/SymbolTable.js.map +1 -1
  22. package/dist/XmlScope.js +3 -2
  23. package/dist/XmlScope.js.map +1 -1
  24. package/dist/astUtils/reflection.d.ts +5 -1
  25. package/dist/astUtils/reflection.js +15 -2
  26. package/dist/astUtils/reflection.js.map +1 -1
  27. package/dist/astUtils/visitors.d.ts +2 -1
  28. package/dist/astUtils/visitors.js.map +1 -1
  29. package/dist/bscPlugin/BscPlugin.d.ts +3 -1
  30. package/dist/bscPlugin/BscPlugin.js +8 -0
  31. package/dist/bscPlugin/BscPlugin.js.map +1 -1
  32. package/dist/bscPlugin/codeActions/CodeActionsProcessor.d.ts +1 -1
  33. package/dist/bscPlugin/codeActions/CodeActionsProcessor.js +11 -5
  34. package/dist/bscPlugin/codeActions/CodeActionsProcessor.js.map +1 -1
  35. package/dist/bscPlugin/codeActions/CodeActionsProcessor.spec.js +75 -1
  36. package/dist/bscPlugin/codeActions/CodeActionsProcessor.spec.js.map +1 -1
  37. package/dist/bscPlugin/completions/CompletionsProcessor.d.ts +6 -0
  38. package/dist/bscPlugin/completions/CompletionsProcessor.js +53 -0
  39. package/dist/bscPlugin/completions/CompletionsProcessor.js.map +1 -0
  40. package/dist/bscPlugin/hover/HoverProcessor.d.ts +17 -0
  41. package/dist/bscPlugin/hover/HoverProcessor.js +190 -0
  42. package/dist/bscPlugin/hover/HoverProcessor.js.map +1 -0
  43. package/dist/bscPlugin/hover/HoverProcessor.spec.d.ts +1 -0
  44. package/dist/bscPlugin/hover/HoverProcessor.spec.js +195 -0
  45. package/dist/bscPlugin/hover/HoverProcessor.spec.js.map +1 -0
  46. package/dist/bscPlugin/semanticTokens/BrsFileSemanticTokensProcessor.d.ts +8 -1
  47. package/dist/bscPlugin/semanticTokens/BrsFileSemanticTokensProcessor.js +64 -63
  48. package/dist/bscPlugin/semanticTokens/BrsFileSemanticTokensProcessor.js.map +1 -1
  49. package/dist/bscPlugin/semanticTokens/BrsFileSemanticTokensProcessor.spec.js +238 -23
  50. package/dist/bscPlugin/semanticTokens/BrsFileSemanticTokensProcessor.spec.js.map +1 -1
  51. package/dist/bscPlugin/transpile/BrsFilePreTranspileProcessor.d.ts +7 -1
  52. package/dist/bscPlugin/transpile/BrsFilePreTranspileProcessor.js +77 -30
  53. package/dist/bscPlugin/transpile/BrsFilePreTranspileProcessor.js.map +1 -1
  54. package/dist/bscPlugin/validation/BrsFileValidator.d.ts +14 -1
  55. package/dist/bscPlugin/validation/BrsFileValidator.js +104 -27
  56. package/dist/bscPlugin/validation/BrsFileValidator.js.map +1 -1
  57. package/dist/bscPlugin/validation/BrsFileValidator.spec.d.ts +1 -0
  58. package/dist/bscPlugin/validation/BrsFileValidator.spec.js +48 -0
  59. package/dist/bscPlugin/validation/BrsFileValidator.spec.js.map +1 -0
  60. package/dist/bscPlugin/validation/ScopeValidator.d.ts +24 -3
  61. package/dist/bscPlugin/validation/ScopeValidator.js +251 -44
  62. package/dist/bscPlugin/validation/ScopeValidator.js.map +1 -1
  63. package/dist/cli.js +18 -10
  64. package/dist/cli.js.map +1 -1
  65. package/dist/files/BrsFile.Class.spec.js +135 -38
  66. package/dist/files/BrsFile.Class.spec.js.map +1 -1
  67. package/dist/files/BrsFile.d.ts +21 -10
  68. package/dist/files/BrsFile.js +158 -179
  69. package/dist/files/BrsFile.js.map +1 -1
  70. package/dist/files/BrsFile.spec.js +222 -126
  71. package/dist/files/BrsFile.spec.js.map +1 -1
  72. package/dist/files/XmlFile.d.ts +2 -2
  73. package/dist/files/XmlFile.js +1 -0
  74. package/dist/files/XmlFile.js.map +1 -1
  75. package/dist/files/tests/imports.spec.js +1 -1
  76. package/dist/files/tests/imports.spec.js.map +1 -1
  77. package/dist/files/tests/optionalChaning.spec.js +20 -16
  78. package/dist/files/tests/optionalChaning.spec.js.map +1 -1
  79. package/dist/globalCallables.js +3 -0
  80. package/dist/globalCallables.js.map +1 -1
  81. package/dist/index.d.ts +1 -1
  82. package/dist/index.js +3 -1
  83. package/dist/index.js.map +1 -1
  84. package/dist/interfaces.d.ts +77 -3
  85. package/dist/lexer/Lexer.spec.js +7 -0
  86. package/dist/lexer/Lexer.spec.js.map +1 -1
  87. package/dist/lexer/TokenKind.d.ts +1 -0
  88. package/dist/lexer/TokenKind.js +8 -3
  89. package/dist/lexer/TokenKind.js.map +1 -1
  90. package/dist/parser/Expression.d.ts +12 -3
  91. package/dist/parser/Expression.js +16 -4
  92. package/dist/parser/Expression.js.map +1 -1
  93. package/dist/parser/Parser.Class.spec.js +1 -1
  94. package/dist/parser/Parser.d.ts +14 -3
  95. package/dist/parser/Parser.js +138 -48
  96. package/dist/parser/Parser.js.map +1 -1
  97. package/dist/parser/Parser.spec.js +232 -115
  98. package/dist/parser/Parser.spec.js.map +1 -1
  99. package/dist/parser/Statement.d.ts +41 -7
  100. package/dist/parser/Statement.js +85 -12
  101. package/dist/parser/Statement.js.map +1 -1
  102. package/dist/parser/tests/expression/NullCoalescenceExpression.spec.js +73 -31
  103. package/dist/parser/tests/expression/NullCoalescenceExpression.spec.js.map +1 -1
  104. package/dist/parser/tests/expression/TemplateStringExpression.spec.js +148 -47
  105. package/dist/parser/tests/expression/TemplateStringExpression.spec.js.map +1 -1
  106. package/dist/parser/tests/expression/TernaryExpression.spec.js +219 -37
  107. package/dist/parser/tests/expression/TernaryExpression.spec.js.map +1 -1
  108. package/dist/parser/tests/statement/ConstStatement.spec.d.ts +1 -0
  109. package/dist/parser/tests/statement/ConstStatement.spec.js +213 -0
  110. package/dist/parser/tests/statement/ConstStatement.spec.js.map +1 -0
  111. package/dist/parser/tests/statement/Enum.spec.js +56 -8
  112. package/dist/parser/tests/statement/Enum.spec.js.map +1 -1
  113. package/dist/parser/tests/statement/InterfaceStatement.spec.js +16 -2
  114. package/dist/parser/tests/statement/InterfaceStatement.spec.js.map +1 -1
  115. package/dist/parser/tests/statement/PrintStatement.spec.js +72 -57
  116. package/dist/parser/tests/statement/PrintStatement.spec.js.map +1 -1
  117. package/dist/preprocessor/Manifest.js +2 -2
  118. package/dist/preprocessor/Manifest.js.map +1 -1
  119. package/dist/preprocessor/Preprocessor.js +10 -6
  120. package/dist/preprocessor/Preprocessor.js.map +1 -1
  121. package/dist/roku-types/data.json +1002 -788
  122. package/dist/roku-types/index.d.ts +64 -239
  123. package/dist/types/DynamicType.d.ts +1 -0
  124. package/dist/types/DynamicType.js +1 -0
  125. package/dist/types/DynamicType.js.map +1 -1
  126. package/dist/util.d.ts +57 -16
  127. package/dist/util.js +139 -30
  128. package/dist/util.js.map +1 -1
  129. package/dist/validators/ClassValidator.d.ts +4 -1
  130. package/dist/validators/ClassValidator.js +34 -25
  131. package/dist/validators/ClassValidator.js.map +1 -1
  132. package/package.json +5 -2
@@ -1,13 +1,14 @@
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");
8
7
  const DiagnosticMessages_1 = require("../../DiagnosticMessages");
9
8
  const util_1 = require("../../util");
10
9
  const roku_types_1 = require("../../roku-types");
10
+ const UninitializedType_1 = require("../../types/UninitializedType");
11
+ const BscType_1 = require("../../types/BscType");
11
12
  /**
12
13
  * The lower-case names of all platform-included scenegraph nodes
13
14
  */
@@ -21,16 +22,21 @@ const platformComponentNames = new Set(Object.values(roku_types_1.components).ma
21
22
  class ScopeValidator {
22
23
  constructor() {
23
24
  this.events = [];
24
- this.cache = new Map();
25
+ this.onceCache = new Cache_1.Cache();
26
+ this.multiScopeCache = new Cache_1.Cache();
25
27
  }
26
28
  processEvent(event) {
27
29
  this.events.push(event);
28
- this.validateEnumUsage(event);
30
+ event.scope.linkSymbolTable();
29
31
  this.detectDuplicateEnums(event);
30
32
  this.validateCreateObjectCalls(event);
33
+ this.iterateExpressions(event);
34
+ this.detectInvalidFunctionCalls(event);
35
+ event.scope.unlinkSymbolTable();
31
36
  }
32
37
  reset() {
33
- this.cache.clear();
38
+ this.onceCache.clear();
39
+ this.multiScopeCache.clear();
34
40
  this.events = [];
35
41
  }
36
42
  /**
@@ -38,56 +44,155 @@ class ScopeValidator {
38
44
  * for diagnostics where scope isn't important. (i.e. CreateObject validations)
39
45
  */
40
46
  addDiagnosticOnce(event, diagnostic) {
41
- const key = `${diagnostic.code}-${diagnostic.message}-${util_1.default.rangeToString(diagnostic.range)}`;
42
- if (!this.cache.has(key)) {
43
- this.cache.set(key, true);
47
+ this.onceCache.getOrAdd(`${diagnostic.code}-${diagnostic.message}-${util_1.default.rangeToString(diagnostic.range)}`, () => {
44
48
  event.scope.addDiagnostics([diagnostic]);
49
+ return true;
50
+ });
51
+ }
52
+ addDiagnostic(event, diagnostic) {
53
+ event.scope.addDiagnostics([diagnostic]);
54
+ }
55
+ /**
56
+ * Add a diagnostic (to the first scope) that will have `relatedInformation` for each affected scope
57
+ */
58
+ addMultiScopeDiagnostic(event, diagnostic, message = 'Not defined in scope') {
59
+ var _a, _b;
60
+ 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)}`, () => {
61
+ if (!diagnostic.relatedInformation) {
62
+ diagnostic.relatedInformation = [];
63
+ }
64
+ this.addDiagnostic(event, diagnostic);
65
+ return diagnostic;
66
+ });
67
+ const info = {
68
+ message: `${message} '${event.scope.name}'`
69
+ };
70
+ if ((0, reflection_1.isXmlScope)(event.scope) && ((_b = event.scope.xmlFile) === null || _b === void 0 ? void 0 : _b.srcPath)) {
71
+ 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
72
  }
73
+ else {
74
+ info.location = util_1.default.createLocation(vscode_uri_1.URI.file(diagnostic.file.srcPath).toString(), diagnostic.range);
75
+ }
76
+ diagnostic.relatedInformation.push(info);
46
77
  }
47
78
  /**
48
- * Find all expressions and validate the ones that look like enums
79
+ * Find the closest symbol table for the given position
49
80
  */
50
- validateEnumUsage(event) {
51
- const diagnostics = [];
52
- const membersByEnum = new Cache_1.Cache();
53
- //if there are any enums defined in this scope
54
- const enumLookup = event.scope.getEnumMap();
55
- //skip enum validation if there are no enums defined in this scope
56
- if (enumLookup.size === 0) {
57
- return;
81
+ getSymbolTable(scope, file, position) {
82
+ var _a, _b;
83
+ let symbolTable;
84
+ symbolTable = (_a = file.getFunctionExpressionAtPosition(position)) === null || _a === void 0 ? void 0 : _a.symbolTable;
85
+ if (!symbolTable) {
86
+ symbolTable = (_b = file.getNamespaceStatementForPosition(position)) === null || _b === void 0 ? void 0 : _b.symbolTable;
87
+ }
88
+ if (!symbolTable) {
89
+ symbolTable = scope.symbolTable;
58
90
  }
91
+ return symbolTable;
92
+ }
93
+ iterateExpressions(event) {
94
+ const { scope } = event;
59
95
  event.scope.enumerateOwnFiles((file) => {
60
- var _a;
61
- //skip non-brs files
62
- if (!(0, reflection_1.isBrsFile)(file)) {
63
- return;
64
- }
65
- for (const expression of file.parser.references.expressions) {
66
- const parts = util_1.default.getAllDottedGetParts(expression);
67
- //skip expressions that aren't fully dotted gets
68
- if (!parts) {
69
- continue;
70
- }
71
- //get the name of the enum member
72
- const memberName = parts.pop();
73
- //get the name of the enum (including leading namespace if applicable)
74
- const enumName = parts.join('.');
75
- const lowerEnumName = enumName.toLowerCase();
76
- const theEnum = (_a = enumLookup.get(lowerEnumName)) === null || _a === void 0 ? void 0 : _a.item;
77
- if (theEnum) {
78
- const members = membersByEnum.getOrAdd(lowerEnumName, () => theEnum.getMemberValueMap());
79
- const value = members === null || members === void 0 ? void 0 : members.get(memberName.toLowerCase());
80
- if (!value) {
81
- diagnostics.push(Object.assign(Object.assign({ file: file }, DiagnosticMessages_1.DiagnosticMessages.unknownEnumValue(memberName, theEnum.fullName)), { range: expression.name.range, relatedInformation: [{
82
- message: 'Enum declared here',
83
- location: vscode_languageserver_1.Location.create(vscode_uri_1.URI.file(file.srcPath).toString(), theEnum.tokens.name.range)
84
- }] }));
96
+ var _a, _b, _c;
97
+ if ((0, reflection_1.isBrsFile)(file)) {
98
+ const expressions = [
99
+ ...file.parser.references.expressions,
100
+ //all class "extends <whatever>" expressions
101
+ ...file.parser.references.classStatements.map(x => { var _a; return (_a = x.parentClassName) === null || _a === void 0 ? void 0 : _a.expression; }),
102
+ //all interface "extends <whatever>" expressions
103
+ ...file.parser.references.interfaceStatements.map(x => { var _a; return (_a = x.parentInterfaceName) === null || _a === void 0 ? void 0 : _a.expression; })
104
+ ];
105
+ outer: for (let referenceExpression of expressions) {
106
+ if (!referenceExpression) {
107
+ continue;
108
+ }
109
+ let expression;
110
+ //lift the callee from call expressions to handle namespaced function calls
111
+ if ((0, reflection_1.isCallExpression)(referenceExpression)) {
112
+ expression = referenceExpression.callee;
113
+ }
114
+ else if ((0, reflection_1.isNewExpression)(referenceExpression)) {
115
+ expression = referenceExpression.call.callee;
116
+ }
117
+ else {
118
+ expression = referenceExpression;
119
+ }
120
+ if ((0, reflection_1.isCallExpression)(expression.parent) && !(0, reflection_1.isNewExpression)(referenceExpression)) {
121
+ // function calls are validated in detectInvalidFunctionCalls
122
+ continue;
123
+ }
124
+ const tokens = util_1.default.getAllDottedGetParts(expression);
125
+ if ((tokens === null || tokens === void 0 ? void 0 : tokens.length) > 0) {
126
+ const symbolTable = this.getSymbolTable(scope, file, tokens[0].range.start); //flag all unknown left-most variables
127
+ if (!symbolTable.hasSymbol((_a = tokens[0]) === null || _a === void 0 ? void 0 : _a.text)) {
128
+ this.addMultiScopeDiagnostic(event, Object.assign(Object.assign({ file: file }, DiagnosticMessages_1.DiagnosticMessages.cannotFindName(tokens[0].text)), { range: tokens[0].range }));
129
+ //skip to the next expression
130
+ continue;
131
+ }
132
+ //at this point, we know the first item is a known symbol. find unknown namespace parts after the first part
133
+ if (tokens.length > 1) {
134
+ const firstNamespacePart = tokens.shift().text;
135
+ const firstNamespacePartLower = firstNamespacePart === null || firstNamespacePart === void 0 ? void 0 : firstNamespacePart.toLowerCase();
136
+ const namespaceContainer = scope.namespaceLookup.get(firstNamespacePartLower);
137
+ const enumStatement = scope.getEnum(firstNamespacePartLower);
138
+ //if this isn't a namespace, skip it
139
+ if (!namespaceContainer && !enumStatement) {
140
+ continue;
141
+ }
142
+ //catch unknown namespace items
143
+ const processedNames = [firstNamespacePart];
144
+ for (const token of tokens !== null && tokens !== void 0 ? tokens : []) {
145
+ processedNames.push(token.text);
146
+ const entityName = processedNames.join('.');
147
+ const entityNameLower = entityName.toLowerCase();
148
+ //if this is an enum member, stop validating here to prevent errors further down the chain
149
+ if (scope.getEnumMemberMap().has(entityNameLower)) {
150
+ break;
151
+ }
152
+ if (!scope.getEnumMap().has(entityNameLower) &&
153
+ !scope.getClassMap().has(entityNameLower) &&
154
+ !scope.getConstMap().has(entityNameLower) &&
155
+ !scope.getCallableByName(entityNameLower) &&
156
+ !scope.namespaceLookup.has(entityNameLower)) {
157
+ //if this looks like an enum, provide a nicer error message
158
+ const theEnum = (_b = this.getEnum(scope, entityNameLower)) === null || _b === void 0 ? void 0 : _b.item;
159
+ if (theEnum) {
160
+ 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: [{
161
+ message: 'Enum declared here',
162
+ location: util_1.default.createLocation(vscode_uri_1.URI.file(file.srcPath).toString(), theEnum.tokens.name.range)
163
+ }] }));
164
+ }
165
+ else {
166
+ this.addMultiScopeDiagnostic(event, Object.assign(Object.assign({}, DiagnosticMessages_1.DiagnosticMessages.cannotFindName(token.text, entityName)), { range: token.range, file: file }));
167
+ }
168
+ //no need to add another diagnostic for future unknown items
169
+ continue outer;
170
+ }
171
+ }
172
+ }
85
173
  }
86
174
  }
87
175
  }
88
176
  });
89
- event.scope.addDiagnostics(diagnostics);
90
177
  }
178
+ /**
179
+ * Given a string optionally separated by dots, find an enum related to it.
180
+ * For example, all of these would return the enum: `SomeNamespace.SomeEnum.SomeMember`, SomeEnum.SomeMember, `SomeEnum`
181
+ */
182
+ getEnum(scope, name) {
183
+ //look for the enum directly
184
+ let result = scope.getEnumMap().get(name);
185
+ //assume we've been given the enum.member syntax, so pop the member and try again
186
+ if (!result) {
187
+ const parts = name.split('.');
188
+ parts.pop();
189
+ result = scope.getEnumMap().get(parts.join('.'));
190
+ }
191
+ return result;
192
+ }
193
+ /**
194
+ * Flag duplicate enums
195
+ */
91
196
  detectDuplicateEnums(event) {
92
197
  const diagnostics = [];
93
198
  const enumLocationsByName = new Cache_1.Cache();
@@ -106,13 +211,24 @@ class ScopeValidator {
106
211
  //now that we've collected all enum declarations, flag duplicates
107
212
  for (const enumLocations of enumLocationsByName.values()) {
108
213
  //sort by srcPath to keep the primary enum location consistent
109
- enumLocations.sort((a, b) => { var _a, _b, _c; return (_b = (_a = a.file) === null || _a === void 0 ? void 0 : _a.srcPath) === null || _b === void 0 ? void 0 : _b.localeCompare((_c = b.file) === null || _c === void 0 ? void 0 : _c.srcPath); });
214
+ enumLocations.sort((a, b) => {
215
+ var _a, _b;
216
+ const pathA = (_a = a.file) === null || _a === void 0 ? void 0 : _a.srcPath;
217
+ const pathB = (_b = b.file) === null || _b === void 0 ? void 0 : _b.srcPath;
218
+ if (pathA < pathB) {
219
+ return -1;
220
+ }
221
+ else if (pathA > pathB) {
222
+ return 1;
223
+ }
224
+ return 0;
225
+ });
110
226
  const primaryEnum = enumLocations.shift();
111
227
  const fullName = primaryEnum.statement.fullName;
112
228
  for (const duplicateEnumInfo of enumLocations) {
113
229
  diagnostics.push(Object.assign(Object.assign({}, DiagnosticMessages_1.DiagnosticMessages.duplicateEnumDeclaration(event.scope.name, fullName)), { file: duplicateEnumInfo.file, range: duplicateEnumInfo.statement.tokens.name.range, relatedInformation: [{
114
230
  message: 'Enum declared here',
115
- location: vscode_languageserver_1.Location.create(vscode_uri_1.URI.file(primaryEnum.file.srcPath).toString(), primaryEnum.statement.tokens.name.range)
231
+ location: util_1.default.createLocation(vscode_uri_1.URI.file(primaryEnum.file.srcPath).toString(), primaryEnum.statement.tokens.name.range)
116
232
  }] }));
117
233
  }
118
234
  }
@@ -178,6 +294,97 @@ class ScopeValidator {
178
294
  });
179
295
  event.scope.addDiagnostics(diagnostics);
180
296
  }
297
+ detectInvalidFunctionCalls(event) {
298
+ const diagnostics = [];
299
+ //get a list of all callables, indexed by their lower case names
300
+ let callableContainerMap = event.scope.getCallableContainerMap();
301
+ event.scope.enumerateBrsFiles((file) => {
302
+ diagnostics.push(...this.detectInvalidFunctionCallsForFile(event.scope, file, callableContainerMap));
303
+ });
304
+ event.scope.addDiagnostics(diagnostics);
305
+ }
306
+ /**
307
+ * Find functions with either the wrong type of parameters, or the wrong number of parameters
308
+ */
309
+ detectInvalidFunctionCallsForFile(scope, file, callableContainersByLowerName) {
310
+ var _a, _b, _c, _d;
311
+ const diagnostics = [];
312
+ const specialCaseGlobalFunctions = ['val']; // Global callables with multiple definitions
313
+ if ((0, reflection_1.isBrsFile)(file)) {
314
+ for (let expCall of file.functionCalls) {
315
+ const symbolTypeInfo = file.getSymbolTypeFromToken(expCall.name, expCall.functionExpression, scope);
316
+ let funcType = symbolTypeInfo.type;
317
+ if ((!(0, reflection_1.isTypedFunctionType)(funcType) && !(0, reflection_1.isDynamicType)(funcType)) || specialCaseGlobalFunctions.includes(expCall.name.text)) {
318
+ // We don't know if this is a function. Try seeing if it is a global
319
+ const callableContainer = util_1.default.getCallableContainerByFunctionCall(callableContainersByLowerName, expCall);
320
+ if (callableContainer) {
321
+ // We found a global callable with correct number of params - use that
322
+ funcType = (_a = callableContainer.callable) === null || _a === void 0 ? void 0 : _a.type;
323
+ }
324
+ else {
325
+ const allowedParamCount = util_1.default.getMinMaxParamCountByFunctionCall(callableContainersByLowerName, expCall);
326
+ if (allowedParamCount) {
327
+ // We found a global callable, but it needs a different number of args
328
+ diagnostics.push(this.getMismatchParamCountDiagnostic(allowedParamCount, expCall, file));
329
+ continue;
330
+ }
331
+ }
332
+ }
333
+ if ((0, reflection_1.isFunctionType)(funcType)) {
334
+ // This is a generic function, and it is callable
335
+ }
336
+ else if ((0, reflection_1.isTypedFunctionType)(funcType)) {
337
+ // Check for Argument count mismatch.
338
+ //get min/max parameter count for callable
339
+ let paramCount = util_1.default.getMinMaxParamCount(funcType.params);
340
+ if (expCall.args.length > paramCount.max || expCall.args.length < paramCount.min) {
341
+ diagnostics.push(this.getMismatchParamCountDiagnostic(paramCount, expCall, file));
342
+ }
343
+ // Check for Argument type mismatch.
344
+ const paramTypeContext = { file: file, scope: scope, position: (_b = expCall.functionExpression.range) === null || _b === void 0 ? void 0 : _b.start };
345
+ const argTypeContext = { file: file, scope: scope, position: (_c = expCall.range) === null || _c === void 0 ? void 0 : _c.start };
346
+ for (let index = 0; index < funcType.params.length; index++) {
347
+ const param = funcType.params[index];
348
+ const arg = expCall.args[index];
349
+ if (!arg) {
350
+ // not enough args
351
+ break;
352
+ }
353
+ let argType = (_d = arg.type) !== null && _d !== void 0 ? _d : new UninitializedType_1.UninitializedType();
354
+ const paramType = (0, BscType_1.getTypeFromContext)(param.type, paramTypeContext);
355
+ if (!paramType) {
356
+ // other error - can not determine what type this parameter should be
357
+ continue;
358
+ }
359
+ argType = (0, BscType_1.getTypeFromContext)(argType, argTypeContext);
360
+ let assignable = argType === null || argType === void 0 ? void 0 : argType.isAssignableTo(paramType, argTypeContext);
361
+ if (!assignable) {
362
+ // TODO TYPES: perhaps this should be a strict mode setting?
363
+ assignable = argType === null || argType === void 0 ? void 0 : argType.isConvertibleTo(paramType, argTypeContext);
364
+ }
365
+ if (!assignable) {
366
+ diagnostics.push(Object.assign(Object.assign({}, DiagnosticMessages_1.DiagnosticMessages.argumentTypeMismatch(argType === null || argType === void 0 ? void 0 : argType.toString(argTypeContext), paramType.toString(paramTypeContext))), { range: arg === null || arg === void 0 ? void 0 : arg.range, file: file }));
367
+ }
368
+ }
369
+ }
370
+ else if ((0, reflection_1.isInvalidType)(symbolTypeInfo.type)) {
371
+ // TODO TYPES: standard member functions like integer.ToStr() are not detectable yet.
372
+ }
373
+ else if ((0, reflection_1.isDynamicType)(symbolTypeInfo.type)) {
374
+ // maybe this is a function? who knows
375
+ }
376
+ else {
377
+ diagnostics.push(Object.assign(Object.assign({}, DiagnosticMessages_1.DiagnosticMessages.cannotFindName(symbolTypeInfo.expandedTokenText, symbolTypeInfo.fullName)), { range: expCall.range, file: file }));
378
+ }
379
+ }
380
+ }
381
+ return diagnostics;
382
+ }
383
+ getMismatchParamCountDiagnostic(paramCount, expCall, file) {
384
+ const minMaxParamsText = paramCount.min === paramCount.max ? paramCount.max : `${paramCount.min}-${paramCount.max}`;
385
+ const expCallArgCount = expCall.args.length;
386
+ return (Object.assign(Object.assign({}, DiagnosticMessages_1.DiagnosticMessages.mismatchArgumentCount(minMaxParamsText, expCallArgCount)), { range: expCall.nameRange, file: file }));
387
+ }
181
388
  }
182
389
  exports.ScopeValidator = ScopeValidator;
183
390
  //# sourceMappingURL=ScopeValidator.js.map
@@ -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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"}
package/dist/cli.js CHANGED
@@ -6,6 +6,7 @@ const path = require("path");
6
6
  const ProgramBuilder_1 = require("./ProgramBuilder");
7
7
  const vscode_languageserver_1 = require("vscode-languageserver");
8
8
  const util_1 = require("./util");
9
+ const LanguageServer_1 = require("./LanguageServer");
9
10
  let options = yargs
10
11
  .usage('$0', 'BrighterScript, a superset of Roku\'s BrightScript language')
11
12
  .help('help', 'View help information about this tool.')
@@ -32,6 +33,7 @@ let options = yargs
32
33
  .option('source-root', { type: 'string', description: 'Override the root directory path where debugger should locate the source files. The location will be embedded in the source map to help debuggers locate the original source files. This only applies to files found within rootDir. This is useful when you want to preprocess files before passing them to BrighterScript, and want a debugger to open the original files.' })
33
34
  .option('watch', { type: 'boolean', defaultDescription: 'false', description: 'Watch input files.' })
34
35
  .option('require', { type: 'array', description: 'A list of modules to require() on startup. Useful for doing things like ts-node registration.' })
36
+ .option('lsp', { type: 'boolean', defaultDescription: 'false', description: 'Run brighterscript as a language server.' })
35
37
  .check(argv => {
36
38
  var _a;
37
39
  const diagnosticLevel = argv.diagnosticLevel;
@@ -47,15 +49,21 @@ let options = yargs
47
49
  return true;
48
50
  })
49
51
  .argv;
50
- let builder = new ProgramBuilder_1.ProgramBuilder();
51
- builder.run(options).then(() => {
52
- //if this is a single run (i.e. not watch mode) and there are error diagnostics, return an error code
53
- const hasError = !!builder.getDiagnostics().find(x => x.severity === vscode_languageserver_1.DiagnosticSeverity.Error);
54
- if (builder.options.watch === false && hasError) {
52
+ if (options.lsp) {
53
+ const server = new LanguageServer_1.LanguageServer();
54
+ server.run();
55
+ }
56
+ else {
57
+ let builder = new ProgramBuilder_1.ProgramBuilder();
58
+ builder.run(options).then(() => {
59
+ //if this is a single run (i.e. not watch mode) and there are error diagnostics, return an error code
60
+ const hasError = !!builder.getDiagnostics().find(x => x.severity === vscode_languageserver_1.DiagnosticSeverity.Error);
61
+ if (builder.options.watch === false && hasError) {
62
+ process.exit(1);
63
+ }
64
+ }).catch((error) => {
65
+ console.error(error);
55
66
  process.exit(1);
56
- }
57
- }).catch((error) => {
58
- console.error(error);
59
- process.exit(1);
60
- });
67
+ });
68
+ }
61
69
  //# sourceMappingURL=cli.js.map
package/dist/cli.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}