@zentryc5t/ts-plugin-for-bruno 1.0.1 → 1.0.3

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
@@ -6,4 +6,11 @@ This directory provides an `npm` package for a Typescript language service plugi
6
6
 
7
7
  ## Main Features
8
8
 
9
- Only some of the intellisense features for `Bruno` files are provided by this npm package. For a fuller set of intellisense features, you can use the VS Code extension, that is built from the root folder of this git repository.
9
+ Only some of the intellisense features for `Bruno` files are provided by this npm package. For a fuller set of intellisense features, you can use the VS Code extension, that is built from the root folder of this git repository.
10
+
11
+ ## Debugging
12
+
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
package/out/index.js CHANGED
@@ -1,5 +1,6 @@
1
1
  "use strict";
2
2
  const path_1 = require("path");
3
+ const ts = require("typescript/lib/tsserverlibrary");
3
4
  function init(_modules) {
4
5
  function create(info) {
5
6
  // Set up decorator object
@@ -60,7 +61,7 @@ function filterDefaultDiagnostics(info, fileName, defaultDiagnostics) {
60
61
  }
61
62
  const indizes = [];
62
63
  for (const blockName of Object.values(TextBlockName)) {
63
- const indizesForBlock = getTextBlockStartAndEndIndex(fileContent, blockName);
64
+ const indizesForBlock = getCodeBlockStartAndEndIndex(fileContent, blockName);
64
65
  if (indizesForBlock) {
65
66
  indizes.push({ blockName, ...indizesForBlock });
66
67
  }
@@ -81,36 +82,26 @@ function filterDefaultDiagnostics(info, fileName, defaultDiagnostics) {
81
82
  }
82
83
  }
83
84
  }
84
- function getTextBlockStartAndEndIndex(fullTextContent, blockName) {
85
+ function getCodeBlockStartAndEndIndex(fullTextContent, blockName) {
85
86
  const openingBracketChar = "{";
86
- const closingBracketChar = "}";
87
87
  const startPattern = new RegExp(`^\\s*${blockName}\\s*${openingBracketChar}\\s*$`, "m");
88
88
  const startMatches = startPattern.exec(fullTextContent);
89
89
  if (!startMatches || startMatches.length == 0) {
90
90
  return undefined;
91
91
  }
92
- const contentStartIndex = startMatches.index + startMatches[0].indexOf(openingBracketChar) + 1;
93
- const remainingDoc = fullTextContent.substring(contentStartIndex);
94
- const remainingDocLength = remainingDoc.length;
95
- let openBracketsOnBlockLevel = 1;
96
- let remainingDocCurrentIndex = 0;
97
- while (openBracketsOnBlockLevel > 0 &&
98
- remainingDocCurrentIndex < remainingDocLength) {
99
- const currentChar = remainingDoc.charAt(remainingDocCurrentIndex);
100
- openBracketsOnBlockLevel +=
101
- currentChar == openingBracketChar
102
- ? 1
103
- : currentChar == closingBracketChar
104
- ? -1
105
- : 0;
106
- remainingDocCurrentIndex++;
107
- }
108
- if (openBracketsOnBlockLevel > 0) {
109
- return undefined;
92
+ const blockStartIndex = startMatches.index;
93
+ const remainingDoc = fullTextContent.substring(blockStartIndex);
94
+ const sourceFile = ts.createSourceFile("test.js", remainingDoc, ts.ScriptTarget.ES2020);
95
+ const blockNodeInSubDocument = sourceFile
96
+ .getChildAt(0, sourceFile)
97
+ .getChildren(sourceFile)
98
+ .find(({ kind }) => kind == ts.SyntaxKind.Block);
99
+ if (!blockNodeInSubDocument) {
100
+ throw new Error(`Could not find code block within given subdocument: ${remainingDoc}`);
110
101
  }
111
102
  return {
112
- startIndex: contentStartIndex,
113
- endIndex: remainingDocCurrentIndex + contentStartIndex,
103
+ startIndex: blockStartIndex + startMatches[0].indexOf(openingBracketChar) + 1,
104
+ endIndex: blockStartIndex + blockNodeInSubDocument.end,
114
105
  };
115
106
  }
116
107
  function isBrunoFile(fileName) {
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":";AAAA,+BAA+B;AAC/B,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,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,EAAE,CAAC;gBACzB,OAAO,kBAAkB,CAAC;YAC9B,CAAC;YACD,MAAM,2BAA2B,GAAG,wBAAwB,CACxD,IAAI,EACJ,QAAQ,EACR,kBAAkB,CACU,CAAC;YAEjC,2FAA2F;YAC3F,OAAO,2BAA2B,CAAC,MAAM;YACrC,qEAAqE;YACrE,4EAA4E;YAC5E,kIAAkI;YAClI,CAAC,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC,CAAC,IAAI,GAAG,IAAK,IAAI,IAAI,GAAG,IAAK,CAAC,IAAI,IAAI,IAAI,KAAM,CACjE,CAAC;QACN,CAAC,CAAC;QAEF,0DAA0D;QAC1D,KAAK,CAAC,sBAAsB,GAAG,CAAC,QAAQ,EAAE,QAAQ,EAAE,EAAE;YAClD,OAAO,WAAW,CAAC,QAAQ,CAAC;gBACxB,CAAC,CAAC,SAAS;gBACX,CAAC,CAAC,IAAI,CAAC,eAAe,CAAC,sBAAsB,CACvC,QAAQ,EACR,QAAQ,CACX,CAAC;QACZ,CAAC,CAAC;QAEF,OAAO,KAAK,CAAC;IACjB,CAAC;IAED,OAAO;QACH,MAAM;KACT,CAAC;AACN,CAAC;AAED,SAAS,wBAAwB,CAC7B,IAAgC,EAChC,QAAgB,EAChB,kBAAiE;IAEjE,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,EAAE,CAAC;QACzB,OAAO,kBAAkB,CAAC;IAC9B,CAAC;SAAM,CAAC;QACJ,IAAI,WAAW,GAAuB,SAAS,CAAC;QAChD,MAAM,cAAc,GAChB,IAAI,CAAC,mBAAmB,CAAC,iBAAiB,CAAC,QAAQ,CAAC,CAAC;QAEzD,IAAI,cAAc,EAAE,CAAC;YACjB,WAAW,GAAG,cAAc,CAAC,OAAO,CAAC,CAAC,EAAE,cAAc,CAAC,SAAS,EAAE,CAAC,CAAC;QACxE,CAAC;aAAM,CAAC;YACJ,WAAW,GAAG,IAAI,CAAC,mBAAmB,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;QAC9D,CAAC;QAED,IAAI,CAAC,WAAW,EAAE,CAAC;YACf,OAAO,EAAE,CAAC;QACd,CAAC;QAED,MAAM,OAAO,GAIP,EAAE,CAAC;QAET,KAAK,MAAM,SAAS,IAAI,MAAM,CAAC,MAAM,CAAC,aAAa,CAAC,EAAE,CAAC;YACnD,MAAM,eAAe,GAAG,4BAA4B,CAChD,WAAW,EACX,SAAS,CACZ,CAAC;YAEF,IAAI,eAAe,EAAE,CAAC;gBAClB,OAAO,CAAC,IAAI,CAAC,EAAE,SAAS,EAAE,GAAG,eAAe,EAAE,CAAC,CAAC;YACpD,CAAC;QACL,CAAC;QAED,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACrB,OAAO,kBAAkB,CAAC,MAAM,CAC5B,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,EAAE,EAAE,CAClB,KAAK,IAAI,SAAS;gBAClB,MAAM,IAAI,SAAS;gBACnB,OAAO,CAAC,IAAI,CACR,CAAC,EAAE,UAAU,EAAE,UAAU,EAAE,QAAQ,EAAE,QAAQ,EAAE,EAAE,EAAE,CAC/C,KAAK,IAAI,UAAU,IAAI,KAAK,IAAI,QAAQ,CAC/C;gBACD,8EAA8E;gBAC9E,CAAC,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,QAAQ,CAAC,CAAC,QAAQ,CAC5C,WAAsB,CAAC,SAAS,CAC7B,KAAK,EACL,KAAK,GAAG,MAAM,CACjB,CACJ;gBACD,qDAAqD;gBACrD,gIAAgI;gBAC/H,WAAsB,CAAC,SAAS,CAAC,KAAK,EAAE,KAAK,GAAG,MAAM,CAAC;oBACpD,SAAS,CACpB,CAAC;QACN,CAAC;aAAM,CAAC;YACJ,OAAO,EAAE,CAAC;QACd,CAAC;IACL,CAAC;AACL,CAAC;AAED,SAAS,4BAA4B,CACjC,eAAuB,EACvB,SAAwB;IAExB,MAAM,kBAAkB,GAAG,GAAG,CAAC;IAE/B,MAAM,YAAY,GAAG,IAAI,MAAM,CAC3B,QAAQ,SAAS,OAAO,kBAAkB,OAAO,EACjD,GAAG,CACN,CAAC;IACF,MAAM,YAAY,GAAG,YAAY,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;IAExD,IAAI,CAAC,YAAY,IAAI,YAAY,CAAC,MAAM,IAAI,CAAC,EAAE,CAAC;QAC5C,OAAO,SAAS,CAAC;IACrB,CAAC;IAED,MAAM,eAAe,GAAG,YAAY,CAAC,KAAK,CAAC;IAC3C,MAAM,YAAY,GAAG,eAAe,CAAC,SAAS,CAAC,eAAe,CAAC,CAAC;IAEhE,MAAM,UAAU,GAAG,EAAE,CAAC,gBAAgB,CAClC,SAAS,EACT,YAAY,EACZ,EAAE,CAAC,YAAY,CAAC,MAAM,CACzB,CAAC;IAEF,MAAM,sBAAsB,GAAI,UAAsB;SACjD,UAAU,CAAC,CAAC,EAAE,UAAU,CAAC;SACzB,WAAW,CAAC,UAAU,CAAC;SACvB,IAAI,CAAC,CAAC,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC,IAAI,IAAI,EAAE,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC;IAErD,IAAI,CAAC,sBAAsB,EAAE,CAAC;QAC1B,MAAM,IAAI,KAAK,CACX,uDAAuD,YAAY,EAAE,CACxE,CAAC;IACN,CAAC;IAED,OAAO;QACH,UAAU,EACN,eAAe,GAAG,YAAY,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,kBAAkB,CAAC,GAAG,CAAC;QACrE,QAAQ,EAAE,eAAe,GAAG,sBAAsB,CAAC,GAAG;KACzD,CAAC;AACN,CAAC;AAED,SAAS,WAAW,CAAC,QAAgB;IACjC,OAAO,IAAA,cAAO,EAAC,QAAQ,CAAC,IAAI,MAAM,CAAC;AACvC,CAAC;AAED,IAAK,aAIJ;AAJD,WAAK,aAAa;IACd,gCAAe,CAAA;IACf,wDAAuC,CAAA;IACvC,4DAA2C,CAAA;AAC/C,CAAC,EAJI,aAAa,KAAb,aAAa,QAIjB;AAED,iBAAS,IAAI,CAAC"}
package/package.json CHANGED
@@ -1,11 +1,14 @@
1
1
  {
2
2
  "name": "@zentryc5t/ts-plugin-for-bruno",
3
- "version": "1.0.1",
3
+ "version": "1.0.3",
4
4
  "main": "./out/index.js",
5
5
  "scripts": {
6
6
  "test": "echo \"Error: no test specified\" && exit 1"
7
7
  },
8
8
  "author": "zentryc5t",
9
9
  "license": "MIT",
10
- "description": ""
10
+ "description": "",
11
+ "repository": {
12
+ "url": "https://github.com/daniel-b92/bruno-vs-code-extension/tree/main/src/tsPlugin"
13
+ }
11
14
  }
package/src/index.ts CHANGED
@@ -9,7 +9,7 @@ function init(_modules: {
9
9
  const proxy: ts.LanguageService = Object.create(null);
10
10
 
11
11
  for (const k of Object.keys(
12
- info.languageService
12
+ info.languageService,
13
13
  ) as (keyof ts.LanguageService)[]) {
14
14
  const x = info.languageService[k]!;
15
15
  // @ts-expect-error - JS runtime trickery which is tricky to type tersely
@@ -22,7 +22,7 @@ function init(_modules: {
22
22
  return filterDefaultDiagnostics(
23
23
  info,
24
24
  fileName,
25
- info.languageService.getSyntacticDiagnostics(fileName)
25
+ info.languageService.getSyntacticDiagnostics(fileName),
26
26
  ) as ts.DiagnosticWithLocation[];
27
27
  };
28
28
 
@@ -30,7 +30,7 @@ function init(_modules: {
30
30
  return filterDefaultDiagnostics(
31
31
  info,
32
32
  fileName,
33
- info.languageService.getSemanticDiagnostics(fileName)
33
+ info.languageService.getSemanticDiagnostics(fileName),
34
34
  );
35
35
  };
36
36
 
@@ -44,7 +44,7 @@ function init(_modules: {
44
44
  const allDiagnosticsForCodeBlocks = filterDefaultDiagnostics(
45
45
  info,
46
46
  fileName,
47
- defaultDiagnostics
47
+ defaultDiagnostics,
48
48
  ) as ts.DiagnosticWithLocation[];
49
49
 
50
50
  // The ts server always reports errors when importing a Javascript function in a .bru file.
@@ -52,7 +52,7 @@ function init(_modules: {
52
52
  // Do not show diagnostics that only make sense for Typescript files.
53
53
  // Bru file code blocks should be treated like Javascript functions instead.
54
54
  // A list of diagnostics can be found here: https://github.com/microsoft/TypeScript/blob/main/src/compiler/diagnosticMessages.json
55
- ({ code }) => (code < 7_043 || code > 7_050) && code != 80_004
55
+ ({ code }) => (code < 7_043 || code > 7_050) && code != 80_004,
56
56
  );
57
57
  };
58
58
 
@@ -62,7 +62,7 @@ function init(_modules: {
62
62
  ? undefined
63
63
  : info.languageService.getQuickInfoAtPosition(
64
64
  fileName,
65
- position
65
+ position,
66
66
  );
67
67
  };
68
68
 
@@ -77,7 +77,7 @@ function init(_modules: {
77
77
  function filterDefaultDiagnostics(
78
78
  info: ts.server.PluginCreateInfo,
79
79
  fileName: string,
80
- defaultDiagnostics: (ts.Diagnostic | ts.DiagnosticWithLocation)[]
80
+ defaultDiagnostics: (ts.Diagnostic | ts.DiagnosticWithLocation)[],
81
81
  ) {
82
82
  if (!isBrunoFile(fileName)) {
83
83
  return defaultDiagnostics;
@@ -103,9 +103,9 @@ function filterDefaultDiagnostics(
103
103
  }[] = [];
104
104
 
105
105
  for (const blockName of Object.values(TextBlockName)) {
106
- const indizesForBlock = getTextBlockStartAndEndIndex(
106
+ const indizesForBlock = getCodeBlockStartAndEndIndex(
107
107
  fileContent,
108
- blockName
108
+ blockName,
109
109
  );
110
110
 
111
111
  if (indizesForBlock) {
@@ -120,16 +120,19 @@ function filterDefaultDiagnostics(
120
120
  length != undefined &&
121
121
  indizes.some(
122
122
  ({ startIndex: blockStart, endIndex: blockEnd }) =>
123
- start >= blockStart && start <= blockEnd
123
+ start >= blockStart && start <= blockEnd,
124
124
  ) &&
125
125
  // Do not show diagnostics for functions that are provided by Bruno at runtime
126
126
  !["bru", "req", "res", "test", "expect"].includes(
127
- (fileContent as string).substring(start, start + length)
127
+ (fileContent as string).substring(
128
+ start,
129
+ start + length,
130
+ ),
128
131
  ) &&
129
132
  // Avoid showing incorrect error when using `require`
130
133
  // (the error seems to only occur for short periods of time when typescript type definitions have not been reloaded for a while)
131
134
  (fileContent as string).substring(start, start + length) !=
132
- "require"
135
+ "require",
133
136
  );
134
137
  } else {
135
138
  return [];
@@ -137,16 +140,15 @@ function filterDefaultDiagnostics(
137
140
  }
138
141
  }
139
142
 
140
- function getTextBlockStartAndEndIndex(
143
+ function getCodeBlockStartAndEndIndex(
141
144
  fullTextContent: string,
142
- blockName: TextBlockName
145
+ blockName: TextBlockName,
143
146
  ) {
144
147
  const openingBracketChar = "{";
145
- const closingBracketChar = "}";
146
148
 
147
149
  const startPattern = new RegExp(
148
150
  `^\\s*${blockName}\\s*${openingBracketChar}\\s*$`,
149
- "m"
151
+ "m",
150
152
  );
151
153
  const startMatches = startPattern.exec(fullTextContent);
152
154
 
@@ -154,37 +156,30 @@ function getTextBlockStartAndEndIndex(
154
156
  return undefined;
155
157
  }
156
158
 
157
- const contentStartIndex =
158
- startMatches.index + startMatches[0].indexOf(openingBracketChar) + 1;
159
+ const blockStartIndex = startMatches.index;
160
+ const remainingDoc = fullTextContent.substring(blockStartIndex);
159
161
 
160
- const remainingDoc = fullTextContent.substring(contentStartIndex);
161
- const remainingDocLength = remainingDoc.length;
162
- let openBracketsOnBlockLevel = 1;
163
- let remainingDocCurrentIndex = 0;
164
-
165
- while (
166
- openBracketsOnBlockLevel > 0 &&
167
- remainingDocCurrentIndex < remainingDocLength
168
- ) {
169
- const currentChar = remainingDoc.charAt(remainingDocCurrentIndex);
162
+ const sourceFile = ts.createSourceFile(
163
+ "test.js",
164
+ remainingDoc,
165
+ ts.ScriptTarget.ES2020,
166
+ );
170
167
 
171
- openBracketsOnBlockLevel +=
172
- currentChar == openingBracketChar
173
- ? 1
174
- : currentChar == closingBracketChar
175
- ? -1
176
- : 0;
168
+ const blockNodeInSubDocument = (sourceFile as ts.Node)
169
+ .getChildAt(0, sourceFile)
170
+ .getChildren(sourceFile)
171
+ .find(({ kind }) => kind == ts.SyntaxKind.Block);
177
172
 
178
- remainingDocCurrentIndex++;
179
- }
180
-
181
- if (openBracketsOnBlockLevel > 0) {
182
- return undefined;
173
+ if (!blockNodeInSubDocument) {
174
+ throw new Error(
175
+ `Could not find code block within given subdocument: ${remainingDoc}`,
176
+ );
183
177
  }
184
178
 
185
179
  return {
186
- startIndex: contentStartIndex,
187
- endIndex: remainingDocCurrentIndex + contentStartIndex,
180
+ startIndex:
181
+ blockStartIndex + startMatches[0].indexOf(openingBracketChar) + 1,
182
+ endIndex: blockStartIndex + blockNodeInSubDocument.end,
188
183
  };
189
184
  }
190
185