Browse step definitions from your project and insert them into .feature files with correct indentation, placeholders, tables, and doc strings.
Works with Cucumber, SpecFlow, and other BDD setups that use a pickle.steps.json catalog.
Features
- Steps sidebar — grouped list of available step definitions from your workspace
- One-click insert — click a step to add it at the cursor in the active feature file
- Smart placeholders — scalar parameters use examples or named placeholders; tables and doc strings are expanded automatically
- C# doc comments —
/// <summary>becomes the step description;/// <example>supplies table columns and rows - Live reload — changes to
pickle.steps.jsonrefresh the list automatically
Requirements
- VS Code 1.85+ or Cursor
- A workspace with
pickle.steps.jsonin the project root (or a custom path via settings) - Gherkin syntax support for
.featurefiles (e.g. the Cucumber extension)
Getting started
- Install Pickle from the marketplace.
- Add
pickle.steps.jsonto your workspace root. Seepickle.steps.example.jsonin this repo for the schema. - Open the Pickle activity bar icon and use the Steps view.
- Open a
.featurefile, place the cursor where you want a step, and click a step in the sidebar.
Configuration
| Setting | Default | Description |
|---|---|---|
pickle.stepsConfigFile |
pickle.steps.json |
Steps catalog file name, relative to the workspace root |
Steps config format
{
"version": 1,
"stepDefinitions": [
{
"group": "Login",
"steps": [
{
"keyword": "Given",
"text": "I am logged in as {string}",
"description": "Optional help text shown in the sidebar.",
"parameters": [
{ "name": "userName", "type": "string", "example": "[email protected]" }
]
}
]
}
]
}
Parameter types: string, int, float, bool, table, docstring
Groups can use dot notation (e.g. Checkout.Cart) for nested display.
Generating from C#
Use Pickle: Refresh Steps from C# to scan step definition classes and rebuild pickle.steps.json.
Group names follow the file name: OrderSteps.cs → Order, OrderSteps.Shipping.cs → Order.Shipping.
Descriptions come from /// <summary> on the step method:
/// <summary>
/// Places an order using the values provided in the scenario table.
/// </summary>
[When(@"I place an order with details:")]
public void WhenIPlaceAnOrderWithDetails(Table details) { }
Table columns and rows can be taken from a /// <example> block on the same method:
/// <summary>
/// Places an order using the values provided in the scenario table.
/// </summary>
/// <example>
/// When I place an order with details:
/// | Field | Value |
/// | product | Widget A |
/// | quantity | 3 |
/// | priority | high |
/// </example>
[When(@"I place an order with details:")]
public void WhenIPlaceAnOrderWithDetails(Table details) { }
On refresh, Pickle extracts the table into pickle.steps.json:
{
"keyword": "When",
"text": "I place an order with details:",
"description": "Places an order using the values provided in the scenario table.",
"parameters": [
{
"name": "details",
"type": "table",
"columns": ["Field", "Value"],
"rows": [
["product", "Widget A"],
["quantity", "3"],
["priority", "high"]
]
}
]
}
If a method has an <example> table, that table replaces any existing columns/rows in the JSON. Without an example, manually edited table data in pickle.steps.json is preserved on refresh.
Commands
| Command | Description |
|---|---|
Pickle: Refresh Steps |
Reload the steps catalog |
Pickle: Show Descriptions |
Show step descriptions in the sidebar |
Pickle: Hide Descriptions |
Hide step descriptions |
Feedback
Questions, bugs, or suggestions: [email protected]
License
MIT