Difference between revisions of "Ruby"

From WikEmacs
Jump to navigation Jump to search
(→‎See also: code folding)
 
(10 intermediate revisions by the same user not shown)
Line 1: Line 1:
 +
We'll show here how to configure Emacs as a productive environment for Ruby and Rails development.
 +
 +
Be also aware that [[Starter Kits]] like [[Prelude]] have many stuff pre-installed, and that [https://spacemacs.org/layers/+frameworks/ruby-on-rails/README.html Spacemacs has a Ruby layer].
 +
 
== ruby-mode ==
 
== ruby-mode ==
  
'''{{ModeLink|ruby-mode}}''' provides basic font-locking, indentation and navigation support for Ruby source code. It was first included in Emacs 23 (previously it was a third party package, maintained by Ruby's developers). While {{Mode|ruby-mode}} is fairly barebone package it could be augmented by a multitude of minor modes such as [http://github.com/rejeep/ruby-end ruby-end], ...
+
'''{{ModeLink|ruby-mode}}''' provides basic font-locking, indentation and navigation support for Ruby source code. It was first included in Emacs 23 (previously it was a third party package, maintained by Ruby's developers). While {{Mode|ruby-mode}} is fairly barebone package it could be augmented by a multitude of minor modes (see below).
 +
 
 +
== ruby-end - auto insert end statements ==
 +
 
 +
Just install [http://github.com/rejeep/ruby-end ruby-end] (in [[ELPA]]). Now ruby-end-mode will start alongside ruby-mode.
 +
 
 +
== Ruby on Rails ==
 +
 
 +
=== [[Rinari]] ===
 +
 
 +
[https://github.com/eschulte/rinari Rinari] (in melpa) stands for Rinari Is Not A Rails IDE. It is an Emacs minor mode for Rails that is actively maintained. 
 +
 
 +
Rinari features:
 +
 
 +
* for 'jumps' between Model, View, Controller and their RSpec examples and Test Unit tests,
 +
* as well as Cucumber steps and features.  
 +
* running of a console session with full Rails application loaded for interactive use,
 +
* SQL console,
 +
* starting of the web server (rails server).
 +
 
 +
For a list of keybindings, see [[Rinari]]. The [http://rinari.rubyforge.org/ official documentation] is alright, but for best information check out the source.
  
=== Ruby on Rails ===
+
=== Projectile-rails - navigation, rake tasks, console, etc ===
  
Let's configure Emacs as a productive environment for Rails development !
+
[[Projectile]] is a popular project management system. It allows to easily search files under a project, switch buffers pertaining to that project, switch to tests files, search in project (with <code>rgrep</code>, <code>ag</code>,…), and more. Now we can add Rails support with [https://github.com/asok/projectile-rails projectile-rails] (in melpa).
  
==== [[Rinari]] ====
+
With Projectile Rails you are able to:
  
Rinari stands for Rinari Is Not A Rails IDE. It is an Emacs minor mode for Rails that is actively maintained. For best results install it from the [https://github.com/eschulte/rinari git repo].
+
*  navigate through rails resources (controllers, views, helpers and so on)
 +
*    jump to ruby classes and template files
 +
*    run rake
 +
*    run rails console
 +
*    run rails dbconsole
 +
*    run rails generate
 +
*    run rails server
 +
*    open log files with auto-revert-mode on
 +
*    see rails keywords highlighted
 +
*    take advantage of zeus and spring preloaders
  
The official documentation is alright, but for best information check out the source. It allows for 'jumps' between Model, View, Controller and their RSpec examples and Test Unit tests, as well as Cucumber steps and features.
+
It can be a replacement for rinari.
  
Also, it allows for the running of a console session with full Rails application loaded for interactive use, SQL console, starting of the web server (rails server).
+
== Intelligent code navigation and completion with Robe ==
  
==== Syntax checking: flymake ====
+
[https://github.com/dgutov/robe Robe] (in MELPA) is a code assistance tool that uses a Ruby REPL subprocess with your application or gem code loaded, to provide information about loaded classes and modules, and where each method is defined.
 +
 
 +
To load it with ruby-mode:
 +
 
 +
<source lang="lisp">
 +
(require 'robe)
 +
(add-hook 'ruby-mode-hook 'robe-mode)
 +
</source>
 +
 
 +
If you are using rvm you may want to instruct robe to auto-trigger <code>rvm-activate-corresponding-ruby</code>:
 +
 
 +
<source lang="lisp">
 +
(defadvice inf-ruby-console-auto (before activate-rvm-for-robe activate)
 +
  (rvm-activate-corresponding-ruby))
 +
</source>
 +
 
 +
=== Code navigation ===
 +
 
 +
By default bound to '''M-.''' (robe-jump). It can be used to jump to definitions of various classes and methods.
 +
 
 +
=== Code completion ===
 +
 
 +
For intelligent completion robe can be integrated with company mode. Company mode is a modern and modular completion system for emacs which accepts a multitude of pluggable back-ends and front-ends to provide rich completions on the fly. Robe provides a backend to the completion in form of company-robe. This can be configured as follows :
 +
 
 +
<source lang="lisp">
 +
(global-company-mode t)
 +
(push 'company-robe company-backends)
 +
</source>
 +
 
 +
Now all you have to do is hit robe-start when you navigate into your project. After that at any point if you trigger company-robe you should be greeted with an intellisense like method definitions.
 +
 
 +
Completion will start automatically after you type a few letters. Use M-n, M-p, <tab> and <return> to complete. Search through the completions with C-s, C-r and C-o. Even the documentations are available right from the editor (Press F1 at any menu entry).
 +
 
 +
 
 +
[[File:Ruby-robe.png]]
 +
 
 +
== Syntax checking: flymake ==
  
 
See [[Flymake]], and install [https://github.com/purcell/flymake-ruby flymake-ruby] (in melpa).  
 
See [[Flymake]], and install [https://github.com/purcell/flymake-ruby flymake-ruby] (in melpa).  
Line 26: Line 95:
 
</source>
 
</source>
  
==== Ruby shell inside Emacs ====
+
[[File:Ruby-flymake.png]]
 +
 
 +
== Ruby shell inside Emacs ==
  
 
[https://github.com/nonsequitur/inf-ruby inf-ruby] provides a REPL buffer connected to a Ruby subprocess. It is available through the package manager. To bind to a shortcut, do something like:
 
[https://github.com/nonsequitur/inf-ruby inf-ruby] provides a REPL buffer connected to a Ruby subprocess. It is available through the package manager. To bind to a shortcut, do something like:
Line 34: Line 105:
 
</source>
 
</source>
  
==== RVM integration ====
+
See also: [[Shell]]
 +
 
 +
== RVM integration ==
  
 
Pick [https://github.com/senny/rvm.el rvm.el]. Once installed you will just have to call rvm-activate-corresponding-ruby and rvm.el will automatically pick up your ruby version and gemset from your <code>.rvmrc</code> file.
 
Pick [https://github.com/senny/rvm.el rvm.el]. Once installed you will just have to call rvm-activate-corresponding-ruby and rvm.el will automatically pick up your ruby version and gemset from your <code>.rvmrc</code> file.
Line 44: Line 117:
 
</source>
 
</source>
  
 +
[[File:Emacs-rvm.png]]
  
 
[[Category:Programming]]
 
[[Category:Programming]]
 
[[Category:Programming_languages]]
 
[[Category:Programming_languages]]
 +
 +
== See also ==
 +
 +
You might want to check the following pages to make the most out of Emacs:
 +
 +
* [[Git]], [[Github]] and [[Gitlab]]
 +
* [[Buffer_management]], code [[Folding]],
 +
* how Emacs helps in [[Discoverability]],
 +
* [[Compilation]] and [[Shell]]
  
 
== External links ==
 
== External links ==

Latest revision as of 10:34, 17 May 2017

We'll show here how to configure Emacs as a productive environment for Ruby and Rails development.

Be also aware that Starter Kits like Prelude have many stuff pre-installed, and that Spacemacs has a Ruby layer.

ruby-mode

ruby-mode provides basic font-locking, indentation and navigation support for Ruby source code. It was first included in Emacs 23 (previously it was a third party package, maintained by Ruby's developers). While ruby-mode is fairly barebone package it could be augmented by a multitude of minor modes (see below).

ruby-end - auto insert end statements

Just install ruby-end (in ELPA). Now ruby-end-mode will start alongside ruby-mode.

Ruby on Rails

Rinari

Rinari (in melpa) stands for Rinari Is Not A Rails IDE. It is an Emacs minor mode for Rails that is actively maintained.

Rinari features:

  • for 'jumps' between Model, View, Controller and their RSpec examples and Test Unit tests,
  • as well as Cucumber steps and features.
  • running of a console session with full Rails application loaded for interactive use,
  • SQL console,
  • starting of the web server (rails server).

For a list of keybindings, see Rinari. The official documentation is alright, but for best information check out the source.

Projectile-rails - navigation, rake tasks, console, etc

Projectile is a popular project management system. It allows to easily search files under a project, switch buffers pertaining to that project, switch to tests files, search in project (with rgrep, ag,…), and more. Now we can add Rails support with projectile-rails (in melpa).

With Projectile Rails you are able to:

  • navigate through rails resources (controllers, views, helpers and so on)
  • jump to ruby classes and template files
  • run rake
  • run rails console
  • run rails dbconsole
  • run rails generate
  • run rails server
  • open log files with auto-revert-mode on
  • see rails keywords highlighted
  • take advantage of zeus and spring preloaders

It can be a replacement for rinari.

Intelligent code navigation and completion with Robe

Robe (in MELPA) is a code assistance tool that uses a Ruby REPL subprocess with your application or gem code loaded, to provide information about loaded classes and modules, and where each method is defined.

To load it with ruby-mode:

(require 'robe)
(add-hook 'ruby-mode-hook 'robe-mode)

If you are using rvm you may want to instruct robe to auto-trigger rvm-activate-corresponding-ruby:

(defadvice inf-ruby-console-auto (before activate-rvm-for-robe activate)
  (rvm-activate-corresponding-ruby))

Code navigation

By default bound to M-. (robe-jump). It can be used to jump to definitions of various classes and methods.

Code completion

For intelligent completion robe can be integrated with company mode. Company mode is a modern and modular completion system for emacs which accepts a multitude of pluggable back-ends and front-ends to provide rich completions on the fly. Robe provides a backend to the completion in form of company-robe. This can be configured as follows :

(global-company-mode t)
(push 'company-robe company-backends)

Now all you have to do is hit robe-start when you navigate into your project. After that at any point if you trigger company-robe you should be greeted with an intellisense like method definitions.

Completion will start automatically after you type a few letters. Use M-n, M-p, <tab> and <return> to complete. Search through the completions with C-s, C-r and C-o. Even the documentations are available right from the editor (Press F1 at any menu entry).


Ruby-robe.png

Syntax checking: flymake

See Flymake, and install flymake-ruby (in melpa).

To make sure it is started along with ruby mode, add:

(require 'flymake-ruby)
(add-hook 'ruby-mode-hook 'flymake-ruby-load)

Ruby-flymake.png

Ruby shell inside Emacs

inf-ruby provides a REPL buffer connected to a Ruby subprocess. It is available through the package manager. To bind to a shortcut, do something like:

(global-set-key (kbd "C-c r r") 'inf-ruby)

See also: Shell

RVM integration

Pick rvm.el. Once installed you will just have to call rvm-activate-corresponding-ruby and rvm.el will automatically pick up your ruby version and gemset from your .rvmrc file.

For a keybinding:

(global-set-key (kbd "C-c r a") 'rvm-activate-corresponding-ruby)

Emacs-rvm.png

See also

You might want to check the following pages to make the most out of Emacs:

External links

ruby-mode at Ruby's Subversion repo