Skip to content

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

@SleeplessByte

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 needed

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions