emr

https://github.com/chrisbarrett/emacs-refactor.git

git clone 'git://github.com/chrisbarrett/emacs-refactor.git'
104

License GPL 3 Build Status

emacs-refactor

Emacs Refactor (EMR) provides language-specific refactoring support for Emacs. It has a simple declarative interface for easy extension.

Summary

To use EMR when editing, simply move point to an expression and invoke the refactor menu.

Example

EMR ships with many refactoring commands, and pull requests for extensions are welcome. See Extension for details on extending EMR to other language modes. It's easy (honest!).

Tested on Emacs 24.3.

Installation

emr is available on MELPA. This is the easiest way to install.

If you haven't set up MELPA, you'll need to add the following to your init.el

;;; Initialize packages.

(require 'package)
(add-to-list 'package-archives '("melpa" . "http://melpa.milkbox.net/packages/"))
(package-initialize)
(unless package-archive-contents (package-refresh-contents))

Once MELPA is configured:

  1. M-x package-install emr

  2. Configure your init.el:

lisp (define-key prog-mode-map (kbd "M-RET") 'emr-show-refactor-menu) (add-hook 'prog-mode-hook 'emr-initialize)

Language support

Most EMR commands are context-sensitive and are available through the refactor menu. Some actions affect the whole buffer and are available in the menu bar.

General

These commands are available for all programming languages.

The following context-sensitive refactoring commands are available:

C

The following context-sensitive refactoring commands are available:

The following buffer-wide actions are available:

Refactoring support for C is a work in progress. Contributions are welcome.

Lisps

These commands are available to all Lisp dialects, including Clojure, Elisp and Common Lisp.

The following context-sensitive refactoring commands are available:

Elisp

The following context-sensitive refactoring commands are available:

The following buffer-wide actions are available:

JavaScript

JavaScript refactoring support requires js2 refactor.

The following refactoring commands are available:

Ruby

Ruby refactoring support requires ruby refactor.

The following refactoring commands are available:

Scheme

The following refactoring commands are available:

Extension

Use the emr-declare-command function to declare a refactoring action. The action will automatically become available in the refactoring popup menu.

This function supports predicate expressions, allowing the options displayed to be context-sensitive.

As an example, here is the declaration for a refactoring command that ships with EMR:

(emr-declare-command 'emr-el-extract-constant
  :title "constant"
  :description "defconst"
  :modes 'emacs-lisp-mode
  :predicate (lambda ()
               (not (or (emr-el:looking-at-definition?)
                        (emr-el:looking-at-let-binding-symbol?)))))

This wires the emr-el-extract-constant function to be displayed in emacs-lisp-mode, provided point is not looking at an Elisp definition or let-binding form.

If your favourite language mode already offers refactoring commands, it is simple to wire them up with EMR using this interface.

Development

You will need Cask, make and git to build the project.

  1. Install Cask:

shell curl -fsSkL https://raw.github.com/cask/cask/master/go | python

  1. Clone and install with make && make install:

shell cd git clone git@github.com:chrisbarrett/emacs-refactor.git cd emacs-refactor make && make install

  1. Configure your init.el:

lisp (autoload 'emr-show-refactor-menu "emr") (define-key prog-mode-map (kbd "M-RET") 'emr-show-refactor-menu) (add-hook 'prog-mode-hook 'emr-initialize)

Dependencies

These will be installed automatically by Cask.

Shout out to @magnars for his awesome libraries.

Contributing

Yes, please do. See CONTRIBUTING for guidelines.

Thanks to the following contributors:

TODO

License

See COPYING. Copyright (c) 2014 Chris Barrett.