Skip to content

CodeLens Run Test In Terminal doesn't work (on Windows) due to incorrectly escaped Regex #3759

Description

@SleeplessByte

Description

Ruby LSP Information

VS Code Version

1.104.1

Ruby LSP Extension Version

0.9.32

Ruby LSP Server Version

0.26.1

Ruby LSP Add-ons

  • RuboCop (unknown)

Ruby Version

3.1.4

Ruby Version Manager

none

Installed Extensions

Click to expand
  • Lisp (0.1.12)
  • code-spell-checker (4.2.6)
  • color-highlight (2.8.0)
  • errorlens (3.26.0)
  • exercism-cli (0.2.2)
  • gitlens (17.4.1)
  • jikiscript (1.0.0)
  • postcss (1.0.9)
  • prettier-vscode (11.0.0)
  • rails (0.22.0)
  • rainbow-csv (3.22.0)
  • react-native-ide (1.3.0)
  • remote-explorer (0.5.0)
  • remote-ssh (0.120.0)
  • remote-ssh-edit (0.87.0)
  • ruby-lsp (0.9.32)
  • vscode-eslint (3.0.16)
  • vscode-expo-tools (1.6.1)
  • vscode-github-actions (0.27.2)
  • vscode-graphql (0.13.2)
  • vscode-graphql-syntax (1.3.8)
  • vscode-tailwindcss (0.14.26)
  • vscode-versionlens (1.22.4)
  • vscode-yaml (1.18.0)
  • vscode-zipfs (3.0.0)
  • vsliveshare (1.0.5959)

Ruby LSP Settings

Click to expand
Workspace
{
  "indexing": {
    "includedPatterns": [
      "lib/**/*.rb",
      "test/**/*.rb"
    ]
  }
}
User
{
  "enabledFeatures": {
    "codeActions": true,
    "diagnostics": true,
    "documentHighlights": true,
    "documentLink": true,
    "documentSymbols": true,
    "foldingRanges": true,
    "formatting": false,
    "hover": true,
    "inlayHint": true,
    "onTypeFormatting": false,
    "selectionRanges": true,
    "semanticHighlighting": true,
    "completion": true,
    "codeLens": true,
    "definition": true,
    "workspaceSymbol": true,
    "signatureHelp": true,
    "typeHierarchy": true
  },
  "featuresConfiguration": {},
  "addonSettings": {},
  "rubyVersionManager": {
    "identifier": "none"
  },
  "customRubyCommand": "",
  "formatter": "auto",
  "linters": null,
  "bundleGemfile": "",
  "testTimeout": 30,
  "branch": "",
  "pullDiagnosticsOn": "both",
  "useBundlerCompose": false,
  "bypassTypechecker": false,
  "rubyExecutablePath": "",
  "indexing": {
    "includedPatterns": [
      "lib/**/*.rb",
      "test/**/*.rb"
    ]
  },
  "erbSupport": true,
  "featureFlags": {},
  "sigOpacityLevel": "1"
}

Reproduction steps

  1. Start the Ruby LSP using VS Code
  2. Open a Ruby test file with a single test
  3. Click "Run Test in Terminal"
  4. Terminal reports no tests ran
class TestNothing < Minitest::Test
  def test_nothing
    refute_nil true
  end
end

The full file can be tested:

C:\Users\Derk-Jan\...snip...>bundle exec ruby -rC:/Ruby31-x64/lib/ruby/gems/3.1.0/gems/ruby-lsp-0.26.1/lib/ruby_lsp/test_reporters/minitest_reporter.rb -rC:/Ruby31-x64/lib/ruby/gems/3.1.0/gems/ruby-lsp-0.26.1/lib/ruby_lsp/test_reporters/test_unit_reporter.rb -Itest c:/Users/Derk-Jan/...snip.../test/test_nothing.rb --name "/^TestNothing(#|::)/"
Run options: --name "/^TestNothing(#|::)/" --seed 56682

# Running:

.

Finished in 0.015750s, 63.4917 runs/s, 63.4917 assertions/s.

Simplifying this command we see:

bundle exec ruby -rPathToLspProvidedReporter.rb -rPathToAnotherLspProvidedReporter.rb -Itest PathToFile --name "/^TestClassName(#|::)/"

There are three paths:

  • PathToLspProvidedReporter
  • PathToAnotherLspProvidedReporter
  • PathToFile

There is one regex matcher:

  • /^TestNothing(#|::)/

For a single test, we get:

C:\Users\Derk-Jan\...snip...>bundle exec ruby -rC:/Ruby31-x64/lib/ruby/gems/3.1.0/gems/ruby-lsp-0.26.1/lib/ruby_lsp/test_reporters/minitest_reporter.rb -rC:/Ruby31-x64/lib/ruby/gems/3.1.0/gems/ruby-lsp-0.26.1/lib/ruby_lsp/test_reporters/test_unit_reporter.rb -Itest c:/Users/Derk-Jan/...snip.../test_nothing.rb --name "/^TestNothing#test_nothing\$/"
Run options: --name "/^TestNothing#test_nothing\\$/" --seed 33369

[...]

Finished in 0.010229s, 0.0000 runs/s, 0.0000 assertions/s.

0 runs, 0 assertions, 0 failures, 0 errors, 0 skips
Nothing ran for filter: /^TestNothing#test_nothing\$/

The issue can be seen in the --name argument:

/^TestNothing#test_nothing\\$/

Removing the extra slash makes the entire command work again.

Metadata

Metadata

Assignees

No one assigned

    Labels

    bugSomething isn't workinghelp-wantedExtra attention is neededpinnedThis issue or pull request is pinned and won't be marked as stale

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions