299 lines
13 KiB
Org Mode
299 lines
13 KiB
Org Mode
#+TITLE: Ruby layer
|
||
|
||
#+TAGS: general|layer|multi-paradigm|programming
|
||
|
||
[[file:img/ruby.png]]
|
||
|
||
* Table of Contents :TOC_5_gh:noexport:
|
||
- [[#description][Description]]
|
||
- [[#features][Features:]]
|
||
- [[#install][Install]]
|
||
- [[#backends][Backends]]
|
||
- [[#robe][Robe]]
|
||
- [[#language-server-protocol][Language Server Protocol]]
|
||
- [[#prerequisites][Prerequisites]]
|
||
- [[#ruby-version-management][Ruby version management]]
|
||
- [[#test-runner][Test runner]]
|
||
- [[#key-bindings][Key bindings]]
|
||
- [[#ruby-enh-ruby-mode-robe-inf-ruby-ruby-tools][Ruby (enh-ruby-mode, robe, inf-ruby, ruby-tools)]]
|
||
- [[#debugger][Debugger]]
|
||
- [[#bundler][Bundler]]
|
||
- [[#rubocop][RuboCop]]
|
||
- [[#tests][Tests]]
|
||
- [[#rspec-mode][RSpec-mode]]
|
||
- [[#ruby-test-mode][Ruby-test-mode]]
|
||
- [[#minitest-mode][minitest-mode]]
|
||
- [[#toggles][Toggles]]
|
||
- [[#rake][Rake]]
|
||
- [[#refactor][Refactor]]
|
||
- [[#seeing-is-believing][Seeing is believing]]
|
||
- [[#layer-options][Layer options]]
|
||
|
||
* Description
|
||
This layer provides support for the Ruby programming language.
|
||
|
||
** Features:
|
||
- Version manager (rbenv, rvm or chruby)
|
||
- Integration with bundler
|
||
- Test runner (ruby-test and rspec)
|
||
- Rake runner
|
||
- Linter (rubocop)
|
||
- Interactive REPL and code navigation (robe)
|
||
|
||
* Install
|
||
To use this configuration layer, add it to your =~/.spacemacs=. You will need to
|
||
add =ruby= to the existing =dotspacemacs-configuration-layers= list in this
|
||
file.
|
||
|
||
This layer supports two different Ruby modes: Emacs's built-in Ruby Mode and
|
||
[[https://github.com/zenspider/enhanced-ruby-mode][enh-ruby-mode]]. By default the built-in Ruby mode is enabled. To switch to the
|
||
=enh-ruby-mode= set =ruby-enable-enh-ruby-mode= to t:
|
||
|
||
#+BEGIN_SRC emacs-lisp
|
||
(defun dotspacemacs-configuration-layers ()
|
||
'((ruby :variables ruby-enable-enh-ruby-mode t)))
|
||
#+END_SRC
|
||
|
||
** Backends
|
||
*** Robe
|
||
The default Ruby-mode backend. See Prerequisites for the necessary Gems to support Robe.
|
||
|
||
*** Language Server Protocol
|
||
IDE-like backend for Ruby. The only prerequisite gem is =solargraph= which can be
|
||
installed globally with:
|
||
|
||
#+BEGIN_SRC sh
|
||
gem install solargraph
|
||
#+END_SRC
|
||
|
||
LSP also supports the DAP debugger which will be automatically configured upon
|
||
using the LSP backend. Dap-mode can be setup here:
|
||
[[https://github.com/emacs-lsp/dap-mode#ruby]]
|
||
|
||
** Prerequisites
|
||
Some of the advanced features supported by this layer depend on external gems
|
||
that need to be installed in the context of your project (see below for guidance
|
||
based on your version manager):
|
||
- =pry= and =pry-doc= are required for *jump to definition* and *code documentation* (=robe-mode=)
|
||
- =ruby_parser= is required for *goto-step_definition* in =feature-mode=
|
||
- =rubocop= is required for rubocop integration
|
||
- =seeing_is_believing= helps you evaluate code inline
|
||
- =solargraph= is required for using the language server protocol in =ruby-mode=
|
||
|
||
You can install the gems in the context of your current project by
|
||
adding them to the =Gemfile=, e.g.:
|
||
|
||
#+BEGIN_SRC ruby
|
||
gem 'pry'
|
||
#+END_SRC
|
||
|
||
or on the command line (please refer to your ruby version manager
|
||
specific documentation for details and caveats):
|
||
|
||
#+BEGIN_SRC sh
|
||
gem install pry
|
||
#+END_SRC
|
||
|
||
** Ruby version management
|
||
This layer supports [[https://rvm.io/][RVM]], [[https://github.com/rbenv/rbenv][Rbenv]], and [[https://github.com/postmodern/chruby][Chruby]]. You can choose the default version
|
||
manager by setting the variable =ruby-version-manager= in your dotfile, for
|
||
example:
|
||
|
||
#+BEGIN_SRC emacs-lisp
|
||
(defun dotspacemacs-configuration-layers ()
|
||
'((ruby :variables ruby-version-manager 'rvm)))
|
||
#+END_SRC
|
||
|
||
When a version manager is enabled it will use the currently activated ruby
|
||
except if a =.ruby-version= file exists in which case the ruby version of
|
||
this file is used.
|
||
=rvm= will also try to look for a =.rvmrc= and =gemfile=, the priority order is
|
||
=.rvmrc= then =.ruby-version= then =gemfile=.
|
||
|
||
Note: Only one version manager at a time can be enabled.
|
||
|
||
** Test runner
|
||
This layer supports =RSpec=, =ruby-test= and =minitest= test runners
|
||
(frameworks). By default =ruby-test= is used, to change to another frameworks
|
||
set the layer variable =ruby-test-runner=.
|
||
|
||
Example to set the test runner to =RSpec=:
|
||
|
||
#+BEGIN_SRC emacs-lisp
|
||
(defun dotspacemacs-configuration-layers ()
|
||
'((ruby :variables ruby-test-runner 'rspec)))
|
||
#+END_SRC
|
||
|
||
=Tip:= You can enable different test runners for different projects by using
|
||
directory local variables.
|
||
|
||
* Key bindings
|
||
** Ruby (enh-ruby-mode, robe, inf-ruby, ruby-tools)
|
||
|
||
| Key binding | Description |
|
||
|-------------+---------------------------------------------------|
|
||
| ~SPC m g g~ | go to definition (robe-jump) |
|
||
| ~SPC m h h~ | show documentation for method at point (robe-doc) |
|
||
| ~SPC m s b~ | send buffer |
|
||
| ~SPC m s B~ | send buffer and switch to REPL |
|
||
| ~SPC m s f~ | send function definition |
|
||
| ~SPC m s F~ | send function definition and switch to REPL |
|
||
| ~SPC m s i~ | start REPL |
|
||
| ~SPC m s l~ | send line |
|
||
| ~SPC m s L~ | send line and switch to REPL |
|
||
| ~SPC m s r~ | send region |
|
||
| ~SPC m s R~ | send region and switch to REPL |
|
||
| ~SPC m s s~ | switch to REPL |
|
||
| ~SPC m x '~ | Change symbol or ="= string to ='= |
|
||
| ~SPC m x "~ | Change symbol or ='= string to ="= |
|
||
| ~SPC m x :~ | Change string to symbol |
|
||
| ~SPC m x h~ | toggle hash syntax in active region |
|
||
| ~%~ | [[https://github.com/redguardtoo/evil-matchit][evil-matchit]] jumps between blocks |
|
||
|
||
** Debugger
|
||
|
||
| Key binding | Description |
|
||
|---------------+---------------------------------|
|
||
| ~SPC m d d d~ | start debugging |
|
||
| ~SPC m d d l~ | debug last configuration |
|
||
| ~SPC m d d r~ | debug recent configuration |
|
||
|---------------+---------------------------------|
|
||
| ~SPC m d c~ | continue |
|
||
| ~SPC m d i~ | step in |
|
||
| ~SPC m d o~ | step out |
|
||
| ~SPC m d s~ | next step |
|
||
| ~SPC m d v~ | inspect value at point |
|
||
| ~SPC m d r~ | restart frame |
|
||
|---------------+---------------------------------|
|
||
| ~SPC m d .~ | debug transient state |
|
||
|---------------+---------------------------------|
|
||
| ~SPC m d a~ | abandon current session |
|
||
| ~SPC m d A~ | abandon all process |
|
||
|---------------+---------------------------------|
|
||
| ~SPC m d e e~ | eval |
|
||
| ~SPC m d e r~ | eval region |
|
||
| ~SPC m d e t~ | eval value at point |
|
||
|---------------+---------------------------------|
|
||
| ~SPC m d S s~ | switch session |
|
||
| ~SPC m d S t~ | switch thread |
|
||
| ~SPC m d S f~ | switch frame |
|
||
|---------------+---------------------------------|
|
||
| ~SPC m d I i~ | inspect |
|
||
| ~SPC m d I r~ | inspect region |
|
||
| ~SPC m d I t~ | inspect value at point |
|
||
|---------------+---------------------------------|
|
||
| ~SPC m d b b~ | toggle a breakpoint |
|
||
| ~SPC m d b c~ | change breakpoint condition |
|
||
| ~SPC m d b l~ | change breakpoint log condition |
|
||
| ~SPC m d b h~ | change breakpoint hit count |
|
||
| ~SPC m d b a~ | add a breakpoint |
|
||
| ~SPC m d b d~ | delete a breakpoint |
|
||
| ~SPC m d b D~ | clear all breakpoints |
|
||
|---------------+---------------------------------|
|
||
| ~SPC m d '_~ | Run debug REPL |
|
||
|---------------+---------------------------------|
|
||
| ~SPC m d w l~ | list local variables |
|
||
| ~SPC m d w o~ | goto output buffer if present |
|
||
| ~SPC m d w s~ | list sessions |
|
||
| ~SPC m d w b~ | list breakpoints |
|
||
|
||
** Bundler
|
||
|
||
| Key binding | Description |
|
||
|-------------+--------------------|
|
||
| ~SPC m b c~ | run bundle check |
|
||
| ~SPC m b i~ | run bundle install |
|
||
| ~SPC m b s~ | run bundle console |
|
||
| ~SPC m b u~ | run bundle update |
|
||
| ~SPC m b x~ | run bundle exec |
|
||
| ~SPC m b o~ | run bundle open |
|
||
|
||
** RuboCop
|
||
|
||
| Key binding | Description |
|
||
|---------------+------------------------------------------------------|
|
||
| ~SPC m R r f~ | Runs RuboCop on the currently visited file |
|
||
| ~SPC m R r F~ | Runs auto-correct on the currently visited file |
|
||
| ~SPC m R r d~ | Prompts from a directory on which to run RuboCop |
|
||
| ~SPC m R r D~ | Prompts for a directory on which to run auto-correct |
|
||
| ~SPC m R r p~ | Runs RuboCop on the entire project |
|
||
| ~SPC m R r P~ | Runs auto-correct on the project |
|
||
|
||
** Tests
|
||
*** RSpec-mode
|
||
When =ruby-test-runner= equals =rspec=.
|
||
|
||
| Key binding | Description |
|
||
|---------------+--------------------------------------------------------|
|
||
| ~SPC m t a~ | run all specs |
|
||
| ~SPC m t b~ | run current spec file |
|
||
| ~SPC m t c~ | run the current spec file and subsequent ones |
|
||
| ~SPC m t d~ | run tests in a directory |
|
||
| ~SPC m t e~ | mark example as pending |
|
||
| ~SPC m t f~ | run method |
|
||
| ~SPC m t l~ | run last failed spec |
|
||
| ~SPC m t m~ | run specs related to the current buffer |
|
||
| ~SPC m t r~ | re-run last spec |
|
||
| ~SPC m t t~ | run spec at pointer |
|
||
| ~SPC m t TAB~ | toggle between spec's and target's buffer |
|
||
| ~SPC m t ~~ | toggle between spec's and target's buffer find example |
|
||
|
||
*** Ruby-test-mode
|
||
When =ruby-test-runner= equals =ruby-test=.
|
||
|
||
| Key binding | Description |
|
||
|-------------+---------------------|
|
||
| ~SPC m t b~ | run test file |
|
||
| ~SPC m t t~ | run test at pointer |
|
||
|
||
*** minitest-mode
|
||
When =ruby-test-runner= equals =minitest=.
|
||
|
||
| Key binding | Description |
|
||
|-------------+---------------------------|
|
||
| ~SPC m t a~ | run all tests |
|
||
| ~SPC m t b~ | run current file |
|
||
| ~SPC m t r~ | repeat last test command |
|
||
| ~SPC m t s~ | run test for current file |
|
||
|
||
** Toggles
|
||
|
||
| Key binding | Description |
|
||
|-------------+------------------------------------------------------|
|
||
| ~SPC m T '~ | Toggle quotes of current string (only built-in mode) |
|
||
| ~SPC m T {~ | Toggle style of current block (only built-in mode) |
|
||
|
||
** Rake
|
||
|
||
| Key binding | Description |
|
||
|-------------+---------------------------------|
|
||
| ~SPC m k k~ | Runs rake |
|
||
| ~SPC m k r~ | Re-runs the last rake task |
|
||
| ~SPC m k R~ | Regenerates the rake cache |
|
||
| ~SPC m k f~ | Finds definition of a rake task |
|
||
|
||
** Refactor
|
||
|
||
| Key binding | Description |
|
||
|---------------+------------------------|
|
||
| ~SPC m r R m~ | Extract to method |
|
||
| ~SPC m r R v~ | Extract local variable |
|
||
| ~SPC m r R c~ | Extract constant |
|
||
| ~SPC m r R l~ | Extract to let (rspec) |
|
||
|
||
** Seeing is believing
|
||
|
||
| Key binding | Description |
|
||
|---------------+----------------------------------|
|
||
| ~<SPC> m @ @~ | Run seeing is believing |
|
||
| ~<SPC> m @ c~ | Clear seeing is believing output |
|
||
|
||
* Layer options
|
||
|
||
| Variable | Default value | Description |
|
||
|------------------------------------+---------------+----------------------------------------------------------------------------------------------|
|
||
| =ruby-enable-enh-ruby-mode= | =nil= | If non-nil, use =enh-ruby-mode= package instead of the built-in Ruby Mode. |
|
||
| =ruby-version-manager= | =nil= | If non nil, defines the Ruby version manager.Possible values are =rbenv=, =rvm= or =chruby=. |
|
||
| =ruby-test-runner= | =ruby-test= | Test runner to use. Possible values are =ruby-test=, =minitest= or =rspec=. |
|
||
| =ruby-highlight-debugger-keywords= | =t= | If non-nil, enable highlight for debugger keywords. |
|
||
| =ruby-backend= | =robe= | Defines the backend for IDE feature. Possible values are =robe= or =lsp=. |
|