@zentryc5t/ts-plugin-for-bruno 1.0.5 → 3.0.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.
- package/README.md +4 -3
- package/out/index.js +114 -43
- package/out/index.js.map +1 -1
- package/package.json +2 -2
- package/src/index.ts +249 -73
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
|
-
|
|
15
|
-
|
|
16
|
-
|
|
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
|
@@ -20,24 +20,95 @@ function init(_modules) {
|
|
|
20
20
|
};
|
|
21
21
|
proxy.getSuggestionDiagnostics = (fileName) => {
|
|
22
22
|
const defaultDiagnostics = info.languageService.getSuggestionDiagnostics(fileName);
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
}
|
|
26
|
-
const allDiagnosticsForCodeBlocks = filterDefaultDiagnostics(info, fileName, defaultDiagnostics);
|
|
23
|
+
const isBruFile = isBrunoFile(fileName);
|
|
24
|
+
const allDiagnostics = filterDefaultDiagnostics(info, fileName, defaultDiagnostics);
|
|
27
25
|
// The ts server always reports errors when importing a Javascript function in a .bru file.
|
|
28
|
-
return
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
code
|
|
34
|
-
|
|
26
|
+
return isBruFile
|
|
27
|
+
? allDiagnostics.filter(
|
|
28
|
+
// Do not show diagnostics that only make sense for Typescript files.
|
|
29
|
+
// Bru file code blocks should be treated like Javascript functions instead.
|
|
30
|
+
// A list of diagnostics can be found here: https://github.com/microsoft/TypeScript/blob/main/src/compiler/diagnosticMessages.json
|
|
31
|
+
({ code }) => (code < 7043 || code > 7050) &&
|
|
32
|
+
code != 80001 &&
|
|
33
|
+
code != 80004)
|
|
34
|
+
: allDiagnostics.filter(({ code }) => code != 80001); // Bruno currently only supports CommonJS modules.
|
|
35
35
|
};
|
|
36
|
-
// All hovers are provided by the extension implementation
|
|
36
|
+
// All hovers are provided by the extension implementation for '.bru' files.
|
|
37
37
|
proxy.getQuickInfoAtPosition = (fileName, position) => {
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
38
|
+
if (isBrunoFile(fileName)) {
|
|
39
|
+
return undefined;
|
|
40
|
+
}
|
|
41
|
+
return info.languageService.getQuickInfoAtPosition(fileName, position);
|
|
42
|
+
};
|
|
43
|
+
proxy.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
|
+
? { canRename: false, localizedErrorMessage: "You cannot rename elements that are provided by Bruno at runtime." }
|
|
65
|
+
: defaultRenameInfo;
|
|
66
|
+
};
|
|
67
|
+
proxy.findRenameLocations = (fileName, position, findInStrings, findInComments, providePrefixAndSuffixTextForRename) => {
|
|
68
|
+
const defaultRenameLocations = info.languageService.findRenameLocations(fileName, position, findInStrings, findInComments, providePrefixAndSuffixTextForRename &&
|
|
69
|
+
typeof providePrefixAndSuffixTextForRename != "boolean"
|
|
70
|
+
? providePrefixAndSuffixTextForRename
|
|
71
|
+
: {});
|
|
72
|
+
return defaultRenameLocations &&
|
|
73
|
+
isInABrunoCollection(info, fileName)
|
|
74
|
+
? defaultRenameLocations.filter(({ fileName: fileForRenameLocation }) => !fileForRenameLocation.includes(getTempJsFileBaseNameWithoutExtension()))
|
|
75
|
+
: defaultRenameLocations;
|
|
76
|
+
};
|
|
77
|
+
proxy.findReferences = (fileName, position) => {
|
|
78
|
+
const defaultReferences = info.languageService.findReferences(fileName, position);
|
|
79
|
+
return defaultReferences && isInABrunoCollection(info, fileName)
|
|
80
|
+
? defaultReferences.filter(({ definition: { fileName: fileForDefinition } }) => !fileForDefinition.includes(getTempJsFileBaseNameWithoutExtension()))
|
|
81
|
+
: defaultReferences;
|
|
82
|
+
};
|
|
83
|
+
proxy.getDefinitionAtPosition = (fileName, position) => {
|
|
84
|
+
const defaultDefinitions = info.languageService.getDefinitionAtPosition(fileName, position);
|
|
85
|
+
return defaultDefinitions && isInABrunoCollection(info, fileName)
|
|
86
|
+
? defaultDefinitions.filter(({ fileName: fileForDefinition }) => !fileForDefinition.includes(getTempJsFileBaseNameWithoutExtension()))
|
|
87
|
+
: defaultDefinitions;
|
|
88
|
+
};
|
|
89
|
+
proxy.getDefinitionAndBoundSpan = (fileName, position) => {
|
|
90
|
+
const defaultDefinition = info.languageService.getDefinitionAndBoundSpan(fileName, position);
|
|
91
|
+
return defaultDefinition &&
|
|
92
|
+
isInABrunoCollection(info, fileName) &&
|
|
93
|
+
defaultDefinition.definitions
|
|
94
|
+
? {
|
|
95
|
+
...defaultDefinition,
|
|
96
|
+
definitions: defaultDefinition.definitions.filter(({ fileName: fileForDefinition }) => !fileForDefinition.includes(getTempJsFileBaseNameWithoutExtension())),
|
|
97
|
+
}
|
|
98
|
+
: defaultDefinition;
|
|
99
|
+
};
|
|
100
|
+
proxy.getTypeDefinitionAtPosition = (fileName, position) => {
|
|
101
|
+
const defaultDefinitions = info.languageService.getDefinitionAtPosition(fileName, position);
|
|
102
|
+
return defaultDefinitions && isInABrunoCollection(info, fileName)
|
|
103
|
+
? defaultDefinitions.filter(({ fileName: fileForDefinition }) => !fileForDefinition.includes(getTempJsFileBaseNameWithoutExtension()))
|
|
104
|
+
: defaultDefinitions;
|
|
105
|
+
};
|
|
106
|
+
proxy.getImplementationAtPosition = (fileName, position) => {
|
|
107
|
+
const defaultImplementations = info.languageService.getImplementationAtPosition(fileName, position);
|
|
108
|
+
return defaultImplementations &&
|
|
109
|
+
isInABrunoCollection(info, fileName)
|
|
110
|
+
? defaultImplementations.filter(({ fileName: fileForImplementation }) => !fileForImplementation.includes(getTempJsFileBaseNameWithoutExtension()))
|
|
111
|
+
: defaultImplementations;
|
|
41
112
|
};
|
|
42
113
|
return proxy;
|
|
43
114
|
}
|
|
@@ -46,34 +117,31 @@ function init(_modules) {
|
|
|
46
117
|
};
|
|
47
118
|
}
|
|
48
119
|
function filterDefaultDiagnostics(info, fileName, defaultDiagnostics) {
|
|
49
|
-
if (
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
return [];
|
|
53
|
-
}
|
|
54
|
-
return filterOutDiagnosticsForInbuiltRuntimeFunctions(defaultDiagnostics, fileContent);
|
|
120
|
+
if (!isBrunoFile(fileName) &&
|
|
121
|
+
!fileName.includes(getTempJsFileBaseNameWithoutExtension())) {
|
|
122
|
+
return defaultDiagnostics;
|
|
55
123
|
}
|
|
56
|
-
else if (
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
if (
|
|
69
|
-
|
|
124
|
+
else if (fileName.includes(getTempJsFileBaseNameWithoutExtension()) &&
|
|
125
|
+
isInABrunoCollection(info, fileName)) {
|
|
126
|
+
// Filter out all diagnostics for temp js files.
|
|
127
|
+
return [];
|
|
128
|
+
}
|
|
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 });
|
|
70
138
|
}
|
|
71
|
-
return filterOutDiagnosticsForInbuiltRuntimeFunctions(defaultDiagnostics.filter(({ start }) => start != undefined &&
|
|
72
|
-
indizes.some(({ startIndex: blockStart, endIndex: blockEnd }) => start >= blockStart && start <= blockEnd)), fileContent);
|
|
73
139
|
}
|
|
74
|
-
|
|
75
|
-
return
|
|
140
|
+
if (indizes.length == 0) {
|
|
141
|
+
return [];
|
|
76
142
|
}
|
|
143
|
+
return filterOutDiagnosticsForInbuiltRuntimeFunctions(defaultDiagnostics.filter(({ start }) => start != undefined &&
|
|
144
|
+
indizes.some(({ startIndex: blockStart, endIndex: blockEnd }) => start >= blockStart && start <= blockEnd)), fileContent);
|
|
77
145
|
}
|
|
78
146
|
function getCodeBlockStartAndEndIndex(fullTextContent, blockName) {
|
|
79
147
|
const openingBracketChar = "{";
|
|
@@ -97,14 +165,11 @@ function getCodeBlockStartAndEndIndex(fullTextContent, blockName) {
|
|
|
97
165
|
endIndex: blockStartIndex + blockNodeInSubDocument.end,
|
|
98
166
|
};
|
|
99
167
|
}
|
|
100
|
-
function isJsFileFromBrunoCollection(info, fileName) {
|
|
101
|
-
return (0, path_1.extname)(fileName) == ".js" && isInABrunoCollection(info, fileName);
|
|
102
|
-
}
|
|
103
168
|
function filterOutDiagnosticsForInbuiltRuntimeFunctions(diagnosticsToFilter, fileContent) {
|
|
104
169
|
return diagnosticsToFilter.filter(({ start, length }) => start != undefined &&
|
|
105
170
|
length != undefined &&
|
|
106
171
|
// Do not show diagnostics for functions that are provided by Bruno at runtime
|
|
107
|
-
!
|
|
172
|
+
!getNamesForInbuiltRuntimeVarsAndFunctions().includes(fileContent.substring(start, start + length)) &&
|
|
108
173
|
// Avoid showing incorrect error when using `require`
|
|
109
174
|
// (the error seems to only occur for short periods of time when typescript type definitions have not been reloaded for a while)
|
|
110
175
|
fileContent.substring(start, start + length) != "require");
|
|
@@ -153,6 +218,12 @@ function isACollectionRootFolder(info, directoryPath) {
|
|
|
153
218
|
function isBrunoFile(fileName) {
|
|
154
219
|
return (0, path_1.extname)(fileName) == ".bru";
|
|
155
220
|
}
|
|
221
|
+
function getTempJsFileBaseNameWithoutExtension() {
|
|
222
|
+
return "__temp_bru_reference";
|
|
223
|
+
}
|
|
224
|
+
function getNamesForInbuiltRuntimeVarsAndFunctions() {
|
|
225
|
+
return ["bru", "req", "res", "test", "expect"];
|
|
226
|
+
}
|
|
156
227
|
var TextBlockName;
|
|
157
228
|
(function (TextBlockName) {
|
|
158
229
|
TextBlockName["Tests"] = "tests";
|
package/out/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAAA,+BAAwC;AACxC,qDAAqD;AAErD,SAAS,IAAI,CAAC,QAEb;IACG,SAAS,MAAM,CAAC,IAAgC;QAC5C,0BAA0B;QAC1B,MAAM,KAAK,GAAuB,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;QAEtD,KAAK,MAAM,CAAC,IAAI,MAAM,CAAC,IAAI,CACvB,IAAI,CAAC,eAAe,CACS,EAAE,CAAC;YAChC,MAAM,CAAC,GAAG,IAAI,CAAC,eAAe,CAAC,CAAC,CAAE,CAAC;YACnC,yEAAyE;YACzE,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,IAAe,EAAE,EAAE;YAC9B,yEAAyE;YACzE,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,eAAe,EAAE,IAAI,CAAC,CAAC;QAC5C,CAAC;QAED,KAAK,CAAC,uBAAuB,GAAG,CAAC,QAAQ,EAAE,EAAE;YACzC,OAAO,wBAAwB,CAC3B,IAAI,EACJ,QAAQ,EACR,IAAI,CAAC,eAAe,CAAC,uBAAuB,CAAC,QAAQ,CAAC,CAC1B,CAAC;QACrC,CAAC,CAAC;QAEF,KAAK,CAAC,sBAAsB,GAAG,CAAC,QAAQ,EAAE,EAAE;YACxC,OAAO,wBAAwB,CAC3B,IAAI,EACJ,QAAQ,EACR,IAAI,CAAC,eAAe,CAAC,sBAAsB,CAAC,QAAQ,CAAC,CACxD,CAAC;QACN,CAAC,CAAC;QAEF,KAAK,CAAC,wBAAwB,GAAG,CAAC,QAAQ,EAAE,EAAE;YAC1C,MAAM,kBAAkB,GACpB,IAAI,CAAC,eAAe,CAAC,wBAAwB,CAAC,QAAQ,CAAC,CAAC;YAE5D,
|
|
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": "
|
|
3
|
+
"version": "3.0.0",
|
|
4
4
|
"main": "./out/index.js",
|
|
5
5
|
"scripts": {
|
|
6
|
-
"
|
|
6
|
+
"compile": "tsc --project tsconfig.json"
|
|
7
7
|
},
|
|
8
8
|
"author": "zentryc5t",
|
|
9
9
|
"license": "MIT",
|
package/src/index.ts
CHANGED
|
@@ -38,35 +38,212 @@ function init(_modules: {
|
|
|
38
38
|
const defaultDiagnostics =
|
|
39
39
|
info.languageService.getSuggestionDiagnostics(fileName);
|
|
40
40
|
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
const allDiagnosticsForCodeBlocks = filterDefaultDiagnostics(
|
|
41
|
+
const isBruFile = isBrunoFile(fileName);
|
|
42
|
+
|
|
43
|
+
const allDiagnostics = filterDefaultDiagnostics(
|
|
45
44
|
info,
|
|
46
45
|
fileName,
|
|
47
46
|
defaultDiagnostics,
|
|
48
47
|
) as ts.DiagnosticWithLocation[];
|
|
49
48
|
|
|
50
49
|
// The ts server always reports errors when importing a Javascript function in a .bru file.
|
|
51
|
-
return
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
50
|
+
return isBruFile
|
|
51
|
+
? allDiagnostics.filter(
|
|
52
|
+
// Do not show diagnostics that only make sense for Typescript files.
|
|
53
|
+
// Bru file code blocks should be treated like Javascript functions instead.
|
|
54
|
+
// A list of diagnostics can be found here: https://github.com/microsoft/TypeScript/blob/main/src/compiler/diagnosticMessages.json
|
|
55
|
+
({ code }) =>
|
|
56
|
+
(code < 7_043 || code > 7_050) &&
|
|
57
|
+
code != 80_001 &&
|
|
58
|
+
code != 80_004,
|
|
59
|
+
)
|
|
60
|
+
: allDiagnostics.filter(({ code }) => code != 80_001); // Bruno currently only supports CommonJS modules.
|
|
60
61
|
};
|
|
61
62
|
|
|
62
|
-
// All hovers are provided by the extension implementation
|
|
63
|
+
// All hovers are provided by the extension implementation for '.bru' files.
|
|
63
64
|
proxy.getQuickInfoAtPosition = (fileName, position) => {
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
65
|
+
if (isBrunoFile(fileName)) {
|
|
66
|
+
return undefined;
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
return info.languageService.getQuickInfoAtPosition(
|
|
70
|
+
fileName,
|
|
71
|
+
position,
|
|
72
|
+
);
|
|
73
|
+
};
|
|
74
|
+
|
|
75
|
+
proxy.getCompletionsAtPosition = (fileName, position, options) => {
|
|
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;
|
|
96
|
+
};
|
|
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
|
+
? { canRename: false, localizedErrorMessage: "You cannot rename elements that are provided by Bruno at runtime." }
|
|
126
|
+
: defaultRenameInfo;
|
|
127
|
+
};
|
|
128
|
+
|
|
129
|
+
proxy.findRenameLocations = (
|
|
130
|
+
fileName,
|
|
131
|
+
position,
|
|
132
|
+
findInStrings,
|
|
133
|
+
findInComments,
|
|
134
|
+
providePrefixAndSuffixTextForRename,
|
|
135
|
+
) => {
|
|
136
|
+
const defaultRenameLocations =
|
|
137
|
+
info.languageService.findRenameLocations(
|
|
138
|
+
fileName,
|
|
139
|
+
position,
|
|
140
|
+
findInStrings,
|
|
141
|
+
findInComments,
|
|
142
|
+
providePrefixAndSuffixTextForRename &&
|
|
143
|
+
typeof providePrefixAndSuffixTextForRename != "boolean"
|
|
144
|
+
? providePrefixAndSuffixTextForRename
|
|
145
|
+
: {},
|
|
146
|
+
);
|
|
147
|
+
|
|
148
|
+
return defaultRenameLocations &&
|
|
149
|
+
isInABrunoCollection(info, fileName)
|
|
150
|
+
? defaultRenameLocations.filter(
|
|
151
|
+
({ fileName: fileForRenameLocation }) =>
|
|
152
|
+
!fileForRenameLocation.includes(
|
|
153
|
+
getTempJsFileBaseNameWithoutExtension(),
|
|
154
|
+
),
|
|
155
|
+
)
|
|
156
|
+
: defaultRenameLocations;
|
|
157
|
+
};
|
|
158
|
+
|
|
159
|
+
proxy.findReferences = (fileName, position) => {
|
|
160
|
+
const defaultReferences = info.languageService.findReferences(
|
|
161
|
+
fileName,
|
|
162
|
+
position,
|
|
163
|
+
);
|
|
164
|
+
|
|
165
|
+
return defaultReferences && isInABrunoCollection(info, fileName)
|
|
166
|
+
? defaultReferences.filter(
|
|
167
|
+
({ definition: { fileName: fileForDefinition } }) =>
|
|
168
|
+
!fileForDefinition.includes(
|
|
169
|
+
getTempJsFileBaseNameWithoutExtension(),
|
|
170
|
+
),
|
|
171
|
+
)
|
|
172
|
+
: defaultReferences;
|
|
173
|
+
};
|
|
174
|
+
|
|
175
|
+
proxy.getDefinitionAtPosition = (fileName, position) => {
|
|
176
|
+
const defaultDefinitions =
|
|
177
|
+
info.languageService.getDefinitionAtPosition(
|
|
178
|
+
fileName,
|
|
179
|
+
position,
|
|
180
|
+
);
|
|
181
|
+
|
|
182
|
+
return defaultDefinitions && isInABrunoCollection(info, fileName)
|
|
183
|
+
? defaultDefinitions.filter(
|
|
184
|
+
({ fileName: fileForDefinition }) =>
|
|
185
|
+
!fileForDefinition.includes(
|
|
186
|
+
getTempJsFileBaseNameWithoutExtension(),
|
|
187
|
+
),
|
|
188
|
+
)
|
|
189
|
+
: defaultDefinitions;
|
|
190
|
+
};
|
|
191
|
+
|
|
192
|
+
proxy.getDefinitionAndBoundSpan = (fileName, position) => {
|
|
193
|
+
const defaultDefinition =
|
|
194
|
+
info.languageService.getDefinitionAndBoundSpan(
|
|
195
|
+
fileName,
|
|
196
|
+
position,
|
|
197
|
+
);
|
|
198
|
+
|
|
199
|
+
return defaultDefinition &&
|
|
200
|
+
isInABrunoCollection(info, fileName) &&
|
|
201
|
+
defaultDefinition.definitions
|
|
202
|
+
? {
|
|
203
|
+
...defaultDefinition,
|
|
204
|
+
definitions: defaultDefinition.definitions.filter(
|
|
205
|
+
({ fileName: fileForDefinition }) =>
|
|
206
|
+
!fileForDefinition.includes(
|
|
207
|
+
getTempJsFileBaseNameWithoutExtension(),
|
|
208
|
+
),
|
|
209
|
+
),
|
|
210
|
+
}
|
|
211
|
+
: defaultDefinition;
|
|
212
|
+
};
|
|
213
|
+
|
|
214
|
+
proxy.getTypeDefinitionAtPosition = (fileName, position) => {
|
|
215
|
+
const defaultDefinitions =
|
|
216
|
+
info.languageService.getDefinitionAtPosition(
|
|
217
|
+
fileName,
|
|
218
|
+
position,
|
|
219
|
+
);
|
|
220
|
+
|
|
221
|
+
return defaultDefinitions && isInABrunoCollection(info, fileName)
|
|
222
|
+
? defaultDefinitions.filter(
|
|
223
|
+
({ fileName: fileForDefinition }) =>
|
|
224
|
+
!fileForDefinition.includes(
|
|
225
|
+
getTempJsFileBaseNameWithoutExtension(),
|
|
226
|
+
),
|
|
227
|
+
)
|
|
228
|
+
: defaultDefinitions;
|
|
229
|
+
};
|
|
230
|
+
|
|
231
|
+
proxy.getImplementationAtPosition = (fileName, position) => {
|
|
232
|
+
const defaultImplementations =
|
|
233
|
+
info.languageService.getImplementationAtPosition(
|
|
234
|
+
fileName,
|
|
235
|
+
position,
|
|
236
|
+
);
|
|
237
|
+
|
|
238
|
+
return defaultImplementations &&
|
|
239
|
+
isInABrunoCollection(info, fileName)
|
|
240
|
+
? defaultImplementations.filter(
|
|
241
|
+
({ fileName: fileForImplementation }) =>
|
|
242
|
+
!fileForImplementation.includes(
|
|
243
|
+
getTempJsFileBaseNameWithoutExtension(),
|
|
244
|
+
),
|
|
245
|
+
)
|
|
246
|
+
: defaultImplementations;
|
|
70
247
|
};
|
|
71
248
|
|
|
72
249
|
return proxy;
|
|
@@ -82,59 +259,57 @@ function filterDefaultDiagnostics(
|
|
|
82
259
|
fileName: string,
|
|
83
260
|
defaultDiagnostics: (ts.Diagnostic | ts.DiagnosticWithLocation)[],
|
|
84
261
|
) {
|
|
85
|
-
if (
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
}
|
|
97
|
-
const fileContent = getFileContent(info, fileName);
|
|
262
|
+
if (
|
|
263
|
+
!isBrunoFile(fileName) &&
|
|
264
|
+
!fileName.includes(getTempJsFileBaseNameWithoutExtension())
|
|
265
|
+
) {
|
|
266
|
+
return defaultDiagnostics;
|
|
267
|
+
} else if (
|
|
268
|
+
fileName.includes(getTempJsFileBaseNameWithoutExtension()) &&
|
|
269
|
+
isInABrunoCollection(info, fileName)
|
|
270
|
+
) {
|
|
271
|
+
// Filter out all diagnostics for temp js files.
|
|
272
|
+
return [];
|
|
273
|
+
}
|
|
98
274
|
|
|
99
|
-
|
|
100
|
-
return [];
|
|
101
|
-
}
|
|
275
|
+
const fileContent = getFileContent(info, fileName);
|
|
102
276
|
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
endIndex: number;
|
|
107
|
-
}[] = [];
|
|
277
|
+
if (!fileContent) {
|
|
278
|
+
return [];
|
|
279
|
+
}
|
|
108
280
|
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
281
|
+
const indizes: {
|
|
282
|
+
blockName: string;
|
|
283
|
+
startIndex: number;
|
|
284
|
+
endIndex: number;
|
|
285
|
+
}[] = [];
|
|
114
286
|
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
287
|
+
for (const blockName of Object.values(TextBlockName)) {
|
|
288
|
+
const indizesForBlock = getCodeBlockStartAndEndIndex(
|
|
289
|
+
fileContent,
|
|
290
|
+
blockName,
|
|
291
|
+
);
|
|
119
292
|
|
|
120
|
-
if (
|
|
121
|
-
|
|
293
|
+
if (indizesForBlock) {
|
|
294
|
+
indizes.push({ blockName, ...indizesForBlock });
|
|
122
295
|
}
|
|
296
|
+
}
|
|
123
297
|
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
({ start }) =>
|
|
127
|
-
start != undefined &&
|
|
128
|
-
indizes.some(
|
|
129
|
-
({ startIndex: blockStart, endIndex: blockEnd }) =>
|
|
130
|
-
start >= blockStart && start <= blockEnd,
|
|
131
|
-
),
|
|
132
|
-
),
|
|
133
|
-
fileContent,
|
|
134
|
-
);
|
|
135
|
-
} else {
|
|
136
|
-
return defaultDiagnostics;
|
|
298
|
+
if (indizes.length == 0) {
|
|
299
|
+
return [];
|
|
137
300
|
}
|
|
301
|
+
|
|
302
|
+
return filterOutDiagnosticsForInbuiltRuntimeFunctions(
|
|
303
|
+
defaultDiagnostics.filter(
|
|
304
|
+
({ start }) =>
|
|
305
|
+
start != undefined &&
|
|
306
|
+
indizes.some(
|
|
307
|
+
({ startIndex: blockStart, endIndex: blockEnd }) =>
|
|
308
|
+
start >= blockStart && start <= blockEnd,
|
|
309
|
+
),
|
|
310
|
+
),
|
|
311
|
+
fileContent,
|
|
312
|
+
);
|
|
138
313
|
}
|
|
139
314
|
|
|
140
315
|
function getCodeBlockStartAndEndIndex(
|
|
@@ -180,13 +355,6 @@ function getCodeBlockStartAndEndIndex(
|
|
|
180
355
|
};
|
|
181
356
|
}
|
|
182
357
|
|
|
183
|
-
function isJsFileFromBrunoCollection(
|
|
184
|
-
info: ts.server.PluginCreateInfo,
|
|
185
|
-
fileName: string,
|
|
186
|
-
) {
|
|
187
|
-
return extname(fileName) == ".js" && isInABrunoCollection(info, fileName);
|
|
188
|
-
}
|
|
189
|
-
|
|
190
358
|
function filterOutDiagnosticsForInbuiltRuntimeFunctions(
|
|
191
359
|
diagnosticsToFilter: (ts.Diagnostic | ts.DiagnosticWithLocation)[],
|
|
192
360
|
fileContent: string,
|
|
@@ -196,7 +364,7 @@ function filterOutDiagnosticsForInbuiltRuntimeFunctions(
|
|
|
196
364
|
start != undefined &&
|
|
197
365
|
length != undefined &&
|
|
198
366
|
// Do not show diagnostics for functions that are provided by Bruno at runtime
|
|
199
|
-
!
|
|
367
|
+
!getNamesForInbuiltRuntimeVarsAndFunctions().includes(
|
|
200
368
|
fileContent.substring(start, start + length),
|
|
201
369
|
) &&
|
|
202
370
|
// Avoid showing incorrect error when using `require`
|
|
@@ -267,6 +435,14 @@ function isBrunoFile(fileName: string) {
|
|
|
267
435
|
return extname(fileName) == ".bru";
|
|
268
436
|
}
|
|
269
437
|
|
|
438
|
+
function getTempJsFileBaseNameWithoutExtension() {
|
|
439
|
+
return "__temp_bru_reference";
|
|
440
|
+
}
|
|
441
|
+
|
|
442
|
+
function getNamesForInbuiltRuntimeVarsAndFunctions() {
|
|
443
|
+
return ["bru", "req", "res", "test", "expect"];
|
|
444
|
+
}
|
|
445
|
+
|
|
270
446
|
enum TextBlockName {
|
|
271
447
|
Tests = "tests",
|
|
272
448
|
PreRequestScript = "script:pre-request",
|