brighterscript 0.71.1 → 0.72.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/bsconfig.schema.json +75 -0
- package/dist/BsConfig.d.ts +90 -5
- package/dist/CodeActionUtil.d.ts +17 -0
- package/dist/CodeActionUtil.js.map +1 -1
- package/dist/CommentFlagProcessor.d.ts +16 -12
- package/dist/CommentFlagProcessor.js +141 -59
- package/dist/CommentFlagProcessor.js.map +1 -1
- package/dist/DiagnosticMessages.d.ts +32 -1
- package/dist/DiagnosticMessages.js +37 -2
- package/dist/DiagnosticMessages.js.map +1 -1
- package/dist/LanguageServer.d.ts +15 -2
- package/dist/LanguageServer.js +100 -7
- package/dist/LanguageServer.js.map +1 -1
- package/dist/Program.d.ts +80 -1
- package/dist/Program.js +217 -2
- package/dist/Program.js.map +1 -1
- package/dist/ProgramBuilder.d.ts +1 -8
- package/dist/ProgramBuilder.js +31 -11
- package/dist/ProgramBuilder.js.map +1 -1
- package/dist/Scope.d.ts +53 -7
- package/dist/Scope.js +28 -66
- package/dist/Scope.js.map +1 -1
- package/dist/ScopeNamespaceLookup.d.ts +73 -0
- package/dist/ScopeNamespaceLookup.js +240 -0
- package/dist/ScopeNamespaceLookup.js.map +1 -0
- package/dist/SymbolTable.d.ts +9 -2
- package/dist/SymbolTable.js +10 -5
- package/dist/SymbolTable.js.map +1 -1
- package/dist/bscPlugin/BscPlugin.d.ts +3 -1
- package/dist/bscPlugin/BscPlugin.js +8 -0
- package/dist/bscPlugin/BscPlugin.js.map +1 -1
- package/dist/bscPlugin/codeActions/CodeActionsProcessor.d.ts +38 -0
- package/dist/bscPlugin/codeActions/CodeActionsProcessor.js +259 -18
- package/dist/bscPlugin/codeActions/CodeActionsProcessor.js.map +1 -1
- package/dist/bscPlugin/codeActions/CodeActionsProcessor.spec.js +360 -10
- package/dist/bscPlugin/codeActions/CodeActionsProcessor.spec.js.map +1 -1
- package/dist/bscPlugin/codeActions/FixAllCodeActionsProcessor.d.ts +17 -0
- package/dist/bscPlugin/codeActions/FixAllCodeActionsProcessor.js +66 -0
- package/dist/bscPlugin/codeActions/FixAllCodeActionsProcessor.js.map +1 -0
- package/dist/bscPlugin/codeActions/codeActionHelpers.d.ts +18 -0
- package/dist/bscPlugin/codeActions/codeActionHelpers.js +29 -0
- package/dist/bscPlugin/codeActions/codeActionHelpers.js.map +1 -0
- package/dist/bscPlugin/selectionRanges/SelectionRangesProcessor.d.ts +7 -0
- package/dist/bscPlugin/selectionRanges/SelectionRangesProcessor.js +74 -0
- package/dist/bscPlugin/selectionRanges/SelectionRangesProcessor.js.map +1 -0
- package/dist/bscPlugin/selectionRanges/SelectionRangesProcessor.spec.d.ts +1 -0
- package/dist/bscPlugin/selectionRanges/SelectionRangesProcessor.spec.js +298 -0
- package/dist/bscPlugin/selectionRanges/SelectionRangesProcessor.spec.js.map +1 -0
- package/dist/bscPlugin/transpile/BrsFilePreTranspileProcessor.d.ts +2 -0
- package/dist/bscPlugin/transpile/BrsFilePreTranspileProcessor.js +49 -4
- package/dist/bscPlugin/transpile/BrsFilePreTranspileProcessor.js.map +1 -1
- package/dist/bscPlugin/validation/BrsFileValidator.d.ts +13 -0
- package/dist/bscPlugin/validation/BrsFileValidator.js +55 -0
- package/dist/bscPlugin/validation/BrsFileValidator.js.map +1 -1
- package/dist/bscPlugin/validation/BrsFileValidator.spec.js +316 -0
- package/dist/bscPlugin/validation/BrsFileValidator.spec.js.map +1 -1
- package/dist/bscPlugin/validation/ScopeValidator.d.ts +11 -0
- package/dist/bscPlugin/validation/ScopeValidator.js +69 -0
- package/dist/bscPlugin/validation/ScopeValidator.js.map +1 -1
- package/dist/cli.js +13 -0
- package/dist/cli.js.map +1 -1
- package/dist/diagnosticUtils.d.ts +51 -1
- package/dist/diagnosticUtils.js +222 -1
- package/dist/diagnosticUtils.js.map +1 -1
- package/dist/files/BrsFile.d.ts +15 -0
- package/dist/files/BrsFile.js +92 -7
- package/dist/files/BrsFile.js.map +1 -1
- package/dist/files/BrsFile.spec.js +347 -3
- package/dist/files/BrsFile.spec.js.map +1 -1
- package/dist/files/XmlFile.js +2 -1
- package/dist/files/XmlFile.js.map +1 -1
- package/dist/files/XmlFile.spec.js +50 -0
- package/dist/files/XmlFile.spec.js.map +1 -1
- package/dist/interfaces.d.ts +66 -2
- package/dist/lexer/TokenKind.d.ts +8 -0
- package/dist/lexer/TokenKind.js +21 -1
- package/dist/lexer/TokenKind.js.map +1 -1
- package/dist/lsp/DocumentManager.spec.js +1 -1
- package/dist/lsp/DocumentManager.spec.js.map +1 -1
- package/dist/lsp/LspProject.d.ts +49 -1
- package/dist/lsp/Project.d.ts +33 -1
- package/dist/lsp/Project.js +107 -3
- package/dist/lsp/Project.js.map +1 -1
- package/dist/lsp/Project.spec.js +146 -9
- package/dist/lsp/Project.spec.js.map +1 -1
- package/dist/lsp/ProjectManager.d.ts +38 -2
- package/dist/lsp/ProjectManager.js +131 -5
- package/dist/lsp/ProjectManager.js.map +1 -1
- package/dist/lsp/ProjectManager.spec.js +272 -1
- package/dist/lsp/ProjectManager.spec.js.map +1 -1
- package/dist/lsp/worker/WorkerThreadProject.d.ts +27 -2
- package/dist/lsp/worker/WorkerThreadProject.js +16 -0
- package/dist/lsp/worker/WorkerThreadProject.js.map +1 -1
- package/dist/lsp/worker/WorkerThreadProject.spec.js +2 -1
- package/dist/lsp/worker/WorkerThreadProject.spec.js.map +1 -1
- package/dist/parser/Parser.d.ts +22 -0
- package/dist/parser/Parser.js +57 -16
- package/dist/parser/Parser.js.map +1 -1
- package/dist/parser/Parser.spec.js +239 -0
- package/dist/parser/Parser.spec.js.map +1 -1
- package/dist/parser/TranspileState.d.ts +4 -2
- package/dist/parser/TranspileState.js +3 -3
- package/dist/parser/TranspileState.js.map +1 -1
- package/dist/parser/tests/controlFlow/For.spec.js +47 -0
- package/dist/parser/tests/controlFlow/For.spec.js.map +1 -1
- package/dist/parser/tests/controlFlow/ForEach.spec.js +37 -0
- package/dist/parser/tests/controlFlow/ForEach.spec.js.map +1 -1
- package/dist/parser/tests/controlFlow/While.spec.js +49 -0
- package/dist/parser/tests/controlFlow/While.spec.js.map +1 -1
- package/dist/parser/tests/expression/Call.spec.js +4 -5
- package/dist/parser/tests/expression/Call.spec.js.map +1 -1
- package/dist/parser/tests/expression/Function.spec.js +2 -2
- package/dist/parser/tests/expression/Function.spec.js.map +1 -1
- package/dist/parser/tests/statement/ConstStatement.spec.js +218 -1
- package/dist/parser/tests/statement/ConstStatement.spec.js.map +1 -1
- package/dist/parser/tests/statement/Enum.spec.js +2 -0
- package/dist/parser/tests/statement/Enum.spec.js.map +1 -1
- package/dist/util.d.ts +26 -0
- package/dist/util.js +87 -8
- package/dist/util.js.map +1 -1
- package/package.json +4 -2
|
@@ -0,0 +1,240 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.ScopeNamespaceLookup = void 0;
|
|
4
|
+
const reflection_1 = require("./astUtils/reflection");
|
|
5
|
+
/**
|
|
6
|
+
* The per-scope namespace lookup. Implements `Map<string, NamespaceContainer>` so existing
|
|
7
|
+
* plugin and internal consumers (which iterate, `.get`, `.has`, `.size`, etc.) keep working.
|
|
8
|
+
*
|
|
9
|
+
* Internally lazy: `get(name)` builds the container for that name only, by intersecting
|
|
10
|
+
* the program-level `(name -> contributing files)` map with the scope's file set.
|
|
11
|
+
*
|
|
12
|
+
* Sharing primitives:
|
|
13
|
+
* - When exactly one in-scope file contributes to a namespace (the dominant case under
|
|
14
|
+
* a typical build), the container's heavy fields point directly at the file's pre-built
|
|
15
|
+
* `NamespaceFileContribution` data — including its symbolTable. Two scopes pulling in
|
|
16
|
+
* the same file get containers wrapping the same inner data.
|
|
17
|
+
* - When multiple in-scope files contribute, the container is built per-scope by merging
|
|
18
|
+
* contributions. This path is rare in practice but must be correct: it covers cases
|
|
19
|
+
* where a namespace is split across files that are all in the same scope (e.g. a shared
|
|
20
|
+
* declaration file plus theme-specific extensions).
|
|
21
|
+
*
|
|
22
|
+
* Iteration (`keys` / `values` / `entries` / `forEach`) populates every container, since
|
|
23
|
+
* "give me everything" callers don't benefit from laziness. This matches the cost of the
|
|
24
|
+
* pre-Phase-4 `buildNamespaceLookup` and only fires from LSP completion paths.
|
|
25
|
+
*/
|
|
26
|
+
class ScopeNamespaceLookup extends Map {
|
|
27
|
+
constructor(scope) {
|
|
28
|
+
super();
|
|
29
|
+
this.scope = scope;
|
|
30
|
+
/** Set to true after `populateAll` runs so iteration doesn't keep re-checking. */
|
|
31
|
+
this.isFullyBuilt = false;
|
|
32
|
+
}
|
|
33
|
+
ensureNameIndex() {
|
|
34
|
+
if (this.nameSet) {
|
|
35
|
+
return;
|
|
36
|
+
}
|
|
37
|
+
const nameSet = new Set();
|
|
38
|
+
const childrenByParent = new Map();
|
|
39
|
+
for (const file of this.scope.getAllFiles()) {
|
|
40
|
+
if ((0, reflection_1.isBrsFile)(file)) {
|
|
41
|
+
// eslint-disable-next-line @typescript-eslint/dot-notation
|
|
42
|
+
for (const nameLower of file['getNamespaceContributions']().keys()) {
|
|
43
|
+
nameSet.add(nameLower);
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
for (const name of nameSet) {
|
|
48
|
+
const lastDot = name.lastIndexOf('.');
|
|
49
|
+
if (lastDot > 0) {
|
|
50
|
+
const parentLower = name.substring(0, lastDot);
|
|
51
|
+
let arr = childrenByParent.get(parentLower);
|
|
52
|
+
if (!arr) {
|
|
53
|
+
arr = [];
|
|
54
|
+
childrenByParent.set(parentLower, arr);
|
|
55
|
+
}
|
|
56
|
+
arr.push(name);
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
this.nameSet = nameSet;
|
|
60
|
+
this.childrenByParent = childrenByParent;
|
|
61
|
+
}
|
|
62
|
+
getInScopeBrsFiles() {
|
|
63
|
+
if (!this.inScopeBrsFiles) {
|
|
64
|
+
const set = new Set();
|
|
65
|
+
for (const file of this.scope.getAllFiles()) {
|
|
66
|
+
if ((0, reflection_1.isBrsFile)(file)) {
|
|
67
|
+
set.add(file);
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
this.inScopeBrsFiles = set;
|
|
71
|
+
}
|
|
72
|
+
return this.inScopeBrsFiles;
|
|
73
|
+
}
|
|
74
|
+
has(key) {
|
|
75
|
+
const lower = key === null || key === void 0 ? void 0 : key.toLowerCase();
|
|
76
|
+
if (!lower) {
|
|
77
|
+
return false;
|
|
78
|
+
}
|
|
79
|
+
if (super.has(lower)) {
|
|
80
|
+
return super.get(lower) !== undefined;
|
|
81
|
+
}
|
|
82
|
+
this.ensureNameIndex();
|
|
83
|
+
return this.nameSet.has(lower);
|
|
84
|
+
}
|
|
85
|
+
get(key) {
|
|
86
|
+
const lower = key === null || key === void 0 ? void 0 : key.toLowerCase();
|
|
87
|
+
if (!lower) {
|
|
88
|
+
return undefined;
|
|
89
|
+
}
|
|
90
|
+
if (super.has(lower)) {
|
|
91
|
+
return super.get(lower);
|
|
92
|
+
}
|
|
93
|
+
this.ensureNameIndex();
|
|
94
|
+
if (!this.nameSet.has(lower)) {
|
|
95
|
+
//memoize the negative result so repeated misses are cheap
|
|
96
|
+
super.set(lower, undefined);
|
|
97
|
+
return undefined;
|
|
98
|
+
}
|
|
99
|
+
const container = this.buildContainer(lower);
|
|
100
|
+
super.set(lower, container);
|
|
101
|
+
return container;
|
|
102
|
+
}
|
|
103
|
+
get size() {
|
|
104
|
+
this.ensureNameIndex();
|
|
105
|
+
return this.nameSet.size;
|
|
106
|
+
}
|
|
107
|
+
keys() {
|
|
108
|
+
this.populateAll();
|
|
109
|
+
return super.keys();
|
|
110
|
+
}
|
|
111
|
+
values() {
|
|
112
|
+
this.populateAll();
|
|
113
|
+
return super.values();
|
|
114
|
+
}
|
|
115
|
+
entries() {
|
|
116
|
+
this.populateAll();
|
|
117
|
+
return super.entries();
|
|
118
|
+
}
|
|
119
|
+
[Symbol.iterator]() {
|
|
120
|
+
return this.entries();
|
|
121
|
+
}
|
|
122
|
+
forEach(callback, thisArg) {
|
|
123
|
+
this.populateAll();
|
|
124
|
+
super.forEach(callback, thisArg);
|
|
125
|
+
}
|
|
126
|
+
populateAll() {
|
|
127
|
+
if (this.isFullyBuilt) {
|
|
128
|
+
return;
|
|
129
|
+
}
|
|
130
|
+
this.ensureNameIndex();
|
|
131
|
+
for (const name of this.nameSet) {
|
|
132
|
+
this.get(name);
|
|
133
|
+
}
|
|
134
|
+
//drop entries memoized as undefined so iteration only visits real containers
|
|
135
|
+
for (const [key, value] of [...super.entries()]) {
|
|
136
|
+
if (value === undefined) {
|
|
137
|
+
super.delete(key);
|
|
138
|
+
}
|
|
139
|
+
}
|
|
140
|
+
this.isFullyBuilt = true;
|
|
141
|
+
}
|
|
142
|
+
buildContainer(nameLower) {
|
|
143
|
+
// eslint-disable-next-line @typescript-eslint/dot-notation
|
|
144
|
+
const candidateFiles = this.scope.program['getNamespaceContributors'](nameLower);
|
|
145
|
+
if (!candidateFiles || candidateFiles.size === 0) {
|
|
146
|
+
return undefined;
|
|
147
|
+
}
|
|
148
|
+
const inScopeFiles = this.getInScopeBrsFiles();
|
|
149
|
+
const inScopeContributions = [];
|
|
150
|
+
for (const file of candidateFiles) {
|
|
151
|
+
if (inScopeFiles.has(file)) {
|
|
152
|
+
// eslint-disable-next-line @typescript-eslint/dot-notation
|
|
153
|
+
const contribution = file['getNamespaceContributions']().get(nameLower);
|
|
154
|
+
if (contribution) {
|
|
155
|
+
inScopeContributions.push(contribution);
|
|
156
|
+
}
|
|
157
|
+
}
|
|
158
|
+
}
|
|
159
|
+
if (inScopeContributions.length === 0) {
|
|
160
|
+
return undefined;
|
|
161
|
+
}
|
|
162
|
+
if (inScopeContributions.length === 1) {
|
|
163
|
+
return this.wrapSingleContribution(inScopeContributions[0], nameLower);
|
|
164
|
+
}
|
|
165
|
+
return this.aggregateContributions(inScopeContributions, nameLower);
|
|
166
|
+
}
|
|
167
|
+
/**
|
|
168
|
+
* Fast path: single in-scope contributor. The wrapper is per-scope (so its
|
|
169
|
+
* `namespaces` field can hold scope-specific children), but every other field
|
|
170
|
+
* points directly at the contribution's pre-built data.
|
|
171
|
+
*/
|
|
172
|
+
wrapSingleContribution(contribution, nameLower) {
|
|
173
|
+
//field order matches the NamespaceContainer interface declaration so the
|
|
174
|
+
//fast-path and slow-path containers share a single V8 hidden class.
|
|
175
|
+
return {
|
|
176
|
+
file: contribution.file,
|
|
177
|
+
fullName: contribution.fullName,
|
|
178
|
+
nameRange: contribution.nameRange,
|
|
179
|
+
lastPartName: contribution.lastPartName,
|
|
180
|
+
namespaces: this.buildScopedChildren(nameLower),
|
|
181
|
+
statements: contribution.statements,
|
|
182
|
+
classStatements: contribution.classStatements,
|
|
183
|
+
functionStatements: contribution.functionStatements,
|
|
184
|
+
enumStatements: contribution.enumStatements,
|
|
185
|
+
constStatements: contribution.constStatements,
|
|
186
|
+
symbolTable: contribution.symbolTable
|
|
187
|
+
};
|
|
188
|
+
}
|
|
189
|
+
/**
|
|
190
|
+
* Slow path: multiple in-scope contributors. The merged statement collections and
|
|
191
|
+
* symbolTable live at the program level (`Program.getAggregateNamespaceContainer`),
|
|
192
|
+
* keyed by `(nameLower, sorted-contributor-pkgPaths)`. Two scopes with the same
|
|
193
|
+
* in-scope file set for this namespace share the same aggregate object, just like
|
|
194
|
+
* the fast path shares the per-file contribution.
|
|
195
|
+
*
|
|
196
|
+
* The wrapper container itself is per-scope so its `namespaces` (children) field can
|
|
197
|
+
* reflect the querying scope's file set.
|
|
198
|
+
*/
|
|
199
|
+
aggregateContributions(contributions, nameLower) {
|
|
200
|
+
// eslint-disable-next-line @typescript-eslint/dot-notation
|
|
201
|
+
const aggregate = this.scope.program['getAggregateNamespaceContainer'](nameLower, contributions);
|
|
202
|
+
//field order matches the NamespaceContainer interface declaration so fast-path
|
|
203
|
+
//and slow-path containers share a single V8 hidden class
|
|
204
|
+
return {
|
|
205
|
+
file: aggregate.file,
|
|
206
|
+
fullName: aggregate.fullName,
|
|
207
|
+
nameRange: aggregate.nameRange,
|
|
208
|
+
lastPartName: aggregate.lastPartName,
|
|
209
|
+
namespaces: this.buildScopedChildren(nameLower),
|
|
210
|
+
statements: aggregate.statements,
|
|
211
|
+
classStatements: aggregate.classStatements,
|
|
212
|
+
functionStatements: aggregate.functionStatements,
|
|
213
|
+
enumStatements: aggregate.enumStatements,
|
|
214
|
+
constStatements: aggregate.constStatements,
|
|
215
|
+
symbolTable: aggregate.symbolTable
|
|
216
|
+
};
|
|
217
|
+
}
|
|
218
|
+
/**
|
|
219
|
+
* Build the scope-filtered children map for a parent namespace. Walks the
|
|
220
|
+
* pre-computed `childrenByParent` index and recursively materializes each
|
|
221
|
+
* in-scope child container.
|
|
222
|
+
*/
|
|
223
|
+
buildScopedChildren(parentNameLower) {
|
|
224
|
+
const children = new Map();
|
|
225
|
+
this.ensureNameIndex();
|
|
226
|
+
const childNames = this.childrenByParent.get(parentNameLower);
|
|
227
|
+
if (!childNames) {
|
|
228
|
+
return children;
|
|
229
|
+
}
|
|
230
|
+
for (const childName of childNames) {
|
|
231
|
+
const child = this.get(childName);
|
|
232
|
+
if (child) {
|
|
233
|
+
children.set(child.lastPartName.toLowerCase(), child);
|
|
234
|
+
}
|
|
235
|
+
}
|
|
236
|
+
return children;
|
|
237
|
+
}
|
|
238
|
+
}
|
|
239
|
+
exports.ScopeNamespaceLookup = ScopeNamespaceLookup;
|
|
240
|
+
//# sourceMappingURL=ScopeNamespaceLookup.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ScopeNamespaceLookup.js","sourceRoot":"","sources":["../src/ScopeNamespaceLookup.ts"],"names":[],"mappings":"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"}
|
package/dist/SymbolTable.d.ts
CHANGED
|
@@ -57,8 +57,10 @@ export declare class SymbolTable {
|
|
|
57
57
|
*/
|
|
58
58
|
addSymbol(name: string, range: Range, type: BscType): void;
|
|
59
59
|
/**
|
|
60
|
-
* Adds all the symbols from another table to this one
|
|
61
|
-
*
|
|
60
|
+
* Adds all the symbols from another table to this one.
|
|
61
|
+
* Source symbols are shared by reference (not cloned) since BscSymbol is treated as immutable.
|
|
62
|
+
* The destination still owns its own array per key, so subsequent addSymbol calls on either
|
|
63
|
+
* table do not leak across.
|
|
62
64
|
*/
|
|
63
65
|
mergeSymbolTable(symbolTable: SymbolTable): void;
|
|
64
66
|
/**
|
|
@@ -66,6 +68,11 @@ export declare class SymbolTable {
|
|
|
66
68
|
*/
|
|
67
69
|
private toJSON;
|
|
68
70
|
}
|
|
71
|
+
/**
|
|
72
|
+
* A symbol entry stored in a SymbolTable.
|
|
73
|
+
* Treated as immutable once added: range and type must not be reassigned, and the object
|
|
74
|
+
* may be shared by reference across multiple symbol tables (e.g. via mergeSymbolTable).
|
|
75
|
+
*/
|
|
69
76
|
export interface BscSymbol {
|
|
70
77
|
name: string;
|
|
71
78
|
range: Range;
|
package/dist/SymbolTable.js
CHANGED
|
@@ -104,14 +104,19 @@ class SymbolTable {
|
|
|
104
104
|
});
|
|
105
105
|
}
|
|
106
106
|
/**
|
|
107
|
-
* Adds all the symbols from another table to this one
|
|
108
|
-
*
|
|
107
|
+
* Adds all the symbols from another table to this one.
|
|
108
|
+
* Source symbols are shared by reference (not cloned) since BscSymbol is treated as immutable.
|
|
109
|
+
* The destination still owns its own array per key, so subsequent addSymbol calls on either
|
|
110
|
+
* table do not leak across.
|
|
109
111
|
*/
|
|
110
112
|
mergeSymbolTable(symbolTable) {
|
|
111
|
-
for (
|
|
112
|
-
|
|
113
|
-
|
|
113
|
+
for (const [key, sourceSymbols] of symbolTable.symbolMap) {
|
|
114
|
+
let destSymbols = this.symbolMap.get(key);
|
|
115
|
+
if (!destSymbols) {
|
|
116
|
+
destSymbols = [];
|
|
117
|
+
this.symbolMap.set(key, destSymbols);
|
|
114
118
|
}
|
|
119
|
+
destSymbols.push(...sourceSymbols);
|
|
115
120
|
}
|
|
116
121
|
}
|
|
117
122
|
/**
|
package/dist/SymbolTable.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SymbolTable.js","sourceRoot":"","sources":["../src/SymbolTable.ts"],"names":[],"mappings":";;;AAGA;;;GAGG;AACH,MAAa,WAAW;IACpB,YACW,IAAY,EACnB,cAAoC;QAD7B,SAAI,GAAJ,IAAI,CAAQ;QAQvB;;;WAGG;QACK,cAAS,GAAG,IAAI,GAAG,EAAuB,CAAC;QAE3C,oBAAe,GAAG,EAA2B,CAAC;QAuB9C,aAAQ,GAAG,IAAI,GAAG,EAAe,CAAC;QAlCtC,IAAI,cAAc,EAAE;YAChB,IAAI,CAAC,kBAAkB,CAAC,cAAc,CAAC,CAAC;SAC3C;IACL,CAAC;IAUD;;OAEG;IACI,kBAAkB,CAAC,QAA6B;QACnD,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IACxC,CAAC;IAED;;OAEG;IACI,iBAAiB;QACpB,IAAI,CAAC,eAAe,CAAC,GAAG,EAAE,CAAC;IAC/B,CAAC;IAED;;OAEG;IACH,IAAW,MAAM;;QACb,OAAO,MAAA,MAAA,IAAI,CAAC,eAAe,EAAC,IAAI,CAAC,eAAe,CAAC,MAAM,GAAG,CAAC,CAAC,kDAAI,CAAC;IACrE,CAAC;IAID;;OAEG;IACI,UAAU,CAAC,OAAoB;QAClC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;IAC/B,CAAC;IAED;;OAEG;IACI,aAAa,CAAC,OAAoB;QACrC,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;IAClC,CAAC;IAED;;;;;;;OAOG;IACH,SAAS,CAAC,IAAY,EAAE,YAAY,GAAG,IAAI;QACvC,OAAO,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,YAAY,CAAC,CAAC;IAChD,CAAC;IAED;;;;;;;OAOG;IACH,SAAS,CAAC,IAAY,EAAE,YAAY,GAAG,IAAI;;QACvC,MAAM,GAAG,GAAG,IAAI,CAAC,WAAW,EAAE,CAAC;QAC/B,IAAI,MAA+B,CAAC;QACpC,wBAAwB;QACxB,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,EAAE;YACpC,OAAO,MAAM,CAAC;SACjB;QACD,oCAAoC;QACpC,KAAK,IAAI,OAAO,IAAI,IAAI,CAAC,QAAQ,EAAE;YAC/B,IAAI,CAAC,MAAM,GAAG,OAAO,CAAC,SAAS,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,EAAE;gBACvC,OAAO,MAAM,CAAC;aACjB;SACJ;QACD,8BAA8B;QAC9B,IAAI,YAAY,IAAI,CAAC,MAAM,GAAG,MAAA,IAAI,CAAC,MAAM,0CAAE,SAAS,CAAC,GAAG,CAAC,CAAC,EAAE;YACxD,OAAO,MAAM,CAAC;SACjB;IACL,CAAC;IAED;;OAEG;IACH,SAAS,CAAC,IAAY,EAAE,KAAY,EAAE,IAAa;;QAC/C,MAAM,GAAG,GAAG,IAAI,CAAC,WAAW,EAAE,CAAC;QAC/B,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE;YAC1B,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;SAC/B;QACD,MAAA,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,GAAG,CAAC,0CAAE,IAAI,CAAC;YAC1B,IAAI,EAAE,IAAI;YACV,KAAK,EAAE,KAAK;YACZ,IAAI,EAAE,IAAI;SACb,CAAC,CAAC;IACP,CAAC;IAED
|
|
1
|
+
{"version":3,"file":"SymbolTable.js","sourceRoot":"","sources":["../src/SymbolTable.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,14 +1,16 @@
|
|
|
1
|
-
import type { BeforeFileTranspileEvent, Plugin, OnFileValidateEvent, OnGetCodeActionsEvent, ProvideHoverEvent, OnGetSemanticTokensEvent, OnScopeValidateEvent, ProvideCompletionsEvent, ProvideDefinitionEvent, ProvideReferencesEvent, ProvideDocumentSymbolsEvent, ProvideWorkspaceSymbolsEvent } from '../interfaces';
|
|
1
|
+
import type { BeforeFileTranspileEvent, Plugin, OnFileValidateEvent, OnGetCodeActionsEvent, OnGetSourceFixAllCodeActionsEvent, ProvideHoverEvent, OnGetSemanticTokensEvent, OnScopeValidateEvent, ProvideCompletionsEvent, ProvideDefinitionEvent, ProvideReferencesEvent, ProvideDocumentSymbolsEvent, ProvideWorkspaceSymbolsEvent, ProvideSelectionRangesEvent } from '../interfaces';
|
|
2
2
|
import type { Program } from '../Program';
|
|
3
3
|
export declare class BscPlugin implements Plugin {
|
|
4
4
|
name: string;
|
|
5
5
|
onGetCodeActions(event: OnGetCodeActionsEvent): void;
|
|
6
|
+
onGetSourceFixAllCodeActions(event: OnGetSourceFixAllCodeActionsEvent): void;
|
|
6
7
|
provideHover(event: ProvideHoverEvent): void;
|
|
7
8
|
provideDocumentSymbols(event: ProvideDocumentSymbolsEvent): import("vscode-languageserver-types").DocumentSymbol[];
|
|
8
9
|
provideWorkspaceSymbols(event: ProvideWorkspaceSymbolsEvent): import("vscode-languageserver-types").WorkspaceSymbol[];
|
|
9
10
|
provideCompletions(event: ProvideCompletionsEvent): void;
|
|
10
11
|
provideDefinition(event: ProvideDefinitionEvent): void;
|
|
11
12
|
provideReferences(event: ProvideReferencesEvent): void;
|
|
13
|
+
provideSelectionRanges(event: ProvideSelectionRangesEvent): void;
|
|
12
14
|
onGetSemanticTokens(event: OnGetSemanticTokensEvent): void;
|
|
13
15
|
onFileValidate(event: OnFileValidateEvent): void;
|
|
14
16
|
private scopeValidator;
|
|
@@ -3,6 +3,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
3
3
|
exports.BscPlugin = void 0;
|
|
4
4
|
const reflection_1 = require("../astUtils/reflection");
|
|
5
5
|
const CodeActionsProcessor_1 = require("./codeActions/CodeActionsProcessor");
|
|
6
|
+
const FixAllCodeActionsProcessor_1 = require("./codeActions/FixAllCodeActionsProcessor");
|
|
6
7
|
const CompletionsProcessor_1 = require("./completions/CompletionsProcessor");
|
|
7
8
|
const DefinitionProvider_1 = require("./definition/DefinitionProvider");
|
|
8
9
|
const DocumentSymbolProcessor_1 = require("./symbols/DocumentSymbolProcessor");
|
|
@@ -15,6 +16,7 @@ const ProgramValidator_1 = require("./validation/ProgramValidator");
|
|
|
15
16
|
const ScopeValidator_1 = require("./validation/ScopeValidator");
|
|
16
17
|
const XmlFileValidator_1 = require("./validation/XmlFileValidator");
|
|
17
18
|
const WorkspaceSymbolProcessor_1 = require("./symbols/WorkspaceSymbolProcessor");
|
|
19
|
+
const SelectionRangesProcessor_1 = require("./selectionRanges/SelectionRangesProcessor");
|
|
18
20
|
class BscPlugin {
|
|
19
21
|
constructor() {
|
|
20
22
|
this.name = 'BscPlugin';
|
|
@@ -23,6 +25,9 @@ class BscPlugin {
|
|
|
23
25
|
onGetCodeActions(event) {
|
|
24
26
|
new CodeActionsProcessor_1.CodeActionsProcessor(event).process();
|
|
25
27
|
}
|
|
28
|
+
onGetSourceFixAllCodeActions(event) {
|
|
29
|
+
new FixAllCodeActionsProcessor_1.FixAllCodeActionsProcessor(event).process();
|
|
30
|
+
}
|
|
26
31
|
provideHover(event) {
|
|
27
32
|
return new HoverProcessor_1.HoverProcessor(event).process();
|
|
28
33
|
}
|
|
@@ -41,6 +46,9 @@ class BscPlugin {
|
|
|
41
46
|
provideReferences(event) {
|
|
42
47
|
new ReferencesProvider_1.ReferencesProvider(event).process();
|
|
43
48
|
}
|
|
49
|
+
provideSelectionRanges(event) {
|
|
50
|
+
new SelectionRangesProcessor_1.SelectionRangesProcessor(event).process();
|
|
51
|
+
}
|
|
44
52
|
onGetSemanticTokens(event) {
|
|
45
53
|
if ((0, reflection_1.isBrsFile)(event.file)) {
|
|
46
54
|
return new BrsFileSemanticTokensProcessor_1.BrsFileSemanticTokensProcessor(event).process();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"BscPlugin.js","sourceRoot":"","sources":["../../src/bscPlugin/BscPlugin.ts"],"names":[],"mappings":";;;AAAA,uDAA8D;AAG9D,6EAA0E;AAC1E,6EAA0E;AAC1E,wEAAqE;AACrE,+EAA4E;AAC5E,2DAAwD;AACxD,wEAAqE;AACrE,oGAAiG;AACjG,2FAAwF;AACxF,oEAAiE;AACjE,oEAAiE;AACjE,gEAA6D;AAC7D,oEAAiE;AACjE,iFAA8E;
|
|
1
|
+
{"version":3,"file":"BscPlugin.js","sourceRoot":"","sources":["../../src/bscPlugin/BscPlugin.ts"],"names":[],"mappings":";;;AAAA,uDAA8D;AAG9D,6EAA0E;AAC1E,yFAAsF;AACtF,6EAA0E;AAC1E,wEAAqE;AACrE,+EAA4E;AAC5E,2DAAwD;AACxD,wEAAqE;AACrE,oGAAiG;AACjG,2FAAwF;AACxF,oEAAiE;AACjE,oEAAiE;AACjE,gEAA6D;AAC7D,oEAAiE;AACjE,iFAA8E;AAC9E,yFAAsF;AAEtF,MAAa,SAAS;IAAtB;QACW,SAAI,GAAG,WAAW,CAAC;QAoDlB,mBAAc,GAAG,IAAI,+BAAc,EAAE,CAAC;IAiBlD,CAAC;IAnEU,gBAAgB,CAAC,KAA4B;QAChD,IAAI,2CAAoB,CAAC,KAAK,CAAC,CAAC,OAAO,EAAE,CAAC;IAC9C,CAAC;IAEM,4BAA4B,CAAC,KAAwC;QACxE,IAAI,uDAA0B,CAAC,KAAK,CAAC,CAAC,OAAO,EAAE,CAAC;IACpD,CAAC;IAEM,YAAY,CAAC,KAAwB;QACxC,OAAO,IAAI,+BAAc,CAAC,KAAK,CAAC,CAAC,OAAO,EAAE,CAAC;IAC/C,CAAC;IAEM,sBAAsB,CAAC,KAAkC;QAC5D,OAAO,IAAI,iDAAuB,CAAC,KAAK,CAAC,CAAC,OAAO,EAAE,CAAC;IACxD,CAAC;IAEM,uBAAuB,CAAC,KAAmC;QAC9D,OAAO,IAAI,mDAAwB,CAAC,KAAK,CAAC,CAAC,OAAO,EAAE,CAAC;IACzD,CAAC;IAEM,kBAAkB,CAAC,KAA8B;QACpD,IAAI,2CAAoB,CAAC,KAAK,CAAC,CAAC,OAAO,EAAE,CAAC;IAC9C,CAAC;IAEM,iBAAiB,CAAC,KAA6B;QAClD,IAAI,uCAAkB,CAAC,KAAK,CAAC,CAAC,OAAO,EAAE,CAAC;IAC5C,CAAC;IAEM,iBAAiB,CAAC,KAA6B;QAClD,IAAI,uCAAkB,CAAC,KAAK,CAAC,CAAC,OAAO,EAAE,CAAC;IAC5C,CAAC;IAEM,sBAAsB,CAAC,KAAkC;QAC5D,IAAI,mDAAwB,CAAC,KAAK,CAAC,CAAC,OAAO,EAAE,CAAC;IAClD,CAAC;IAEM,mBAAmB,CAAC,KAA+B;QACtD,IAAI,IAAA,sBAAS,EAAC,KAAK,CAAC,IAAI,CAAC,EAAE;YACvB,OAAO,IAAI,+DAA8B,CAAC,KAAY,CAAC,CAAC,OAAO,EAAE,CAAC;SACrE;IACL,CAAC;IAEM,cAAc,CAAC,KAA0B;QAC5C,IAAI,IAAA,sBAAS,EAAC,KAAK,CAAC,IAAI,CAAC,EAAE;YACvB,OAAO,IAAI,mCAAgB,CAAC,KAAY,CAAC,CAAC,OAAO,EAAE,CAAC;SACvD;aAAM,IAAI,IAAA,sBAAS,EAAC,KAAK,CAAC,IAAI,CAAC,EAAE;YAC9B,OAAO,IAAI,mCAAgB,CAAC,KAAY,CAAC,CAAC,OAAO,EAAE,CAAC;SACvD;IACL,CAAC;IAIM,eAAe,CAAC,KAA2B;QAC9C,IAAI,CAAC,cAAc,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC;IAC5C,CAAC;IAEM,oBAAoB,CAAC,OAAgB;QACxC,IAAI,mCAAgB,CAAC,OAAO,CAAC,CAAC,OAAO,EAAE,CAAC;QACxC,uDAAuD;QACvD,IAAI,CAAC,cAAc,CAAC,KAAK,EAAE,CAAC;IAChC,CAAC;IAEM,mBAAmB,CAAC,KAA+B;QACtD,IAAI,IAAA,sBAAS,EAAC,KAAK,CAAC,IAAI,CAAC,EAAE;YACvB,OAAO,IAAI,2DAA4B,CAAC,KAAY,CAAC,CAAC,OAAO,EAAE,CAAC;SACnE;IACL,CAAC;CACJ;AAtED,8BAsEC"}
|
|
@@ -6,6 +6,39 @@ export declare class CodeActionsProcessor {
|
|
|
6
6
|
* Processes all diagnostics in the event and emits code actions for each recognized diagnostic code.
|
|
7
7
|
*/
|
|
8
8
|
process(): void;
|
|
9
|
+
/**
|
|
10
|
+
* For any diagnostic with a code, offers two quick-fix actions:
|
|
11
|
+
* - "Disable {code} for this line": adds the code to an existing `bs:disable-line` or
|
|
12
|
+
* `bs:disable-next-line` directive on/above the diagnostic if present, otherwise inserts
|
|
13
|
+
* a new `bs:disable-next-line: {code}` comment on the line above.
|
|
14
|
+
* - "Disable {code} for this file": adds the code to an existing header-level `bs:disable`
|
|
15
|
+
* directive if present, otherwise inserts a new `bs:disable: {code}` at the top of the file.
|
|
16
|
+
*
|
|
17
|
+
* Comment placement and the line-vs-next-line preference are centralized here so they can be
|
|
18
|
+
* revisited without touching the directive parser.
|
|
19
|
+
*/
|
|
20
|
+
private suggestDisableDiagnosticQuickFixes;
|
|
21
|
+
/**
|
|
22
|
+
* Returns the file change that suppresses `codeStr` via a directive comment, or `null` when no
|
|
23
|
+
* change is needed (the existing directive already covers the code, or already suppresses
|
|
24
|
+
* everything). When `existing` is set, the result is a replace that swaps the directive comment
|
|
25
|
+
* for the text from `buildReplacementText`. When `existing` is null, the result is an insert
|
|
26
|
+
* built from `buildInsert`.
|
|
27
|
+
*/
|
|
28
|
+
private getDiagnosticSuppressionChange;
|
|
29
|
+
private mergeCodes;
|
|
30
|
+
/**
|
|
31
|
+
* Walks the file's tokens and returns existing `bs:disable-{line,next-line}` and header-level
|
|
32
|
+
* `bs:disable` directives that would cover the diagnostic on `diagLine`. Used so the suppression
|
|
33
|
+
* quick fixes can extend an existing directive instead of stacking new ones.
|
|
34
|
+
*/
|
|
35
|
+
private findExistingDisableDirectives;
|
|
36
|
+
/**
|
|
37
|
+
* Decides where in the file a header-level `bs:disable` directive should be inserted, returning
|
|
38
|
+
* the position plus any prefix/suffix needed so the directive lands on its own line in
|
|
39
|
+
* the header (before the first executable statement / root XML element).
|
|
40
|
+
*/
|
|
41
|
+
private getDisableFileInsertion;
|
|
9
42
|
/**
|
|
10
43
|
* Builds a map of diagnostic code → all matching diagnostics in the current file for each
|
|
11
44
|
* code in `eventCodes`. Scope-level codes are not present in `file.getDiagnostics()` so they
|
|
@@ -59,6 +92,11 @@ export declare class CodeActionsProcessor {
|
|
|
59
92
|
* Adds code actions to insert the missing `override` keyword before a method declaration.
|
|
60
93
|
*/
|
|
61
94
|
private suggestMissingOverrideQuickFixes;
|
|
95
|
+
/**
|
|
96
|
+
* Adds one code action per legal terminator. The first entry of `expected` is marked
|
|
97
|
+
* `isPreferred`, matching the parser's convention of listing the canonical terminator first.
|
|
98
|
+
*/
|
|
99
|
+
private suggestMismatchedEndingTokenQuickFixes;
|
|
62
100
|
/**
|
|
63
101
|
* Adds code actions to remove the invalid `override` keyword from a constructor method.
|
|
64
102
|
*/
|