prettier-plugin-gherkin
Version:
This prettier plugin format your gherkin (`.feature` files) documents.
183 lines (124 loc) • 5.43 kB
Markdown
# prettier-plugin-gherkin
This prettier plugin format your gherkin (`.feature` files) documents.
Example of changes:
```gherkin
-json
Feature: accountability
accounts should always be good
Scenario: Check accountability
# Insert fixtures
Given the following fixtures files are loaded:
| 10.contracts.yml |
| 20.wallet.yml |
| 30.tax.yml |
Given I inject the header "authorization" with value 'Bearer some-token'
And I inject the header "accept" with value "application/json"
# I will create an order here
Given I create an order
Then the response status code should be 200
When I pay the latest order
And I refund the last payment and transaction list with transactions:
"""
[{"name": "card",
"credit": 5000
}
]
"""
```
Will be formatted to:
```gherkin
-json
Feature: accountability
accounts should always be good
Scenario: Check accountability
# Insert fixtures
Given the following fixtures files are loaded:
| 10.contracts.yml |
| 20.wallet.yml |
| 30.tax.yml |
Given I inject the header "authorization" with value 'Bearer some-token'
And I inject the header "accept" with value "application/json"
# I will create an order here
Given I create an order
Then the response status code should be 200
When I pay the latest order
And I refund the last payment and transaction list with transactions:
"""
[{ "name": "card", "credit": 5000 }]
"""
```
### Versions
This version is compatible with prettier 3. If you still use prettier 2, you should use the [1.1.1](https://github.com/mapado/prettier-plugin-gherkin/blob/main/CHANGELOG.md#111) version of this plugin.
## Installation
Install [prettier](https://prettier.io/docs/en/install.html) if you don't have already.
```sh
npm install --save prettier-plugin-gherkin
// or with yarn
yarn add prettier-plugin-gherkin
```
Activate the plugin in your prettier configuration file:
> .prettierrc
```diff
{
+ "plugins": ["prettier-plugin-gherkin"]
}
```
You can then configure your git precommit, IDE, etc. to format the `.features` file with prettier.
### Example with VSCode
https://user-images.githubusercontent.com/1398469/201128147-ad2ecba8-253d-4c70-9133-ae28d178ed2b.mp4
## Options
This plugin has the following options:
### `forceNewlineBetweenStepBlocks` (default: `false`)
Do force a blank linesbetween steps block:
Given the following block:
```gherkin
Given some context
And some other context
When I do something
Then I should have a result
```
The default output will be the same as the input (no blank lines).
If you set this option to `true`, it will force a blank line between the context block and the action block:
```gherkin
Given some context
And some other context
When I do something
Then I should have a result
```
If you already have a blank line in your input, it will be kept as-is (even with this option set to `false`).
If you have more than one blank line, it will be reduced to a single blank line.
### `escapeBackslashes`
default to `false`
If `false`, all escaped backslash will be transformed to simple backslash : `\\` → `\`
If `true`, all backslash will be espaced : `\` → `\\`
This option may be due to the parser ([see issue](https://github.com/cucumber/common/issues/2115)) and is here because of an inconsistence between the [gherkin reference](https://cucumber.io/docs/gherkin/reference/#table-cell-escaping), that said that:
> if you need a `\`, you can escape that with `\\`.
and the tooling that accept unescaped `\`, including the cucumber parser used under the hood.
You may want to check your code base and be consistent : if you use simple backslash, keep the default option, if you escape all backslash, then set this option to `true`.
## Documentation
[Prettier plugin documentation](https://prettier.io/docs/en/plugins.html#developing-plugins)
Gherkin AST schema

### Useful resources on Gherkin language
- [Learn Gherkin on specflow.org](https://specflow.org/learn/gherkin/)
- [Cucumber Gherkin reference](https://cucumber.io/docs/gherkin/reference/)
- [Cucumber Gherkin JavaScript parser](https://github.com/cucumber/gherkin-javascript/)
- [Prettier command reference](https://github.com/prettier/prettier/blob/main/commands.md)
## Contributing to this plugin
Clone the repository and install dependencies:
```sh
git clone git@github.com:mapado/prettier-plugin-gherkin.git
cd prettier-plugin-gherkin
yarn install
```
Several commands are available:
```sh
yarn example # print the example file with the plugin. You can change de content of the example file as you need
yarn test # run the tests suites : all features are tested
yarn lint # the plugin is writter in TypeScript, this command will help you detect typescript issue
```
### Test datas
Test datas can be found here : https://github.com/cucumber/gherkin-utils/tree/c35857189c2da3a9b84796ad585d25e70f7bf3b8/testdata