@marton78/cucumber-language-server 1.7.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (111) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +61 -0
  3. package/bin/cucumber-language-server.cjs +20 -0
  4. package/dist/cjs/package.json +1 -0
  5. package/dist/cjs/src/CucumberLanguageServer.d.ts +32 -0
  6. package/dist/cjs/src/CucumberLanguageServer.d.ts.map +1 -0
  7. package/dist/cjs/src/CucumberLanguageServer.js +401 -0
  8. package/dist/cjs/src/CucumberLanguageServer.js.map +1 -0
  9. package/dist/cjs/src/Files.d.ts +8 -0
  10. package/dist/cjs/src/Files.d.ts.map +1 -0
  11. package/dist/cjs/src/Files.js +8 -0
  12. package/dist/cjs/src/Files.js.map +1 -0
  13. package/dist/cjs/src/buildStepTexts.d.ts +2 -0
  14. package/dist/cjs/src/buildStepTexts.d.ts.map +1 -0
  15. package/dist/cjs/src/buildStepTexts.js +19 -0
  16. package/dist/cjs/src/buildStepTexts.js.map +1 -0
  17. package/dist/cjs/src/fs.d.ts +8 -0
  18. package/dist/cjs/src/fs.d.ts.map +1 -0
  19. package/dist/cjs/src/fs.js +78 -0
  20. package/dist/cjs/src/fs.js.map +1 -0
  21. package/dist/cjs/src/getStepDefinitionSnippetLinks.d.ts +3 -0
  22. package/dist/cjs/src/getStepDefinitionSnippetLinks.d.ts.map +1 -0
  23. package/dist/cjs/src/getStepDefinitionSnippetLinks.js +20 -0
  24. package/dist/cjs/src/getStepDefinitionSnippetLinks.js.map +1 -0
  25. package/dist/cjs/src/index.d.ts +4 -0
  26. package/dist/cjs/src/index.d.ts.map +1 -0
  27. package/dist/cjs/src/index.js +22 -0
  28. package/dist/cjs/src/index.js.map +1 -0
  29. package/dist/cjs/src/node/NodeFiles.d.ts +10 -0
  30. package/dist/cjs/src/node/NodeFiles.d.ts.map +1 -0
  31. package/dist/cjs/src/node/NodeFiles.js +51 -0
  32. package/dist/cjs/src/node/NodeFiles.js.map +1 -0
  33. package/dist/cjs/src/node/index.d.ts +2 -0
  34. package/dist/cjs/src/node/index.d.ts.map +1 -0
  35. package/dist/cjs/src/node/index.js +18 -0
  36. package/dist/cjs/src/node/index.js.map +1 -0
  37. package/dist/cjs/src/types.d.ts +15 -0
  38. package/dist/cjs/src/types.d.ts.map +1 -0
  39. package/dist/cjs/src/types.js +3 -0
  40. package/dist/cjs/src/types.js.map +1 -0
  41. package/dist/cjs/src/version.d.ts +2 -0
  42. package/dist/cjs/src/version.d.ts.map +1 -0
  43. package/dist/cjs/src/version.js +5 -0
  44. package/dist/cjs/src/version.js.map +1 -0
  45. package/dist/cjs/src/wasm/index.d.ts +3 -0
  46. package/dist/cjs/src/wasm/index.d.ts.map +1 -0
  47. package/dist/cjs/src/wasm/index.js +19 -0
  48. package/dist/cjs/src/wasm/index.js.map +1 -0
  49. package/dist/cjs/src/wasm/startEmbeddedServer.d.ts +12 -0
  50. package/dist/cjs/src/wasm/startEmbeddedServer.d.ts.map +1 -0
  51. package/dist/cjs/src/wasm/startEmbeddedServer.js +25 -0
  52. package/dist/cjs/src/wasm/startEmbeddedServer.js.map +1 -0
  53. package/dist/cjs/src/wasm/startStandaloneServer.d.ts +5 -0
  54. package/dist/cjs/src/wasm/startStandaloneServer.d.ts.map +1 -0
  55. package/dist/cjs/src/wasm/startStandaloneServer.js +19 -0
  56. package/dist/cjs/src/wasm/startStandaloneServer.js.map +1 -0
  57. package/dist/esm/src/CucumberLanguageServer.d.ts +32 -0
  58. package/dist/esm/src/CucumberLanguageServer.d.ts.map +1 -0
  59. package/dist/esm/src/CucumberLanguageServer.js +397 -0
  60. package/dist/esm/src/CucumberLanguageServer.js.map +1 -0
  61. package/dist/esm/src/Files.d.ts +8 -0
  62. package/dist/esm/src/Files.d.ts.map +1 -0
  63. package/dist/esm/src/Files.js +5 -0
  64. package/dist/esm/src/Files.js.map +1 -0
  65. package/dist/esm/src/buildStepTexts.d.ts +2 -0
  66. package/dist/esm/src/buildStepTexts.d.ts.map +1 -0
  67. package/dist/esm/src/buildStepTexts.js +16 -0
  68. package/dist/esm/src/buildStepTexts.js.map +1 -0
  69. package/dist/esm/src/fs.d.ts +8 -0
  70. package/dist/esm/src/fs.d.ts.map +1 -0
  71. package/dist/esm/src/fs.js +71 -0
  72. package/dist/esm/src/fs.js.map +1 -0
  73. package/dist/esm/src/getStepDefinitionSnippetLinks.d.ts +3 -0
  74. package/dist/esm/src/getStepDefinitionSnippetLinks.d.ts.map +1 -0
  75. package/dist/esm/src/getStepDefinitionSnippetLinks.js +17 -0
  76. package/dist/esm/src/getStepDefinitionSnippetLinks.js.map +1 -0
  77. package/dist/esm/src/index.d.ts +4 -0
  78. package/dist/esm/src/index.d.ts.map +1 -0
  79. package/dist/esm/src/index.js +4 -0
  80. package/dist/esm/src/index.js.map +1 -0
  81. package/dist/esm/src/node/NodeFiles.d.ts +10 -0
  82. package/dist/esm/src/node/NodeFiles.d.ts.map +1 -0
  83. package/dist/esm/src/node/NodeFiles.js +44 -0
  84. package/dist/esm/src/node/NodeFiles.js.map +1 -0
  85. package/dist/esm/src/node/index.d.ts +2 -0
  86. package/dist/esm/src/node/index.d.ts.map +1 -0
  87. package/dist/esm/src/node/index.js +2 -0
  88. package/dist/esm/src/node/index.js.map +1 -0
  89. package/dist/esm/src/types.d.ts +15 -0
  90. package/dist/esm/src/types.d.ts.map +1 -0
  91. package/dist/esm/src/types.js +2 -0
  92. package/dist/esm/src/types.js.map +1 -0
  93. package/dist/esm/src/version.d.ts +2 -0
  94. package/dist/esm/src/version.d.ts.map +1 -0
  95. package/dist/esm/src/version.js +2 -0
  96. package/dist/esm/src/version.js.map +1 -0
  97. package/dist/esm/src/wasm/index.d.ts +3 -0
  98. package/dist/esm/src/wasm/index.d.ts.map +1 -0
  99. package/dist/esm/src/wasm/index.js +3 -0
  100. package/dist/esm/src/wasm/index.js.map +1 -0
  101. package/dist/esm/src/wasm/startEmbeddedServer.d.ts +12 -0
  102. package/dist/esm/src/wasm/startEmbeddedServer.d.ts.map +1 -0
  103. package/dist/esm/src/wasm/startEmbeddedServer.js +22 -0
  104. package/dist/esm/src/wasm/startEmbeddedServer.js.map +1 -0
  105. package/dist/esm/src/wasm/startStandaloneServer.d.ts +5 -0
  106. package/dist/esm/src/wasm/startStandaloneServer.d.ts.map +1 -0
  107. package/dist/esm/src/wasm/startStandaloneServer.js +16 -0
  108. package/dist/esm/src/wasm/startStandaloneServer.js.map +1 -0
  109. package/node/package.json +7 -0
  110. package/package.json +107 -0
  111. package/wasm/package.json +7 -0
@@ -0,0 +1,397 @@
1
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
2
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
3
+ return new (P || (P = Promise))(function (resolve, reject) {
4
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
5
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
6
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
7
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
8
+ });
9
+ };
10
+ import { buildSuggestions, ExpressionBuilder, getGenerateSnippetCodeAction, getGherkinCompletionItems, getGherkinDiagnostics, getGherkinDocumentFeatureSymbol, getGherkinFormattingEdits, getGherkinSemanticTokens, getStepDefinitionLocationLinks, jsSearchIndex, semanticTokenTypes, } from '@marton78/cucumber-language-service';
11
+ import { CodeActionKind, ConfigurationRequest, DidChangeConfigurationNotification, TextDocumentSyncKind, } from 'vscode-languageserver';
12
+ import { buildStepTexts } from './buildStepTexts.js';
13
+ import { extname } from './Files.js';
14
+ import { getLanguage, loadGherkinSources, loadGlueSources } from './fs.js';
15
+ import { getStepDefinitionSnippetLinks } from './getStepDefinitionSnippetLinks.js';
16
+ import { version } from './version.js';
17
+ // In order to allow 0-config in LSP clients we provide default settings.
18
+ // This should be consistent with the `README.md` in `cucumber/vscode` - this is to
19
+ // ensure the docs for the plugin reflect the defaults.
20
+ const defaultSettings = {
21
+ // IMPORTANT: If you change features or glue below, please also create a PR to update
22
+ // the vscode extension defaults accordingly in https://github.com/cucumber/vscode/blob/main/README.md#extension-settings
23
+ features: [
24
+ // Cucumber-JVM
25
+ 'src/test/**/*.feature',
26
+ // Cucumber-Ruby, Cucumber-Js, Behat, Behave, Godog
27
+ 'features/**/*.feature',
28
+ // Pytest-BDD
29
+ 'tests/**/*.feature',
30
+ // SpecFlow
31
+ '*specs*/**/*.feature',
32
+ ],
33
+ glue: [
34
+ // Cucumber-JVM
35
+ 'src/test/**/*.java',
36
+ // Cucumber-Js
37
+ 'features/**/*.ts',
38
+ 'features/**/*.tsx',
39
+ 'features/**/*.js',
40
+ 'features/**/*.jsx',
41
+ // Behat
42
+ 'features/**/*.php',
43
+ // Behave
44
+ 'features/**/*.py',
45
+ // Pytest-BDD
46
+ 'tests/**/*.py',
47
+ // Cucumber Rust
48
+ 'tests/**/*.rs',
49
+ 'features/**/*.rs',
50
+ // Cucumber-Ruby
51
+ 'features/**/*.rb',
52
+ // SpecFlow
53
+ '*specs*/**/*.cs',
54
+ // Godog
55
+ 'features/**/*_test.go',
56
+ ],
57
+ parameterTypes: [],
58
+ snippetTemplates: {},
59
+ };
60
+ export class CucumberLanguageServer {
61
+ constructor(connection, documents, parserAdapter, makeFiles, onReindexed) {
62
+ this.connection = connection;
63
+ this.documents = documents;
64
+ this.makeFiles = makeFiles;
65
+ this.onReindexed = onReindexed;
66
+ this.expressionBuilderResult = undefined;
67
+ this.expressions = [];
68
+ this.suggestions = [];
69
+ this.expressionBuilder = new ExpressionBuilder(parserAdapter);
70
+ connection.onInitialize((params) => __awaiter(this, void 0, void 0, function* () {
71
+ var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l;
72
+ // connection.console.log(`PARAMS: ${JSON.stringify(params, null, 2)}`)
73
+ yield parserAdapter.init();
74
+ if (params.clientInfo) {
75
+ connection.console.info(`Initializing connection from ${params.clientInfo.name} ${params.clientInfo.version}`);
76
+ }
77
+ else {
78
+ connection.console.info(`Initializing connection from unknown client`);
79
+ }
80
+ if (params.rootPath) {
81
+ this.rootUri = `file://${params.rootPath}`;
82
+ }
83
+ else if (params.rootUri) {
84
+ this.rootUri = params.rootUri;
85
+ }
86
+ else if (params.workspaceFolders && params.workspaceFolders.length > 0) {
87
+ this.rootUri = params.workspaceFolders[0].uri;
88
+ }
89
+ else {
90
+ connection.console.error(`Could not determine rootPath`);
91
+ }
92
+ this.files = makeFiles(this.rootUri);
93
+ // Some users have reported that the globs don't find any files. This is to debug that issue
94
+ connection.console.info(`Root uri : ${this.rootUri}`);
95
+ connection.console.info(`Current dir : ${process.cwd()}`);
96
+ if ((_a = params.capabilities.workspace) === null || _a === void 0 ? void 0 : _a.configuration) {
97
+ connection.onDidChangeConfiguration((params) => {
98
+ var _a, _b;
99
+ this.connection.console.info(`Client sent workspace/configuration`);
100
+ // params.settings may be null or missing features/glue depending on the client;
101
+ // only use it if it looks like a valid Settings object, otherwise fall back to
102
+ // getSettings() to avoid a crash on undefined.reduce() during reindex.
103
+ const settings = ((_a = params.settings) === null || _a === void 0 ? void 0 : _a.features) != null && ((_b = params.settings) === null || _b === void 0 ? void 0 : _b.glue) != null
104
+ ? params.settings
105
+ : undefined;
106
+ this.reindex(settings).catch((err) => {
107
+ connection.console.error(`Failed to reindex: ${err.message}`);
108
+ });
109
+ });
110
+ try {
111
+ yield connection.client.register(DidChangeConfigurationNotification.type);
112
+ }
113
+ catch (err) {
114
+ connection.console.info(`Client does not support client/registerCapability. This is OK.`);
115
+ }
116
+ }
117
+ else {
118
+ this.connection.console.info('onDidChangeConfiguration is disabled');
119
+ }
120
+ if ((_c = (_b = params.capabilities.workspace) === null || _b === void 0 ? void 0 : _b.didChangeWatchedFiles) === null || _c === void 0 ? void 0 : _c.dynamicRegistration) {
121
+ connection.onDidChangeWatchedFiles(() => __awaiter(this, void 0, void 0, function* () {
122
+ connection.console.info(`onDidChangeWatchedFiles`);
123
+ }));
124
+ }
125
+ else {
126
+ connection.console.info('onDidChangeWatchedFiles is disabled');
127
+ }
128
+ if ((_d = params.capabilities.textDocument) === null || _d === void 0 ? void 0 : _d.semanticTokens) {
129
+ connection.languages.semanticTokens.onDelta(() => {
130
+ return {
131
+ data: [],
132
+ };
133
+ });
134
+ connection.languages.semanticTokens.onRange(() => {
135
+ return {
136
+ data: [],
137
+ };
138
+ });
139
+ connection.languages.semanticTokens.on((semanticTokenParams) => {
140
+ var _a;
141
+ const doc = documents.get(semanticTokenParams.textDocument.uri);
142
+ if (!doc)
143
+ return { data: [] };
144
+ const gherkinSource = doc.getText();
145
+ return getGherkinSemanticTokens(gherkinSource, (((_a = this.expressionBuilderResult) === null || _a === void 0 ? void 0 : _a.expressionLinks) || []).map((l) => l.expression));
146
+ });
147
+ }
148
+ else {
149
+ connection.console.info('semanticTokens is disabled');
150
+ }
151
+ if ((_g = (_f = (_e = params.capabilities.textDocument) === null || _e === void 0 ? void 0 : _e.completion) === null || _f === void 0 ? void 0 : _f.completionItem) === null || _g === void 0 ? void 0 : _g.snippetSupport) {
152
+ connection.onCompletion((params) => {
153
+ if (!this.searchIndex)
154
+ return [];
155
+ const doc = documents.get(params.textDocument.uri);
156
+ if (!doc)
157
+ return [];
158
+ const gherkinSource = doc.getText();
159
+ return getGherkinCompletionItems(gherkinSource, params.position, this.searchIndex).slice();
160
+ });
161
+ connection.onCompletionResolve((item) => item);
162
+ }
163
+ else {
164
+ connection.console.info('onCompletion is disabled');
165
+ }
166
+ if ((_h = params.capabilities.textDocument) === null || _h === void 0 ? void 0 : _h.formatting) {
167
+ connection.onDocumentFormatting((params) => {
168
+ const doc = documents.get(params.textDocument.uri);
169
+ if (!doc)
170
+ return [];
171
+ const gherkinSource = doc.getText();
172
+ return getGherkinFormattingEdits(gherkinSource);
173
+ });
174
+ }
175
+ else {
176
+ connection.console.info('onDocumentFormatting is disabled');
177
+ }
178
+ if ((_j = params.capabilities.textDocument) === null || _j === void 0 ? void 0 : _j.codeAction) {
179
+ connection.onCodeAction((params) => __awaiter(this, void 0, void 0, function* () {
180
+ const diagnostics = params.context.diagnostics;
181
+ if (this.expressionBuilderResult) {
182
+ const settings = yield this.getSettings();
183
+ const links = getStepDefinitionSnippetLinks(this.expressionBuilderResult.expressionLinks.map((l) => l.locationLink));
184
+ if (links.length === 0) {
185
+ connection.console.info(`Unable to generate step definition. Please create one first manually.`);
186
+ return [];
187
+ }
188
+ const codeActions = [];
189
+ for (const link of links) {
190
+ const languageName = getLanguage(extname(link.targetUri));
191
+ if (!languageName) {
192
+ connection.console.info(`Unable to generate step definition snippet for unknown extension ${link}`);
193
+ return [];
194
+ }
195
+ const mustacheTemplate = settings.snippetTemplates[languageName];
196
+ const createFile = !(yield this.files.exists(link.targetUri));
197
+ const relativePath = this.files.relativePath(link.targetUri);
198
+ const codeAction = getGenerateSnippetCodeAction(diagnostics, link, relativePath, createFile, mustacheTemplate, languageName, this.expressionBuilderResult.registry);
199
+ if (codeAction) {
200
+ codeActions.push(codeAction);
201
+ }
202
+ }
203
+ return codeActions;
204
+ }
205
+ return [];
206
+ }));
207
+ }
208
+ else {
209
+ connection.console.info('onCodeAction is disabled');
210
+ }
211
+ if ((_k = params.capabilities.textDocument) === null || _k === void 0 ? void 0 : _k.definition) {
212
+ connection.onDefinition((params) => {
213
+ const doc = documents.get(params.textDocument.uri);
214
+ if (!doc || !this.expressionBuilderResult)
215
+ return [];
216
+ const gherkinSource = doc.getText();
217
+ return getStepDefinitionLocationLinks(gherkinSource, params.position, this.expressionBuilderResult.expressionLinks);
218
+ });
219
+ }
220
+ else {
221
+ connection.console.info('onDefinition is disabled');
222
+ }
223
+ if ((_l = params.capabilities.textDocument) === null || _l === void 0 ? void 0 : _l.documentSymbol) {
224
+ connection.onDocumentSymbol((params) => {
225
+ const doc = documents.get(params.textDocument.uri);
226
+ if (!doc)
227
+ return [];
228
+ const gherkinSource = doc.getText();
229
+ const symbol = getGherkinDocumentFeatureSymbol(gherkinSource);
230
+ return symbol ? [symbol] : null;
231
+ });
232
+ }
233
+ else {
234
+ connection.console.info('onDocumentSymbol is disabled');
235
+ }
236
+ return {
237
+ capabilities: this.capabilities(),
238
+ serverInfo: this.info(),
239
+ };
240
+ }));
241
+ connection.onInitialized(() => {
242
+ connection.console.info(`${this.info().name} ${this.info().version} initialized`);
243
+ this.reindex().catch((err) => connection.console.error(err.message));
244
+ });
245
+ documents.listen(connection);
246
+ // The content of a text document has changed. This event is emitted
247
+ // when the text document is first opened or when its content has changed.
248
+ documents.onDidChangeContent((change) => __awaiter(this, void 0, void 0, function* () {
249
+ this.scheduleReindexing();
250
+ if (change.document.uri.match(/\.feature$/)) {
251
+ yield this.sendDiagnostics(change.document);
252
+ }
253
+ }));
254
+ }
255
+ capabilities() {
256
+ return {
257
+ textDocumentSync: TextDocumentSyncKind.Incremental,
258
+ completionProvider: {
259
+ resolveProvider: false,
260
+ },
261
+ codeActionProvider: {
262
+ resolveProvider: false,
263
+ workDoneProgress: false,
264
+ codeActionKinds: [CodeActionKind.QuickFix],
265
+ },
266
+ workspace: {
267
+ workspaceFolders: {
268
+ changeNotifications: true,
269
+ supported: true,
270
+ },
271
+ },
272
+ semanticTokensProvider: {
273
+ range: false,
274
+ full: {
275
+ delta: false,
276
+ },
277
+ legend: {
278
+ tokenTypes: semanticTokenTypes,
279
+ tokenModifiers: [],
280
+ },
281
+ },
282
+ documentSymbolProvider: {
283
+ label: 'Cucumber',
284
+ },
285
+ documentFormattingProvider: true,
286
+ definitionProvider: true,
287
+ };
288
+ }
289
+ info() {
290
+ return {
291
+ name: 'Cucumber Language Server',
292
+ version,
293
+ };
294
+ }
295
+ sendDiagnostics(textDocument) {
296
+ return __awaiter(this, void 0, void 0, function* () {
297
+ var _a;
298
+ const diagnostics = getGherkinDiagnostics(textDocument.getText(), (((_a = this.expressionBuilderResult) === null || _a === void 0 ? void 0 : _a.expressionLinks) || []).map((l) => l.expression));
299
+ yield this.connection.sendDiagnostics({
300
+ uri: textDocument.uri,
301
+ diagnostics,
302
+ });
303
+ });
304
+ }
305
+ scheduleReindexing() {
306
+ clearTimeout(this.reindexingTimeout);
307
+ const timeoutMillis = 3000;
308
+ this.connection.console.info(`Scheduling reindexing in ${timeoutMillis} ms`);
309
+ this.reindexingTimeout = setTimeout(() => {
310
+ this.reindex().catch((err) => this.connection.console.error(`Failed to reindex: ${err.message}`));
311
+ }, timeoutMillis);
312
+ }
313
+ getSettings() {
314
+ return __awaiter(this, void 0, void 0, function* () {
315
+ try {
316
+ const config = yield this.connection.sendRequest(ConfigurationRequest.type, {
317
+ items: [
318
+ {
319
+ section: 'cucumber',
320
+ },
321
+ ],
322
+ });
323
+ if (config && config.length === 1) {
324
+ const settings = config[0];
325
+ return {
326
+ features: getArray(settings === null || settings === void 0 ? void 0 : settings.features, defaultSettings.features),
327
+ glue: getArray(settings === null || settings === void 0 ? void 0 : settings.glue, defaultSettings.glue),
328
+ parameterTypes: getArray(settings === null || settings === void 0 ? void 0 : settings.parameterTypes, defaultSettings.parameterTypes),
329
+ snippetTemplates: (settings === null || settings === void 0 ? void 0 : settings.snippetTemplates) || {},
330
+ };
331
+ }
332
+ else {
333
+ this.connection.console.error(`The client responded with a config we cannot process: ${JSON.stringify(config, null, 2)}`);
334
+ this.connection.console.error(`Using default settings`);
335
+ return defaultSettings;
336
+ }
337
+ }
338
+ catch (err) {
339
+ this.connection.console.error(`Failed to request configuration: ${err.message}`);
340
+ this.connection.console.error(`Using default settings`);
341
+ return defaultSettings;
342
+ }
343
+ });
344
+ }
345
+ reindex(settings) {
346
+ return __awaiter(this, void 0, void 0, function* () {
347
+ if (!settings) {
348
+ settings = yield this.getSettings();
349
+ }
350
+ // TODO: Send WorkDoneProgressBegin notification
351
+ // https://microsoft.github.io/language-server-protocol/specifications/specification-3-17/#workDoneProgress
352
+ this.connection.console.info(`Reindexing ${this.rootUri}`);
353
+ const gherkinSources = yield loadGherkinSources(this.files, settings.features);
354
+ this.connection.console.info(`* Found ${gherkinSources.length} feature file(s) in ${JSON.stringify(settings.features)}`);
355
+ const stepTexts = gherkinSources.reduce((prev, gherkinSource) => prev.concat(buildStepTexts(gherkinSource.content)), []);
356
+ this.connection.console.info(`* Found ${stepTexts.length} steps in those feature files`);
357
+ const glueSources = yield loadGlueSources(this.files, settings.glue);
358
+ this.connection.console.info(`* Found ${glueSources.length} glue file(s) in ${JSON.stringify(settings.glue)}`);
359
+ this.expressionBuilderResult = this.expressionBuilder.build(glueSources, settings.parameterTypes);
360
+ this.connection.console.info(`* Found ${this.expressionBuilderResult.parameterTypeLinks.length} parameter types in those glue files`);
361
+ for (const parameterTypeLink of this.expressionBuilderResult.parameterTypeLinks) {
362
+ this.connection.console.info(` * {${parameterTypeLink.parameterType.name}} = ${parameterTypeLink.parameterType.regexpStrings}`);
363
+ }
364
+ this.connection.console.info(`* Found ${this.expressionBuilderResult.expressionLinks.length} step definitions in those glue files`);
365
+ for (const error of this.expressionBuilderResult.errors) {
366
+ this.connection.console.error(`* Step Definition errors: ${error.stack}`);
367
+ }
368
+ // Send diagnostics for all documents now that we're updated
369
+ const gherkinDocuments = this.documents.all().filter((doc) => doc.uri.match(/\.feature$/));
370
+ yield Promise.all(gherkinDocuments.map((doc) => this.sendDiagnostics(doc).catch((err) => this.connection.console.error(`Error: ${err.message}`))));
371
+ // Tell the client to update all semantic tokens
372
+ this.connection.languages.semanticTokens.refresh();
373
+ try {
374
+ const expressions = this.expressionBuilderResult.expressionLinks.map((l) => l.expression);
375
+ const suggestions = buildSuggestions(this.expressionBuilderResult.registry, stepTexts, expressions);
376
+ this.connection.console.info(`* Built ${suggestions.length} suggestions for auto complete`);
377
+ this.searchIndex = jsSearchIndex(suggestions);
378
+ const registry = this.expressionBuilderResult.registry;
379
+ this.registry = registry;
380
+ this.expressions = expressions;
381
+ this.suggestions = suggestions;
382
+ this.onReindexed(registry, expressions, suggestions);
383
+ }
384
+ catch (err) {
385
+ this.connection.console.error(err.stack);
386
+ this.connection.console.error('Please report an issue at https://github.com/cucumber/language-service/issues with the above stack trace');
387
+ }
388
+ // TODO: Send WorkDoneProgressEnd notification
389
+ });
390
+ }
391
+ }
392
+ function getArray(arr, defaultArr) {
393
+ if (!Array.isArray(arr) || arr.length === 0)
394
+ return defaultArr;
395
+ return arr;
396
+ }
397
+ //# sourceMappingURL=CucumberLanguageServer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"CucumberLanguageServer.js","sourceRoot":"","sources":["../../../src/CucumberLanguageServer.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,8 @@
1
+ export interface Files {
2
+ exists(uri: string): Promise<boolean>;
3
+ readFile(uri: string): Promise<string>;
4
+ findUris(glob: string): Promise<readonly string[]>;
5
+ relativePath(uri: string): string;
6
+ }
7
+ export declare function extname(uri: string): string;
8
+ //# sourceMappingURL=Files.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Files.d.ts","sourceRoot":"","sources":["../../../src/Files.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,KAAK;IACpB,MAAM,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAAA;IACrC,QAAQ,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAAA;IACtC,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,SAAS,MAAM,EAAE,CAAC,CAAA;IAClD,YAAY,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAAA;CAClC;AAED,wBAAgB,OAAO,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAG3C"}
@@ -0,0 +1,5 @@
1
+ export function extname(uri) {
2
+ // Roughly-enough implements https://nodejs.org/dist/latest-v18.x/docs/api/path.html#pathextnamepath
3
+ return uri.substring(uri.lastIndexOf('.'), uri.length) || '';
4
+ }
5
+ //# sourceMappingURL=Files.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Files.js","sourceRoot":"","sources":["../../../src/Files.ts"],"names":[],"mappings":"AAOA,MAAM,UAAU,OAAO,CAAC,GAAW;IACjC,oGAAoG;IACpG,OAAO,GAAG,CAAC,SAAS,CAAC,GAAG,CAAC,WAAW,CAAC,GAAG,CAAC,EAAE,GAAG,CAAC,MAAM,CAAC,IAAI,EAAE,CAAA;AAC9D,CAAC"}
@@ -0,0 +1,2 @@
1
+ export declare function buildStepTexts(gherkinSource: string): readonly string[];
2
+ //# sourceMappingURL=buildStepTexts.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"buildStepTexts.d.ts","sourceRoot":"","sources":["../../../src/buildStepTexts.ts"],"names":[],"mappings":"AAGA,wBAAgB,cAAc,CAAC,aAAa,EAAE,MAAM,GAAG,SAAS,MAAM,EAAE,CAYvE"}
@@ -0,0 +1,16 @@
1
+ import { walkGherkinDocument } from '@cucumber/gherkin-utils';
2
+ import { parseGherkinDocument } from '@marton78/cucumber-language-service';
3
+ export function buildStepTexts(gherkinSource) {
4
+ const { gherkinDocument } = parseGherkinDocument(gherkinSource);
5
+ if (!gherkinDocument) {
6
+ return [];
7
+ }
8
+ const stepTexts = [];
9
+ walkGherkinDocument(gherkinDocument, undefined, {
10
+ step(step) {
11
+ stepTexts.push(step.text);
12
+ },
13
+ });
14
+ return stepTexts;
15
+ }
16
+ //# sourceMappingURL=buildStepTexts.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"buildStepTexts.js","sourceRoot":"","sources":["../../../src/buildStepTexts.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAE,MAAM,yBAAyB,CAAA;AAC7D,OAAO,EAAE,oBAAoB,EAAE,MAAM,qCAAqC,CAAA;AAE1E,MAAM,UAAU,cAAc,CAAC,aAAqB;IAClD,MAAM,EAAE,eAAe,EAAE,GAAG,oBAAoB,CAAC,aAAa,CAAC,CAAA;IAC/D,IAAI,CAAC,eAAe,EAAE,CAAC;QACrB,OAAO,EAAE,CAAA;IACX,CAAC;IACD,MAAM,SAAS,GAAa,EAAE,CAAA;IAC9B,mBAAmB,CAAC,eAAe,EAAE,SAAS,EAAE;QAC9C,IAAI,CAAC,IAAI;YACP,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;QAC3B,CAAC;KACF,CAAC,CAAA;IACF,OAAO,SAAS,CAAA;AAClB,CAAC"}
@@ -0,0 +1,8 @@
1
+ import { LanguageName, Source } from '@marton78/cucumber-language-service';
2
+ import { Files } from './Files.js';
3
+ export declare const glueExtByLanguageName: Record<LanguageName, string[]>;
4
+ export declare function loadGlueSources(files: Files, globs: readonly string[]): Promise<readonly Source<LanguageName>[]>;
5
+ export declare function getLanguage(ext: string): LanguageName | undefined;
6
+ export declare function loadGherkinSources(files: Files, globs: readonly string[]): Promise<readonly Source<'gherkin'>[]>;
7
+ export declare function findUris(files: Files, globs: readonly string[]): Promise<readonly string[]>;
8
+ //# sourceMappingURL=fs.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fs.d.ts","sourceRoot":"","sources":["../../../src/fs.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,EAAE,MAAM,qCAAqC,CAAA;AAE1E,OAAO,EAAW,KAAK,EAAE,MAAM,YAAY,CAAA;AAE3C,eAAO,MAAM,qBAAqB,EAAE,MAAM,CAAC,YAAY,EAAE,MAAM,EAAE,CAYhE,CAAA;AAaD,wBAAsB,eAAe,CACnC,KAAK,EAAE,KAAK,EACZ,KAAK,EAAE,SAAS,MAAM,EAAE,GACvB,OAAO,CAAC,SAAS,MAAM,CAAC,YAAY,CAAC,EAAE,CAAC,CAE1C;AAED,wBAAgB,WAAW,CAAC,GAAG,EAAE,MAAM,GAAG,YAAY,GAAG,SAAS,CAEjE;AAED,wBAAsB,kBAAkB,CACtC,KAAK,EAAE,KAAK,EACZ,KAAK,EAAE,SAAS,MAAM,EAAE,GACvB,OAAO,CAAC,SAAS,MAAM,CAAC,SAAS,CAAC,EAAE,CAAC,CAEvC;AAID,wBAAsB,QAAQ,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,SAAS,MAAM,EAAE,GAAG,OAAO,CAAC,SAAS,MAAM,EAAE,CAAC,CAUjG"}
@@ -0,0 +1,71 @@
1
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
2
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
3
+ return new (P || (P = Promise))(function (resolve, reject) {
4
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
5
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
6
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
7
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
8
+ });
9
+ };
10
+ import { extname } from './Files.js';
11
+ export const glueExtByLanguageName = {
12
+ javascript: ['.js', '.cjs', '.mjs', '.jsx'],
13
+ tsx: ['.ts', '.cts', '.mts', '.tsx'],
14
+ java: ['.java'],
15
+ c_sharp: ['.cs'],
16
+ php: ['.php'],
17
+ ruby: ['.rb'],
18
+ python: ['.py'],
19
+ rust: ['.rs'],
20
+ go: ['.go'],
21
+ scala: ['.scala'],
22
+ kotlin: ['.kt', '.kts'],
23
+ };
24
+ const entries = Object.entries(glueExtByLanguageName).reduce((prev, entry) => {
25
+ const newEntries = entry[1].map((ext) => [ext, entry[0]]);
26
+ return prev.concat(newEntries);
27
+ }, []);
28
+ const glueLanguageNameByExt = Object.fromEntries(entries);
29
+ const glueExtensions = new Set(Object.keys(glueLanguageNameByExt));
30
+ export function loadGlueSources(files, globs) {
31
+ return __awaiter(this, void 0, void 0, function* () {
32
+ return loadSources(files, globs, glueExtensions, glueLanguageNameByExt);
33
+ });
34
+ }
35
+ export function getLanguage(ext) {
36
+ return glueLanguageNameByExt[ext];
37
+ }
38
+ export function loadGherkinSources(files, globs) {
39
+ return __awaiter(this, void 0, void 0, function* () {
40
+ return loadSources(files, globs, new Set(['.feature']), { '.feature': 'gherkin' });
41
+ });
42
+ }
43
+ export function findUris(files, globs) {
44
+ return __awaiter(this, void 0, void 0, function* () {
45
+ // Run all the globs in parallel
46
+ const urisPromises = globs.reduce((prev, glob) => {
47
+ const urisPromise = files.findUris(glob);
48
+ return prev.concat(urisPromise);
49
+ }, []);
50
+ const uriArrays = yield Promise.all(urisPromises);
51
+ // Flatten them all
52
+ const uris = uriArrays.flatMap((paths) => paths);
53
+ return [...new Set(uris).values()].sort();
54
+ });
55
+ }
56
+ function loadSources(files, globs, extensions, languageNameByExt) {
57
+ return __awaiter(this, void 0, void 0, function* () {
58
+ const uris = yield findUris(files, globs);
59
+ return Promise.all(uris
60
+ .filter((uri) => extensions.has(extname(uri)))
61
+ .map((uri) => new Promise((resolve) => {
62
+ const languageName = languageNameByExt[extname(uri)];
63
+ return files.readFile(uri).then((content) => resolve({
64
+ languageName,
65
+ content,
66
+ uri,
67
+ }));
68
+ })));
69
+ });
70
+ }
71
+ //# sourceMappingURL=fs.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fs.js","sourceRoot":"","sources":["../../../src/fs.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import { LocationLink } from 'vscode-languageserver-types';
2
+ export declare function getStepDefinitionSnippetLinks(links: readonly LocationLink[]): readonly LocationLink[];
3
+ //# sourceMappingURL=getStepDefinitionSnippetLinks.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"getStepDefinitionSnippetLinks.d.ts","sourceRoot":"","sources":["../../../src/getStepDefinitionSnippetLinks.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAS,MAAM,6BAA6B,CAAA;AAEjE,wBAAgB,6BAA6B,CAC3C,KAAK,EAAE,SAAS,YAAY,EAAE,GAC7B,SAAS,YAAY,EAAE,CAsBzB"}
@@ -0,0 +1,17 @@
1
+ import { Range } from 'vscode-languageserver-types';
2
+ export function getStepDefinitionSnippetLinks(links) {
3
+ // TODO: Find the most relevant one by looking at the words in the expression
4
+ // If none found, use the most recently modified
5
+ const linksByFile = {};
6
+ for (const link of links) {
7
+ // Insert right after the last step definition
8
+ const targetRange = Range.create(link.targetRange.end.line + 1, 0, link.targetRange.end.line + 1, 0);
9
+ linksByFile[link.targetUri] = {
10
+ targetUri: link.targetUri,
11
+ targetRange,
12
+ targetSelectionRange: targetRange,
13
+ };
14
+ }
15
+ return Object.values(linksByFile).sort((a, b) => a.targetUri.localeCompare(b.targetUri));
16
+ }
17
+ //# sourceMappingURL=getStepDefinitionSnippetLinks.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"getStepDefinitionSnippetLinks.js","sourceRoot":"","sources":["../../../src/getStepDefinitionSnippetLinks.ts"],"names":[],"mappings":"AAAA,OAAO,EAAgB,KAAK,EAAE,MAAM,6BAA6B,CAAA;AAEjE,MAAM,UAAU,6BAA6B,CAC3C,KAA8B;IAE9B,6EAA6E;IAC7E,gDAAgD;IAChD,MAAM,WAAW,GAAiC,EAAE,CAAA;IACpD,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,8CAA8C;QAE9C,MAAM,WAAW,GAAG,KAAK,CAAC,MAAM,CAC9B,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,IAAI,GAAG,CAAC,EAC7B,CAAC,EACD,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,IAAI,GAAG,CAAC,EAC7B,CAAC,CACF,CAAA;QAED,WAAW,CAAC,IAAI,CAAC,SAAS,CAAC,GAAG;YAC5B,SAAS,EAAE,IAAI,CAAC,SAAS;YACzB,WAAW;YACX,oBAAoB,EAAE,WAAW;SAClC,CAAA;IACH,CAAC;IAED,OAAO,MAAM,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC,aAAa,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAA;AAC1F,CAAC"}
@@ -0,0 +1,4 @@
1
+ export * from './CucumberLanguageServer.js';
2
+ export * from './Files.js';
3
+ export { CucumberExpressions, Suggestion } from '@marton78/cucumber-language-service';
4
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,6BAA6B,CAAA;AAC3C,cAAc,YAAY,CAAA;AAC1B,OAAO,EAAE,mBAAmB,EAAE,UAAU,EAAE,MAAM,qCAAqC,CAAA"}
@@ -0,0 +1,4 @@
1
+ export * from './CucumberLanguageServer.js';
2
+ export * from './Files.js';
3
+ export { CucumberExpressions } from '@marton78/cucumber-language-service';
4
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,6BAA6B,CAAA;AAC3C,cAAc,YAAY,CAAA;AAC1B,OAAO,EAAE,mBAAmB,EAAc,MAAM,qCAAqC,CAAA"}
@@ -0,0 +1,10 @@
1
+ import { Files } from '../Files.js';
2
+ export declare class NodeFiles implements Files {
3
+ private readonly rootUri;
4
+ constructor(rootUri: string);
5
+ exists(uri: string): Promise<boolean>;
6
+ readFile(uri: string): Promise<string>;
7
+ findUris(glob: string): Promise<readonly string[]>;
8
+ relativePath(uri: string): string;
9
+ }
10
+ //# sourceMappingURL=NodeFiles.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"NodeFiles.d.ts","sourceRoot":"","sources":["../../../../src/node/NodeFiles.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,KAAK,EAAE,MAAM,aAAa,CAAA;AAEnC,qBAAa,SAAU,YAAW,KAAK;IACzB,OAAO,CAAC,QAAQ,CAAC,OAAO;gBAAP,OAAO,EAAE,MAAM;IAEtC,MAAM,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAS3C,QAAQ,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAKhC,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,SAAS,MAAM,EAAE,CAAC;IAMxD,YAAY,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM;CAGlC"}