Skip to content

Undefined Step warning for step when corresponding step definition string contains an escaped forward slash #122

@Drew-Daniels

Description

@Drew-Daniels

👓 What did you see?

Thanks for maintaining @cucumber/language-server! It's been a breeze to use and I really enjoy using it.

This behavior could be expected (and a weird edge case if anything), but I noticed a small issue where, when a step in a .feature file contains a forward slash, the corresponding step definition glue code isn't found by the language server, even when @cucumber/cucumber can successfully locate the corresponding step definition when the tests are run.

features/config.feature

Feature: Simple test

  Scenario: GET /config
    Given I am a user
    # Notice `/config` with a forward slash prefix
    When I send a request to /config
    Then the response should contain expected config

features/config.ts

import { Given, Then, When } from '@cucumber/cucumber';

Given('I am a user', async function () {
  // no-op
});

// Notice the escaped forward slash - which is a requirement for `@cucumber/cucumber` to match this step definition to the step referenced in the feature file.
When('I send a request to \\/config{}', async function (value: string) {
  // eslint-disable-next-line no-console
  console.log(`Sending request to ${value}`);
});

Then('the response should contain expected config', async function () {
  // no-op
});

✅ What did you expect to see?

I would expect that @cucumber/language-server could locate a step definition for a feature step with a forward slash, when @cucumber/cucumber is able to match the step definition to this step and run tests as expected.

📦 Which tool/library version are you using?

❯ node -v
v24.10.0

@cucumber/cucumber: 12.1.0
@cucumber/language-server: 1.7.0

❯ uname -v
Darwin Kernel Version 25.0.0: Wed Sep 17 21:42:08 PDT 2025; root:xnu-12377.1.9~141/RELEASE_ARM64_T8132
❯ nvim --version
NVIM v0.11.4
Build type: Release
LuaJIT 2.1.1761727121

🔬 How could we reproduce it?

Clone this reproduction repository, install dependencies, run the test suite, and verify that all tests run as expected.

git clone https://github.com/Drew-Daniels/cucumber-lsp-repro
cd cucumber-lsp-repro
npm i
npm run cucumber

However, open up features/simple-maths.feature in your editor (I am using neovim) and verify that the LSP generates a warning that the step definition for the When I send a request to /config line cannot be found.

Image

📚 Any additional context?

Here is my (abbreviated) nvim-lspconfig.lua file:

return {
	"neovim/nvim-lspconfig",
	config = function(_, _)
		local capabilities = require("blink.cmp").get_lsp_capabilities()
		-- TODO: Modularize configuration so that 'capabilities = capabilities' setting is used for every lsp
		--TODO: Deactivate eslint lsp when in an "ignored" directory so things are less noisy
		-- https://github.com/neovim/nvim-lspconfig/issues/2508
		local root_dir = vim.fs.root(0, ".git")
		local use_flat_config = false
		if root_dir ~= nil and vim.fn.filereadable(root_dir .. "/eslint.config.js") == 1 then
			use_flat_config = true
		end

		vim.lsp.config("cucumber_language_server", {
			capabilities = capabilities,
			settings = {
				cucumber = {
					glue = {
						-- Cucumber-JVM
						"src/test/**/*.java",
						-- Cucumber-Js
						"features/**/*.ts",
						"features/**/*.tsx",
						"features/**/*.js",
						"features/**/*.jsx",
						"step-definitions/**/*.ts",
						"test/features/**/*.ts",
						-- Behat
						"features/**/*.php",
						-- Behave
						"features/**/*.py",
						-- Pytest-BDD
						"tests/**/*.py",
						-- Cucumber Rust
						"tests/**/*.rs",
						"features/**/*.rs",
						-- Cucumber-Ruby
						"features/**/*.rb",
						-- SpecFlow
						"*specs*/**/*.cs",
						-- Godog
						"features/**/*_test.go",
					},
				},
			},
		})

		vim.lsp.enable({
			"cucumber_language_server",
		})
	end,
}

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions