This repository has been archived on 2024-10-22. You can view files and clone it, but cannot push or open issues or pull requests.
spacemacs/layers/+lang/ruby/README.org

301 lines
13 KiB
Org Mode
Raw Normal View History

#+TITLE: Ruby layer
2015-06-10 16:44:30 +00:00
#+TAGS: general|layer|multi-paradigm|programming
2019-05-05 17:26:40 +00:00
[[file:img/ruby.png]]
2015-06-10 16:44:30 +00:00
2019-05-07 20:05:06 +00:00
* Table of Contents :TOC_5_gh:noexport:
2017-05-22 14:16:12 +00:00
- [[#description][Description]]
- [[#features][Features:]]
2017-05-22 14:16:12 +00:00
- [[#install][Install]]
- [[#backends][Backends]]
- [[#robe][Robe]]
- [[#language-server-protocol][Language Server Protocol]]
2017-05-22 14:16:12 +00:00
- [[#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]]
2017-05-22 14:16:12 +00:00
- [[#bundler][Bundler]]
- [[#rubocop][RuboCop]]
- [[#tests][Tests]]
- [[#rspec-mode][RSpec-mode]]
- [[#ruby-test-mode][Ruby-test-mode]]
- [[#minitest-mode][minitest-mode]]
2018-07-09 20:59:05 +00:00
- [[#toggles][Toggles]]
2017-05-22 14:16:12 +00:00
- [[#rake][Rake]]
2016-10-29 19:58:26 +00:00
- [[#refactor][Refactor]]
2015-10-17 07:45:03 +00:00
- [[#seeing-is-believing][Seeing is believing]]
- [[#layer-options][Layer options]]
2015-06-10 16:44:30 +00:00
* Description
This layer provides support for the Ruby programming language.
** Features:
2018-09-19 03:54:47 +00:00
- 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)
2015-06-10 16:44:30 +00:00
* 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.
2015-06-10 16:44:30 +00:00
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]]
2015-06-10 16:44:30 +00:00
** 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=
2015-09-08 23:03:42 +00:00
- =rubocop= is required for rubocop integration
2015-10-17 07:45:03 +00:00
- =seeing_is_believing= helps you evaluate code inline
- =solargraph= is required for using the language server protocol in =ruby-mode=
2015-06-10 16:44:30 +00:00
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
2015-06-10 16:44:30 +00:00
#+END_SRC
** Ruby version management
2017-04-25 15:42:58 +00:00
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:
2015-06-10 16:44:30 +00:00
#+BEGIN_SRC emacs-lisp
(defun dotspacemacs-configuration-layers ()
'((ruby :variables ruby-version-manager 'rvm)))
2015-06-10 16:44:30 +00:00
#+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.
2015-06-10 16:44:30 +00:00
** Test runner
2016-10-11 19:24:57 +00:00
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.
2015-06-10 16:44:30 +00:00
* Key bindings
** Ruby (enh-ruby-mode, robe, inf-ruby, ruby-tools)
2015-06-10 16:44:30 +00:00
2018-07-09 21:32:00 +00:00
| 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 |
2018-09-19 03:54:47 +00:00
| ~SPC m x '~ | Change symbol or ="= string to ='= |
| ~SPC m x "~ | Change symbol or ='= string to ="= |
2018-07-09 21:32:00 +00:00
| ~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 |
2015-06-10 16:44:30 +00:00
** 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 |
|---------------+------------------------------------------------------|
2019-05-10 14:24:39 +00:00
| ~SPC m = r~ | Format the current buffer using RuboCop |
| ~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=.
2015-06-10 16:44:30 +00:00
| Key binding | Description |
|-------------+---------------------|
| ~SPC m t b~ | run test file |
| ~SPC m t t~ | run test at pointer |
2016-03-01 17:54:00 +00:00
2016-10-11 19:24:57 +00:00
*** 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 |
2018-07-09 20:59:05 +00:00
** 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) |
2018-07-09 20:59:05 +00:00
2016-02-29 19:24:52 +00:00
** 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 |
2016-10-29 19:58:26 +00:00
** 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) |
2015-10-17 07:45:03 +00:00
** Seeing is believing
| Key binding | Description |
2018-08-11 10:13:22 +00:00
|---------------+----------------------------------|
| ~<SPC> m @ @~ | Run seeing is believing |
| ~<SPC> m @ c~ | Clear seeing is believing output |
2015-10-17 07:45:03 +00:00
* Layer options
| Variable | Default value | Description |
|------------------------------------+---------------+----------------------------------------------------------------------------------------------|
2018-09-19 03:54:47 +00:00
| =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=. |