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.
Files changed (121) hide show
  1. package/bsconfig.schema.json +75 -0
  2. package/dist/BsConfig.d.ts +90 -5
  3. package/dist/CodeActionUtil.d.ts +17 -0
  4. package/dist/CodeActionUtil.js.map +1 -1
  5. package/dist/CommentFlagProcessor.d.ts +16 -12
  6. package/dist/CommentFlagProcessor.js +141 -59
  7. package/dist/CommentFlagProcessor.js.map +1 -1
  8. package/dist/DiagnosticMessages.d.ts +32 -1
  9. package/dist/DiagnosticMessages.js +37 -2
  10. package/dist/DiagnosticMessages.js.map +1 -1
  11. package/dist/LanguageServer.d.ts +15 -2
  12. package/dist/LanguageServer.js +100 -7
  13. package/dist/LanguageServer.js.map +1 -1
  14. package/dist/Program.d.ts +80 -1
  15. package/dist/Program.js +217 -2
  16. package/dist/Program.js.map +1 -1
  17. package/dist/ProgramBuilder.d.ts +1 -8
  18. package/dist/ProgramBuilder.js +31 -11
  19. package/dist/ProgramBuilder.js.map +1 -1
  20. package/dist/Scope.d.ts +53 -7
  21. package/dist/Scope.js +28 -66
  22. package/dist/Scope.js.map +1 -1
  23. package/dist/ScopeNamespaceLookup.d.ts +73 -0
  24. package/dist/ScopeNamespaceLookup.js +240 -0
  25. package/dist/ScopeNamespaceLookup.js.map +1 -0
  26. package/dist/SymbolTable.d.ts +9 -2
  27. package/dist/SymbolTable.js +10 -5
  28. package/dist/SymbolTable.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 +38 -0
  33. package/dist/bscPlugin/codeActions/CodeActionsProcessor.js +259 -18
  34. package/dist/bscPlugin/codeActions/CodeActionsProcessor.js.map +1 -1
  35. package/dist/bscPlugin/codeActions/CodeActionsProcessor.spec.js +360 -10
  36. package/dist/bscPlugin/codeActions/CodeActionsProcessor.spec.js.map +1 -1
  37. package/dist/bscPlugin/codeActions/FixAllCodeActionsProcessor.d.ts +17 -0
  38. package/dist/bscPlugin/codeActions/FixAllCodeActionsProcessor.js +66 -0
  39. package/dist/bscPlugin/codeActions/FixAllCodeActionsProcessor.js.map +1 -0
  40. package/dist/bscPlugin/codeActions/codeActionHelpers.d.ts +18 -0
  41. package/dist/bscPlugin/codeActions/codeActionHelpers.js +29 -0
  42. package/dist/bscPlugin/codeActions/codeActionHelpers.js.map +1 -0
  43. package/dist/bscPlugin/selectionRanges/SelectionRangesProcessor.d.ts +7 -0
  44. package/dist/bscPlugin/selectionRanges/SelectionRangesProcessor.js +74 -0
  45. package/dist/bscPlugin/selectionRanges/SelectionRangesProcessor.js.map +1 -0
  46. package/dist/bscPlugin/selectionRanges/SelectionRangesProcessor.spec.d.ts +1 -0
  47. package/dist/bscPlugin/selectionRanges/SelectionRangesProcessor.spec.js +298 -0
  48. package/dist/bscPlugin/selectionRanges/SelectionRangesProcessor.spec.js.map +1 -0
  49. package/dist/bscPlugin/transpile/BrsFilePreTranspileProcessor.d.ts +2 -0
  50. package/dist/bscPlugin/transpile/BrsFilePreTranspileProcessor.js +49 -4
  51. package/dist/bscPlugin/transpile/BrsFilePreTranspileProcessor.js.map +1 -1
  52. package/dist/bscPlugin/validation/BrsFileValidator.d.ts +13 -0
  53. package/dist/bscPlugin/validation/BrsFileValidator.js +55 -0
  54. package/dist/bscPlugin/validation/BrsFileValidator.js.map +1 -1
  55. package/dist/bscPlugin/validation/BrsFileValidator.spec.js +316 -0
  56. package/dist/bscPlugin/validation/BrsFileValidator.spec.js.map +1 -1
  57. package/dist/bscPlugin/validation/ScopeValidator.d.ts +11 -0
  58. package/dist/bscPlugin/validation/ScopeValidator.js +69 -0
  59. package/dist/bscPlugin/validation/ScopeValidator.js.map +1 -1
  60. package/dist/cli.js +13 -0
  61. package/dist/cli.js.map +1 -1
  62. package/dist/diagnosticUtils.d.ts +51 -1
  63. package/dist/diagnosticUtils.js +222 -1
  64. package/dist/diagnosticUtils.js.map +1 -1
  65. package/dist/files/BrsFile.d.ts +15 -0
  66. package/dist/files/BrsFile.js +92 -7
  67. package/dist/files/BrsFile.js.map +1 -1
  68. package/dist/files/BrsFile.spec.js +347 -3
  69. package/dist/files/BrsFile.spec.js.map +1 -1
  70. package/dist/files/XmlFile.js +2 -1
  71. package/dist/files/XmlFile.js.map +1 -1
  72. package/dist/files/XmlFile.spec.js +50 -0
  73. package/dist/files/XmlFile.spec.js.map +1 -1
  74. package/dist/interfaces.d.ts +66 -2
  75. package/dist/lexer/TokenKind.d.ts +8 -0
  76. package/dist/lexer/TokenKind.js +21 -1
  77. package/dist/lexer/TokenKind.js.map +1 -1
  78. package/dist/lsp/DocumentManager.spec.js +1 -1
  79. package/dist/lsp/DocumentManager.spec.js.map +1 -1
  80. package/dist/lsp/LspProject.d.ts +49 -1
  81. package/dist/lsp/Project.d.ts +33 -1
  82. package/dist/lsp/Project.js +107 -3
  83. package/dist/lsp/Project.js.map +1 -1
  84. package/dist/lsp/Project.spec.js +146 -9
  85. package/dist/lsp/Project.spec.js.map +1 -1
  86. package/dist/lsp/ProjectManager.d.ts +38 -2
  87. package/dist/lsp/ProjectManager.js +131 -5
  88. package/dist/lsp/ProjectManager.js.map +1 -1
  89. package/dist/lsp/ProjectManager.spec.js +272 -1
  90. package/dist/lsp/ProjectManager.spec.js.map +1 -1
  91. package/dist/lsp/worker/WorkerThreadProject.d.ts +27 -2
  92. package/dist/lsp/worker/WorkerThreadProject.js +16 -0
  93. package/dist/lsp/worker/WorkerThreadProject.js.map +1 -1
  94. package/dist/lsp/worker/WorkerThreadProject.spec.js +2 -1
  95. package/dist/lsp/worker/WorkerThreadProject.spec.js.map +1 -1
  96. package/dist/parser/Parser.d.ts +22 -0
  97. package/dist/parser/Parser.js +57 -16
  98. package/dist/parser/Parser.js.map +1 -1
  99. package/dist/parser/Parser.spec.js +239 -0
  100. package/dist/parser/Parser.spec.js.map +1 -1
  101. package/dist/parser/TranspileState.d.ts +4 -2
  102. package/dist/parser/TranspileState.js +3 -3
  103. package/dist/parser/TranspileState.js.map +1 -1
  104. package/dist/parser/tests/controlFlow/For.spec.js +47 -0
  105. package/dist/parser/tests/controlFlow/For.spec.js.map +1 -1
  106. package/dist/parser/tests/controlFlow/ForEach.spec.js +37 -0
  107. package/dist/parser/tests/controlFlow/ForEach.spec.js.map +1 -1
  108. package/dist/parser/tests/controlFlow/While.spec.js +49 -0
  109. package/dist/parser/tests/controlFlow/While.spec.js.map +1 -1
  110. package/dist/parser/tests/expression/Call.spec.js +4 -5
  111. package/dist/parser/tests/expression/Call.spec.js.map +1 -1
  112. package/dist/parser/tests/expression/Function.spec.js +2 -2
  113. package/dist/parser/tests/expression/Function.spec.js.map +1 -1
  114. package/dist/parser/tests/statement/ConstStatement.spec.js +218 -1
  115. package/dist/parser/tests/statement/ConstStatement.spec.js.map +1 -1
  116. package/dist/parser/tests/statement/Enum.spec.js +2 -0
  117. package/dist/parser/tests/statement/Enum.spec.js.map +1 -1
  118. package/dist/util.d.ts +26 -0
  119. package/dist/util.js +87 -8
  120. package/dist/util.js.map +1 -1
  121. 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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"}
@@ -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
- * It will overwrite any existing symbols in this table
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;
@@ -104,14 +104,19 @@ class SymbolTable {
104
104
  });
105
105
  }
106
106
  /**
107
- * Adds all the symbols from another table to this one
108
- * It will overwrite any existing symbols in this table
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 (let [, value] of symbolTable.symbolMap) {
112
- for (const symbol of value) {
113
- this.addSymbol(symbol.name, symbol.range, symbol.type);
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
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"SymbolTable.js","sourceRoot":"","sources":["../src/SymbolTable.ts"],"names":[],"mappings":"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"}
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;AAE9E,MAAa,SAAS;IAAtB;QACW,SAAI,GAAG,WAAW,CAAC;QA4ClB,mBAAc,GAAG,IAAI,+BAAc,EAAE,CAAC;IAiBlD,CAAC;IA3DU,gBAAgB,CAAC,KAA4B;QAChD,IAAI,2CAAoB,CAAC,KAAK,CAAC,CAAC,OAAO,EAAE,CAAC;IAC9C,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,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;AA9DD,8BA8DC"}
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
  */