@zentryc5t/ts-plugin-for-bruno 2.0.0 → 3.0.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/README.md CHANGED
@@ -11,6 +11,7 @@ Only some of the intellisense features for `Bruno` files are provided by this np
11
11
  ## Debugging
12
12
 
13
13
  For using the local TS plugin within the VS Code extension, please follow these steps:
14
- - Replace the `name` in the base [package.json](../../package.json) for the `typescriptServerPlugins` contibution field with the name `typescript-for-bruno`.
15
- - In the base [tsconfig.json](../../tsconfig.json) replace the value for the `plugins` field with the commented out plugins value.
16
- - Use the launch configuration `Run Extension With local TS plugin` for launching the extension
14
+
15
+ - Replace the `name` in the base [package.json](../../package.json) for the `typescriptServerPlugins` contibution field with the name `typescript-for-bruno`.
16
+ - In the base [tsconfig.json](../../tsconfig.json) replace the value for the `plugins` field with the commented out plugins value.
17
+ - Use the launch configuration `Run Extension With local TS plugin` for launching the extension
package/out/index.js CHANGED
@@ -21,9 +21,6 @@ function init(_modules) {
21
21
  proxy.getSuggestionDiagnostics = (fileName) => {
22
22
  const defaultDiagnostics = info.languageService.getSuggestionDiagnostics(fileName);
23
23
  const isBruFile = isBrunoFile(fileName);
24
- if (!isBruFile && !isJsFileFromBrunoCollection(info, fileName)) {
25
- return defaultDiagnostics;
26
- }
27
24
  const allDiagnostics = filterDefaultDiagnostics(info, fileName, defaultDiagnostics);
28
25
  // The ts server always reports errors when importing a Javascript function in a .bru file.
29
26
  return isBruFile
@@ -36,23 +33,87 @@ function init(_modules) {
36
33
  code != 80004)
37
34
  : allDiagnostics.filter(({ code }) => code != 80001); // Bruno currently only supports CommonJS modules.
38
35
  };
39
- // All hovers are provided by the extension implementation for '.bru' and '.js' files within collections.
40
- // Only for the temp js file, the ts language service has to be used.
36
+ // All hovers are provided by the extension implementation for '.bru' files.
41
37
  proxy.getQuickInfoAtPosition = (fileName, position) => {
42
- if (isBrunoFile(fileName) ||
43
- (isJsFileFromBrunoCollection(info, fileName) &&
44
- !isTempJsFile(fileName))) {
38
+ if (isBrunoFile(fileName)) {
45
39
  return undefined;
46
40
  }
47
41
  return info.languageService.getQuickInfoAtPosition(fileName, position);
48
42
  };
49
- // All completions for '.js' files within collections are provided by the extension already.
50
43
  proxy.getCompletionsAtPosition = (fileName, position, options) => {
51
- return isJsFileFromBrunoCollection(info, fileName) &&
52
- !isTempJsFile(fileName)
53
- ? undefined
54
- : info.languageService.getCompletionsAtPosition(fileName, position, options);
44
+ const defaultCompletions = info.languageService.getCompletionsAtPosition(fileName, position, options);
45
+ return defaultCompletions && isInABrunoCollection(info, fileName)
46
+ ? {
47
+ ...defaultCompletions,
48
+ entries: defaultCompletions.entries.filter(({ data }) => !data ||
49
+ !data.fileName ||
50
+ !data.fileName.includes(getTempJsFileBaseNameWithoutExtension())),
51
+ }
52
+ : defaultCompletions;
53
+ };
54
+ proxy.getRenameInfo = (fileName, position, preferences) => {
55
+ const defaultRenameInfo = info.languageService.getRenameInfo(fileName, position, preferences);
56
+ if ((0, path_1.extname)(fileName) != ".js" ||
57
+ !isInABrunoCollection(info, fileName)) {
58
+ return defaultRenameInfo;
59
+ }
60
+ const definitionForPosition = info.languageService.getDefinitionAtPosition(fileName, position);
61
+ const isForInbuiltRuntimeFunction = definitionForPosition &&
62
+ definitionForPosition.some(({ fileName }) => fileName.includes(getTempJsFileBaseNameWithoutExtension()));
63
+ return isForInbuiltRuntimeFunction
64
+ ? {
65
+ canRename: false,
66
+ localizedErrorMessage: "You cannot rename elements that are provided by Bruno at runtime.",
67
+ }
68
+ : defaultRenameInfo;
69
+ };
70
+ proxy.findRenameLocations = (fileName, position, findInStrings, findInComments, providePrefixAndSuffixTextForRename) => {
71
+ const defaultRenameLocations = info.languageService.findRenameLocations(fileName, position, findInStrings, findInComments, providePrefixAndSuffixTextForRename &&
72
+ typeof providePrefixAndSuffixTextForRename != "boolean"
73
+ ? providePrefixAndSuffixTextForRename
74
+ : {});
75
+ return defaultRenameLocations &&
76
+ isInABrunoCollection(info, fileName)
77
+ ? defaultRenameLocations.filter(({ fileName: fileForRenameLocation }) => !fileForRenameLocation.includes(getTempJsFileBaseNameWithoutExtension()))
78
+ : defaultRenameLocations;
79
+ };
80
+ proxy.findReferences = (fileName, position) => {
81
+ const defaultReferences = info.languageService.findReferences(fileName, position);
82
+ return defaultReferences && isInABrunoCollection(info, fileName)
83
+ ? defaultReferences.filter(({ definition: { fileName: fileForDefinition } }) => !fileForDefinition.includes(getTempJsFileBaseNameWithoutExtension()))
84
+ : defaultReferences;
85
+ };
86
+ proxy.getDefinitionAtPosition = (fileName, position) => {
87
+ const defaultDefinitions = info.languageService.getDefinitionAtPosition(fileName, position);
88
+ return defaultDefinitions && isInABrunoCollection(info, fileName)
89
+ ? defaultDefinitions.filter(({ fileName: fileForDefinition }) => !fileForDefinition.includes(getTempJsFileBaseNameWithoutExtension()))
90
+ : defaultDefinitions;
55
91
  };
92
+ proxy.getDefinitionAndBoundSpan = (fileName, position) => {
93
+ const defaultDefinition = info.languageService.getDefinitionAndBoundSpan(fileName, position);
94
+ return defaultDefinition &&
95
+ isInABrunoCollection(info, fileName) &&
96
+ defaultDefinition.definitions
97
+ ? {
98
+ ...defaultDefinition,
99
+ definitions: defaultDefinition.definitions.filter(({ fileName: fileForDefinition }) => !fileForDefinition.includes(getTempJsFileBaseNameWithoutExtension())),
100
+ }
101
+ : defaultDefinition;
102
+ };
103
+ proxy.getTypeDefinitionAtPosition = (fileName, position) => {
104
+ const defaultDefinitions = info.languageService.getDefinitionAtPosition(fileName, position);
105
+ return defaultDefinitions && isInABrunoCollection(info, fileName)
106
+ ? defaultDefinitions.filter(({ fileName: fileForDefinition }) => !fileForDefinition.includes(getTempJsFileBaseNameWithoutExtension()))
107
+ : defaultDefinitions;
108
+ };
109
+ proxy.getImplementationAtPosition = (fileName, position) => {
110
+ const defaultImplementations = info.languageService.getImplementationAtPosition(fileName, position);
111
+ return defaultImplementations &&
112
+ isInABrunoCollection(info, fileName)
113
+ ? defaultImplementations.filter(({ fileName: fileForImplementation }) => !fileForImplementation.includes(getTempJsFileBaseNameWithoutExtension()))
114
+ : defaultImplementations;
115
+ };
116
+ // ToDo: Filter out displayed link to temp js file for code fix suggestions (e.g. 'bru is declared here')
56
117
  return proxy;
57
118
  }
58
119
  return {
@@ -60,38 +121,50 @@ function init(_modules) {
60
121
  };
61
122
  }
62
123
  function filterDefaultDiagnostics(info, fileName, defaultDiagnostics) {
63
- if (isJsFileFromBrunoCollection(info, fileName)) {
64
- // Avoid showing errors for temp js files.
65
- if (isTempJsFile(fileName)) {
66
- return [];
67
- }
68
- const fileContent = getFileContent(info, fileName);
69
- if (!fileContent) {
70
- return [];
71
- }
72
- return filterOutDiagnosticsForInbuiltRuntimeFunctions(defaultDiagnostics, fileContent);
124
+ if (!isBrunoFile(fileName)) {
125
+ return (0, path_1.extname)(fileName) == ".js"
126
+ ? filterDiagnosticsForJsFile(info, fileName, defaultDiagnostics)
127
+ : defaultDiagnostics;
73
128
  }
74
- else if (isBrunoFile(fileName)) {
75
- const fileContent = getFileContent(info, fileName);
76
- if (!fileContent) {
77
- return [];
78
- }
79
- const indizes = [];
80
- for (const blockName of Object.values(TextBlockName)) {
81
- const indizesForBlock = getCodeBlockStartAndEndIndex(fileContent, blockName);
82
- if (indizesForBlock) {
83
- indizes.push({ blockName, ...indizesForBlock });
84
- }
85
- }
86
- if (indizes.length == 0) {
87
- return [];
129
+ const fileContent = getFileContent(info, fileName);
130
+ if (!fileContent) {
131
+ return [];
132
+ }
133
+ const indizes = [];
134
+ for (const blockName of Object.values(TextBlockName)) {
135
+ const indizesForBlock = getCodeBlockStartAndEndIndex(fileContent, blockName);
136
+ if (indizesForBlock) {
137
+ indizes.push({ blockName, ...indizesForBlock });
88
138
  }
89
- return filterOutDiagnosticsForInbuiltRuntimeFunctions(defaultDiagnostics.filter(({ start }) => start != undefined &&
90
- indizes.some(({ startIndex: blockStart, endIndex: blockEnd }) => start >= blockStart && start <= blockEnd)), fileContent);
91
139
  }
92
- else {
140
+ if (indizes.length == 0) {
141
+ return [];
142
+ }
143
+ return filterOutDiagnosticsForInbuiltRuntimeFunctions(defaultDiagnostics.filter(({ start }) => start != undefined &&
144
+ indizes.some(({ startIndex: blockStart, endIndex: blockEnd }) => start >= blockStart && start <= blockEnd)), fileContent);
145
+ }
146
+ function filterDiagnosticsForJsFile(info, fileName, defaultDiagnostics) {
147
+ if (!isInABrunoCollection(info, fileName)) {
93
148
  return defaultDiagnostics;
94
149
  }
150
+ else if (fileName.includes(getTempJsFileBaseNameWithoutExtension())) {
151
+ // Filter out all diagnostics for temp js files.
152
+ return [];
153
+ }
154
+ const fileContent = getFileContent(info, fileName);
155
+ if (!fileContent) {
156
+ return [];
157
+ }
158
+ const filteredDiagnostics = filterOutDiagnosticsForInbuiltRuntimeFunctions(defaultDiagnostics, fileContent);
159
+ return filteredDiagnostics.map((diagnostic) => {
160
+ const { relatedInformation } = diagnostic;
161
+ const referencesTempJsFile = relatedInformation &&
162
+ relatedInformation.some(({ file }) => file &&
163
+ file.fileName.endsWith(`${getTempJsFileBaseNameWithoutExtension()}.js`));
164
+ return referencesTempJsFile
165
+ ? { ...diagnostic, relatedInformation: undefined }
166
+ : diagnostic;
167
+ });
95
168
  }
96
169
  function getCodeBlockStartAndEndIndex(fullTextContent, blockName) {
97
170
  const openingBracketChar = "{";
@@ -115,14 +188,11 @@ function getCodeBlockStartAndEndIndex(fullTextContent, blockName) {
115
188
  endIndex: blockStartIndex + blockNodeInSubDocument.end,
116
189
  };
117
190
  }
118
- function isJsFileFromBrunoCollection(info, fileName) {
119
- return (0, path_1.extname)(fileName) == ".js" && isInABrunoCollection(info, fileName);
120
- }
121
191
  function filterOutDiagnosticsForInbuiltRuntimeFunctions(diagnosticsToFilter, fileContent) {
122
192
  return diagnosticsToFilter.filter(({ start, length }) => start != undefined &&
123
193
  length != undefined &&
124
194
  // Do not show diagnostics for functions that are provided by Bruno at runtime
125
- !["bru", "req", "res", "test", "expect"].includes(fileContent.substring(start, start + length)) &&
195
+ !getNamesForInbuiltRuntimeVarsAndFunctions().includes(fileContent.substring(start, start + length)) &&
126
196
  // Avoid showing incorrect error when using `require`
127
197
  // (the error seems to only occur for short periods of time when typescript type definitions have not been reloaded for a while)
128
198
  fileContent.substring(start, start + length) != "require");
@@ -171,8 +241,11 @@ function isACollectionRootFolder(info, directoryPath) {
171
241
  function isBrunoFile(fileName) {
172
242
  return (0, path_1.extname)(fileName) == ".bru";
173
243
  }
174
- function isTempJsFile(fileName) {
175
- return (0, path_1.basename)(fileName) == "__temp_bru_reference.js";
244
+ function getTempJsFileBaseNameWithoutExtension() {
245
+ return "__temp_bru_reference";
246
+ }
247
+ function getNamesForInbuiltRuntimeVarsAndFunctions() {
248
+ return ["bru", "req", "res", "test", "expect"];
176
249
  }
177
250
  var TextBlockName;
178
251
  (function (TextBlockName) {
package/out/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,9 +1,9 @@
1
1
  {
2
2
  "name": "@zentryc5t/ts-plugin-for-bruno",
3
- "version": "2.0.0",
3
+ "version": "3.0.1",
4
4
  "main": "./out/index.js",
5
5
  "scripts": {
6
- "test": "echo \"Error: no test specified\" && exit 1"
6
+ "compile": "tsc --project tsconfig.json"
7
7
  },
8
8
  "author": "zentryc5t",
9
9
  "license": "MIT",
package/src/index.ts CHANGED
@@ -1,4 +1,4 @@
1
- import { basename, dirname, extname } from "path";
1
+ import { dirname, extname } from "path";
2
2
  import * as ts from "typescript/lib/tsserverlibrary";
3
3
 
4
4
  function init(_modules: {
@@ -40,10 +40,6 @@ function init(_modules: {
40
40
 
41
41
  const isBruFile = isBrunoFile(fileName);
42
42
 
43
- if (!isBruFile && !isJsFileFromBrunoCollection(info, fileName)) {
44
- return defaultDiagnostics;
45
- }
46
-
47
43
  const allDiagnostics = filterDefaultDiagnostics(
48
44
  info,
49
45
  fileName,
@@ -64,14 +60,9 @@ function init(_modules: {
64
60
  : allDiagnostics.filter(({ code }) => code != 80_001); // Bruno currently only supports CommonJS modules.
65
61
  };
66
62
 
67
- // All hovers are provided by the extension implementation for '.bru' and '.js' files within collections.
68
- // Only for the temp js file, the ts language service has to be used.
63
+ // All hovers are provided by the extension implementation for '.bru' files.
69
64
  proxy.getQuickInfoAtPosition = (fileName, position) => {
70
- if (
71
- isBrunoFile(fileName) ||
72
- (isJsFileFromBrunoCollection(info, fileName) &&
73
- !isTempJsFile(fileName))
74
- ) {
65
+ if (isBrunoFile(fileName)) {
75
66
  return undefined;
76
67
  }
77
68
 
@@ -81,18 +72,186 @@ function init(_modules: {
81
72
  );
82
73
  };
83
74
 
84
- // All completions for '.js' files within collections are provided by the extension already.
85
75
  proxy.getCompletionsAtPosition = (fileName, position, options) => {
86
- return isJsFileFromBrunoCollection(info, fileName) &&
87
- !isTempJsFile(fileName)
88
- ? undefined
89
- : info.languageService.getCompletionsAtPosition(
90
- fileName,
91
- position,
92
- options,
93
- );
76
+ const defaultCompletions =
77
+ info.languageService.getCompletionsAtPosition(
78
+ fileName,
79
+ position,
80
+ options,
81
+ );
82
+
83
+ return defaultCompletions && isInABrunoCollection(info, fileName)
84
+ ? {
85
+ ...defaultCompletions,
86
+ entries: defaultCompletions.entries.filter(
87
+ ({ data }) =>
88
+ !data ||
89
+ !data.fileName ||
90
+ !data.fileName.includes(
91
+ getTempJsFileBaseNameWithoutExtension(),
92
+ ),
93
+ ),
94
+ }
95
+ : defaultCompletions;
94
96
  };
95
97
 
98
+ proxy.getRenameInfo = (fileName, position, preferences) => {
99
+ const defaultRenameInfo = info.languageService.getRenameInfo(
100
+ fileName,
101
+ position,
102
+ preferences as ts.UserPreferences,
103
+ );
104
+
105
+ if (
106
+ extname(fileName) != ".js" ||
107
+ !isInABrunoCollection(info, fileName)
108
+ ) {
109
+ return defaultRenameInfo;
110
+ }
111
+
112
+ const definitionForPosition =
113
+ info.languageService.getDefinitionAtPosition(
114
+ fileName,
115
+ position,
116
+ );
117
+
118
+ const isForInbuiltRuntimeFunction =
119
+ definitionForPosition &&
120
+ definitionForPosition.some(({ fileName }) =>
121
+ fileName.includes(getTempJsFileBaseNameWithoutExtension()),
122
+ );
123
+
124
+ return isForInbuiltRuntimeFunction
125
+ ? {
126
+ canRename: false,
127
+ localizedErrorMessage:
128
+ "You cannot rename elements that are provided by Bruno at runtime.",
129
+ }
130
+ : defaultRenameInfo;
131
+ };
132
+
133
+ proxy.findRenameLocations = (
134
+ fileName,
135
+ position,
136
+ findInStrings,
137
+ findInComments,
138
+ providePrefixAndSuffixTextForRename,
139
+ ) => {
140
+ const defaultRenameLocations =
141
+ info.languageService.findRenameLocations(
142
+ fileName,
143
+ position,
144
+ findInStrings,
145
+ findInComments,
146
+ providePrefixAndSuffixTextForRename &&
147
+ typeof providePrefixAndSuffixTextForRename != "boolean"
148
+ ? providePrefixAndSuffixTextForRename
149
+ : {},
150
+ );
151
+
152
+ return defaultRenameLocations &&
153
+ isInABrunoCollection(info, fileName)
154
+ ? defaultRenameLocations.filter(
155
+ ({ fileName: fileForRenameLocation }) =>
156
+ !fileForRenameLocation.includes(
157
+ getTempJsFileBaseNameWithoutExtension(),
158
+ ),
159
+ )
160
+ : defaultRenameLocations;
161
+ };
162
+
163
+ proxy.findReferences = (fileName, position) => {
164
+ const defaultReferences = info.languageService.findReferences(
165
+ fileName,
166
+ position,
167
+ );
168
+
169
+ return defaultReferences && isInABrunoCollection(info, fileName)
170
+ ? defaultReferences.filter(
171
+ ({ definition: { fileName: fileForDefinition } }) =>
172
+ !fileForDefinition.includes(
173
+ getTempJsFileBaseNameWithoutExtension(),
174
+ ),
175
+ )
176
+ : defaultReferences;
177
+ };
178
+
179
+ proxy.getDefinitionAtPosition = (fileName, position) => {
180
+ const defaultDefinitions =
181
+ info.languageService.getDefinitionAtPosition(
182
+ fileName,
183
+ position,
184
+ );
185
+
186
+ return defaultDefinitions && isInABrunoCollection(info, fileName)
187
+ ? defaultDefinitions.filter(
188
+ ({ fileName: fileForDefinition }) =>
189
+ !fileForDefinition.includes(
190
+ getTempJsFileBaseNameWithoutExtension(),
191
+ ),
192
+ )
193
+ : defaultDefinitions;
194
+ };
195
+
196
+ proxy.getDefinitionAndBoundSpan = (fileName, position) => {
197
+ const defaultDefinition =
198
+ info.languageService.getDefinitionAndBoundSpan(
199
+ fileName,
200
+ position,
201
+ );
202
+
203
+ return defaultDefinition &&
204
+ isInABrunoCollection(info, fileName) &&
205
+ defaultDefinition.definitions
206
+ ? {
207
+ ...defaultDefinition,
208
+ definitions: defaultDefinition.definitions.filter(
209
+ ({ fileName: fileForDefinition }) =>
210
+ !fileForDefinition.includes(
211
+ getTempJsFileBaseNameWithoutExtension(),
212
+ ),
213
+ ),
214
+ }
215
+ : defaultDefinition;
216
+ };
217
+
218
+ proxy.getTypeDefinitionAtPosition = (fileName, position) => {
219
+ const defaultDefinitions =
220
+ info.languageService.getDefinitionAtPosition(
221
+ fileName,
222
+ position,
223
+ );
224
+
225
+ return defaultDefinitions && isInABrunoCollection(info, fileName)
226
+ ? defaultDefinitions.filter(
227
+ ({ fileName: fileForDefinition }) =>
228
+ !fileForDefinition.includes(
229
+ getTempJsFileBaseNameWithoutExtension(),
230
+ ),
231
+ )
232
+ : defaultDefinitions;
233
+ };
234
+
235
+ proxy.getImplementationAtPosition = (fileName, position) => {
236
+ const defaultImplementations =
237
+ info.languageService.getImplementationAtPosition(
238
+ fileName,
239
+ position,
240
+ );
241
+
242
+ return defaultImplementations &&
243
+ isInABrunoCollection(info, fileName)
244
+ ? defaultImplementations.filter(
245
+ ({ fileName: fileForImplementation }) =>
246
+ !fileForImplementation.includes(
247
+ getTempJsFileBaseNameWithoutExtension(),
248
+ ),
249
+ )
250
+ : defaultImplementations;
251
+ };
252
+
253
+ // ToDo: Filter out displayed link to temp js file for code fix suggestions (e.g. 'bru is declared here')
254
+
96
255
  return proxy;
97
256
  }
98
257
 
@@ -106,64 +265,92 @@ function filterDefaultDiagnostics(
106
265
  fileName: string,
107
266
  defaultDiagnostics: (ts.Diagnostic | ts.DiagnosticWithLocation)[],
108
267
  ) {
109
- if (isJsFileFromBrunoCollection(info, fileName)) {
110
- // Avoid showing errors for temp js files.
111
- if (isTempJsFile(fileName)) {
112
- return [];
113
- }
268
+ if (!isBrunoFile(fileName)) {
269
+ return extname(fileName) == ".js"
270
+ ? filterDiagnosticsForJsFile(info, fileName, defaultDiagnostics)
271
+ : defaultDiagnostics;
272
+ }
114
273
 
115
- const fileContent = getFileContent(info, fileName);
274
+ const fileContent = getFileContent(info, fileName);
116
275
 
117
- if (!fileContent) {
118
- return [];
119
- }
276
+ if (!fileContent) {
277
+ return [];
278
+ }
120
279
 
121
- return filterOutDiagnosticsForInbuiltRuntimeFunctions(
122
- defaultDiagnostics,
280
+ const indizes: {
281
+ blockName: string;
282
+ startIndex: number;
283
+ endIndex: number;
284
+ }[] = [];
285
+
286
+ for (const blockName of Object.values(TextBlockName)) {
287
+ const indizesForBlock = getCodeBlockStartAndEndIndex(
123
288
  fileContent,
289
+ blockName,
124
290
  );
125
- } else if (isBrunoFile(fileName)) {
126
- const fileContent = getFileContent(info, fileName);
127
291
 
128
- if (!fileContent) {
129
- return [];
292
+ if (indizesForBlock) {
293
+ indizes.push({ blockName, ...indizesForBlock });
130
294
  }
295
+ }
131
296
 
132
- const indizes: {
133
- blockName: string;
134
- startIndex: number;
135
- endIndex: number;
136
- }[] = [];
297
+ if (indizes.length == 0) {
298
+ return [];
299
+ }
137
300
 
138
- for (const blockName of Object.values(TextBlockName)) {
139
- const indizesForBlock = getCodeBlockStartAndEndIndex(
140
- fileContent,
141
- blockName,
142
- );
301
+ return filterOutDiagnosticsForInbuiltRuntimeFunctions(
302
+ defaultDiagnostics.filter(
303
+ ({ start }) =>
304
+ start != undefined &&
305
+ indizes.some(
306
+ ({ startIndex: blockStart, endIndex: blockEnd }) =>
307
+ start >= blockStart && start <= blockEnd,
308
+ ),
309
+ ),
310
+ fileContent,
311
+ );
312
+ }
143
313
 
144
- if (indizesForBlock) {
145
- indizes.push({ blockName, ...indizesForBlock });
146
- }
147
- }
314
+ function filterDiagnosticsForJsFile(
315
+ info: ts.server.PluginCreateInfo,
316
+ fileName: string,
317
+ defaultDiagnostics: (ts.Diagnostic | ts.DiagnosticWithLocation)[],
318
+ ) {
319
+ if (!isInABrunoCollection(info, fileName)) {
320
+ return defaultDiagnostics;
321
+ } else if (fileName.includes(getTempJsFileBaseNameWithoutExtension())) {
322
+ // Filter out all diagnostics for temp js files.
323
+ return [];
324
+ }
148
325
 
149
- if (indizes.length == 0) {
150
- return [];
151
- }
326
+ const fileContent = getFileContent(info, fileName);
152
327
 
153
- return filterOutDiagnosticsForInbuiltRuntimeFunctions(
154
- defaultDiagnostics.filter(
155
- ({ start }) =>
156
- start != undefined &&
157
- indizes.some(
158
- ({ startIndex: blockStart, endIndex: blockEnd }) =>
159
- start >= blockStart && start <= blockEnd,
160
- ),
161
- ),
162
- fileContent,
163
- );
164
- } else {
165
- return defaultDiagnostics;
328
+ if (!fileContent) {
329
+ return [];
166
330
  }
331
+
332
+ const filteredDiagnostics = filterOutDiagnosticsForInbuiltRuntimeFunctions(
333
+ defaultDiagnostics,
334
+ fileContent,
335
+ );
336
+
337
+ return filteredDiagnostics.map((diagnostic) => {
338
+ const { relatedInformation } = diagnostic;
339
+
340
+ const referencesTempJsFile =
341
+ relatedInformation &&
342
+ relatedInformation.some(
343
+ ({ file }) =>
344
+ file &&
345
+ file.fileName.endsWith(
346
+ `${getTempJsFileBaseNameWithoutExtension()}.js`,
347
+ ),
348
+ );
349
+
350
+ return referencesTempJsFile
351
+ ? { ...diagnostic, relatedInformation: undefined }
352
+ : diagnostic;
353
+ });
167
354
  }
168
355
 
169
356
  function getCodeBlockStartAndEndIndex(
@@ -209,13 +396,6 @@ function getCodeBlockStartAndEndIndex(
209
396
  };
210
397
  }
211
398
 
212
- function isJsFileFromBrunoCollection(
213
- info: ts.server.PluginCreateInfo,
214
- fileName: string,
215
- ) {
216
- return extname(fileName) == ".js" && isInABrunoCollection(info, fileName);
217
- }
218
-
219
399
  function filterOutDiagnosticsForInbuiltRuntimeFunctions(
220
400
  diagnosticsToFilter: (ts.Diagnostic | ts.DiagnosticWithLocation)[],
221
401
  fileContent: string,
@@ -225,7 +405,7 @@ function filterOutDiagnosticsForInbuiltRuntimeFunctions(
225
405
  start != undefined &&
226
406
  length != undefined &&
227
407
  // Do not show diagnostics for functions that are provided by Bruno at runtime
228
- !["bru", "req", "res", "test", "expect"].includes(
408
+ !getNamesForInbuiltRuntimeVarsAndFunctions().includes(
229
409
  fileContent.substring(start, start + length),
230
410
  ) &&
231
411
  // Avoid showing incorrect error when using `require`
@@ -296,8 +476,12 @@ function isBrunoFile(fileName: string) {
296
476
  return extname(fileName) == ".bru";
297
477
  }
298
478
 
299
- function isTempJsFile(fileName: string) {
300
- return basename(fileName) == "__temp_bru_reference.js";
479
+ function getTempJsFileBaseNameWithoutExtension() {
480
+ return "__temp_bru_reference";
481
+ }
482
+
483
+ function getNamesForInbuiltRuntimeVarsAndFunctions() {
484
+ return ["bru", "req", "res", "test", "expect"];
301
485
  }
302
486
 
303
487
  enum TextBlockName {