Difference between revisions of "Ruby"

From WikEmacs
Jump to navigation Jump to search
(Cat: Programming -> Programming languages)
(→‎See also: code folding)
 
(17 intermediate revisions by 4 users 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 ==
  
'''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 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.
 +
 
 +
=== 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 <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).
 +
 
 +
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 ==
 +
 
 +
[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).
 +
 
 +
To make sure it is started along with ruby mode, add:
 +
 
 +
<source lang="lisp">
 +
(require 'flymake-ruby)
 +
(add-hook 'ruby-mode-hook 'flymake-ruby-load)
 +
</source>
 +
 
 +
[[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:
 +
 
 +
<source lang="lisp">
 +
(global-set-key (kbd "C-c r r") 'inf-ruby)
 +
</source>
 +
 
 +
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.
 +
 
 +
For a keybinding:
 +
 
 +
<source lang="lisp">
 +
(global-set-key (kbd "C-c r a") 'rvm-activate-corresponding-ruby)
 +
</source>
 +
 
 +
[[File:Emacs-rvm.png]]
 +
 
 +
[[Category:Programming]]
 +
[[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