brighterscript 0.71.0 → 0.72.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (94) hide show
  1. package/bsconfig.schema.json +13 -0
  2. package/dist/BsConfig.d.ts +35 -5
  3. package/dist/CodeActionUtil.d.ts +17 -0
  4. package/dist/CodeActionUtil.js.map +1 -1
  5. package/dist/DiagnosticMessages.d.ts +6 -1
  6. package/dist/DiagnosticMessages.js +5 -0
  7. package/dist/DiagnosticMessages.js.map +1 -1
  8. package/dist/LanguageServer.d.ts +15 -2
  9. package/dist/LanguageServer.js +100 -7
  10. package/dist/LanguageServer.js.map +1 -1
  11. package/dist/Program.d.ts +76 -1
  12. package/dist/Program.js +215 -2
  13. package/dist/Program.js.map +1 -1
  14. package/dist/Scope.d.ts +53 -7
  15. package/dist/Scope.js +28 -66
  16. package/dist/Scope.js.map +1 -1
  17. package/dist/ScopeNamespaceLookup.d.ts +73 -0
  18. package/dist/ScopeNamespaceLookup.js +240 -0
  19. package/dist/ScopeNamespaceLookup.js.map +1 -0
  20. package/dist/SymbolTable.d.ts +9 -2
  21. package/dist/SymbolTable.js +10 -5
  22. package/dist/SymbolTable.js.map +1 -1
  23. package/dist/bscPlugin/BscPlugin.d.ts +3 -1
  24. package/dist/bscPlugin/BscPlugin.js +8 -0
  25. package/dist/bscPlugin/BscPlugin.js.map +1 -1
  26. package/dist/bscPlugin/codeActions/CodeActionsProcessor.js +2 -4
  27. package/dist/bscPlugin/codeActions/CodeActionsProcessor.js.map +1 -1
  28. package/dist/bscPlugin/codeActions/FixAllCodeActionsProcessor.d.ts +17 -0
  29. package/dist/bscPlugin/codeActions/FixAllCodeActionsProcessor.js +66 -0
  30. package/dist/bscPlugin/codeActions/FixAllCodeActionsProcessor.js.map +1 -0
  31. package/dist/bscPlugin/codeActions/codeActionHelpers.d.ts +18 -0
  32. package/dist/bscPlugin/codeActions/codeActionHelpers.js +29 -0
  33. package/dist/bscPlugin/codeActions/codeActionHelpers.js.map +1 -0
  34. package/dist/bscPlugin/selectionRanges/SelectionRangesProcessor.d.ts +7 -0
  35. package/dist/bscPlugin/selectionRanges/SelectionRangesProcessor.js +74 -0
  36. package/dist/bscPlugin/selectionRanges/SelectionRangesProcessor.js.map +1 -0
  37. package/dist/bscPlugin/selectionRanges/SelectionRangesProcessor.spec.d.ts +1 -0
  38. package/dist/bscPlugin/selectionRanges/SelectionRangesProcessor.spec.js +298 -0
  39. package/dist/bscPlugin/selectionRanges/SelectionRangesProcessor.spec.js.map +1 -0
  40. package/dist/bscPlugin/transpile/BrsFilePreTranspileProcessor.d.ts +2 -0
  41. package/dist/bscPlugin/transpile/BrsFilePreTranspileProcessor.js +49 -4
  42. package/dist/bscPlugin/transpile/BrsFilePreTranspileProcessor.js.map +1 -1
  43. package/dist/bscPlugin/validation/BrsFileValidator.d.ts +13 -0
  44. package/dist/bscPlugin/validation/BrsFileValidator.js +42 -0
  45. package/dist/bscPlugin/validation/BrsFileValidator.js.map +1 -1
  46. package/dist/bscPlugin/validation/BrsFileValidator.spec.js +101 -0
  47. package/dist/bscPlugin/validation/BrsFileValidator.spec.js.map +1 -1
  48. package/dist/bscPlugin/validation/ScopeValidator.d.ts +11 -0
  49. package/dist/bscPlugin/validation/ScopeValidator.js +69 -0
  50. package/dist/bscPlugin/validation/ScopeValidator.js.map +1 -1
  51. package/dist/files/BrsFile.d.ts +15 -0
  52. package/dist/files/BrsFile.js +88 -5
  53. package/dist/files/BrsFile.js.map +1 -1
  54. package/dist/files/BrsFile.spec.js +156 -3
  55. package/dist/files/BrsFile.spec.js.map +1 -1
  56. package/dist/interfaces.d.ts +51 -1
  57. package/dist/lsp/DocumentManager.spec.js +1 -1
  58. package/dist/lsp/DocumentManager.spec.js.map +1 -1
  59. package/dist/lsp/LspProject.d.ts +30 -1
  60. package/dist/lsp/Project.d.ts +19 -1
  61. package/dist/lsp/Project.js +98 -2
  62. package/dist/lsp/Project.js.map +1 -1
  63. package/dist/lsp/Project.spec.js +146 -9
  64. package/dist/lsp/Project.spec.js.map +1 -1
  65. package/dist/lsp/ProjectManager.d.ts +38 -2
  66. package/dist/lsp/ProjectManager.js +116 -4
  67. package/dist/lsp/ProjectManager.js.map +1 -1
  68. package/dist/lsp/ProjectManager.spec.js +236 -1
  69. package/dist/lsp/ProjectManager.spec.js.map +1 -1
  70. package/dist/lsp/worker/WorkerThreadProject.d.ts +13 -2
  71. package/dist/lsp/worker/WorkerThreadProject.js +9 -0
  72. package/dist/lsp/worker/WorkerThreadProject.js.map +1 -1
  73. package/dist/lsp/worker/WorkerThreadProject.spec.js +2 -1
  74. package/dist/lsp/worker/WorkerThreadProject.spec.js.map +1 -1
  75. package/dist/parser/Parser.d.ts +10 -0
  76. package/dist/parser/Parser.js +18 -3
  77. package/dist/parser/Parser.js.map +1 -1
  78. package/dist/parser/Parser.spec.js +111 -0
  79. package/dist/parser/Parser.spec.js.map +1 -1
  80. package/dist/parser/TranspileState.d.ts +4 -2
  81. package/dist/parser/TranspileState.js +3 -3
  82. package/dist/parser/TranspileState.js.map +1 -1
  83. package/dist/parser/tests/expression/Call.spec.js +4 -5
  84. package/dist/parser/tests/expression/Call.spec.js.map +1 -1
  85. package/dist/parser/tests/expression/Function.spec.js +2 -2
  86. package/dist/parser/tests/expression/Function.spec.js.map +1 -1
  87. package/dist/parser/tests/statement/ConstStatement.spec.js +218 -1
  88. package/dist/parser/tests/statement/ConstStatement.spec.js.map +1 -1
  89. package/dist/parser/tests/statement/Enum.spec.js +2 -0
  90. package/dist/parser/tests/statement/Enum.spec.js.map +1 -1
  91. package/dist/util.d.ts +26 -0
  92. package/dist/util.js +68 -0
  93. package/dist/util.js.map +1 -1
  94. package/package.json +4 -2
@@ -0,0 +1 @@
1
+ {"version":3,"file":"codeActionHelpers.js","sourceRoot":"","sources":["../../../src/bscPlugin/codeActions/codeActionHelpers.ts"],"names":[],"mappings":";;;AAEA,qCAAkC;AAElC;;;;GAIG;AACH,SAAgB,+BAA+B,CAAC,IAAa;;IACzD,MAAM,EAAE,SAAS,EAAE,GAAG,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC;IACtC,OAAO,CAAC,MAAA,SAAS,CAAC,UAAU,CAAC,SAAS,CAAC,UAAU,CAAC,MAAM,GAAG,CAAC,CAAC,mCAAI,SAAS,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC;AAC9F,CAAC;AAHD,0EAGC;AAED;;;;GAIG;AACH,SAAgB,0BAA0B,CAAC,UAAsB,EAAE,QAAgB;IAC/E,OAAO;QACH,IAAI,EAAE,QAAiB;QACvB,QAAQ,EAAE,QAAQ;QAClB,KAAK,EAAE,WAAI,CAAC,WAAW,CACnB,UAAU,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,EAC3B,UAAU,CAAC,KAAK,CAAC,KAAK,CAAC,SAAS,GAAG,QAAQ,CAAC,MAAM,EAClD,UAAU,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,EACzB,UAAU,CAAC,KAAK,CAAC,GAAG,CAAC,SAAS,CACjC;KACJ,CAAC;AACN,CAAC;AAXD,gEAWC"}
@@ -0,0 +1,7 @@
1
+ import type { ProvideSelectionRangesEvent } from '../../interfaces';
2
+ export declare class SelectionRangesProcessor {
3
+ event: ProvideSelectionRangesEvent;
4
+ constructor(event: ProvideSelectionRangesEvent);
5
+ process(): void;
6
+ private buildSelectionRange;
7
+ }
@@ -0,0 +1,74 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.SelectionRangesProcessor = void 0;
4
+ const vscode_languageserver_types_1 = require("vscode-languageserver-types");
5
+ const reflection_1 = require("../../astUtils/reflection");
6
+ class SelectionRangesProcessor {
7
+ constructor(event) {
8
+ this.event = event;
9
+ }
10
+ process() {
11
+ if (!(0, reflection_1.isBrsFile)(this.event.file)) {
12
+ return;
13
+ }
14
+ for (const position of this.event.positions) {
15
+ const selectionRange = this.buildSelectionRange(position);
16
+ if (selectionRange) {
17
+ this.event.selectionRanges.push(selectionRange);
18
+ }
19
+ }
20
+ }
21
+ buildSelectionRange(position) {
22
+ const file = this.event.file;
23
+ if (!(0, reflection_1.isBrsFile)(file)) {
24
+ return undefined;
25
+ }
26
+ // Find the deepest AST node containing this position
27
+ const innerNode = file.ast.findChildAtPosition(position);
28
+ if (!(innerNode === null || innerNode === void 0 ? void 0 : innerNode.range)) {
29
+ return undefined;
30
+ }
31
+ const ranges = [];
32
+ // Many BrightScript AST nodes store identifier names as raw Tokens (not child
33
+ // AstNodes), so findChildAtPosition stops at the enclosing statement/expression.
34
+ // To give the first expansion step a tight "identifier only" range — matching
35
+ // the JS/TS smart-select behaviour — we look up the exact lexer token at the
36
+ // cursor position and use its range as the initial step.
37
+ const token = file.getTokenAt(position);
38
+ if ((token === null || token === void 0 ? void 0 : token.range) && !rangesEqual(token.range, innerNode.range)) {
39
+ ranges.push(token.range);
40
+ }
41
+ // Walk up the AST parent chain, collecting each node's range.
42
+ // Skip duplicate consecutive ranges (e.g. a Block whose range equals its
43
+ // only child statement, or an ExpressionStatement === its expression).
44
+ let node = innerNode;
45
+ while (node) {
46
+ const nodeRange = node.range;
47
+ if (nodeRange && !rangesEqual(nodeRange, ranges[ranges.length - 1])) {
48
+ ranges.push(nodeRange);
49
+ }
50
+ node = node.parent;
51
+ }
52
+ if (ranges.length === 0) {
53
+ return undefined;
54
+ }
55
+ // Build the SelectionRange linked list from outermost → innermost.
56
+ // LSP: the innermost range has `.parent` pointing outward.
57
+ let selectionRange;
58
+ for (let i = ranges.length - 1; i >= 0; i--) {
59
+ selectionRange = vscode_languageserver_types_1.SelectionRange.create(ranges[i], selectionRange);
60
+ }
61
+ return selectionRange;
62
+ }
63
+ }
64
+ exports.SelectionRangesProcessor = SelectionRangesProcessor;
65
+ function rangesEqual(a, b) {
66
+ if (!a || !b) {
67
+ return false;
68
+ }
69
+ return a.start.line === b.start.line &&
70
+ a.start.character === b.start.character &&
71
+ a.end.line === b.end.line &&
72
+ a.end.character === b.end.character;
73
+ }
74
+ //# sourceMappingURL=SelectionRangesProcessor.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SelectionRangesProcessor.js","sourceRoot":"","sources":["../../../src/bscPlugin/selectionRanges/SelectionRangesProcessor.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,298 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const chai_config_spec_1 = require("../../chai-config.spec");
4
+ const Program_1 = require("../../Program");
5
+ const util_1 = require("../../util");
6
+ const testHelpers_spec_1 = require("../../testHelpers.spec");
7
+ describe('SelectionRangesProcessor', () => {
8
+ let program;
9
+ beforeEach(() => {
10
+ program = new Program_1.Program({ rootDir: testHelpers_spec_1.rootDir });
11
+ });
12
+ afterEach(() => {
13
+ program.dispose();
14
+ });
15
+ /**
16
+ * Flatten a SelectionRange linked list (innermost → outermost) into an array
17
+ * of `[startLine, startChar, endLine, endChar]` tuples for easy assertion.
18
+ */
19
+ function flatten(sr) {
20
+ const result = [];
21
+ let current = sr;
22
+ while (current) {
23
+ const { start, end } = current.range;
24
+ result.push([start.line, start.character, end.line, end.character]);
25
+ current = current.parent;
26
+ }
27
+ return result;
28
+ }
29
+ /**
30
+ * Extract the substring of `code` that a `[startLine, startChar, endLine, endChar]` range covers.
31
+ */
32
+ function getText(code, range) {
33
+ const lines = code.split('\n');
34
+ const [startLine, startChar, endLine, endChar] = range;
35
+ if (startLine === endLine) {
36
+ return lines[startLine].slice(startChar, endChar);
37
+ }
38
+ const parts = [lines[startLine].slice(startChar)];
39
+ for (let i = startLine + 1; i < endLine; i++) {
40
+ parts.push(lines[i]);
41
+ }
42
+ parts.push(lines[endLine].slice(0, endChar));
43
+ return parts.join('\n');
44
+ }
45
+ function getSelectionRange(code, line, character) {
46
+ const file = program.setFile('source/main.brs', code);
47
+ program.validate();
48
+ const ranges = program.getSelectionRanges(file.pathAbsolute, [util_1.util.createPosition(line, character)]);
49
+ return ranges[0];
50
+ }
51
+ // -------------------------------------------------------------------------
52
+ // Basic identifier / variable
53
+ // -------------------------------------------------------------------------
54
+ it('expands from identifier token to assignment statement to function', () => {
55
+ const code = (0, testHelpers_spec_1.trim) `
56
+ sub main()
57
+ name = "hello"
58
+ end sub
59
+ `;
60
+ // cursor on 'n' of 'name' (line 1, col 4)
61
+ const sr = getSelectionRange(code, 1, 4);
62
+ const steps = flatten(sr);
63
+ (0, chai_config_spec_1.expect)(getText(code, steps[0])).to.equal('name', 'first step should be the identifier token');
64
+ (0, chai_config_spec_1.expect)(getText(code, steps[1])).to.equal('name = "hello"', 'second step should be the assignment statement');
65
+ (0, chai_config_spec_1.expect)(getText(code, steps[steps.length - 1])).to.equal(code, 'outermost step should be the full sub');
66
+ });
67
+ // -------------------------------------------------------------------------
68
+ // String literal
69
+ // -------------------------------------------------------------------------
70
+ it('expands from string literal to assignment to function', () => {
71
+ const code = (0, testHelpers_spec_1.trim) `
72
+ sub main()
73
+ name = "hello"
74
+ end sub
75
+ `;
76
+ // cursor inside "hello" — col 12 is 'h'
77
+ const sr = getSelectionRange(code, 1, 12);
78
+ const steps = flatten(sr);
79
+ (0, chai_config_spec_1.expect)(getText(code, steps[0])).to.equal('"hello"', 'first step should be the string literal');
80
+ (0, chai_config_spec_1.expect)(getText(code, steps[steps.length - 1])).to.equal(code, 'outermost step should be the full sub');
81
+ });
82
+ // -------------------------------------------------------------------------
83
+ // Dotted-get expression (member access)
84
+ // -------------------------------------------------------------------------
85
+ it('expands name token then full dotted-get chain', () => {
86
+ const code = (0, testHelpers_spec_1.trim) `
87
+ sub main()
88
+ x = m.top.value
89
+ end sub
90
+ `;
91
+ // cursor in the middle of 'value' — col 16
92
+ const sr = getSelectionRange(code, 1, 16);
93
+ const steps = flatten(sr);
94
+ (0, chai_config_spec_1.expect)(getText(code, steps[0])).to.equal('value', 'first step is the name token of the dotted-get');
95
+ (0, chai_config_spec_1.expect)(getText(code, steps[1])).to.equal('m.top.value', 'second step is the full dotted-get expression');
96
+ });
97
+ // -------------------------------------------------------------------------
98
+ // Function call expression
99
+ // -------------------------------------------------------------------------
100
+ it('expands from argument to full function call expression', () => {
101
+ const code = (0, testHelpers_spec_1.trim) `
102
+ sub main()
103
+ foo("hello")
104
+ end sub
105
+ `;
106
+ // cursor on 'h' inside "hello" — col 9
107
+ const sr = getSelectionRange(code, 1, 9);
108
+ const steps = flatten(sr);
109
+ (0, chai_config_spec_1.expect)(getText(code, steps[0])).to.equal('"hello"', 'first step is the string arg');
110
+ const hasCallRange = steps.some(r => getText(code, r) === 'foo("hello")');
111
+ (0, chai_config_spec_1.expect)(hasCallRange).to.be.true;
112
+ });
113
+ // -------------------------------------------------------------------------
114
+ // Nested function / function expression
115
+ // -------------------------------------------------------------------------
116
+ it('expands from nested function body through inner function to outer sub', () => {
117
+ const code = (0, testHelpers_spec_1.trim) `
118
+ sub outer()
119
+ inner = function()
120
+ x = 1
121
+ end function
122
+ end sub
123
+ `;
124
+ // cursor on 'x' — line 2, col 8
125
+ const sr = getSelectionRange(code, 2, 8);
126
+ const steps = flatten(sr);
127
+ // Should have at least 4 steps: token → stmt → inner fn → outer sub
128
+ (0, chai_config_spec_1.expect)(steps.length).to.be.at.least(4);
129
+ (0, chai_config_spec_1.expect)(getText(code, steps[steps.length - 1])).to.equal(code, 'outermost step should be the full outer sub');
130
+ });
131
+ // -------------------------------------------------------------------------
132
+ // If / else blocks
133
+ // -------------------------------------------------------------------------
134
+ it('expands from inside an if block to the enclosing sub', () => {
135
+ const code = (0, testHelpers_spec_1.trim) `
136
+ sub main()
137
+ if true then
138
+ x = 1
139
+ end if
140
+ end sub
141
+ `;
142
+ // cursor on 'x' — line 2, col 8
143
+ const sr = getSelectionRange(code, 2, 8);
144
+ const steps = flatten(sr);
145
+ (0, chai_config_spec_1.expect)(steps.length).to.be.at.least(3);
146
+ (0, chai_config_spec_1.expect)(getText(code, steps[steps.length - 1])).to.equal(code, 'outermost step should be the full sub');
147
+ });
148
+ // -------------------------------------------------------------------------
149
+ // For loop
150
+ // -------------------------------------------------------------------------
151
+ it('expands from inside a for loop body to the enclosing sub', () => {
152
+ const code = (0, testHelpers_spec_1.trim) `
153
+ sub main()
154
+ for i = 0 to 10
155
+ x = 1
156
+ end for
157
+ end sub
158
+ `;
159
+ // cursor on 'x' — line 2, col 8
160
+ const sr = getSelectionRange(code, 2, 8);
161
+ const steps = flatten(sr);
162
+ (0, chai_config_spec_1.expect)(steps.length).to.be.at.least(3);
163
+ (0, chai_config_spec_1.expect)(getText(code, steps[steps.length - 1])).to.equal(code, 'outermost step should be the full sub');
164
+ });
165
+ // -------------------------------------------------------------------------
166
+ // Class
167
+ // -------------------------------------------------------------------------
168
+ it('expands from class method body through method to class', () => {
169
+ const code = (0, testHelpers_spec_1.trim) `
170
+ class MyClass
171
+ function greet() as string
172
+ return "hello"
173
+ end function
174
+ end class
175
+ `;
176
+ // cursor on 'h' in "hello" — line 2, col 16
177
+ const sr = getSelectionRange(code, 2, 16);
178
+ const steps = flatten(sr);
179
+ (0, chai_config_spec_1.expect)(steps.length).to.be.at.least(3);
180
+ (0, chai_config_spec_1.expect)(getText(code, steps[steps.length - 1])).to.equal(code, 'outermost step should be the whole class');
181
+ });
182
+ // -------------------------------------------------------------------------
183
+ // Namespace
184
+ // -------------------------------------------------------------------------
185
+ it('expands from namespace function body to namespace', () => {
186
+ const code = (0, testHelpers_spec_1.trim) `
187
+ namespace MyApp
188
+ sub doThing()
189
+ x = 1
190
+ end sub
191
+ end namespace
192
+ `;
193
+ // cursor on 'x' — line 2, col 8
194
+ const sr = getSelectionRange(code, 2, 8);
195
+ const steps = flatten(sr);
196
+ (0, chai_config_spec_1.expect)(steps.length).to.be.at.least(4);
197
+ (0, chai_config_spec_1.expect)(getText(code, steps[steps.length - 1])).to.equal(code, 'outermost step should be the whole namespace');
198
+ });
199
+ // -------------------------------------------------------------------------
200
+ // Multiple positions in one request
201
+ // -------------------------------------------------------------------------
202
+ it('handles multiple positions in one request', () => {
203
+ const code = (0, testHelpers_spec_1.trim) `
204
+ sub main()
205
+ a = 1
206
+ b = 2
207
+ end sub
208
+ `;
209
+ const file = program.setFile('source/multi.brs', code);
210
+ program.validate();
211
+ const ranges = program.getSelectionRanges(file.pathAbsolute, [
212
+ util_1.util.createPosition(1, 4),
213
+ util_1.util.createPosition(2, 4) // cursor on 'b'
214
+ ]);
215
+ (0, chai_config_spec_1.expect)(ranges).to.have.length(2);
216
+ (0, chai_config_spec_1.expect)(ranges[0]).to.exist;
217
+ (0, chai_config_spec_1.expect)(ranges[1]).to.exist;
218
+ const steps0 = flatten(ranges[0]);
219
+ const steps1 = flatten(ranges[1]);
220
+ (0, chai_config_spec_1.expect)(getText(code, steps0[0])).to.equal('a', 'first position selects identifier "a"');
221
+ (0, chai_config_spec_1.expect)(getText(code, steps1[0])).to.equal('b', 'second position selects identifier "b"');
222
+ });
223
+ // -------------------------------------------------------------------------
224
+ // BrighterScript: enum
225
+ // -------------------------------------------------------------------------
226
+ it('expands inside an enum member value to the whole enum', () => {
227
+ const code = (0, testHelpers_spec_1.trim) `
228
+ enum Direction
229
+ up = "up"
230
+ down = "down"
231
+ end enum
232
+ `;
233
+ // cursor on 'u' inside "up" on line 1 — col 10
234
+ const sr = getSelectionRange(code, 1, 10);
235
+ const steps = flatten(sr);
236
+ (0, chai_config_spec_1.expect)(steps.length).to.be.at.least(2);
237
+ (0, chai_config_spec_1.expect)(getText(code, steps[steps.length - 1])).to.equal(code, 'outermost step should be the whole enum');
238
+ });
239
+ // -------------------------------------------------------------------------
240
+ // Edge cases
241
+ // -------------------------------------------------------------------------
242
+ it('returns empty array for a position outside any node', () => {
243
+ const code = (0, testHelpers_spec_1.trim) `
244
+ sub main()
245
+ end sub
246
+ `;
247
+ const file = program.setFile('source/empty.brs', code);
248
+ program.validate();
249
+ // position far past the last line — should not throw
250
+ const ranges = program.getSelectionRanges(file.pathAbsolute, [util_1.util.createPosition(99, 0)]);
251
+ (0, chai_config_spec_1.expect)(Array.isArray(ranges)).to.be.true;
252
+ });
253
+ it('returns empty array for unknown file', () => {
254
+ const ranges = program.getSelectionRanges('/does/not/exist.brs', [util_1.util.createPosition(0, 0)]);
255
+ (0, chai_config_spec_1.expect)(ranges).to.eql([]);
256
+ });
257
+ it('does not return duplicate consecutive ranges', () => {
258
+ const code = (0, testHelpers_spec_1.trim) `
259
+ sub main()
260
+ x = 1
261
+ end sub
262
+ `;
263
+ const sr = getSelectionRange(code, 1, 4);
264
+ const steps = flatten(sr);
265
+ // Verify no two consecutive steps have identical ranges
266
+ for (let i = 1; i < steps.length; i++) {
267
+ const prev = steps[i - 1];
268
+ const curr = steps[i];
269
+ const sameRange = prev[0] === curr[0] && prev[1] === curr[1] &&
270
+ prev[2] === curr[2] && prev[3] === curr[3];
271
+ (0, chai_config_spec_1.expect)(sameRange).to.be.false;
272
+ }
273
+ });
274
+ // -------------------------------------------------------------------------
275
+ // Plugin extensibility
276
+ // -------------------------------------------------------------------------
277
+ it('allows plugins to contribute custom selection ranges', () => {
278
+ const customRange = util_1.util.createRange(0, 0, 0, 10);
279
+ program.plugins.add({
280
+ name: 'test-plugin',
281
+ provideSelectionRanges: (event) => {
282
+ event.selectionRanges.push({ range: customRange });
283
+ }
284
+ });
285
+ const code = (0, testHelpers_spec_1.trim) `
286
+ sub main()
287
+ end sub
288
+ `;
289
+ const file = program.setFile('source/plugin.brs', code);
290
+ program.validate();
291
+ const ranges = program.getSelectionRanges(file.pathAbsolute, [util_1.util.createPosition(0, 4)]);
292
+ // The bsc plugin should push a range, and the test plugin pushed another
293
+ (0, chai_config_spec_1.expect)(ranges.length).to.be.at.least(2);
294
+ const hasCustom = ranges.some(r => r.range.start.line === 0 && r.range.end.character === 10);
295
+ (0, chai_config_spec_1.expect)(hasCustom).to.be.true;
296
+ });
297
+ });
298
+ //# sourceMappingURL=SelectionRangesProcessor.spec.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SelectionRangesProcessor.spec.js","sourceRoot":"","sources":["../../../src/bscPlugin/selectionRanges/SelectionRangesProcessor.spec.ts"],"names":[],"mappings":"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"}
@@ -17,4 +17,6 @@ export declare class BrsFilePreTranspileProcessor {
17
17
  */
18
18
  private resolveConstValue;
19
19
  private processExpression;
20
+ private processExpressionInNamespace;
21
+ private processInlinedConstValue;
20
22
  }
@@ -256,14 +256,18 @@ class BrsFilePreTranspileProcessor {
256
256
  return { value: value, isCircular: false };
257
257
  }
258
258
  processExpression(ternaryExpression, scope) {
259
- var _a, _b, _c, _d;
259
+ var _a;
260
260
  let containingNamespace = (_a = this.event.file.getNamespaceStatementForPosition(ternaryExpression.range.start)) === null || _a === void 0 ? void 0 : _a.getName(Parser_1.ParseMode.BrighterScript);
261
- const parts = util_1.default.splitExpression(ternaryExpression);
261
+ this.processExpressionInNamespace(ternaryExpression, scope, containingNamespace, new Set());
262
+ }
263
+ processExpressionInNamespace(expression, scope, containingNamespace, visitedConsts) {
264
+ var _a, _b, _c;
265
+ const parts = util_1.default.splitExpression(expression);
262
266
  const processedNames = [];
263
267
  for (let part of parts) {
264
268
  let entityName;
265
269
  if ((0, reflection_1.isVariableExpression)(part) || (0, reflection_1.isDottedGetExpression)(part)) {
266
- processedNames.push((_c = (_b = part === null || part === void 0 ? void 0 : part.name) === null || _b === void 0 ? void 0 : _b.text) === null || _c === void 0 ? void 0 : _c.toLocaleLowerCase());
270
+ processedNames.push((_b = (_a = part === null || part === void 0 ? void 0 : part.name) === null || _a === void 0 ? void 0 : _a.text) === null || _b === void 0 ? void 0 : _b.toLocaleLowerCase());
267
271
  entityName = processedNames.join('.');
268
272
  }
269
273
  else {
@@ -272,7 +276,7 @@ class BrsFilePreTranspileProcessor {
272
276
  let value;
273
277
  let isCircular = false;
274
278
  //did we find a const? transpile the value
275
- let constStatement = (_d = scope === null || scope === void 0 ? void 0 : scope.getConstFileLink(entityName, containingNamespace)) === null || _d === void 0 ? void 0 : _d.item;
279
+ let constStatement = (_c = scope === null || scope === void 0 ? void 0 : scope.getConstFileLink(entityName, containingNamespace)) === null || _c === void 0 ? void 0 : _c.item;
276
280
  if (constStatement) {
277
281
  // Recursively resolve the const value to its final form
278
282
  const resolved = this.resolveConstValue(constStatement.value, scope, containingNamespace);
@@ -287,6 +291,21 @@ class BrsFilePreTranspileProcessor {
287
291
  }
288
292
  }
289
293
  if (value && !isCircular) {
294
+ //If the const's value is a complex expression (e.g. an aa literal containing
295
+ //enum refs), recursively process inner refs so they're inlined too. Without
296
+ //this step, cross-file const usage leaves nested enum/const refs unresolved
297
+ //because the consumer file's pre-transpile pass never visits the inlined
298
+ //value's children (they live in the const's defining file).
299
+ if (constStatement && !(0, reflection_1.isLiteralExpression)(value)) {
300
+ //if we're already inlining this const upstream, skip both the recursive
301
+ //walk AND the transpile override. Setting the override here would still
302
+ //create a transpile-time cycle (the value contains a ref back to a const
303
+ //that has been overridden to re-inline this same value).
304
+ if (visitedConsts.has(constStatement)) {
305
+ return;
306
+ }
307
+ this.processInlinedConstValue(value, scope, constStatement, visitedConsts);
308
+ }
290
309
  //override the transpile for this item.
291
310
  this.event.editor.setProperty(part, 'transpile', (state) => {
292
311
  if ((0, reflection_1.isLiteralExpression)(value)) {
@@ -302,6 +321,32 @@ class BrsFilePreTranspileProcessor {
302
321
  }
303
322
  }
304
323
  }
324
+ processInlinedConstValue(value, scope, constStatement, visitedConsts) {
325
+ var _a;
326
+ //skip if we've already walked this const's value during the current outer
327
+ //inline. This guards against unbounded recursion when consts have circular
328
+ //aggregate references (const A = { x: B }; const B = { y: A }) and avoids
329
+ //redundant work for diamond reference graphs.
330
+ if (visitedConsts.has(constStatement)) {
331
+ return;
332
+ }
333
+ visitedConsts.add(constStatement);
334
+ const innerNamespace = (_a = constStatement.findAncestor(reflection_1.isNamespaceStatement)) === null || _a === void 0 ? void 0 : _a.getName(Parser_1.ParseMode.BrighterScript);
335
+ value.walk((0, visitors_1.createVisitor)({
336
+ VariableExpression: (varExpr) => {
337
+ if ((0, reflection_1.isDottedGetExpression)(varExpr.parent)) {
338
+ return;
339
+ }
340
+ this.processExpressionInNamespace(varExpr, scope, innerNamespace, visitedConsts);
341
+ },
342
+ DottedGetExpression: (dottedExpr) => {
343
+ if ((0, reflection_1.isDottedGetExpression)(dottedExpr.parent)) {
344
+ return;
345
+ }
346
+ this.processExpressionInNamespace(dottedExpr, scope, innerNamespace, visitedConsts);
347
+ }
348
+ }), { walkMode: visitors_1.WalkMode.visitExpressionsRecursive });
349
+ }
305
350
  }
306
351
  exports.BrsFilePreTranspileProcessor = BrsFilePreTranspileProcessor;
307
352
  //# sourceMappingURL=BrsFilePreTranspileProcessor.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"BrsFilePreTranspileProcessor.js","sourceRoot":"","sources":["../../../src/bscPlugin/transpile/BrsFilePreTranspileProcessor.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"BrsFilePreTranspileProcessor.js","sourceRoot":"","sources":["../../../src/bscPlugin/transpile/BrsFilePreTranspileProcessor.ts"],"names":[],"mappings":"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"}
@@ -28,4 +28,17 @@ export declare class BrsFileValidator {
28
28
  * Validate that there are no optional chaining operators on the left-hand-side of an assignment, indexed set, or dotted get
29
29
  */
30
30
  private validateNoOptionalChainingInVarSet;
31
+ /**
32
+ * The minimum Roku firmware version that introduced optional chaining support (Roku OS 11).
33
+ * Optional chaining is NOT transpiled by BrighterScript, so this restriction applies to both
34
+ * .brs and .bs files.
35
+ */
36
+ private static readonly OPTIONAL_CHAINING_MIN_VERSION;
37
+ /**
38
+ * Add a diagnostic if the configured minFirmwareVersion is lower than the version that
39
+ * introduced optional chaining support (Roku OS 11).
40
+ * This applies to both .brs and .bs files because optional chaining is not transpiled —
41
+ * it is emitted as-is, so the target device must natively support it.
42
+ */
43
+ private validateMinFirmwareVersionForOptionalChaining;
31
44
  }