67

I'm pretty new to Visual Studio Code, and I'm trying to edit some Ruby code. I installed Ruby support, and I enabled the language server, but Ctrl-clicking on a function name doesn't work, and neither does F12. Both of these features work fine for Python code.

How can I navigate from a function call to its definition in Ruby code?

Here's the Ruby code I tried:

def foo
    puts "In foo."
end

foo()

Here are my settings:

{
    "explorer.confirmDelete": false,
    "explorer.confirmDragAndDrop": false,
    "terminal.integrated.fontSize": 15,
    "git.confirmSync": false,
    "ruby.useLanguageServer": true,
    "editor.rulers": [80, 120]
}

Here's the Python code that works fine:

def foo():
    print('In foo.')


foo()
Don Kirkby
  • 53,582
  • 27
  • 205
  • 286

5 Answers5

139

Thanks to Chris's suggestion, I got a better error message. Following that lead, I found that Ruby's code navigation seems to require a second language server: solargraph. I don't know if you require both, but I can now navigate to Ruby definitions. I also have to autocomplete working.

Update [2022]

Coming back to this with VSCode 1.67.0 on Ubuntu 22.04, I no longer require solargraph. However, I did struggle a bit to figure out the exact steps to get it working:

  1. Open File: Preferences: Extensions.

  2. Search for Ruby by Peng Lv, and install it.

  3. Open File: Preferences: Settings.

  4. Click the button in the top right to open the JSON settings file: enter image description here

  5. Add these settings:

    {
        "ruby.useLanguageServer": true,
        "ruby.intellisense": "rubyLocate"
    }
    
  6. Restart VSCode.

Radix
  • 2,527
  • 1
  • 19
  • 43
Don Kirkby
  • 53,582
  • 27
  • 205
  • 286
  • 3
    This worked for me except that plugin doesnt navigate to constants definition. – Jay Teli Jan 19 '23 at 06:55
  • 1
    Make sure that the *VSCode Ruby* extension is also installed and enabled – Oz Ben-David Jan 19 '23 at 12:48
  • I just want to make a note, there are some settings that need to be entered in the json and can't be changed with just the GUI, these settings are not though. You can just find the settings by putting "ruby use language server" and "ruby intellisense" in the search. Saying to open the json and just copy paste this text is a much more complete set of instructions though so the answer does make sense this way, just want to let anyone who finds this know if they don't like manually editing the settings json file. – FuzzyNovaGoblin Jul 31 '23 at 14:10
27
  1. Try setting "ruby.intellisense": "rubyLocate" in your settings.
  2. check folder .vscode file on yout project-> settings.json -> {"ruby.intellisense": "rubyLocate"}
Ratan Tirkey
  • 271
  • 3
  • 4
  • 3
    I only needed to do step one. There wasn't a .vscode file in my project. I did have to quit VS Code and reopen it before right clicking revealed "Go to Definition." – Marty Jan 11 '22 at 15:40
5

Install Extension Ruby Solargraph

Eric.Hu0111
  • 61
  • 1
  • 4
4

In case this may help anyone else: Based on my own experience, you do need to have BOTH solargraph installed in your Rails repo/enabled in VSCode, AND have rubyLocate specified in your VSCode settings as your Ruby intellisense method. "Go to definition" didn't work for my Rails project with only solargraph installed, but once I set rubyLocate as the intellisense method (it was set to "false" by default) it started working.

  • "It started working". Okay. Does it also go-to-definition from `has_many :books` to `app/models/book.rb`? It doesn't seem to work in VSCode+SolarGraph+rubyLocate. vim-rails has been doing it for more than 10 years now – Eric Duminil Feb 28 '23 at 21:04
1

In VSCode, the navigating to a Ruby function definition is called "Go to Symbol in Editor...":

vsCodeSymbol

(Windows: Ctrl + Shift + O. Macs: Cmd + Shift + O).

This doesn't work out of the box with VSCode at the moment, but one lightweight extension that implements it is VSCode Ruby Symbols.

VSCodeRubySymbols

stwr667
  • 1,566
  • 1
  • 16
  • 31