ruby-lsp icon indicating copy to clipboard operation
ruby-lsp copied to clipboard

Lack of completions (possibly because of definition in C file)

Open xbt573 opened this issue 11 months ago • 3 comments

Description

Ruby LSP Information

VS Code Version

1.96.2

Ruby LSP Extension Version

0.8.19

Ruby LSP Server Version

0.23.7

Ruby LSP Add-ons

Ruby Version

3.4.1

Ruby Version Manager

rbenv

Installed Extensions

Click to expand
  • LiveServer (5.7.9)
  • codetogether (2025.1.0)
  • go (0.44.0)
  • ruby-lsp (0.8.19)

Ruby LSP Settings

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

Reproduction steps

  1. Start the Ruby LSP using a certain editor
  2. Open a Ruby file
  3. Paste one of the examples
  4. See lack of completion

Code snippet or error message Digest::SHA2.hexdigest example:

require 'digest'

Digest::SHA2.hexd # <- try to autocomplete 'hexdigest'

Zlib example:

require 'zli # <- try to autocomplete 'zlib'

Both zlib module and hexdigest functions are defined inside C files, but have definition in RBS files.

xbt573 avatar Jan 31 '25 14:01 xbt573

Thank you for the report!

For anyone looking into this, the problem is that we currently don't use RBS for default gems. We index them directly from the Ruby installation. That means we can only index Ruby files and we miss definitions made in C.

We can't simply start indexing RBS because that will cause duplicate declarations to be inserted in the index, so we may need to look into dropping our indexing of the Ruby installation and rely on RBS only for default gems.

vinistock avatar Jan 31 '25 14:01 vinistock

Is it possible to index first and then replace with existing RBS definitions?

xbt573 avatar Jan 31 '25 14:01 xbt573

That would degrade indexing performance because we'd essentially be indexing the same thing twice. Ideally, if we can completely avoid reaching for the Ruby installation, then we can make indexing faster in addition to fixing the missing declarations.

vinistock avatar Jan 31 '25 15:01 vinistock