brighterscript 0.66.0-alpha.4 → 0.66.0-alpha.5

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 (182) hide show
  1. package/CHANGELOG.md +17 -0
  2. package/dist/DiagnosticMessages.d.ts +6 -1
  3. package/dist/DiagnosticMessages.js +5 -0
  4. package/dist/DiagnosticMessages.js.map +1 -1
  5. package/dist/LanguageServer.d.ts +1 -0
  6. package/dist/LanguageServer.js +8 -5
  7. package/dist/LanguageServer.js.map +1 -1
  8. package/dist/Program.d.ts +3 -8
  9. package/dist/Program.js +3 -51
  10. package/dist/Program.js.map +1 -1
  11. package/dist/ProgramBuilder.js +14 -2
  12. package/dist/ProgramBuilder.js.map +1 -1
  13. package/dist/Scope.d.ts +1 -13
  14. package/dist/Scope.js +10 -65
  15. package/dist/Scope.js.map +1 -1
  16. package/dist/SymbolTable.d.ts +12 -10
  17. package/dist/SymbolTable.js +33 -24
  18. package/dist/SymbolTable.js.map +1 -1
  19. package/dist/astUtils/creators.js +5 -3
  20. package/dist/astUtils/creators.js.map +1 -1
  21. package/dist/astUtils/reflection.d.ts +3 -1
  22. package/dist/astUtils/reflection.js +12 -1
  23. package/dist/astUtils/reflection.js.map +1 -1
  24. package/dist/astUtils/reflection.spec.js +2 -1
  25. package/dist/astUtils/reflection.spec.js.map +1 -1
  26. package/dist/bscPlugin/CallExpressionInfo.d.ts +3 -3
  27. package/dist/bscPlugin/CallExpressionInfo.js.map +1 -1
  28. package/dist/bscPlugin/completions/CompletionsProcessor.d.ts +39 -1
  29. package/dist/bscPlugin/completions/CompletionsProcessor.js +305 -3
  30. package/dist/bscPlugin/completions/CompletionsProcessor.js.map +1 -1
  31. package/dist/bscPlugin/completions/CompletionsProcessor.spec.d.ts +1 -0
  32. package/dist/bscPlugin/completions/CompletionsProcessor.spec.js +1369 -0
  33. package/dist/bscPlugin/completions/CompletionsProcessor.spec.js.map +1 -0
  34. package/dist/bscPlugin/hover/HoverProcessor.d.ts +9 -4
  35. package/dist/bscPlugin/hover/HoverProcessor.js +64 -67
  36. package/dist/bscPlugin/hover/HoverProcessor.js.map +1 -1
  37. package/dist/bscPlugin/hover/HoverProcessor.spec.js +107 -4
  38. package/dist/bscPlugin/hover/HoverProcessor.spec.js.map +1 -1
  39. package/dist/bscPlugin/validation/BrsFileValidator.js +18 -15
  40. package/dist/bscPlugin/validation/BrsFileValidator.js.map +1 -1
  41. package/dist/bscPlugin/validation/ScopeValidator.d.ts +10 -1
  42. package/dist/bscPlugin/validation/ScopeValidator.js +85 -42
  43. package/dist/bscPlugin/validation/ScopeValidator.js.map +1 -1
  44. package/dist/bscPlugin/validation/ScopeValidator.spec.js +276 -0
  45. package/dist/bscPlugin/validation/ScopeValidator.spec.js.map +1 -1
  46. package/dist/diagnosticUtils.d.ts +7 -2
  47. package/dist/diagnosticUtils.js +43 -15
  48. package/dist/diagnosticUtils.js.map +1 -1
  49. package/dist/files/BrsFile.Class.spec.js +10 -8
  50. package/dist/files/BrsFile.Class.spec.js.map +1 -1
  51. package/dist/files/BrsFile.d.ts +3 -20
  52. package/dist/files/BrsFile.js +7 -355
  53. package/dist/files/BrsFile.js.map +1 -1
  54. package/dist/files/BrsFile.spec.js +2 -248
  55. package/dist/files/BrsFile.spec.js.map +1 -1
  56. package/dist/files/XmlFile.d.ts +1 -6
  57. package/dist/files/XmlFile.js +0 -13
  58. package/dist/files/XmlFile.js.map +1 -1
  59. package/dist/files/XmlFile.spec.js +0 -36
  60. package/dist/files/XmlFile.spec.js.map +1 -1
  61. package/dist/interfaces.d.ts +8 -1
  62. package/dist/interfaces.js.map +1 -1
  63. package/dist/lexer/Lexer.d.ts +12 -0
  64. package/dist/lexer/Lexer.js +27 -2
  65. package/dist/lexer/Lexer.js.map +1 -1
  66. package/dist/lexer/Lexer.spec.js +40 -0
  67. package/dist/lexer/Lexer.spec.js.map +1 -1
  68. package/dist/lexer/Token.d.ts +4 -0
  69. package/dist/lexer/Token.js.map +1 -1
  70. package/dist/lexer/TokenKind.d.ts +4 -0
  71. package/dist/lexer/TokenKind.js +10 -1
  72. package/dist/lexer/TokenKind.js.map +1 -1
  73. package/dist/parser/AstNode.d.ts +8 -1
  74. package/dist/parser/AstNode.js +16 -0
  75. package/dist/parser/AstNode.js.map +1 -1
  76. package/dist/parser/Expression.d.ts +16 -1
  77. package/dist/parser/Expression.js +43 -1
  78. package/dist/parser/Expression.js.map +1 -1
  79. package/dist/parser/Parser.d.ts +7 -0
  80. package/dist/parser/Parser.js +46 -6
  81. package/dist/parser/Parser.js.map +1 -1
  82. package/dist/parser/Parser.spec.js +327 -3
  83. package/dist/parser/Parser.spec.js.map +1 -1
  84. package/dist/parser/SGTypes.d.ts +1 -1
  85. package/dist/parser/Statement.d.ts +16 -3
  86. package/dist/parser/Statement.js +53 -15
  87. package/dist/parser/Statement.js.map +1 -1
  88. package/dist/parser/tests/Parser.spec.js +2 -1
  89. package/dist/parser/tests/Parser.spec.js.map +1 -1
  90. package/dist/parser/tests/controlFlow/For.spec.js +16 -8
  91. package/dist/parser/tests/controlFlow/For.spec.js.map +1 -1
  92. package/dist/parser/tests/controlFlow/ForEach.spec.js +12 -6
  93. package/dist/parser/tests/controlFlow/ForEach.spec.js.map +1 -1
  94. package/dist/parser/tests/controlFlow/While.spec.js +8 -4
  95. package/dist/parser/tests/controlFlow/While.spec.js.map +1 -1
  96. package/dist/parser/tests/expression/Call.spec.js +4 -4
  97. package/dist/parser/tests/expression/Call.spec.js.map +1 -1
  98. package/dist/parser/tests/expression/NullCoalescenceExpression.spec.js +13 -13
  99. package/dist/parser/tests/expression/NullCoalescenceExpression.spec.js.map +1 -1
  100. package/dist/parser/tests/statement/ConstStatement.spec.js +0 -33
  101. package/dist/parser/tests/statement/ConstStatement.spec.js.map +1 -1
  102. package/dist/parser/tests/statement/Enum.spec.js +1 -257
  103. package/dist/parser/tests/statement/Enum.spec.js.map +1 -1
  104. package/dist/parser/tests/statement/PrintStatement.spec.js +6 -3
  105. package/dist/parser/tests/statement/PrintStatement.spec.js.map +1 -1
  106. package/dist/parser/tests/statement/ReturnStatement.spec.js +5 -3
  107. package/dist/parser/tests/statement/ReturnStatement.spec.js.map +1 -1
  108. package/dist/parser/tests/statement/Set.spec.js +26 -13
  109. package/dist/parser/tests/statement/Set.spec.js.map +1 -1
  110. package/dist/roku-types/data.json +158 -137
  111. package/dist/roku-types/index.d.ts +3 -38
  112. package/dist/types/ArrayType.d.ts +3 -1
  113. package/dist/types/ArrayType.js +42 -6
  114. package/dist/types/ArrayType.js.map +1 -1
  115. package/dist/types/ArrayType.spec.js +21 -2
  116. package/dist/types/ArrayType.spec.js.map +1 -1
  117. package/dist/types/BooleanType.d.ts +0 -3
  118. package/dist/types/BooleanType.js +5 -6
  119. package/dist/types/BooleanType.js.map +1 -1
  120. package/dist/types/BscType.d.ts +6 -2
  121. package/dist/types/BscType.js +20 -4
  122. package/dist/types/BscType.js.map +1 -1
  123. package/dist/types/BuiltInInterfaceAdder.d.ts +15 -0
  124. package/dist/types/BuiltInInterfaceAdder.js +93 -0
  125. package/dist/types/BuiltInInterfaceAdder.js.map +1 -0
  126. package/dist/types/BuiltInInterfaceAdder.spec.d.ts +1 -0
  127. package/dist/types/BuiltInInterfaceAdder.spec.js +109 -0
  128. package/dist/types/BuiltInInterfaceAdder.spec.js.map +1 -0
  129. package/dist/types/ClassType.d.ts +4 -0
  130. package/dist/types/ClassType.js +25 -1
  131. package/dist/types/ClassType.js.map +1 -1
  132. package/dist/types/DoubleType.d.ts +1 -4
  133. package/dist/types/DoubleType.js +5 -6
  134. package/dist/types/DoubleType.js.map +1 -1
  135. package/dist/types/DynamicType.js +2 -0
  136. package/dist/types/DynamicType.js.map +1 -1
  137. package/dist/types/EnumType.d.ts +1 -3
  138. package/dist/types/EnumType.js +6 -5
  139. package/dist/types/EnumType.js.map +1 -1
  140. package/dist/types/FloatType.d.ts +1 -4
  141. package/dist/types/FloatType.js +5 -6
  142. package/dist/types/FloatType.js.map +1 -1
  143. package/dist/types/FunctionType.js +5 -1
  144. package/dist/types/FunctionType.js.map +1 -1
  145. package/dist/types/IntegerType.d.ts +1 -4
  146. package/dist/types/IntegerType.js +5 -6
  147. package/dist/types/IntegerType.js.map +1 -1
  148. package/dist/types/InterfaceType.js +2 -1
  149. package/dist/types/InterfaceType.js.map +1 -1
  150. package/dist/types/InvalidType.d.ts +1 -1
  151. package/dist/types/InvalidType.js +5 -1
  152. package/dist/types/InvalidType.js.map +1 -1
  153. package/dist/types/LongIntegerType.d.ts +1 -4
  154. package/dist/types/LongIntegerType.js +5 -6
  155. package/dist/types/LongIntegerType.js.map +1 -1
  156. package/dist/types/ObjectType.js +2 -0
  157. package/dist/types/ObjectType.js.map +1 -1
  158. package/dist/types/ReferenceType.d.ts +12 -0
  159. package/dist/types/ReferenceType.js +69 -12
  160. package/dist/types/ReferenceType.js.map +1 -1
  161. package/dist/types/ReferenceType.spec.js +15 -0
  162. package/dist/types/ReferenceType.spec.js.map +1 -1
  163. package/dist/types/StringType.d.ts +1 -4
  164. package/dist/types/StringType.js +4 -5
  165. package/dist/types/StringType.js.map +1 -1
  166. package/dist/types/TypedFunctionType.js +9 -2
  167. package/dist/types/TypedFunctionType.js.map +1 -1
  168. package/dist/types/UnionType.d.ts +2 -0
  169. package/dist/types/UnionType.js +22 -1
  170. package/dist/types/UnionType.js.map +1 -1
  171. package/dist/types/UnionType.spec.js +43 -17
  172. package/dist/types/UnionType.spec.js.map +1 -1
  173. package/dist/types/VoidType.d.ts +1 -1
  174. package/dist/types/VoidType.js +5 -1
  175. package/dist/types/VoidType.js.map +1 -1
  176. package/dist/types/helpers.d.ts +1 -0
  177. package/dist/types/helpers.js +18 -3
  178. package/dist/types/helpers.js.map +1 -1
  179. package/dist/util.d.ts +10 -1
  180. package/dist/util.js +77 -1
  181. package/dist/util.js.map +1 -1
  182. package/package.json +1 -1
@@ -1,6 +1,44 @@
1
- import type { ProvideCompletionsEvent } from '../../interfaces';
1
+ import type { FileReference, ProvideCompletionsEvent } from '../../interfaces';
2
+ import type { Scope } from '../../Scope';
3
+ import type { CompletionItem, Position } from 'vscode-languageserver';
4
+ import type { XmlFile } from '../../files/XmlFile';
5
+ import type { Program } from '../../Program';
6
+ import type { BrsFile } from '../../files/BrsFile';
7
+ import type { FunctionStatement } from '../../parser/Statement';
2
8
  export declare class CompletionsProcessor {
3
9
  private event;
4
10
  constructor(event: ProvideCompletionsEvent);
5
11
  process(): void;
12
+ /**
13
+ * Get all available completions for the specified position
14
+ * @param position the position to get completions
15
+ */
16
+ getXmlFileCompletions(position: Position, file: XmlFile): CompletionItem[];
17
+ /**
18
+ * Get a list of all script imports, relative to the specified pkgPath
19
+ * @param program - reference to teh program
20
+ * @param sourcePkgPath - the pkgPath of the source that wants to resolve script imports
21
+ * @param scriptImport - example script import
22
+ */
23
+ getScriptImportCompletions(program: Program, sourcePkgPath: string, scriptImport: FileReference): CompletionItem[];
24
+ /**
25
+ * Get completions available at the given cursor. This aggregates all values from this file and the current scope.
26
+ */
27
+ getBrsFileCompletions(position: Position, file: BrsFile, scope?: Scope): CompletionItem[];
28
+ private getSymbolsCompletion;
29
+ private getDocumentation;
30
+ private getCompletionKindFromType;
31
+ private isNamespaceTypeWithMemberType;
32
+ private getLabelCompletion;
33
+ createCompletionFromFunctionStatement(statement: FunctionStatement): CompletionItem;
34
+ /**
35
+ * Scan all files for property names, and return them as completions
36
+ */
37
+ getPropertyNameCompletions(scope: Scope): CompletionItem[];
38
+ getAllClassMemberCompletions(scope: Scope): Map<string, CompletionItem>;
6
39
  }
40
+ /**
41
+ * List of completions for all valid keywords/reserved words.
42
+ * Build this list once because it won't change for the lifetime of this process
43
+ */
44
+ export declare const KeywordCompletions: CompletionItem[];
@@ -1,9 +1,12 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.CompletionsProcessor = void 0;
3
+ exports.KeywordCompletions = exports.CompletionsProcessor = void 0;
4
4
  const reflection_1 = require("../../astUtils/reflection");
5
5
  const TokenKind_1 = require("../../lexer/TokenKind");
6
6
  const util_1 = require("../../util");
7
+ const Parser_1 = require("../../parser/Parser");
8
+ const vscode_languageserver_1 = require("vscode-languageserver");
9
+ const SymbolTable_1 = require("../../SymbolTable");
7
10
  class CompletionsProcessor {
8
11
  constructor(event) {
9
12
  this.event = event;
@@ -17,7 +20,7 @@ class CompletionsProcessor {
17
20
  for (const scope of xmlScopes) {
18
21
  let fileLinks = this.event.program.getStatementsForXmlFile(scope);
19
22
  for (let fileLink of fileLinks) {
20
- let pushItem = scope.createCompletionFromFunctionStatement(fileLink.item);
23
+ let pushItem = this.createCompletionFromFunctionStatement(fileLink.item);
21
24
  if (!completionsArray.includes(pushItem.label)) {
22
25
  completionsArray.push(pushItem.label);
23
26
  this.event.completions.push(pushItem);
@@ -33,7 +36,13 @@ class CompletionsProcessor {
33
36
  scopesForFile = scopesForFile.length > 0 ? scopesForFile : [this.event.program.globalScope];
34
37
  //get the completions from all scopes for this file
35
38
  let allCompletions = util_1.util.flatMap(scopesForFile.map(scope => {
36
- return this.event.file.getCompletions(this.event.position, scope);
39
+ if ((0, reflection_1.isXmlFile)(this.event.file)) {
40
+ return this.getXmlFileCompletions(this.event.position, this.event.file);
41
+ }
42
+ else if ((0, reflection_1.isBrsFile)(this.event.file)) {
43
+ return this.getBrsFileCompletions(this.event.position, this.event.file, scope);
44
+ }
45
+ return [];
37
46
  }), c => c);
38
47
  //only keep completions common to every scope for this file
39
48
  let keyCounts = new Map();
@@ -45,6 +54,299 @@ class CompletionsProcessor {
45
54
  }
46
55
  }
47
56
  }
57
+ /**
58
+ * Get all available completions for the specified position
59
+ * @param position the position to get completions
60
+ */
61
+ getXmlFileCompletions(position, file) {
62
+ let scriptImport = util_1.util.getScriptImportAtPosition(file.scriptTagImports, position);
63
+ if (scriptImport) {
64
+ return this.getScriptImportCompletions(file.program, file.pkgPath, scriptImport);
65
+ }
66
+ else {
67
+ return [];
68
+ }
69
+ }
70
+ /**
71
+ * Get a list of all script imports, relative to the specified pkgPath
72
+ * @param program - reference to teh program
73
+ * @param sourcePkgPath - the pkgPath of the source that wants to resolve script imports
74
+ * @param scriptImport - example script import
75
+ */
76
+ getScriptImportCompletions(program, sourcePkgPath, scriptImport) {
77
+ let lowerSourcePkgPath = sourcePkgPath.toLowerCase();
78
+ let result = [];
79
+ /**
80
+ * hashtable to prevent duplicate results
81
+ */
82
+ let resultPkgPaths = {};
83
+ //restrict to only .brs files
84
+ for (let key in program.files) {
85
+ let file = program.files[key];
86
+ if (
87
+ //is a BrightScript or BrighterScript file
88
+ (file.extension === '.bs' || file.extension === '.brs') &&
89
+ //this file is not the current file
90
+ lowerSourcePkgPath !== file.pkgPath.toLowerCase()) {
91
+ //add the relative path
92
+ let relativePath = util_1.util.getRelativePath(sourcePkgPath, file.pkgPath).replace(/\\/g, '/');
93
+ let pkgPathStandardized = file.pkgPath.replace(/\\/g, '/');
94
+ let filePkgPath = `pkg:/${pkgPathStandardized}`;
95
+ let lowerFilePkgPath = filePkgPath.toLowerCase();
96
+ if (!resultPkgPaths[lowerFilePkgPath]) {
97
+ resultPkgPaths[lowerFilePkgPath] = true;
98
+ result.push({
99
+ label: relativePath,
100
+ detail: file.srcPath,
101
+ kind: vscode_languageserver_1.CompletionItemKind.File,
102
+ textEdit: {
103
+ newText: relativePath,
104
+ range: scriptImport.filePathRange
105
+ }
106
+ });
107
+ //add the absolute path
108
+ result.push({
109
+ label: filePkgPath,
110
+ detail: file.srcPath,
111
+ kind: vscode_languageserver_1.CompletionItemKind.File,
112
+ textEdit: {
113
+ newText: filePkgPath,
114
+ range: scriptImport.filePathRange
115
+ }
116
+ });
117
+ }
118
+ }
119
+ }
120
+ return result;
121
+ }
122
+ /**
123
+ * Get completions available at the given cursor. This aggregates all values from this file and the current scope.
124
+ */
125
+ getBrsFileCompletions(position, file, scope) {
126
+ var _a, _b, _c, _d, _e;
127
+ let result = [];
128
+ //handle script import completions
129
+ let scriptImport = util_1.util.getScriptImportAtPosition(file.ownScriptImports, position);
130
+ if (scriptImport) {
131
+ return this.getScriptImportCompletions(file.program, file.pkgPath, scriptImport);
132
+ }
133
+ const currentToken = (_a = file.getTokenAt(position)) !== null && _a !== void 0 ? _a : file.getTokenAt((_b = file.getClosestExpression(position)) === null || _b === void 0 ? void 0 : _b.range.start);
134
+ if (!currentToken) {
135
+ return [];
136
+ }
137
+ //if cursor is within a comment, disable completions
138
+ const tokenKind = currentToken === null || currentToken === void 0 ? void 0 : currentToken.kind;
139
+ if (tokenKind === TokenKind_1.TokenKind.Comment) {
140
+ return [];
141
+ }
142
+ else if (tokenKind === TokenKind_1.TokenKind.StringLiteral || tokenKind === TokenKind_1.TokenKind.TemplateStringQuasi) {
143
+ const match = /^("?)(pkg|libpkg):/.exec(currentToken.text);
144
+ if (match) {
145
+ const [, openingQuote, fileProtocol] = match;
146
+ //include every absolute file path from this scope
147
+ for (const file of scope.getAllFiles()) {
148
+ const pkgPath = `${fileProtocol}:/${file.pkgPath.replace(/\\/g, '/')}`;
149
+ result.push({
150
+ label: pkgPath,
151
+ textEdit: vscode_languageserver_1.TextEdit.replace(util_1.util.createRange(currentToken.range.start.line,
152
+ //+1 to step past the opening quote
153
+ currentToken.range.start.character + (openingQuote ? 1 : 0), currentToken.range.end.line,
154
+ //-1 to exclude the closing quotemark (or the end character if there is no closing quotemark)
155
+ currentToken.range.end.character + (currentToken.text.endsWith('"') ? -1 : 0)), pkgPath),
156
+ kind: vscode_languageserver_1.CompletionItemKind.File
157
+ });
158
+ }
159
+ return result;
160
+ }
161
+ else {
162
+ //do nothing. we don't want to show completions inside of strings...
163
+ return [];
164
+ }
165
+ }
166
+ let expression;
167
+ let shouldLookForMembers = false;
168
+ if (file.tokenFollows(currentToken, TokenKind_1.TokenKind.Goto)) {
169
+ let functionScope = file.getFunctionScopeAtPosition(position);
170
+ return this.getLabelCompletion(functionScope);
171
+ }
172
+ if (((_c = file.getPreviousToken(currentToken)) === null || _c === void 0 ? void 0 : _c.kind) === TokenKind_1.TokenKind.Dot || file.isTokenNextToTokenKind(currentToken, TokenKind_1.TokenKind.Dot)) {
173
+ const dotToken = currentToken.kind === TokenKind_1.TokenKind.Dot ? currentToken : file.getTokenBefore(currentToken, TokenKind_1.TokenKind.Dot);
174
+ const beforeDotToken = file.getTokenBefore(dotToken);
175
+ expression = file.getClosestExpression(beforeDotToken === null || beforeDotToken === void 0 ? void 0 : beforeDotToken.range.end);
176
+ shouldLookForMembers = true;
177
+ }
178
+ else {
179
+ expression = file.getClosestExpression(this.event.position);
180
+ }
181
+ if (!expression) {
182
+ return [];
183
+ }
184
+ const tokenBefore = file.getTokenBefore(file.getClosestToken(expression.range.start));
185
+ // helper to check get correct symbol tables for look ups
186
+ function getSymbolTableForLookups() {
187
+ if (shouldLookForMembers) {
188
+ let type = expression.getType({ flags: SymbolTable_1.SymbolTypeFlag.runtime });
189
+ if ((0, reflection_1.isEnumType)(type) && !(0, reflection_1.isEnumType)(expression.getType({ flags: SymbolTable_1.SymbolTypeFlag.typetime }))) {
190
+ // enum members are registered in the symbol table as enum type
191
+ // an enum type should ONLY use the enum type's members when called directly
192
+ // since this is not a typetime enum, the actual type is actually an enum member!
193
+ type = type.defaultMemberType;
194
+ }
195
+ // Make sure built in interfaces are added.
196
+ if (type.isResolvable()) {
197
+ type.addBuiltInInterfaces();
198
+ }
199
+ return type === null || type === void 0 ? void 0 : type.getMemberTable();
200
+ }
201
+ const symbolTableToUse = expression.getSymbolTable();
202
+ return symbolTableToUse;
203
+ }
204
+ for (const scope of this.event.scopes) {
205
+ scope.linkSymbolTable();
206
+ let currentSymbols = (_e = (_d = getSymbolTableForLookups()) === null || _d === void 0 ? void 0 : _d.getAllSymbols(SymbolTable_1.SymbolTypeFlag.runtime)) !== null && _e !== void 0 ? _e : [];
207
+ // eslint-disable-next-line @typescript-eslint/switch-exhaustiveness-check
208
+ switch (tokenBefore.kind) {
209
+ case TokenKind_1.TokenKind.New:
210
+ //we are after a new keyword; so we can only be namespaces that have a class or classes at this point
211
+ currentSymbols = currentSymbols.filter(symbol => (0, reflection_1.isClassType)(symbol.type) || this.isNamespaceTypeWithMemberType(symbol.type, reflection_1.isClassType));
212
+ break;
213
+ }
214
+ if (shouldLookForMembers) {
215
+ const tokenType = expression.getType({ flags: SymbolTable_1.SymbolTypeFlag.runtime });
216
+ if ((0, reflection_1.isClassType)(tokenType)) {
217
+ // don't return the constructor as a property
218
+ currentSymbols = currentSymbols.filter((symbol) => symbol.name !== 'new');
219
+ }
220
+ }
221
+ result.push(...this.getSymbolsCompletion(currentSymbols, shouldLookForMembers));
222
+ if (shouldLookForMembers && currentSymbols.length === 0) {
223
+ // could not find members of actual known types.. just try everything
224
+ result.push(...this.getPropertyNameCompletions(scope), ...this.getAllClassMemberCompletions(scope).values());
225
+ }
226
+ scope.unlinkSymbolTable();
227
+ }
228
+ return result;
229
+ }
230
+ getSymbolsCompletion(symbols, areMembers = false) {
231
+ return symbols.map(symbol => {
232
+ var _a, _b, _c;
233
+ // if this is low priority, sort it at the end of the list
234
+ const sortText = ((_a = symbol.data) === null || _a === void 0 ? void 0 : _a.completionPriority) ? 'z'.repeat((_b = symbol.data) === null || _b === void 0 ? void 0 : _b.completionPriority) + symbol.name : undefined;
235
+ return {
236
+ label: symbol.name,
237
+ kind: this.getCompletionKindFromType(symbol.type, symbol.data, areMembers),
238
+ detail: (_c = symbol === null || symbol === void 0 ? void 0 : symbol.type) === null || _c === void 0 ? void 0 : _c.toString(),
239
+ documentation: this.getDocumentation(symbol),
240
+ sortText: sortText
241
+ };
242
+ });
243
+ }
244
+ getDocumentation(symbol) {
245
+ var _a, _b, _c;
246
+ if ((_a = symbol.data) === null || _a === void 0 ? void 0 : _a.description) {
247
+ return (_b = symbol.data) === null || _b === void 0 ? void 0 : _b.description;
248
+ }
249
+ return util_1.util.getNodeDocumentation((_c = symbol.data) === null || _c === void 0 ? void 0 : _c.definingNode);
250
+ }
251
+ getCompletionKindFromType(type, extraData, areMembers = false) {
252
+ if ((0, reflection_1.isConstStatement)(extraData === null || extraData === void 0 ? void 0 : extraData.definingNode)) {
253
+ return vscode_languageserver_1.CompletionItemKind.Constant;
254
+ }
255
+ else if ((0, reflection_1.isClassType)(type)) {
256
+ return vscode_languageserver_1.CompletionItemKind.Class;
257
+ }
258
+ else if ((0, reflection_1.isCallableType)(type)) {
259
+ return areMembers ? vscode_languageserver_1.CompletionItemKind.Method : vscode_languageserver_1.CompletionItemKind.Function;
260
+ }
261
+ else if ((0, reflection_1.isInterfaceType)(type)) {
262
+ return vscode_languageserver_1.CompletionItemKind.Interface;
263
+ }
264
+ else if ((0, reflection_1.isEnumType)(type)) {
265
+ return vscode_languageserver_1.CompletionItemKind.Enum;
266
+ }
267
+ else if ((0, reflection_1.isEnumMemberType)(type)) {
268
+ return vscode_languageserver_1.CompletionItemKind.EnumMember;
269
+ }
270
+ else if ((0, reflection_1.isNamespaceType)(type)) {
271
+ return vscode_languageserver_1.CompletionItemKind.Module;
272
+ }
273
+ return areMembers ? vscode_languageserver_1.CompletionItemKind.Field : vscode_languageserver_1.CompletionItemKind.Variable;
274
+ }
275
+ isNamespaceTypeWithMemberType(nsType, predicate) {
276
+ if (!(0, reflection_1.isNamespaceType)(nsType)) {
277
+ return false;
278
+ }
279
+ const members = nsType.memberTable.getAllSymbols(SymbolTable_1.SymbolTypeFlag.runtime);
280
+ for (const member of members) {
281
+ if (predicate(member.type)) {
282
+ return true;
283
+ }
284
+ else if ((0, reflection_1.isNamespaceType)(member.type)) {
285
+ if (this.isNamespaceTypeWithMemberType(member.type, predicate)) {
286
+ return true;
287
+ }
288
+ }
289
+ }
290
+ return false;
291
+ }
292
+ getLabelCompletion(functionScope) {
293
+ return functionScope.labelStatements.map(label => ({
294
+ label: label.name,
295
+ kind: vscode_languageserver_1.CompletionItemKind.Reference
296
+ }));
297
+ }
298
+ createCompletionFromFunctionStatement(statement) {
299
+ return {
300
+ label: statement.getName(Parser_1.ParseMode.BrighterScript),
301
+ kind: vscode_languageserver_1.CompletionItemKind.Function,
302
+ documentation: statement.getType({ flags: SymbolTable_1.SymbolTypeFlag.runtime }).toString()
303
+ };
304
+ }
305
+ /**
306
+ * Scan all files for property names, and return them as completions
307
+ */
308
+ getPropertyNameCompletions(scope) {
309
+ let results = [];
310
+ scope.enumerateBrsFiles((file) => {
311
+ results.push(...file.propertyNameCompletions);
312
+ });
313
+ return results;
314
+ }
315
+ getAllClassMemberCompletions(scope) {
316
+ let results = new Map();
317
+ let filesSearched = new Set();
318
+ for (const file of scope.getAllFiles()) {
319
+ if ((0, reflection_1.isXmlFile)(file) || filesSearched.has(file)) {
320
+ continue;
321
+ }
322
+ filesSearched.add(file);
323
+ for (let cs of file.parser.references.classStatements) {
324
+ for (let s of [...cs.methods, ...cs.fields]) {
325
+ if (!results.has(s.name.text) && s.name.text.toLowerCase() !== 'new') {
326
+ results.set(s.name.text, {
327
+ label: s.name.text,
328
+ kind: (0, reflection_1.isMethodStatement)(s) ? vscode_languageserver_1.CompletionItemKind.Method : vscode_languageserver_1.CompletionItemKind.Field
329
+ });
330
+ }
331
+ }
332
+ }
333
+ }
334
+ return results;
335
+ }
48
336
  }
49
337
  exports.CompletionsProcessor = CompletionsProcessor;
338
+ /**
339
+ * List of completions for all valid keywords/reserved words.
340
+ * Build this list once because it won't change for the lifetime of this process
341
+ */
342
+ exports.KeywordCompletions = Object.keys(TokenKind_1.Keywords)
343
+ //remove any keywords with whitespace
344
+ .filter(x => !x.includes(' '))
345
+ //create completions
346
+ .map(x => {
347
+ return {
348
+ label: x,
349
+ kind: vscode_languageserver_1.CompletionItemKind.Keyword
350
+ };
351
+ });
50
352
  //# sourceMappingURL=CompletionsProcessor.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"CompletionsProcessor.js","sourceRoot":"","sources":["../../../src/bscPlugin/completions/CompletionsProcessor.ts"],"names":[],"mappings":";;;AAAA,0DAAkE;AAElE,qDAAkD;AAElD,qCAAkC;AAElC,MAAa,oBAAoB;IAC7B,YACY,KAA8B;QAA9B,UAAK,GAAL,KAAK,CAAyB;IAG1C,CAAC;IAEM,OAAO;QACV,IAAI,gBAAgB,GAAG,EAAE,CAAC;QAC1B,IAAI,IAAA,sBAAS,EAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,yBAAyB,CAAC,IAAI,CAAC,KAAK,CAAC,QAAQ,EAAE,qBAAS,CAAC,QAAQ,CAAC,EAAE;YAClH,MAAM,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,SAAS,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,IAAA,uBAAU,EAAC,CAAC,CAAC,CAAe,CAAC;YAC5F,qEAAqE;YACrE,qFAAqF;YACrF,KAAK,MAAM,KAAK,IAAI,SAAS,EAAE;gBAC3B,IAAI,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,uBAAuB,CAAC,KAAK,CAAC,CAAC;gBAClE,KAAK,IAAI,QAAQ,IAAI,SAAS,EAAE;oBAC5B,IAAI,QAAQ,GAAG,KAAK,CAAC,qCAAqC,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;oBAC1E,IAAI,CAAC,gBAAgB,CAAC,QAAQ,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE;wBAC5C,gBAAgB,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;wBACtC,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;qBACzC;iBACJ;aACJ;YACD,0CAA0C;YAC1C,OAAO;SACV;QAED,+BAA+B;QAC/B,IAAI,aAAa,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,gBAAgB,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QAEzE,4FAA4F;QAC5F,aAAa,GAAG,aAAa,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC;QAE5F,mDAAmD;QACnD,IAAI,cAAc,GAAG,WAAI,CAAC,OAAO,CAC7B,aAAa,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE;YACtB,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,KAAK,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC;QACtE,CAAC,CAAC,EACF,CAAC,CAAC,EAAE,CAAC,CAAC,CACT,CAAC;QAEF,2DAA2D;QAC3D,IAAI,SAAS,GAAG,IAAI,GAAG,EAAkB,CAAC;QAC1C,KAAK,IAAI,UAAU,IAAI,cAAc,EAAE;YACnC,IAAI,GAAG,GAAG,GAAG,UAAU,CAAC,KAAK,IAAI,UAAU,CAAC,IAAI,EAAE,CAAC;YACnD,SAAS,CAAC,GAAG,CAAC,GAAG,EAAE,SAAS,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;YACpE,IAAI,SAAS,CAAC,GAAG,CAAC,GAAG,CAAC,KAAK,aAAa,CAAC,MAAM,EAAE;gBAC7C,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;aAC3C;SACJ;IACL,CAAC;CACJ;AAnDD,oDAmDC"}
1
+ {"version":3,"file":"CompletionsProcessor.js","sourceRoot":"","sources":["../../../src/bscPlugin/completions/CompletionsProcessor.ts"],"names":[],"mappings":"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"}