Releases: carlos-camara/vscode-gherkin-powertools
Releases · carlos-camara/vscode-gherkin-powertools
Release list
v1.8.5: Merge pull request #370 from carlos-camara/release/1.8.5
🚀 Added
- Anti-Pattern Engine Redesign: Completely overhauled the BDD Anti-Pattern detection engine with a structured rule contract separating objective Correctness errors from subjective Reliability, Maintainability, and Style heuristics.
- Finding Suppression System: You can now safely suppress deliberate or unavoidable anti-patterns using a Quick Fix (
Cmd+.). Suppressions are stored in a centralized, machine-readable.gherkin-pt-suppressions.jsonledger, keeping your editor clean without losing track of technical debt. Manual edits to this file update your diagnostics in real-time. - Batch Fix Workflow: Introduced the
Fix All Safe Gherkin Issues in Filecommand. Utilizing VS Code'sSourceFixAllAPI, it deterministically resolves non-overlapping structural errors (like missing colons or exact keyword corrections) across an entire document in one safe atomic operation. - Object-based Rule Configuration:
gherkinPowerTools.rulesnow accepts configuration objects (e.g.,{ "severity": "error", "maxSteps": 20 }), allowing teams to easily tweak subjective thresholds likemaxStepswithout being overwhelmed by low-value settings. - Workspace-Aware Step Destination: Redesigned step definition generation to intelligently infer the optimal destination directory based on the project's
stepGlobsconfiguration.
The extension now respects your workspace architecture instead of blindly writing tofeatures/steps, falling back to a clean QuickPick menu to resolve ambiguity.
Generated files are automatically saved, instantly clearing undefined step diagnostics without requiring manual intervention. - Safe Concurrent Code Generation: Step definition generation (Quick Fix) now enforces strict
{ overwrite: false }bounds and prioritizes in-memory document state to definitively eliminate silent overwrites and race conditions when bootstrapping new features. - Range Formatting Safe-Unit Model: Redesigned range formatting expansion to significantly reduce unintended formatting blast radius. The algorithm now groups non-splittable elements (Data Tables, DocStrings, and Tag Blocks) into isolated safe units, ensuring a selection of two independent steps no longer formats the entire encompassing Scenario.
- Range Formatting Integrity: Strengthened the VS Code range formatting API by enforcing strict idempotency guarantees and AST boundary reparsing to prevent syntax corruption during partial formatting.
- AST Caching Redesign: Replaced the rigid count-based AST cache with a dynamic Weighted LRU Cache enforcing a 50MB soft memory budget.
This allows the extension to safely scale across massive enterprise workspaces (>10,000 files) by estimating AST byte sizes and shedding oldest documents only when real memory pressure demands it, drastically improving hit ratios without exhausting the VS Code Extension Host. - Robust Parser Loader: Audited and redesigned the dynamic loader for
@cucumber/gherkinand@cucumber/messagesto include a bounded retry strategy. This improves extension resilience during transient filesystem errors or Extension Host initialization failures. - Concurrent Loader Deduplication: Prevented multiple concurrent parser triggers from creating duplicate loader instances.
- Unified Diagnostics Model: Replaced divergent
linter.enabledRulesandantiPatterns.rulesconfiguration objects with a single, authoritativegherkinPowerTools.rulesdictionary. All diagnostic identifiers have been standardized tokebab-caseacross the AST linter and Anti-Pattern Engine. Legacy settings are automatically migrated at runtime.
✨ Improved
- Code Action Reliability: Completely redesigned how the Linter transmits machine data to Quick Fixes.
By leveraging a strict internaldiagnosticRegistryand validating document versions, the extension now guarantees that generating an undefined step or fixing a typo will never silently apply a stale payload or corrupt your document if you continue typing before clicking the lightbulb. - Linter Invalidation Redesign: Replaced instantaneous file-event handlers with a centralized
invalidationQueue.
The Linter now intelligently batches multiple file events (e.g., rapid document saves orstepDefinitionsUpdated) and executes AST parsing concurrently with a strict concurrency limit (maximum 5 documents).
This completely eliminates CPU starvation and Extension Host freezing during massive branch switches or global dependency updates. - Disabled Linter Lifecycle: When
gherkinPowerTools.linter.enabledis set tofalse, the extension now natively suppresses debounce timers, avoidsAstRepositoryparsing, and silences all background notification popups. This guarantees true zero-overhead on CPU and memory when you rely exclusively on external linters. - Formatter Error UX Separation: Automatic formatting (like Format on Save) is now strictly silent when a Gherkin document contains structural syntax errors, preventing intrusive warning popups from interrupting typing. Manual formatting commands via the Command Palette proactively display one concise, actionable warning when syntax errors block formatting.
- MetricsLogger Optimization: The Developer Metrics engine now queries the
metricsEnabledsetting via an event-driven configuration listener instead of polling VS Code on every log event. This eliminates synchronous IPC overhead, improving hot path performance during massive AST parsing by over 2.4x while keeping disabled log events strictly allocation-light. - Parser Metrics: Added
Cache EvictionsandCache Est. Memory (MB)to the Developer Metrics output to provide observability into the new memory budgeting logic. - Parser Reliability: Fixed an issue where a temporarily failed module load would permanently break the parser by caching the rejected promise. The cache is now correctly evicted on failure, allowing seamless automatic recovery on subsequent parses.
🐛 Fixed
- Structural Step Identity Validation: Fixed a bug where step definition patterns containing colons (
:) or complex regex characters were incorrectly parsed by the Anti-Pattern Engine.
The structural identity model now leverages nested object structures instead of string-based delimiter serialization, fully eliminating false-positive "Duplicated Steps" warnings and data corruption on valid Python expressions.
📚 Documentation
- Comprehensive Documentation Audit: Performed a repository-wide documentation audit for the 1.8.5 release.
Verified that the new Anti-Pattern Engine rules (Correctness, Maintainability, Style), the centralizedgherkinPowerTools.rulesconfiguration,
the batch quick fix workflow (Fix All Safe Gherkin Issues in File), and the diagnostic suppression ledger (.gherkin-pt-suppressions.json) are thoroughly and accurately documented across all MKDocs pages and the README.
v1.8.4: Merge pull request #359 from carlos-camara/release/1.8.4
💅 User Experience & Polish
- Modern Dashboard: The Gherkin Health Dashboard has been completely redesigned with a strict modern aesthetic for a premium, responsive, and minimalist native feel.
- CodeLens Simplification: Impact Analysis CodeLens now navigates directly to the exact step (instead of the scenario top) and uses a simplified path display for better readability.
- Cross-Platform Quick Fixes: Updated Quick Fixes and walkthroughs to explicitly support both macOS (
Cmd+.) and Windows (Ctrl+.) shortcuts. - Immediate Linter Diagnostics: The Gherkin Linter now executes instantaneously upon opening a file, bypassing the standard typing debounce. This ensures warnings (like ambiguous steps) appear immediately without requiring you to type or switch tabs.
- Refined Ambiguous Step Diagnostics: Injected a clear
⚠️emoji into the native VS Code diagnostic string (⚠️ Ambiguous step: matches multiple definitions...) and removed the redundant header from the hover provider to ensure a clean, single-warning UI.
🚀 Architecture & Reliability
- Authoritative Feature Discovery: Implemented a central
FeatureDiscoveryServicethat acts as the single source of truth for all*.featurefiles in the workspace. This resolves inconsistencies between the Extension Cache, Test Explorer, CLI, and Diagnostics by unifying file watchers, respecting ignore globs (gherkinPowerTools.featureGlobs), and debouncing file I/O bursts. - Optimized Behave File Discovery: The
BehaveFileDiscoveryServicenow caches active glob patterns and only reconstructs file system watchers when the resolved configuration actually changes. In multi-root workspaces, it precisely targets only the affected roots, and aggressively deduplicates overlapping concurrent file system events into a single pending state per URI. - Transactional Workspace Graph: The core semantic index (
WorkspaceGraph) has been completely redesigned around an immutable, transactional generation model (WorkspaceGraphGeneration). Readers (like the Impact Analyzer and Test Explorer) now query a stable, immutable snapshot of the graph,
while writers use an atomicexecuteTransactionqueue that strictly isolates state, eliminates race conditions, and safely aborts stale file updates during heavy workspace I/O. - Capability-Based Deferred Bootstrap: Hardened the extension startup sequence.
DeferredBootstrapnow orchestrates initialization using isolated Capabilities rather than a monolithicPromise.all(). - Stable Parser Error Contract: Introduced a unified
GherkinParseErrorinterface across the parser, linter, graph, and statistics engines. This strictly normalizes@cucumber/gherkincomposite errors, eliminating cascading crashes during malformed document edits. - Syntax Errors Anti-Pattern: The BDD Anti-pattern Detection Engine now actively surfaces parser
syntax-errorsto block execution on invalid Gherkin files. - Cross-Platform Resource Canonicalization: Redesigned internal cache mechanisms and Graph queries to use a strict
ResourceIdentityabstraction. Correctly handles URI canonicalization and prevents cache poisoning/collisions across case-sensitive (Linux, Remote SSH) and case-insensitive (macOS, Windows) filesystems.
This crucially fixes silent failures where Impact Analysis CodeLenses and Rename Step features would not appear on macOS/Windows. - Resilient Cache Initialization: Implemented bounded exponential retries for I/O-bound indexers (Symbol Cache, Usage Indexer), allowing them to automatically recover from transient read errors (e.g., file locks) without crashing the extension.
- Diagnostic Observability: The
Diagnose Workspacecommand now reports the real-time status of every bootstrap capability, providing unprecedented visibility into startup failures.
🛡️ Security & Release Engineering
- Strict Execution Boundaries: Safely eliminated the implicit
workspaceFolders[0]fallback for external/untitled files. Test execution requests for.featurefiles located outside of active workspaces are now explicitly blocked to protect the user's root disk from arbitrary runs. - Multi-Root Target Prompting: Step definition generation (Quick Fixes) will now present an explicit
QuickPickfolder selection dialog if multiple roots are available and the file context is ambiguous, rather than silently writing to the first project.
📚 Documentation
- Comprehensive Documentation Audit: Performed a repository-wide documentation audit. Verified that the Gherkin Health Dashboard, Real-Time Impact Analysis, Anti-pattern Detection Engine, Contextual Feature Discovery, and the standalone CLI (
@carlos-camara/gherkin-pt) are thoroughly and accurately documented across the README, MKDocs, getting started guides, and command references. - Markdown Linting Compliance: Fixed markdown linting line-length errors (
MD013) in the Run and Debug documentation to guarantee CI/CD compliance.
🛡️ Security & Release Engineering
- Provenance Hardening: Implemented rigorous cryptographic validation to enforce a strict immutable relationship between the source commit, git tag, generated
.vsix, and GitHub Release asset. - Supply Chain Protection: Redesigned the GitHub Actions
release.ymlinto a decoupled, dual-job workflow. Unprivileged jobs build the extension, while a privileged job publishes it, ensuring that nonpm installor build scripts ever have access to theGITHUB_TOKEN. - Anti-Clobbering Mechanics: Eliminated silent release overwrites. The pipeline now verifies the SHA-256 of any existing release assets and aborts immediately if a tampered or duplicate VSIX is detected, forcing manual intervention.
- Internal Manifest Validation: The VSIX generation process now strictly extracts and matches the packaged
extension/package.jsonagainst the repository source of truth to detect internal tampered versions before publication.
v1.8.3: Merge pull request #325 from carlos-camara/release/1.8.3
🚀 Added
- Secure Execution Model: Redesigned Behave test execution (
gherkinPowerTools.behave.execution) to use structured arguments andspawn({ shell: false })instead of raw shell commands, mitigating command injection risks. - Workspace Trust: Integrated VS Code's Workspace Trust API to explicitly block automated Behave execution in untrusted environments.
- Machine-Specific Configuration Isolation: Added
gherkinPowerTools.behave.localExecutableas a strict, machine-specific configuration override for execution, ensuring absolute paths are not committed to shared project configuration files. - Scoped CLI Package: The Standalone CLI is now distributed as a secure, dedicated scoped npm package (
@carlos-camara/gherkin-pt). This eliminates supply chain squatting risks and ensures the executable name does not conflict with global namespace packages.
✨ Improved
- Native Step Rename Alignment: Removed custom keybindings for renaming steps. The native VS Code
F2rename provider is now fully responsible for Gherkin step renaming, enabling native previews, robustWorkspaceEditundo history, and seamless UI integration without hijacking standard editor keys. - Safe Shortcut Chords: Command Center, Gherkin Health, and Workspace Diagnostics have been reassigned to non-conflicting shortcuts (
Alt+Shift+G,Alt+Shift+H,Alt+Shift+D) so they no longer interfere with native VS Code panels like Source Control. - Extension Isolation: Removed an activation-time side effect where the extension recommended and potentially modified the global VS Code
testing.automaticallyOpenPeekViewsetting. This ensures Gherkin PowerTools strictly isolates its test view state without inadvertently altering the user's experience with other test controllers (like Python or Jest). - First-Run Experience: Completely redesigned the onboarding Walkthroughs into three distinct, tailored journeys: Essential BDD, Python Behave, and CLI & CI. The Behave journey now automatically hides configuration steps if auto-discovery succeeds, accelerating time-to-first-value.
- Editor Context Menu Redesign: Drastically reduced clutter in the editor right-click menu. Workspace-level actions (Format, Diagnose, Health) have been grouped into a dedicated
Gherkin PowerToolssubmenu. Additionally, theRename Stepcommand now uses dynamic context keys to appear only when your cursor is positioned on a valid Gherkin step. - Command Architecture Standardization: All commands have been unified under the
gherkinPowerToolsnamespace and theGherkin PowerToolscategory for consistency in the Command Palette. The legacygherkin-powertools.showImpactDetailscommand has been deprecated and aliased togherkinPowerTools.showImpactDetailsto prevent breaking existing keybindings. - Deferred Activation Lifecycle: Replaced insecure
setTimeoutusage with a deterministicDeferredBootstrapstate machine using cancellation tokens. This guarantees that heavy workspace parsing is safely deferred without blocking VS Code startup and can be reliably cancelled during extension deactivation. - CLI Documentation: Fully updated documentation across README, CLI guides, and Getting Started pages to reflect the new
npx @carlos-camara/gherkin-ptexecution model.
🐛 Fixed
- Remote Environment Compatibility: Fixed a critical bug where the Gherkin parser failed silently on Dev Containers and Remote SSH environments.
The extension now natively bundles ES Module dependencies (@cucumber/gherkinand@cucumber/messages) into the production CommonJS output.
This eliminates runtime module resolution failures without ballooning the VSIX file size, and permanently restores Formatting, Gherkin Health, and Test Explorer features on remote machines. - Zero-Config Python Environment Detection: Completely removed the deprecated
behave.commandsetting to enforce a zero-config paradigm. Behave execution now automatically discovers virtual environments by directly leveraging the official Microsoft Python extension API. This eliminates the need to hardcode absolute environment paths and automatically migrates legacy configurations on startup. - CLI Dependency Resolution: Fixed an issue where the standalone CLI could fail to resolve peer dependencies like
@cucumber/gherkinwhen executed vianpx. The build script now natively injects root workspace dependencies into the CLI'spackage.json. - Test Explorer Integration: Removed an invalid global
testing.showCoverageInExplorerconfiguration override from the extension manifest. This prevents Gherkin PowerTools from inadvertently hiding the coverage buttons of other third-party extensions (like Python Pytest or Jest) in the VS Code Test Explorer. - Linter Edge Case: Fixed a semantic validation bug where misspelled step keywords were not highlighted if they were incorrectly parsed as part of a Feature or Rule description due to missing colons (e.g., a missing colon on a
Scenario).
v1.8.2: Merge pull request #274 from carlos-camara/release/1.8.2
🚀 Added
- Command Line Interface (CLI) Conformance: The standalone CLI now features 100% execution parity with the VS Code extension by leveraging a unified
defaults.tsconfiguration layer. - Strict Configuration Hierarchy: Enforced a clear precedence pipeline across the extension and CLI (Project
.gherkin-powertoolsrc.json> Workspace Settings > User Settings > Defaults) via centralized configuration resolution. - BDD Anti-pattern Detection Engine: A powerful new static analysis engine replacing the legacy Recommendation Engine. It proactively scans your entire workspace to detect and surface anti-patterns such as Oversized Features, Oversized Scenarios, Duplicated/Unused/Ambiguous/Undefined Python step definitions, Excessive Tags, and Inconsistent Formatting.
- Fully configurable via
gherkinPowerTools.antiPatterns.rulesto set severities (error,warning,info,hint,off) for individual rules. - Safely integrates with the Real-time Linter to prevent double-squiggles on feature files.
- Fully configurable via
- Case-Insensitive URI Normalization: Implemented robust case-insensitive path normalization across the
WorkspaceGraphandSymbolCachefor macOS and Windows, fixing false positives where files were seen as duplicates or missed entirely.
✨ Improved
- Anti-Pattern Step Keyword Extraction: Refined the duplicate and unused step detection algorithms. The engine now dynamically normalizes step keywords (Given/When/Then), preventing false positives when identical regular expressions are registered with different decorators to support multiple execution contexts.
- Semantic Ambiguous Step Resolution: Fixed a major bug in the Ambiguous Step Linter. Continuation steps using
AndorButnow accurately inherit their parentGiven,When, orThensemantic type, preventing false-positive Ambiguous or Unused step warnings when multiple steps share the same regular expression pattern but use different decorators. - Historical Trends Persistence: Hardened the Gherkin Health Dashboard metrics storage. The history is now rigorously versioned (
HistorySchemaV1), fully deduplicated to conserve space, and smartly isolated per Git branch to prevent cross-branch contamination of project metrics. AddedExport History as JSONandClear Historycommands. - Performance Optimization: Removed the computationally heavy
suspiciousSimilaritiescheck from the background analyzer and removedts-nodedependency to improve extension host memory usage and reduce bundle size.
🐛 Fixed
- UI Error Deduplication: Deduplicated consecutive lines in test error output to prevent
behavefrom spamming the Test Explorer console. - Diagnostic Line Alignment: Prevented an off-by-one line shift in Python files when rendering inline squiggles from the Anti-pattern engine.
- Dashboard Styling: Fixed CSS severity classes for badges to ensure Anti-pattern severities display the correct colors in the HTML dashboard.
- CLI Output: Updated Standalone CLI output terminology and test assertions to match the new Anti-pattern rules.
📖 Documentation
- Visual Overhaul: Applied a new glassmorphism and soft-shadow styling to the MkDocs documentation.
- Hero Image Update: Swapped the main hero GIF in the README to showcase the Test Explorer execution & debugging.
- Content Restructuring: Re-organized and numbered the "Two-Tiered Capabilities" and "Detailed Features" lists in the README.
v1.8.1: Merge pull request #260 from carlos-camara/release/1.8.1
🚀 Added
- Real-Time Impact Analysis Engine: Added a new blast radius impact analyzer that places an interactive CodeLens above every Python step definition.
It calculates how many scenarios depend on a step, grouping them by severity (High, Medium, Low, or Unused).
Clicking the CodeLens opens a QuickPick menu to instantly navigate to the affected scenarios, significantly reducing the risk of refactoring.
This feature can be disabled via thegherkinPowerTools.impactAnalysis.enabledsetting. - Automated First-Run Experience: Added an intelligent, non-intrusive onboarding experience. When you open a Python Behave project for the first time, Gherkin PowerTools automatically detects it, counts your features, and presents a welcome notification with quick actions to launch the Walkthrough or the Health Dashboard.
- Contextual Feature Discovery: A lightweight, non-intrusive recommendation engine that analyzes your workflow in real-time. It seamlessly surfaces advanced features (like generating missing steps, auto-formatting tables, opening the command center, or checking project health) at the exact moment you need them, without disrupting your flow. Includes "Don't show again" functionality.
- Historical Trend Analysis: Gherkin Health Dashboard now automatically tracks and persists lightweight historical snapshots of your project metrics in the workspace state. It visualizes project evolution (complexity, maintainability, technical debt) over time using interactive charts without sending any data off your machine. Configure retention policies or disable it entirely in settings.
- Command Line Interface (CLI): Gherkin PowerTools now includes a powerful, standalone CLI (
gherkin-pt) that brings the Workspace Intelligence Engine to your terminal and CI/CD pipelines.- Run
npx gherkin-pt analyzeto enforce Gherkin structural validity and block missing Python steps in Pull Requests. - Run
npx gherkin-pt format --checkto enforce team formatting rules in CI. - Run
npx gherkin-pt stats --jsonto export high-level project metrics.
- Run
🐛 Fixed
- Fixed an issue where the new Gherkin Health Dashboard failed to load the charting library in some VS Code environments due to
acquireVsCodeApistrictness.
v1.8.0: Merge pull request #251 from carlos-camara/release/1.8.0
🚀 Added
-
Gherkin Health Dashboard: Redesigned the Statistics feature into a comprehensive Gherkin Health Dashboard that measures Complexity, Maintainability, and Technical Debt (unused/duplicate/undefined steps). The dashboard operates in
$O(1)$ time by leveraging the new in-memoryWorkspaceGraph. Includes a premium Glassmorphism UI redesign with fluid animations and responsive states. -
Recommendation Engine: Introduced a dedicated expert rules engine (
RecommendationEngine) that statically analyzes your project and provides actionable insights (e.g. flagging Undefined Steps, Ambiguous Steps, Duplicated Steps, and Oversized Scenarios). - Integrated Step Analysis: The legacy "Analyze Step Definitions" command has been fully integrated into the Gherkin Health Dashboard for a unified experience.
-
Smart Context-Aware Completion: Python Behave step autocomplete is now incredibly smart. Instead of sorting suggestions alphabetically, Gherkin PowerTools now uses an intelligent ranking algorithm that tracks your recent usage, understands the current active feature, and prioritizes steps based on contextual tag affinity.
This makes writing scenarios significantly faster as the most relevant steps are always at the top of the list. -
Centralized AST Repository: Completely redesigned the internal Gherkin parsing architecture. The extension now uses a centralized
AstRepositorythat caches the parsed Abstract Syntax Tree per document version.
This eliminates redundant CPU-intensive parsing operations across multiple features (formatting, linting, hover, autocomplete), drastically reducing CPU usage and improving editor responsiveness, especially in large.featurefiles. - Thundering Herd Protection: The new parsing architecture prevents multiple language features from simultaneously triggering parsing on the exact same keystroke, creating a perfectly smooth typing experience.
-
Parser Diagnostics & Performance Metrics: A new lightweight metrics engine that tracks parsing duration, cache hit ratios, document complexity, and parser failures in real-time. Enable via
gherkinPowerTools.diagnostics.metricsEnabledand view using the Show Developer Metrics command. -
Workspace Relationship Graph: Implemented an event-driven
WorkspaceGraphthat maps structural relationships between Features, Scenarios, Rules, and Python Step Definitions in memory. This enables O(1) query capabilities for "Go To Definition" and "Hover" operations, entirely eliminating redundant regex scanning across the workspace. -
Step Definition Analysis Dashboard: Added a comprehensive, interactive webview dashboard (
Gherkin PowerTools: Analyze Step Definitions) to help you keep your Python steps clean.
It proactively indexes the workspace to detect unused steps (grouped by Python file), duplicated implementations, ambiguous step usages, and suspiciously similar regex patterns.
Features click-to-navigate for all file references.
v1.7.9: Merge pull request #249 from carlos-camara/release/1.7.9
🚀 Added
- Live Step Tracking: The Test Explorer now visually animates the execution of your scenarios. As Behave runs your tests in the background, the exact step currently executing lights up dynamically in your
.featurefile! - On-the-Fly Context Snapshot: The Test Explorer now automatically inspects your Behave
contextat the end of every scenario. A beautifully formatted snapshot of your final variables is instantly injected into the Test Output panel, eliminating the need to attach a debugger just to see internal state. - Centralized Workspace Event Bus: Implemented a robust internal event bus (
src/eventBus.ts) to decouple file watchers and VS Code workspace events from feature modules. This architecture prevents memory leaks, ensures unified event processing, and simplifies the addition of new workspace-aware features.
✨ Improved
- Test Explorer Navigation: Clicking on a Scenario or Feature in the Test Explorer now intuitively navigates directly to its definition in the
.featurefile instead of jumping to the underlying Python step implementation. - Execution Output Clutter: When a scenario fails during a test run, the error message and stack trace are no longer expanded automatically in the editor. They remain collapsed by default to prevent visual clutter, and can be viewed by explicitly clicking the error in the Test Explorer.
🐛 Fixed
- Forceful Test Cancellation: Fixed an issue where clicking the "Stop" button in the Test Explorer wouldn't reliably terminate frozen or long-running tests. The runner now uses a forceful
SIGKILLsignal to guarantee the underlying Python process is immediately destroyed. - Test Explorer Console Output: Fixed an issue where
print()statements and standard output were hidden during Test Explorer executions. The extension now forces Behave to stream all output natively (--no-capture), ensuring that prints are immediately visible in the VS Code Test Results panel, even for passing scenarios. - Windows CI Flakiness: Fixed a critical race condition in the End-to-End test suite on Windows.
SymbolCachenow automatically invalidates its index and performs a deterministic synchronous scan wheneverstepGlobsconfiguration changes, rather than relying on unreliable file-system creation events.
v1.7.8: Merge pull request #229 from carlos-camara/release/1.7.8
🚀 Added
- Command Center: A unified interactive QuickPick menu to access all extension capabilities (formatting, execution, debugging, step navigation, and diagnostics) from a single place. Open it via
Cmd+Shift+P(Mac) orCtrl+Shift+P(Windows/Linux) -> "Gherkin PowerTools: Command Center". - Native Test Explorer Integration: Replaced the legacy CodeLens execution buttons with a full, native integration into the VS Code Testing sidebar (Test Explorer). You can now view, run, and debug Features, Rules, Scenarios, and Examples from a dedicated hierarchical tree.
- Examples Execution: You can now execute and debug individual rows within
Examplestables! The extension injects non-intrusive Run (▶) and Debug (🐞) icons aligned to the left of each data row in the editor, and lists them as separate test nodes in the Test Explorer. - Interactive Execution Arguments Persistence: Added a dedicated
Edit Behave args & Runtoolbar button (pencil icon) in the Test Explorer. It provides an interactive dialog letting you choose whether to save custom parameters (e.g.,--tags=@wip) permanently to Workspace Settings or keep them volatile for the current session. - Security & Reliability Hardening for Execution: Execution and debugging actions now use VS Code Tasks and array-based
ProcessExecutionAPIs, entirely eliminating shell injection vulnerabilities for malicious or complex file paths.
Additionally, interpreter detection now dynamically prioritizes your activems-python.pythonenvironment to guarantee reliability. - Test Explorer Real-Time Tree Updates: The Testing sidebar tree now refreshes as you type in a
.featurefile, without requiring a save. The internal controller subscribes to text changes with a 400 ms debounce, so new, renamed, or deleted scenarios appear instantly. - Instant Activation (O(1)): The extension now activates instantly upon opening VS Code. Heavy workspace parsing (Python steps and Feature file tagging) has been successfully offloaded to background threads.
This ensures that features like formatting and syntax highlighting are immediately available without blocking the extension host, dramatically improving startup times in massive enterprise projects. - Debug Console Auto-Focus: When launching a debug session via the Test Explorer, VS Code now automatically switches focus to the Debug Console panel so you immediately see Behave's output and any assertion errors without navigating there manually.
🐛 Fixed
- Linter Error Cascading: Fixed a bug where a single missing colon (e.g., in
Scenario) would completely break the internal Gherkin AST parser state, resulting in a massive wall of false-positive red squiggles on perfectly valid steps and tables below the error. The linter now intelligently suppresses cascading syntax errors to pinpoint exactly where the true structural error occurred. - Test Explorer Robustness: Refactored the test discovery engine to use a resilient, dialect-aware text scanner instead of relying solely on the AST parser. This guarantees that all valid scenarios will always display execution buttons, even if previous syntax errors in the file break the parser.
- Test Explorer Language Compatibility: Fixed a bug where test detection would silently fail if the VS Code language identifier was manually set to
gherkininstead offeature. The extension now fully supports both language IDs. - DevContainer Compatibility: Fixed a bug where saving interactive execution arguments permanently to Workspace Settings would fail to apply inside DevContainers or multi-root workspaces. The settings are now correctly scoped to the active Workspace Folder's
.vscode/settings.json. - Debug Mode: Test Results Pollution: Fixed a critical UX regression where triggering a debug session from the Test Explorer was incorrectly recorded as a completed test run inside the Test Results panel.
This caused previously-passing scenarios to appear asSkipped (—)after a debug session, destroying the valid green ✅ history. Debug sessions are now handled as a pure debugging workflow. They never write to the Test Results history. - Debug Session Spinner Stuck (Race Condition): Fixed a subtle race condition where the debug session started so quickly that
onDidStartDebugSessionfired before the extension's listener was registered — causing the Test Explorer spinner to never stop. The listener is now registered beforestartDebugging()is awaited, guaranteeing the event is never missed. - Debug Session Stuck on Failure: Resolved a persistent issue where, if a Behave scenario failed during a debug session, the Test Explorer spinner would remain active indefinitely. The fix uses object-identity tracking (comparing
sessionreferences, not string names) to reliably detect session termination, since the Python extension may rename debug session metadata internally. - Edit Args Applied Uniformly: Confirmed and documented that custom execution arguments are consistently applied to both
RunandDebuginvocations, as both share the same argument resolution pipeline inexecution.ts.
🧹 Maintenance
- Dead Code Removal: Removed 10 temporary scratch JavaScript files (
test_parse_error.js,test_linter_debug.js, etc.) from the project root that accumulated during internal debugging sessions. - Test File Cleanup: Removed unused import declarations and unused parameters from
config-listener.test.tsandlinter.test.tsto achieve zero warnings under--noUnusedLocals --noUnusedParametersTypeScript compiler flags.
v1.7.7
What's Changed
📖 Documentation
- docs: sync mkdocs pages with latest behave debugging changes by @carlos-camara in #187
- chore: add reusable release template and PR auto-categorization by @carlos-camara in #188
Full Changelog: v1.7.6...v1.7.7
v1.7.6
What's Changed
- Refactor: Rebuild FeatureCache around workspace.fs and live documents by @carlos-camara in #157
- feat: Make semantic linter rules fully dialect-aware (i18n) by @carlos-camara in #158
- Refactor: Replace line-based range formatting with AST-scoped atomic formatting by @carlos-camara in #159
- feat(formatter): Remove undocumented tag reordering and decouple from wrapping by @carlos-camara in #161
- refactor(providers): Improve semantic matching and resolve step ambiguity by @carlos-camara in #162
- chore(github): add structured issue forms and streamline contribution workflow by @carlos-camara in #164
- chore(metadata): audit and improve Marketplace package.json metadata by @carlos-camara in #166
- feat(ux): implement interactive VS Code walkthrough for user onboarding by @carlos-camara in #168
- build(deps): bump actions/setup-python from 5 to 6 by @dependabot[bot] in #171
- build(deps): bump actions/checkout from 4 to 7 by @dependabot[bot] in #172
- build(deps-dev): bump c8 from 11.0.0 to 12.0.0 by @dependabot[bot] in #173
- build(deps): bump @cucumber/messages from 34.0.1 to 34.1.0 by @dependabot[bot] in #174
- feat: Implement shared project-level configuration (.gherkin-powertoolsrc.json) by @carlos-camara in #176
- feat: Add Run and Edit CodeLens for Behave execution by @carlos-camara in #178
Full Changelog: v1.7.5...v1.7.6