A command-line tool to format Gherkin .feature files.
Project description
Gherkin Formatter
A Python command-line utility to format Gherkin (.feature) files, similar to how black formats Python files. This tool helps maintain consistent styling in your BDD feature specifications, ensuring readability and uniformity across your projects.
Features
- Consistent Indentation: Applies uniform indentation for all Gherkin keywords (e.g.,
Feature,Scenario,Given,When,Then). - Keyword Alignment: Aligns keywords within step blocks (Given/When/Then) for improved readability.
- Flexible Tag Formatting: Supports single-line or multi-line tag styles.
- Data Table Formatting: Automatically aligns columns in Data Tables.
- DocString Formatting: Pretty-prints JSON and YAML content within DocStrings.
- Comprehensive Gherkin Support: Handles
Rule,Background,Scenario Outline,Examples, and comments. - Non-Destructive: Preserves all your data; only formatting is changed.
Installation
Install the Gherkin Formatter using pip:
pip install gherkin-formatter
Or, for development, clone the repository and install editable with development dependencies:
git clone <repository-url>
cd gherkin-formatter
pip install -e .[dev]
Usage
To format your Gherkin files, run:
gherkin-formatter [OPTIONS] [FILES_OR_DIRECTORIES...]
Arguments:
FILES_OR_DIRECTORIES...: One or more.featurefiles or directories containing.featurefiles to format. The tool will recursively search for.featurefiles in directories.
Options:
--tab-width INTEGER: Number of spaces for indentation if not using tabs (default:2).--use-tabs: Indent using tabs instead of spaces. If set,--tab-widthis generally ignored for the indentation character.-a, --alignment [left|right]: Alignment for Gherkin keywords (e.g.,Given,When,Then) within a block of steps.left: Left-aligns keywords (default).right: Right-aligns keywords based on the longest keyword in the current block, providing a visually structured layout.
--multi-line-tags: Formats each tag on a new line, indented under the associated element. Default is single-line formatting where all tags appear on one line.--dry-run: Preview the changes that would be made without modifying the actual files. The formatted output (if different) will be printed to the console.--check: Check if files are formatted correctly according to the specified options. No files are changed.- Exits with code
0if all files are well-formatted. - Exits with code
1if one or more files would be reformatted or had file-specific processing issues (e.g., parsing errors). - Exits with code
123if an internal error occurred in the formatter.
- Exits with code
--version: Show the program's version number and exit.--help: Show this help message and exit.
Examples:
-
Format a single file with 4 spaces for indentation:
gherkin-formatter --tab-width 4 my_feature.feature
-
Check if all
.featurefiles in thefeatures/directory are formatted correctly:gherkin-formatter --check features/
-
Preview formatting for
my_feature.feature, aligning keywords to the right:gherkin-formatter --dry-run --alignment right my_feature.feature
-
Format a file using tabs for indentation and multi-line tags:
gherkin-formatter --use-tabs --multi-line-tags my_feature.feature
Development
This project uses pytest for running tests and pre-commit for code quality checks.
Setup:
After cloning the repository, it's recommended to use a virtual environment:
# Clone the repository (if you haven't already)
# git clone <repository-url>
# cd gherkin-formatter
python -m venv .venv
source .venv/bin/activate # On Windows: .venv\Scripts\activate
pip install -e .[dev]
pre-commit install # Installs pre-commit hooks
Running Tests:
To execute the test suite:
pytest
Code Style & Linting:
This project uses black, isort, and ruff for formatting and linting, managed via pre-commit hooks. Ensure hooks are installed and run them before committing:
pre-commit run --all-files
Using Gherkin Formatter as a pre-commit hook in your projects
You can use gherkin-formatter to automatically format your .feature files in your own Gherkin-based projects using pre-commit.
-
Ensure
pre-commitis installed. If not, install it:pip install pre-commit
-
Create a
pre-commit-hooks.yamlfile in this repository (or ensure it exists). This file tellspre-commitabout the hook provided bygherkin-formatter. If you are developinggherkin-formatteritself, this file should already be present.# pre-commit-hooks.yaml - id: format-feature-files name: Format feature files entry: gherkin-formatter # This assumes gherkin-formatter is in the PATH language: python types: [gherkin] args: [] # Add any default arguments for gherkin-formatter here description: "Formats Gherkin feature files using gherkin-formatter."
Note: The
entrypoint might need to be adjusted depending on howgherkin-formatteris installed in the environment where the pre-commit hook runs. If it's installed as a system script,gherkin-formattershould work. If you're pointing to a local development version, you might useentry: path/to/dev/gherkin-formatter-script.pyor similar. -
In your own Gherkin project's repository, create or update
.pre-commit-config.yaml: Add the following to your.pre-commit-config.yamlto use the hook from thisgherkin-formatterrepository. Replace<url-to-this-gherkin-formatter-repo>with the actual URL (e.g., GitHub URL) and<tag-or-sha>with a specific tag, commit SHA, or branch from thegherkin-formatterrepository (e.g.,mainor a version tag likev1.0.0).# .pre-commit-config.yaml in your project repos: - repo: <url-to-this-gherkin-formatter-repo> # e.g., https://github.com/yourusername/gherkin-formatter rev: <tag-or-sha> # e.g., main or v0.1.0 hooks: - id: format-feature-files # You can override or add arguments here if needed: # args: [--tab-width, "4"]
-
Install the git hooks in your project: Navigate to your project's root directory and run:
pre-commit install
Now, gherkin-formatter will automatically run on your .feature files each time you make a commit, ensuring they are consistently formatted.
Contributing
Contributions are welcome! If you'd like to contribute, please follow these general steps:
- Fork the repository and clone it to your local machine.
- Create a new branch for your feature or bug fix:
git checkout -b my-new-feature. - Make your changes and ensure they are well-tested.
- Ensure pre-commit checks pass:
pre-commit run --all-files. - Run tests using
pytestto confirm everything passes. - Commit your changes:
git commit -am 'Add some feature'. - Push to the branch:
git push origin my-new-feature. - Open a Pull Request on GitHub.
Please ensure your code adheres to existing styling and that any new functionality is covered by tests.
License
This project is licensed under the MIT License.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file gherkin_formatter-0.1.1.tar.gz.
File metadata
- Download URL: gherkin_formatter-0.1.1.tar.gz
- Upload date:
- Size: 30.0 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.12.9
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
3dde723693c3344289bce82fe01d2b52ac5df373382986afdef7b33e7f3df4f2
|
|
| MD5 |
d851130c55f6744b36e53e3b347990f8
|
|
| BLAKE2b-256 |
4e526bfea61c25612943271a4315e5c75a20ee680fc48665fdfa64a43067d035
|
Provenance
The following attestation bundles were made for gherkin_formatter-0.1.1.tar.gz:
Publisher:
publish-to-pypi.yml on musthafak/gherkin-formatter
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
gherkin_formatter-0.1.1.tar.gz -
Subject digest:
3dde723693c3344289bce82fe01d2b52ac5df373382986afdef7b33e7f3df4f2 - Sigstore transparency entry: 264364317
- Sigstore integration time:
-
Permalink:
musthafak/gherkin-formatter@99ca297ad337136d51596f91a680d6ea403858ff -
Branch / Tag:
refs/tags/v0.1.1 - Owner: https://github.com/musthafak
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish-to-pypi.yml@99ca297ad337136d51596f91a680d6ea403858ff -
Trigger Event:
release
-
Statement type:
File details
Details for the file gherkin_formatter-0.1.1-py3-none-any.whl.
File metadata
- Download URL: gherkin_formatter-0.1.1-py3-none-any.whl
- Upload date:
- Size: 14.4 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.12.9
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
ef471979fa8e7c0042a216aafa92613fd2207d3be47772f0fade726ab3ebbb50
|
|
| MD5 |
2b991bbf9eef0bb251defe90472a1386
|
|
| BLAKE2b-256 |
1e64fade4358a051caa911d6eae4344a51e0788b1259efae5c9773e1e7d0e48e
|
Provenance
The following attestation bundles were made for gherkin_formatter-0.1.1-py3-none-any.whl:
Publisher:
publish-to-pypi.yml on musthafak/gherkin-formatter
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
gherkin_formatter-0.1.1-py3-none-any.whl -
Subject digest:
ef471979fa8e7c0042a216aafa92613fd2207d3be47772f0fade726ab3ebbb50 - Sigstore transparency entry: 264364320
- Sigstore integration time:
-
Permalink:
musthafak/gherkin-formatter@99ca297ad337136d51596f91a680d6ea403858ff -
Branch / Tag:
refs/tags/v0.1.1 - Owner: https://github.com/musthafak
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish-to-pypi.yml@99ca297ad337136d51596f91a680d6ea403858ff -
Trigger Event:
release
-
Statement type: