Lack of completions (possibly because of definition in C file)
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
- Start the Ruby LSP using a certain editor
- Open a Ruby file
- Paste one of the examples
- 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.
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.
Is it possible to index first and then replace with existing RBS definitions?
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.