@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.
- package/LICENSE +21 -0
- package/README.md +61 -0
- package/bin/cucumber-language-server.cjs +20 -0
- package/dist/cjs/package.json +1 -0
- package/dist/cjs/src/CucumberLanguageServer.d.ts +32 -0
- package/dist/cjs/src/CucumberLanguageServer.d.ts.map +1 -0
- package/dist/cjs/src/CucumberLanguageServer.js +401 -0
- package/dist/cjs/src/CucumberLanguageServer.js.map +1 -0
- package/dist/cjs/src/Files.d.ts +8 -0
- package/dist/cjs/src/Files.d.ts.map +1 -0
- package/dist/cjs/src/Files.js +8 -0
- package/dist/cjs/src/Files.js.map +1 -0
- package/dist/cjs/src/buildStepTexts.d.ts +2 -0
- package/dist/cjs/src/buildStepTexts.d.ts.map +1 -0
- package/dist/cjs/src/buildStepTexts.js +19 -0
- package/dist/cjs/src/buildStepTexts.js.map +1 -0
- package/dist/cjs/src/fs.d.ts +8 -0
- package/dist/cjs/src/fs.d.ts.map +1 -0
- package/dist/cjs/src/fs.js +78 -0
- package/dist/cjs/src/fs.js.map +1 -0
- package/dist/cjs/src/getStepDefinitionSnippetLinks.d.ts +3 -0
- package/dist/cjs/src/getStepDefinitionSnippetLinks.d.ts.map +1 -0
- package/dist/cjs/src/getStepDefinitionSnippetLinks.js +20 -0
- package/dist/cjs/src/getStepDefinitionSnippetLinks.js.map +1 -0
- package/dist/cjs/src/index.d.ts +4 -0
- package/dist/cjs/src/index.d.ts.map +1 -0
- package/dist/cjs/src/index.js +22 -0
- package/dist/cjs/src/index.js.map +1 -0
- package/dist/cjs/src/node/NodeFiles.d.ts +10 -0
- package/dist/cjs/src/node/NodeFiles.d.ts.map +1 -0
- package/dist/cjs/src/node/NodeFiles.js +51 -0
- package/dist/cjs/src/node/NodeFiles.js.map +1 -0
- package/dist/cjs/src/node/index.d.ts +2 -0
- package/dist/cjs/src/node/index.d.ts.map +1 -0
- package/dist/cjs/src/node/index.js +18 -0
- package/dist/cjs/src/node/index.js.map +1 -0
- package/dist/cjs/src/types.d.ts +15 -0
- package/dist/cjs/src/types.d.ts.map +1 -0
- package/dist/cjs/src/types.js +3 -0
- package/dist/cjs/src/types.js.map +1 -0
- package/dist/cjs/src/version.d.ts +2 -0
- package/dist/cjs/src/version.d.ts.map +1 -0
- package/dist/cjs/src/version.js +5 -0
- package/dist/cjs/src/version.js.map +1 -0
- package/dist/cjs/src/wasm/index.d.ts +3 -0
- package/dist/cjs/src/wasm/index.d.ts.map +1 -0
- package/dist/cjs/src/wasm/index.js +19 -0
- package/dist/cjs/src/wasm/index.js.map +1 -0
- package/dist/cjs/src/wasm/startEmbeddedServer.d.ts +12 -0
- package/dist/cjs/src/wasm/startEmbeddedServer.d.ts.map +1 -0
- package/dist/cjs/src/wasm/startEmbeddedServer.js +25 -0
- package/dist/cjs/src/wasm/startEmbeddedServer.js.map +1 -0
- package/dist/cjs/src/wasm/startStandaloneServer.d.ts +5 -0
- package/dist/cjs/src/wasm/startStandaloneServer.d.ts.map +1 -0
- package/dist/cjs/src/wasm/startStandaloneServer.js +19 -0
- package/dist/cjs/src/wasm/startStandaloneServer.js.map +1 -0
- package/dist/esm/src/CucumberLanguageServer.d.ts +32 -0
- package/dist/esm/src/CucumberLanguageServer.d.ts.map +1 -0
- package/dist/esm/src/CucumberLanguageServer.js +397 -0
- package/dist/esm/src/CucumberLanguageServer.js.map +1 -0
- package/dist/esm/src/Files.d.ts +8 -0
- package/dist/esm/src/Files.d.ts.map +1 -0
- package/dist/esm/src/Files.js +5 -0
- package/dist/esm/src/Files.js.map +1 -0
- package/dist/esm/src/buildStepTexts.d.ts +2 -0
- package/dist/esm/src/buildStepTexts.d.ts.map +1 -0
- package/dist/esm/src/buildStepTexts.js +16 -0
- package/dist/esm/src/buildStepTexts.js.map +1 -0
- package/dist/esm/src/fs.d.ts +8 -0
- package/dist/esm/src/fs.d.ts.map +1 -0
- package/dist/esm/src/fs.js +71 -0
- package/dist/esm/src/fs.js.map +1 -0
- package/dist/esm/src/getStepDefinitionSnippetLinks.d.ts +3 -0
- package/dist/esm/src/getStepDefinitionSnippetLinks.d.ts.map +1 -0
- package/dist/esm/src/getStepDefinitionSnippetLinks.js +17 -0
- package/dist/esm/src/getStepDefinitionSnippetLinks.js.map +1 -0
- package/dist/esm/src/index.d.ts +4 -0
- package/dist/esm/src/index.d.ts.map +1 -0
- package/dist/esm/src/index.js +4 -0
- package/dist/esm/src/index.js.map +1 -0
- package/dist/esm/src/node/NodeFiles.d.ts +10 -0
- package/dist/esm/src/node/NodeFiles.d.ts.map +1 -0
- package/dist/esm/src/node/NodeFiles.js +44 -0
- package/dist/esm/src/node/NodeFiles.js.map +1 -0
- package/dist/esm/src/node/index.d.ts +2 -0
- package/dist/esm/src/node/index.d.ts.map +1 -0
- package/dist/esm/src/node/index.js +2 -0
- package/dist/esm/src/node/index.js.map +1 -0
- package/dist/esm/src/types.d.ts +15 -0
- package/dist/esm/src/types.d.ts.map +1 -0
- package/dist/esm/src/types.js +2 -0
- package/dist/esm/src/types.js.map +1 -0
- package/dist/esm/src/version.d.ts +2 -0
- package/dist/esm/src/version.d.ts.map +1 -0
- package/dist/esm/src/version.js +2 -0
- package/dist/esm/src/version.js.map +1 -0
- package/dist/esm/src/wasm/index.d.ts +3 -0
- package/dist/esm/src/wasm/index.d.ts.map +1 -0
- package/dist/esm/src/wasm/index.js +3 -0
- package/dist/esm/src/wasm/index.js.map +1 -0
- package/dist/esm/src/wasm/startEmbeddedServer.d.ts +12 -0
- package/dist/esm/src/wasm/startEmbeddedServer.d.ts.map +1 -0
- package/dist/esm/src/wasm/startEmbeddedServer.js +22 -0
- package/dist/esm/src/wasm/startEmbeddedServer.js.map +1 -0
- package/dist/esm/src/wasm/startStandaloneServer.d.ts +5 -0
- package/dist/esm/src/wasm/startStandaloneServer.d.ts.map +1 -0
- package/dist/esm/src/wasm/startStandaloneServer.js +16 -0
- package/dist/esm/src/wasm/startStandaloneServer.js.map +1 -0
- package/node/package.json +7 -0
- package/package.json +107 -0
- package/wasm/package.json +7 -0
package/LICENSE
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) Cucumber Ltd
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
package/README.md
ADDED
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
<h1 align="center">
|
|
2
|
+
<img src="https://raw.githubusercontent.com/cucumber/cucumber-js/46a5a78107be27e99c6e044c69b6e8f885ce456c/docs/images/logo.svg" alt="Cucumber logo" width="75">
|
|
3
|
+
<br>
|
|
4
|
+
Cucumber Language Server
|
|
5
|
+
</h1>
|
|
6
|
+
<p align="center">
|
|
7
|
+
<b>A <a href="https://langserver.org/">Language Server</a> for Cucumber</b>
|
|
8
|
+
</p>
|
|
9
|
+
|
|
10
|
+
<p align="center">
|
|
11
|
+
<a href="https://www.npmjs.com/package/@cucumber/language-server">
|
|
12
|
+
<img src="https://img.shields.io/npm/v/@cucumber/language-server.svg?color=dark-green" alt="npm">
|
|
13
|
+
</a>
|
|
14
|
+
<a href="https://github.com/cucumber/language-server/actions/workflows/test-javascript.yml">
|
|
15
|
+
<img src="https://github.com/cucumber/language-server/actions/workflows/test-javascript.yml/badge.svg" alt="test-javascript-package">
|
|
16
|
+
</a>
|
|
17
|
+
<a href="https://github.com/cucumber/language-server/actions/workflows/release-github.yml">
|
|
18
|
+
<img src="https://github.com/cucumber/language-server/actions/workflows/release-github.yml/badge.svg" alt="release-package-github">
|
|
19
|
+
</a>
|
|
20
|
+
<a href="https://opencollective.com/cucumber">
|
|
21
|
+
<img src="https://opencollective.com/cucumber/backers/badge.svg" alt="backers">
|
|
22
|
+
</a>
|
|
23
|
+
<a href="https://opencollective.com/cucumber">
|
|
24
|
+
<img src="https://opencollective.com/cucumber/sponsors/badge.svg" alt="sponsors">
|
|
25
|
+
</a>
|
|
26
|
+
</p>
|
|
27
|
+
|
|
28
|
+
Provides most of the functionality offered by the
|
|
29
|
+
[Cucumber Visual Studio Code Extension](https://github.com/cucumber/vscode) and can also be utilised with other editors that support the Language Server Protocol (LSP).
|
|
30
|
+
|
|
31
|
+
## Features
|
|
32
|
+
|
|
33
|
+
See [Cucumber Language Service](https://github.com/cucumber/language-service), which implements most of the logic in this server.
|
|
34
|
+
If you are looking to add a new feature, you should probably add it to [Cucumber Language Service](https://github.com/cucumber/language-service).
|
|
35
|
+
|
|
36
|
+
## Install
|
|
37
|
+
|
|
38
|
+
Cucumber Language Server is [available on npm](https://www.npmjs.com/package/@cucumber/language-server):
|
|
39
|
+
|
|
40
|
+
```console
|
|
41
|
+
npm install @cucumber/language-server
|
|
42
|
+
```
|
|
43
|
+
|
|
44
|
+
### Settings
|
|
45
|
+
|
|
46
|
+
The LSP client can provide settings to the server, but the server provides [reasonable defaults](https://github.com/cucumber/language-server/blob/main/src/CucumberLanguageServer.ts) (see `defaultSettings`) if the client does not
|
|
47
|
+
provide them.
|
|
48
|
+
|
|
49
|
+
The server retrieves `cucumber.*` settings from the client with a [workspace/configuration](https://microsoft.github.io/language-server-protocol/specification#workspace_configuration) request.
|
|
50
|
+
|
|
51
|
+
See [Settings](https://github.com/cucumber/language-server/blob/main/src/types.ts) for details about the expected format.
|
|
52
|
+
|
|
53
|
+
## External VSCode Usage
|
|
54
|
+
|
|
55
|
+
We've encountered an issue with the Node version used by [Treesitter](https://github.com/tree-sitter/tree-sitter/issues/2338), a
|
|
56
|
+
dependency of this language server, when working outside of VSCode. For optimal
|
|
57
|
+
compatibility, please use the same Node version as version 18 of VSCode.
|
|
58
|
+
|
|
59
|
+
## Support
|
|
60
|
+
|
|
61
|
+
Support is [available from the community](https://cucumber.io/tools/cucumber-open/support/) if you need it.
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
/* eslint-disable @typescript-eslint/no-var-requires */
|
|
3
|
+
require('source-map-support').install()
|
|
4
|
+
const { startStandaloneServer } = require('../dist/cjs/src/wasm/startStandaloneServer')
|
|
5
|
+
const { NodeFiles } = require('../dist/cjs/src/node/NodeFiles')
|
|
6
|
+
const path = require('path')
|
|
7
|
+
const { version } = require('../dist/cjs/src/version')
|
|
8
|
+
|
|
9
|
+
// Use require.resolve so this works regardless of whether npm hoisted
|
|
10
|
+
// @marton78/cucumber-language-service or installed it nested inside our node_modules.
|
|
11
|
+
// Main CJS entry is dist/cjs/src/index.js — go up two dirs to reach dist/.
|
|
12
|
+
const wasmBasePath = path.join(path.dirname(require.resolve('@marton78/cucumber-language-service')), '../..')
|
|
13
|
+
const { connection } = startStandaloneServer(wasmBasePath, (rootUri) => new NodeFiles(rootUri))
|
|
14
|
+
|
|
15
|
+
// Don't die on unhandled Promise rejections
|
|
16
|
+
process.on('unhandledRejection', (reason, p) => {
|
|
17
|
+
connection.console.error(
|
|
18
|
+
`Cucumber Language Server ${version}: Unhandled Rejection at promise: ${p}, reason: ${reason}`
|
|
19
|
+
)
|
|
20
|
+
})
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"type": "commonjs"}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
import { CucumberExpressions, ParserAdapter, Suggestion } from '@marton78/cucumber-language-service';
|
|
2
|
+
import { Connection, ServerCapabilities, TextDocuments } from 'vscode-languageserver';
|
|
3
|
+
import { TextDocument } from 'vscode-languageserver-textdocument';
|
|
4
|
+
import { Files } from './Files.js';
|
|
5
|
+
type ServerInfo = {
|
|
6
|
+
name: string;
|
|
7
|
+
version: string;
|
|
8
|
+
};
|
|
9
|
+
export declare class CucumberLanguageServer {
|
|
10
|
+
private readonly connection;
|
|
11
|
+
private readonly documents;
|
|
12
|
+
private readonly makeFiles;
|
|
13
|
+
private readonly onReindexed;
|
|
14
|
+
private readonly expressionBuilder;
|
|
15
|
+
private searchIndex;
|
|
16
|
+
private expressionBuilderResult;
|
|
17
|
+
private reindexingTimeout;
|
|
18
|
+
private rootUri;
|
|
19
|
+
private files;
|
|
20
|
+
registry: CucumberExpressions.ParameterTypeRegistry;
|
|
21
|
+
expressions: readonly CucumberExpressions.Expression[];
|
|
22
|
+
suggestions: readonly Suggestion[];
|
|
23
|
+
constructor(connection: Connection, documents: TextDocuments<TextDocument>, parserAdapter: ParserAdapter, makeFiles: (rootUri: string) => Files, onReindexed: (registry: CucumberExpressions.ParameterTypeRegistry, expressions: readonly CucumberExpressions.Expression[], suggestions: readonly Suggestion[]) => void);
|
|
24
|
+
capabilities(): ServerCapabilities;
|
|
25
|
+
info(): ServerInfo;
|
|
26
|
+
private sendDiagnostics;
|
|
27
|
+
private scheduleReindexing;
|
|
28
|
+
private getSettings;
|
|
29
|
+
private reindex;
|
|
30
|
+
}
|
|
31
|
+
export {};
|
|
32
|
+
//# sourceMappingURL=CucumberLanguageServer.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"CucumberLanguageServer.d.ts","sourceRoot":"","sources":["../../../src/CucumberLanguageServer.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,mBAAmB,EAYnB,aAAa,EAEb,UAAU,EACX,MAAM,qCAAqC,CAAA;AAC5C,OAAO,EAIL,UAAU,EAEV,kBAAkB,EAClB,aAAa,EAEd,MAAM,uBAAuB,CAAA;AAC9B,OAAO,EAAE,YAAY,EAAE,MAAM,oCAAoC,CAAA;AAGjE,OAAO,EAAW,KAAK,EAAE,MAAM,YAAY,CAAA;AAM3C,KAAK,UAAU,GAAG;IAChB,IAAI,EAAE,MAAM,CAAA;IACZ,OAAO,EAAE,MAAM,CAAA;CAChB,CAAA;AA8CD,qBAAa,sBAAsB;IAY/B,OAAO,CAAC,QAAQ,CAAC,UAAU;IAC3B,OAAO,CAAC,QAAQ,CAAC,SAAS;IAE1B,OAAO,CAAC,QAAQ,CAAC,SAAS;IAC1B,OAAO,CAAC,QAAQ,CAAC,WAAW;IAf9B,OAAO,CAAC,QAAQ,CAAC,iBAAiB,CAAmB;IACrD,OAAO,CAAC,WAAW,CAAO;IAC1B,OAAO,CAAC,uBAAuB,CAAiD;IAChF,OAAO,CAAC,iBAAiB,CAAgB;IACzC,OAAO,CAAC,OAAO,CAAQ;IACvB,OAAO,CAAC,KAAK,CAAO;IACb,QAAQ,EAAE,mBAAmB,CAAC,qBAAqB,CAAA;IACnD,WAAW,EAAE,SAAS,mBAAmB,CAAC,UAAU,EAAE,CAAK;IAC3D,WAAW,EAAE,SAAS,UAAU,EAAE,CAAK;gBAG3B,UAAU,EAAE,UAAU,EACtB,SAAS,EAAE,aAAa,CAAC,YAAY,CAAC,EACvD,aAAa,EAAE,aAAa,EACX,SAAS,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,KAAK,EACrC,WAAW,EAAE,CAC5B,QAAQ,EAAE,mBAAmB,CAAC,qBAAqB,EACnD,WAAW,EAAE,SAAS,mBAAmB,CAAC,UAAU,EAAE,EACtD,WAAW,EAAE,SAAS,UAAU,EAAE,KAC/B,IAAI;IAgNJ,YAAY,IAAI,kBAAkB;IAmClC,IAAI,IAAI,UAAU;YAOX,eAAe;IAW7B,OAAO,CAAC,kBAAkB;YAWZ,WAAW;YAgCX,OAAO;CA2EtB"}
|
|
@@ -0,0 +1,401 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
3
|
+
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
4
|
+
return new (P || (P = Promise))(function (resolve, reject) {
|
|
5
|
+
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
6
|
+
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
7
|
+
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
8
|
+
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
9
|
+
});
|
|
10
|
+
};
|
|
11
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
12
|
+
exports.CucumberLanguageServer = void 0;
|
|
13
|
+
const cucumber_language_service_1 = require("@marton78/cucumber-language-service");
|
|
14
|
+
const vscode_languageserver_1 = require("vscode-languageserver");
|
|
15
|
+
const buildStepTexts_js_1 = require("./buildStepTexts.js");
|
|
16
|
+
const Files_js_1 = require("./Files.js");
|
|
17
|
+
const fs_js_1 = require("./fs.js");
|
|
18
|
+
const getStepDefinitionSnippetLinks_js_1 = require("./getStepDefinitionSnippetLinks.js");
|
|
19
|
+
const version_js_1 = require("./version.js");
|
|
20
|
+
// In order to allow 0-config in LSP clients we provide default settings.
|
|
21
|
+
// This should be consistent with the `README.md` in `cucumber/vscode` - this is to
|
|
22
|
+
// ensure the docs for the plugin reflect the defaults.
|
|
23
|
+
const defaultSettings = {
|
|
24
|
+
// IMPORTANT: If you change features or glue below, please also create a PR to update
|
|
25
|
+
// the vscode extension defaults accordingly in https://github.com/cucumber/vscode/blob/main/README.md#extension-settings
|
|
26
|
+
features: [
|
|
27
|
+
// Cucumber-JVM
|
|
28
|
+
'src/test/**/*.feature',
|
|
29
|
+
// Cucumber-Ruby, Cucumber-Js, Behat, Behave, Godog
|
|
30
|
+
'features/**/*.feature',
|
|
31
|
+
// Pytest-BDD
|
|
32
|
+
'tests/**/*.feature',
|
|
33
|
+
// SpecFlow
|
|
34
|
+
'*specs*/**/*.feature',
|
|
35
|
+
],
|
|
36
|
+
glue: [
|
|
37
|
+
// Cucumber-JVM
|
|
38
|
+
'src/test/**/*.java',
|
|
39
|
+
// Cucumber-Js
|
|
40
|
+
'features/**/*.ts',
|
|
41
|
+
'features/**/*.tsx',
|
|
42
|
+
'features/**/*.js',
|
|
43
|
+
'features/**/*.jsx',
|
|
44
|
+
// Behat
|
|
45
|
+
'features/**/*.php',
|
|
46
|
+
// Behave
|
|
47
|
+
'features/**/*.py',
|
|
48
|
+
// Pytest-BDD
|
|
49
|
+
'tests/**/*.py',
|
|
50
|
+
// Cucumber Rust
|
|
51
|
+
'tests/**/*.rs',
|
|
52
|
+
'features/**/*.rs',
|
|
53
|
+
// Cucumber-Ruby
|
|
54
|
+
'features/**/*.rb',
|
|
55
|
+
// SpecFlow
|
|
56
|
+
'*specs*/**/*.cs',
|
|
57
|
+
// Godog
|
|
58
|
+
'features/**/*_test.go',
|
|
59
|
+
],
|
|
60
|
+
parameterTypes: [],
|
|
61
|
+
snippetTemplates: {},
|
|
62
|
+
};
|
|
63
|
+
class CucumberLanguageServer {
|
|
64
|
+
constructor(connection, documents, parserAdapter, makeFiles, onReindexed) {
|
|
65
|
+
this.connection = connection;
|
|
66
|
+
this.documents = documents;
|
|
67
|
+
this.makeFiles = makeFiles;
|
|
68
|
+
this.onReindexed = onReindexed;
|
|
69
|
+
this.expressionBuilderResult = undefined;
|
|
70
|
+
this.expressions = [];
|
|
71
|
+
this.suggestions = [];
|
|
72
|
+
this.expressionBuilder = new cucumber_language_service_1.ExpressionBuilder(parserAdapter);
|
|
73
|
+
connection.onInitialize((params) => __awaiter(this, void 0, void 0, function* () {
|
|
74
|
+
var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l;
|
|
75
|
+
// connection.console.log(`PARAMS: ${JSON.stringify(params, null, 2)}`)
|
|
76
|
+
yield parserAdapter.init();
|
|
77
|
+
if (params.clientInfo) {
|
|
78
|
+
connection.console.info(`Initializing connection from ${params.clientInfo.name} ${params.clientInfo.version}`);
|
|
79
|
+
}
|
|
80
|
+
else {
|
|
81
|
+
connection.console.info(`Initializing connection from unknown client`);
|
|
82
|
+
}
|
|
83
|
+
if (params.rootPath) {
|
|
84
|
+
this.rootUri = `file://${params.rootPath}`;
|
|
85
|
+
}
|
|
86
|
+
else if (params.rootUri) {
|
|
87
|
+
this.rootUri = params.rootUri;
|
|
88
|
+
}
|
|
89
|
+
else if (params.workspaceFolders && params.workspaceFolders.length > 0) {
|
|
90
|
+
this.rootUri = params.workspaceFolders[0].uri;
|
|
91
|
+
}
|
|
92
|
+
else {
|
|
93
|
+
connection.console.error(`Could not determine rootPath`);
|
|
94
|
+
}
|
|
95
|
+
this.files = makeFiles(this.rootUri);
|
|
96
|
+
// Some users have reported that the globs don't find any files. This is to debug that issue
|
|
97
|
+
connection.console.info(`Root uri : ${this.rootUri}`);
|
|
98
|
+
connection.console.info(`Current dir : ${process.cwd()}`);
|
|
99
|
+
if ((_a = params.capabilities.workspace) === null || _a === void 0 ? void 0 : _a.configuration) {
|
|
100
|
+
connection.onDidChangeConfiguration((params) => {
|
|
101
|
+
var _a, _b;
|
|
102
|
+
this.connection.console.info(`Client sent workspace/configuration`);
|
|
103
|
+
// params.settings may be null or missing features/glue depending on the client;
|
|
104
|
+
// only use it if it looks like a valid Settings object, otherwise fall back to
|
|
105
|
+
// getSettings() to avoid a crash on undefined.reduce() during reindex.
|
|
106
|
+
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
|
|
107
|
+
? params.settings
|
|
108
|
+
: undefined;
|
|
109
|
+
this.reindex(settings).catch((err) => {
|
|
110
|
+
connection.console.error(`Failed to reindex: ${err.message}`);
|
|
111
|
+
});
|
|
112
|
+
});
|
|
113
|
+
try {
|
|
114
|
+
yield connection.client.register(vscode_languageserver_1.DidChangeConfigurationNotification.type);
|
|
115
|
+
}
|
|
116
|
+
catch (err) {
|
|
117
|
+
connection.console.info(`Client does not support client/registerCapability. This is OK.`);
|
|
118
|
+
}
|
|
119
|
+
}
|
|
120
|
+
else {
|
|
121
|
+
this.connection.console.info('onDidChangeConfiguration is disabled');
|
|
122
|
+
}
|
|
123
|
+
if ((_c = (_b = params.capabilities.workspace) === null || _b === void 0 ? void 0 : _b.didChangeWatchedFiles) === null || _c === void 0 ? void 0 : _c.dynamicRegistration) {
|
|
124
|
+
connection.onDidChangeWatchedFiles(() => __awaiter(this, void 0, void 0, function* () {
|
|
125
|
+
connection.console.info(`onDidChangeWatchedFiles`);
|
|
126
|
+
}));
|
|
127
|
+
}
|
|
128
|
+
else {
|
|
129
|
+
connection.console.info('onDidChangeWatchedFiles is disabled');
|
|
130
|
+
}
|
|
131
|
+
if ((_d = params.capabilities.textDocument) === null || _d === void 0 ? void 0 : _d.semanticTokens) {
|
|
132
|
+
connection.languages.semanticTokens.onDelta(() => {
|
|
133
|
+
return {
|
|
134
|
+
data: [],
|
|
135
|
+
};
|
|
136
|
+
});
|
|
137
|
+
connection.languages.semanticTokens.onRange(() => {
|
|
138
|
+
return {
|
|
139
|
+
data: [],
|
|
140
|
+
};
|
|
141
|
+
});
|
|
142
|
+
connection.languages.semanticTokens.on((semanticTokenParams) => {
|
|
143
|
+
var _a;
|
|
144
|
+
const doc = documents.get(semanticTokenParams.textDocument.uri);
|
|
145
|
+
if (!doc)
|
|
146
|
+
return { data: [] };
|
|
147
|
+
const gherkinSource = doc.getText();
|
|
148
|
+
return (0, cucumber_language_service_1.getGherkinSemanticTokens)(gherkinSource, (((_a = this.expressionBuilderResult) === null || _a === void 0 ? void 0 : _a.expressionLinks) || []).map((l) => l.expression));
|
|
149
|
+
});
|
|
150
|
+
}
|
|
151
|
+
else {
|
|
152
|
+
connection.console.info('semanticTokens is disabled');
|
|
153
|
+
}
|
|
154
|
+
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) {
|
|
155
|
+
connection.onCompletion((params) => {
|
|
156
|
+
if (!this.searchIndex)
|
|
157
|
+
return [];
|
|
158
|
+
const doc = documents.get(params.textDocument.uri);
|
|
159
|
+
if (!doc)
|
|
160
|
+
return [];
|
|
161
|
+
const gherkinSource = doc.getText();
|
|
162
|
+
return (0, cucumber_language_service_1.getGherkinCompletionItems)(gherkinSource, params.position, this.searchIndex).slice();
|
|
163
|
+
});
|
|
164
|
+
connection.onCompletionResolve((item) => item);
|
|
165
|
+
}
|
|
166
|
+
else {
|
|
167
|
+
connection.console.info('onCompletion is disabled');
|
|
168
|
+
}
|
|
169
|
+
if ((_h = params.capabilities.textDocument) === null || _h === void 0 ? void 0 : _h.formatting) {
|
|
170
|
+
connection.onDocumentFormatting((params) => {
|
|
171
|
+
const doc = documents.get(params.textDocument.uri);
|
|
172
|
+
if (!doc)
|
|
173
|
+
return [];
|
|
174
|
+
const gherkinSource = doc.getText();
|
|
175
|
+
return (0, cucumber_language_service_1.getGherkinFormattingEdits)(gherkinSource);
|
|
176
|
+
});
|
|
177
|
+
}
|
|
178
|
+
else {
|
|
179
|
+
connection.console.info('onDocumentFormatting is disabled');
|
|
180
|
+
}
|
|
181
|
+
if ((_j = params.capabilities.textDocument) === null || _j === void 0 ? void 0 : _j.codeAction) {
|
|
182
|
+
connection.onCodeAction((params) => __awaiter(this, void 0, void 0, function* () {
|
|
183
|
+
const diagnostics = params.context.diagnostics;
|
|
184
|
+
if (this.expressionBuilderResult) {
|
|
185
|
+
const settings = yield this.getSettings();
|
|
186
|
+
const links = (0, getStepDefinitionSnippetLinks_js_1.getStepDefinitionSnippetLinks)(this.expressionBuilderResult.expressionLinks.map((l) => l.locationLink));
|
|
187
|
+
if (links.length === 0) {
|
|
188
|
+
connection.console.info(`Unable to generate step definition. Please create one first manually.`);
|
|
189
|
+
return [];
|
|
190
|
+
}
|
|
191
|
+
const codeActions = [];
|
|
192
|
+
for (const link of links) {
|
|
193
|
+
const languageName = (0, fs_js_1.getLanguage)((0, Files_js_1.extname)(link.targetUri));
|
|
194
|
+
if (!languageName) {
|
|
195
|
+
connection.console.info(`Unable to generate step definition snippet for unknown extension ${link}`);
|
|
196
|
+
return [];
|
|
197
|
+
}
|
|
198
|
+
const mustacheTemplate = settings.snippetTemplates[languageName];
|
|
199
|
+
const createFile = !(yield this.files.exists(link.targetUri));
|
|
200
|
+
const relativePath = this.files.relativePath(link.targetUri);
|
|
201
|
+
const codeAction = (0, cucumber_language_service_1.getGenerateSnippetCodeAction)(diagnostics, link, relativePath, createFile, mustacheTemplate, languageName, this.expressionBuilderResult.registry);
|
|
202
|
+
if (codeAction) {
|
|
203
|
+
codeActions.push(codeAction);
|
|
204
|
+
}
|
|
205
|
+
}
|
|
206
|
+
return codeActions;
|
|
207
|
+
}
|
|
208
|
+
return [];
|
|
209
|
+
}));
|
|
210
|
+
}
|
|
211
|
+
else {
|
|
212
|
+
connection.console.info('onCodeAction is disabled');
|
|
213
|
+
}
|
|
214
|
+
if ((_k = params.capabilities.textDocument) === null || _k === void 0 ? void 0 : _k.definition) {
|
|
215
|
+
connection.onDefinition((params) => {
|
|
216
|
+
const doc = documents.get(params.textDocument.uri);
|
|
217
|
+
if (!doc || !this.expressionBuilderResult)
|
|
218
|
+
return [];
|
|
219
|
+
const gherkinSource = doc.getText();
|
|
220
|
+
return (0, cucumber_language_service_1.getStepDefinitionLocationLinks)(gherkinSource, params.position, this.expressionBuilderResult.expressionLinks);
|
|
221
|
+
});
|
|
222
|
+
}
|
|
223
|
+
else {
|
|
224
|
+
connection.console.info('onDefinition is disabled');
|
|
225
|
+
}
|
|
226
|
+
if ((_l = params.capabilities.textDocument) === null || _l === void 0 ? void 0 : _l.documentSymbol) {
|
|
227
|
+
connection.onDocumentSymbol((params) => {
|
|
228
|
+
const doc = documents.get(params.textDocument.uri);
|
|
229
|
+
if (!doc)
|
|
230
|
+
return [];
|
|
231
|
+
const gherkinSource = doc.getText();
|
|
232
|
+
const symbol = (0, cucumber_language_service_1.getGherkinDocumentFeatureSymbol)(gherkinSource);
|
|
233
|
+
return symbol ? [symbol] : null;
|
|
234
|
+
});
|
|
235
|
+
}
|
|
236
|
+
else {
|
|
237
|
+
connection.console.info('onDocumentSymbol is disabled');
|
|
238
|
+
}
|
|
239
|
+
return {
|
|
240
|
+
capabilities: this.capabilities(),
|
|
241
|
+
serverInfo: this.info(),
|
|
242
|
+
};
|
|
243
|
+
}));
|
|
244
|
+
connection.onInitialized(() => {
|
|
245
|
+
connection.console.info(`${this.info().name} ${this.info().version} initialized`);
|
|
246
|
+
this.reindex().catch((err) => connection.console.error(err.message));
|
|
247
|
+
});
|
|
248
|
+
documents.listen(connection);
|
|
249
|
+
// The content of a text document has changed. This event is emitted
|
|
250
|
+
// when the text document is first opened or when its content has changed.
|
|
251
|
+
documents.onDidChangeContent((change) => __awaiter(this, void 0, void 0, function* () {
|
|
252
|
+
this.scheduleReindexing();
|
|
253
|
+
if (change.document.uri.match(/\.feature$/)) {
|
|
254
|
+
yield this.sendDiagnostics(change.document);
|
|
255
|
+
}
|
|
256
|
+
}));
|
|
257
|
+
}
|
|
258
|
+
capabilities() {
|
|
259
|
+
return {
|
|
260
|
+
textDocumentSync: vscode_languageserver_1.TextDocumentSyncKind.Incremental,
|
|
261
|
+
completionProvider: {
|
|
262
|
+
resolveProvider: false,
|
|
263
|
+
},
|
|
264
|
+
codeActionProvider: {
|
|
265
|
+
resolveProvider: false,
|
|
266
|
+
workDoneProgress: false,
|
|
267
|
+
codeActionKinds: [vscode_languageserver_1.CodeActionKind.QuickFix],
|
|
268
|
+
},
|
|
269
|
+
workspace: {
|
|
270
|
+
workspaceFolders: {
|
|
271
|
+
changeNotifications: true,
|
|
272
|
+
supported: true,
|
|
273
|
+
},
|
|
274
|
+
},
|
|
275
|
+
semanticTokensProvider: {
|
|
276
|
+
range: false,
|
|
277
|
+
full: {
|
|
278
|
+
delta: false,
|
|
279
|
+
},
|
|
280
|
+
legend: {
|
|
281
|
+
tokenTypes: cucumber_language_service_1.semanticTokenTypes,
|
|
282
|
+
tokenModifiers: [],
|
|
283
|
+
},
|
|
284
|
+
},
|
|
285
|
+
documentSymbolProvider: {
|
|
286
|
+
label: 'Cucumber',
|
|
287
|
+
},
|
|
288
|
+
documentFormattingProvider: true,
|
|
289
|
+
definitionProvider: true,
|
|
290
|
+
};
|
|
291
|
+
}
|
|
292
|
+
info() {
|
|
293
|
+
return {
|
|
294
|
+
name: 'Cucumber Language Server',
|
|
295
|
+
version: version_js_1.version,
|
|
296
|
+
};
|
|
297
|
+
}
|
|
298
|
+
sendDiagnostics(textDocument) {
|
|
299
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
300
|
+
var _a;
|
|
301
|
+
const diagnostics = (0, cucumber_language_service_1.getGherkinDiagnostics)(textDocument.getText(), (((_a = this.expressionBuilderResult) === null || _a === void 0 ? void 0 : _a.expressionLinks) || []).map((l) => l.expression));
|
|
302
|
+
yield this.connection.sendDiagnostics({
|
|
303
|
+
uri: textDocument.uri,
|
|
304
|
+
diagnostics,
|
|
305
|
+
});
|
|
306
|
+
});
|
|
307
|
+
}
|
|
308
|
+
scheduleReindexing() {
|
|
309
|
+
clearTimeout(this.reindexingTimeout);
|
|
310
|
+
const timeoutMillis = 3000;
|
|
311
|
+
this.connection.console.info(`Scheduling reindexing in ${timeoutMillis} ms`);
|
|
312
|
+
this.reindexingTimeout = setTimeout(() => {
|
|
313
|
+
this.reindex().catch((err) => this.connection.console.error(`Failed to reindex: ${err.message}`));
|
|
314
|
+
}, timeoutMillis);
|
|
315
|
+
}
|
|
316
|
+
getSettings() {
|
|
317
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
318
|
+
try {
|
|
319
|
+
const config = yield this.connection.sendRequest(vscode_languageserver_1.ConfigurationRequest.type, {
|
|
320
|
+
items: [
|
|
321
|
+
{
|
|
322
|
+
section: 'cucumber',
|
|
323
|
+
},
|
|
324
|
+
],
|
|
325
|
+
});
|
|
326
|
+
if (config && config.length === 1) {
|
|
327
|
+
const settings = config[0];
|
|
328
|
+
return {
|
|
329
|
+
features: getArray(settings === null || settings === void 0 ? void 0 : settings.features, defaultSettings.features),
|
|
330
|
+
glue: getArray(settings === null || settings === void 0 ? void 0 : settings.glue, defaultSettings.glue),
|
|
331
|
+
parameterTypes: getArray(settings === null || settings === void 0 ? void 0 : settings.parameterTypes, defaultSettings.parameterTypes),
|
|
332
|
+
snippetTemplates: (settings === null || settings === void 0 ? void 0 : settings.snippetTemplates) || {},
|
|
333
|
+
};
|
|
334
|
+
}
|
|
335
|
+
else {
|
|
336
|
+
this.connection.console.error(`The client responded with a config we cannot process: ${JSON.stringify(config, null, 2)}`);
|
|
337
|
+
this.connection.console.error(`Using default settings`);
|
|
338
|
+
return defaultSettings;
|
|
339
|
+
}
|
|
340
|
+
}
|
|
341
|
+
catch (err) {
|
|
342
|
+
this.connection.console.error(`Failed to request configuration: ${err.message}`);
|
|
343
|
+
this.connection.console.error(`Using default settings`);
|
|
344
|
+
return defaultSettings;
|
|
345
|
+
}
|
|
346
|
+
});
|
|
347
|
+
}
|
|
348
|
+
reindex(settings) {
|
|
349
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
350
|
+
if (!settings) {
|
|
351
|
+
settings = yield this.getSettings();
|
|
352
|
+
}
|
|
353
|
+
// TODO: Send WorkDoneProgressBegin notification
|
|
354
|
+
// https://microsoft.github.io/language-server-protocol/specifications/specification-3-17/#workDoneProgress
|
|
355
|
+
this.connection.console.info(`Reindexing ${this.rootUri}`);
|
|
356
|
+
const gherkinSources = yield (0, fs_js_1.loadGherkinSources)(this.files, settings.features);
|
|
357
|
+
this.connection.console.info(`* Found ${gherkinSources.length} feature file(s) in ${JSON.stringify(settings.features)}`);
|
|
358
|
+
const stepTexts = gherkinSources.reduce((prev, gherkinSource) => prev.concat((0, buildStepTexts_js_1.buildStepTexts)(gherkinSource.content)), []);
|
|
359
|
+
this.connection.console.info(`* Found ${stepTexts.length} steps in those feature files`);
|
|
360
|
+
const glueSources = yield (0, fs_js_1.loadGlueSources)(this.files, settings.glue);
|
|
361
|
+
this.connection.console.info(`* Found ${glueSources.length} glue file(s) in ${JSON.stringify(settings.glue)}`);
|
|
362
|
+
this.expressionBuilderResult = this.expressionBuilder.build(glueSources, settings.parameterTypes);
|
|
363
|
+
this.connection.console.info(`* Found ${this.expressionBuilderResult.parameterTypeLinks.length} parameter types in those glue files`);
|
|
364
|
+
for (const parameterTypeLink of this.expressionBuilderResult.parameterTypeLinks) {
|
|
365
|
+
this.connection.console.info(` * {${parameterTypeLink.parameterType.name}} = ${parameterTypeLink.parameterType.regexpStrings}`);
|
|
366
|
+
}
|
|
367
|
+
this.connection.console.info(`* Found ${this.expressionBuilderResult.expressionLinks.length} step definitions in those glue files`);
|
|
368
|
+
for (const error of this.expressionBuilderResult.errors) {
|
|
369
|
+
this.connection.console.error(`* Step Definition errors: ${error.stack}`);
|
|
370
|
+
}
|
|
371
|
+
// Send diagnostics for all documents now that we're updated
|
|
372
|
+
const gherkinDocuments = this.documents.all().filter((doc) => doc.uri.match(/\.feature$/));
|
|
373
|
+
yield Promise.all(gherkinDocuments.map((doc) => this.sendDiagnostics(doc).catch((err) => this.connection.console.error(`Error: ${err.message}`))));
|
|
374
|
+
// Tell the client to update all semantic tokens
|
|
375
|
+
this.connection.languages.semanticTokens.refresh();
|
|
376
|
+
try {
|
|
377
|
+
const expressions = this.expressionBuilderResult.expressionLinks.map((l) => l.expression);
|
|
378
|
+
const suggestions = (0, cucumber_language_service_1.buildSuggestions)(this.expressionBuilderResult.registry, stepTexts, expressions);
|
|
379
|
+
this.connection.console.info(`* Built ${suggestions.length} suggestions for auto complete`);
|
|
380
|
+
this.searchIndex = (0, cucumber_language_service_1.jsSearchIndex)(suggestions);
|
|
381
|
+
const registry = this.expressionBuilderResult.registry;
|
|
382
|
+
this.registry = registry;
|
|
383
|
+
this.expressions = expressions;
|
|
384
|
+
this.suggestions = suggestions;
|
|
385
|
+
this.onReindexed(registry, expressions, suggestions);
|
|
386
|
+
}
|
|
387
|
+
catch (err) {
|
|
388
|
+
this.connection.console.error(err.stack);
|
|
389
|
+
this.connection.console.error('Please report an issue at https://github.com/cucumber/language-service/issues with the above stack trace');
|
|
390
|
+
}
|
|
391
|
+
// TODO: Send WorkDoneProgressEnd notification
|
|
392
|
+
});
|
|
393
|
+
}
|
|
394
|
+
}
|
|
395
|
+
exports.CucumberLanguageServer = CucumberLanguageServer;
|
|
396
|
+
function getArray(arr, defaultArr) {
|
|
397
|
+
if (!Array.isArray(arr) || arr.length === 0)
|
|
398
|
+
return defaultArr;
|
|
399
|
+
return arr;
|
|
400
|
+
}
|
|
401
|
+
//# 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,8 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.extname = extname;
|
|
4
|
+
function extname(uri) {
|
|
5
|
+
// Roughly-enough implements https://nodejs.org/dist/latest-v18.x/docs/api/path.html#pathextnamepath
|
|
6
|
+
return uri.substring(uri.lastIndexOf('.'), uri.length) || '';
|
|
7
|
+
}
|
|
8
|
+
//# sourceMappingURL=Files.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Files.js","sourceRoot":"","sources":["../../../src/Files.ts"],"names":[],"mappings":";;AAOA,0BAGC;AAHD,SAAgB,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 @@
|
|
|
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,19 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.buildStepTexts = buildStepTexts;
|
|
4
|
+
const gherkin_utils_1 = require("@cucumber/gherkin-utils");
|
|
5
|
+
const cucumber_language_service_1 = require("@marton78/cucumber-language-service");
|
|
6
|
+
function buildStepTexts(gherkinSource) {
|
|
7
|
+
const { gherkinDocument } = (0, cucumber_language_service_1.parseGherkinDocument)(gherkinSource);
|
|
8
|
+
if (!gherkinDocument) {
|
|
9
|
+
return [];
|
|
10
|
+
}
|
|
11
|
+
const stepTexts = [];
|
|
12
|
+
(0, gherkin_utils_1.walkGherkinDocument)(gherkinDocument, undefined, {
|
|
13
|
+
step(step) {
|
|
14
|
+
stepTexts.push(step.text);
|
|
15
|
+
},
|
|
16
|
+
});
|
|
17
|
+
return stepTexts;
|
|
18
|
+
}
|
|
19
|
+
//# sourceMappingURL=buildStepTexts.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"buildStepTexts.js","sourceRoot":"","sources":["../../../src/buildStepTexts.ts"],"names":[],"mappings":";;AAGA,wCAYC;AAfD,2DAA6D;AAC7D,mFAA0E;AAE1E,SAAgB,cAAc,CAAC,aAAqB;IAClD,MAAM,EAAE,eAAe,EAAE,GAAG,IAAA,gDAAoB,EAAC,aAAa,CAAC,CAAA;IAC/D,IAAI,CAAC,eAAe,EAAE,CAAC;QACrB,OAAO,EAAE,CAAA;IACX,CAAC;IACD,MAAM,SAAS,GAAa,EAAE,CAAA;IAC9B,IAAA,mCAAmB,EAAC,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
|