Skip to content

Releases: carlos-camara/vscode-gherkin-powertools

v1.8.5: Merge pull request #370 from carlos-camara/release/1.8.5

Choose a tag to compare

@github-actions github-actions released this 24 Aug 20:02
62628bf

🚀 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.json ledger, 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 File command. Utilizing VS Code's SourceFixAll API, 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.rules now accepts configuration objects (e.g., { "severity": "error", "maxSteps": 20 }), allowing teams to easily tweak subjective thresholds like maxSteps without 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 stepGlobs configuration.
    The extension now respects your workspace architecture instead of blindly writing to features/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/gherkin and @cucumber/messages to 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.enabledRules and antiPatterns.rules configuration objects with a single, authoritative gherkinPowerTools.rules dictionary. All diagnostic identifiers have been standardized to kebab-case across 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 internal diagnosticRegistry and 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 or stepDefinitionsUpdated) 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.enabled is set to false, the extension now natively suppresses debounce timers, avoids AstRepository parsing, 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 metricsEnabled setting 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 Evictions and Cache 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 centralized gherkinPowerTools.rules configuration,
    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

Choose a tag to compare

@github-actions github-actions released this 22 Aug 14:40
1dde54d

💅 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 FeatureDiscoveryService that acts as the single source of truth for all *.feature files 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 BehaveFileDiscoveryService now 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 atomic executeTransaction queue 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. DeferredBootstrap now orchestrates initialization using isolated Capabilities rather than a monolithic Promise.all().
  • Stable Parser Error Contract: Introduced a unified GherkinParseError interface across the parser, linter, graph, and statistics engines. This strictly normalizes @cucumber/gherkin composite errors, eliminating cascading crashes during malformed document edits.
  • Syntax Errors Anti-Pattern: The BDD Anti-pattern Detection Engine now actively surfaces parser syntax-errors to block execution on invalid Gherkin files.
  • Cross-Platform Resource Canonicalization: Redesigned internal cache mechanisms and Graph queries to use a strict ResourceIdentity abstraction. 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 Workspace command 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 .feature files 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 QuickPick folder 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.yml into a decoupled, dual-job workflow. Unprivileged jobs build the extension, while a privileged job publishes it, ensuring that no npm install or build scripts ever have access to the GITHUB_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.json against 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

Choose a tag to compare

@github-actions github-actions released this 18 Aug 18:27
a77927e

🚀 Added

  • Secure Execution Model: Redesigned Behave test execution (gherkinPowerTools.behave.execution) to use structured arguments and spawn({ 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.localExecutable as 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 F2 rename provider is now fully responsible for Gherkin step renaming, enabling native previews, robust WorkspaceEdit undo 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.automaticallyOpenPeekView setting. 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 PowerTools submenu. Additionally, the Rename Step command 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 gherkinPowerTools namespace and the Gherkin PowerTools category for consistency in the Command Palette. The legacy gherkin-powertools.showImpactDetails command has been deprecated and aliased to gherkinPowerTools.showImpactDetails to prevent breaking existing keybindings.
  • Deferred Activation Lifecycle: Replaced insecure setTimeout usage with a deterministic DeferredBootstrap state 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-pt execution 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/gherkin and @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.command setting 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/gherkin when executed via npx. The build script now natively injects root workspace dependencies into the CLI's package.json.
  • Test Explorer Integration: Removed an invalid global testing.showCoverageInExplorer configuration 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

Choose a tag to compare

@github-actions github-actions released this 05 Aug 18:51
95b79dc

🚀 Added

  • Command Line Interface (CLI) Conformance: The standalone CLI now features 100% execution parity with the VS Code extension by leveraging a unified defaults.ts configuration 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.rules to set severities (error, warning, info, hint, off) for individual rules.
    • Safely integrates with the Real-time Linter to prevent double-squiggles on feature files.
  • Case-Insensitive URI Normalization: Implemented robust case-insensitive path normalization across the WorkspaceGraph and SymbolCache for 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 And or But now accurately inherit their parent Given, When, or Then semantic 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. Added Export History as JSON and Clear History commands.
  • Performance Optimization: Removed the computationally heavy suspiciousSimilarities check from the background analyzer and removed ts-node dependency to improve extension host memory usage and reduce bundle size.

🐛 Fixed

  • UI Error Deduplication: Deduplicated consecutive lines in test error output to prevent behave from 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

Choose a tag to compare

@github-actions github-actions released this 02 Aug 23:00
f07539c

🚀 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 the gherkinPowerTools.impactAnalysis.enabled setting.
  • 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 analyze to enforce Gherkin structural validity and block missing Python steps in Pull Requests.
    • Run npx gherkin-pt format --check to enforce team formatting rules in CI.
    • Run npx gherkin-pt stats --json to export high-level project metrics.

🐛 Fixed

  • Fixed an issue where the new Gherkin Health Dashboard failed to load the charting library in some VS Code environments due to acquireVsCodeApi strictness.

v1.8.0: Merge pull request #251 from carlos-camara/release/1.8.0

Choose a tag to compare

@github-actions github-actions released this 30 Jul 22:50
2e48116

🚀 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-memory WorkspaceGraph. 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 AstRepository that 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 .feature files.
  • 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.metricsEnabled and view using the Show Developer Metrics command.
  • Workspace Relationship Graph: Implemented an event-driven WorkspaceGraph that 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

Choose a tag to compare

@github-actions github-actions released this 29 Jul 18:35
470e300

🚀 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 .feature file!
  • On-the-Fly Context Snapshot: The Test Explorer now automatically inspects your Behave context at 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 .feature file 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 SIGKILL signal 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. SymbolCache now automatically invalidates its index and performs a deterministic synchronous scan whenever stepGlobs configuration changes, rather than relying on unreliable file-system creation events.

v1.7.8: Merge pull request #229 from carlos-camara/release/1.7.8

Choose a tag to compare

@github-actions github-actions released this 28 Jul 22:03
62f225d

🚀 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) or Ctrl+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 Examples tables! 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 & Run toolbar 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 ProcessExecution APIs, entirely eliminating shell injection vulnerabilities for malicious or complex file paths.
    Additionally, interpreter detection now dynamically prioritizes your active ms-python.python environment to guarantee reliability.
  • Test Explorer Real-Time Tree Updates: The Testing sidebar tree now refreshes as you type in a .feature file, 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 gherkin instead of feature. 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 as Skipped (—) 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 onDidStartDebugSession fired before the extension's listener was registered — causing the Test Explorer spinner to never stop. The listener is now registered before startDebugging() 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 session references, 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 Run and Debug invocations, as both share the same argument resolution pipeline in execution.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.ts and linter.test.ts to achieve zero warnings under --noUnusedLocals --noUnusedParameters TypeScript compiler flags.

v1.7.7

Choose a tag to compare

@github-actions github-actions released this 22 Jul 19:19
5609953

What's Changed

📖 Documentation

Full Changelog: v1.7.6...v1.7.7

v1.7.6

Choose a tag to compare

@github-actions github-actions released this 20 Jul 16:14
b85d013

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