wiki:EmacsInterface

Basic usage in Emacs/XEmacs

The GNU Emacs and the XEmacs text editors are supported user interfaces. At least version 22 is required for Emacs and version 21 is required for XEmacs.

Refactoring is performed by an Erlang server process, which stores analysed source files in a database. This server is started automatically by the (X)Emacs interface, and it should be stopped manually before leaving (X)Emacs. Only those files that are loaded into the database are subjects to refactoring.

Configuration in XEmacs/Emacs

Loading RefactorErl

First of all, you need to load the RefactorErl library into XEmacs or into Emacs. You can do this by placing the following two lines into your .xemacs/init.el le in the former or into your .emacs file in the latter case (you can copy&paste it from the README.TXT file from the RefactorErl package):

(add-to-list 'load-path
"/path-to-root-dir/lib/referl_ui/emacs")
(require 'refactorerl)

If you don't know where your .emacs file is, the easiest way to locate it is to start Emacs and type C-x C-f ~/.emacs - this always opens the right file. Similar in XEmacs type C-x C-f ~/.xemacs/init.el

If you don't know what C-x C-f is, then you should read the (X)Emacs tutorial to get more familiar with the environment - you can access it by starting (X)Emacs and pressing the keys Ctrl+h, and then t.

Basic settings

Before you can run RefactorErl, you must make some settings through the Emacs customization system.

Type M-x customize-group, then enter refactorerl as the name of the group. Here you can change the following settings:

  • Refactorerl Base Path: you must enter the full path to the root directory of the tool. Strictly speaking, this is the only required customization, every other setting has a sensible default.
  • Refactorerl Erlang Runtime: if your PATH setting doesn't contain the Erlang commands, then you should enter the full path to the erl command here.
  • Refactorerl Data Dir: you can change the location of the database here.
  • Refactorerl Server Type: if you want to experiment with the command line interface of the tool, you should set this to "Managed server with shell access". This feature requires the standard Erlang editing mode.
  • Refactorerl Sname Type: if you run RefactorErl within Emacs, you have to use Short name. Otherwise it has to match with the name convention of the RefactorErl server.
  • RefactorErl Server Name: this field has to match with the RefactorErl server. If you run the tool within Emacs, use the default value value.
  • RefactorErl Client Name: if you want to run more than one Emacs instance to use the same RefactorErl server, here you can set distinct names for them.
  • RefactorErl Db Type: here you can choose the database type RefactorErl uses. Mnesia always works. If you use external server outside Emacs, it has no relevance which one you choose, so prefer Mnesia.

RefactorErl mode

Refactoring functionality is provided through an (X)Emacs minor mode1 that can be turned on using the command M-x refactorerl-mode. When this mode is active, there is a status display in the mode line that shows one of the following values:

  • Refact means RefactorErl mode is active, and the file can be refactored.
  • Refact:off means RefactorErl mode is active, but the file is not in the database, so it cannot be refactored.
  • Refact:err means the file has some errors.
  • Refact:??? means that RefactorErl mode is active, but there is no information available about the file. Normally this is shown only during processing, use the "update status" command if it doesn't go away.

When RefactorErl mode is active, functionality can be accessed through either the "Refactor" menu or keyboard shortcuts. Key sequences start with C-c C-r, and a complete list is given by C-c C-r C-h.

As a standard (X)Emacs feature, help on RefactorErl keyboard shortcuts is available by typing C-h k followed by the keyboard command itself. For example, C-h k C-c C-r r f provides help on the rename function refactoring. The same works with menus: selecting a menu item after typing C-h k gives help on the menu item.

The "Refactor" menu

Server sub-menu

Starting and stopping server

While working with Erlang files the sever process of the RefactorErl can be stopped or can be restarted if it is required. The refactoring server can be stopped by selecting the "Stop server" menu item from the "Refactor/Server" menu or typing the shortcut C-c C-r Q. The RefactorErl server can be started (or restarted) by selecting the menu item "Start server" from the "Refactor/Server" menu or typing the C-c C-r R shortcut.

Starting and stopping metric mode

The RefactorErl? supports querying bad smells in the code.

The metric analyser mode has to be manually enabled by selecting Start metrics from the Server item in the RefactorErl? menu in the Emacs interface of RefactorErl?. Clicking Start metrics from the same menu turns the mode off. When Metrics mode is on, the status indicator displays Erlang Refact Metrics or a similar message.

When in metric analyser mode, the Emacs interface of RefactorErl? displays the values of changed metrics after a transformation is invoked. The analyser opens up the Metrics Result buffer, and shows the expected and the current values of the measured metrics for all modules that have at least one metric that is out of bounds. Values of metrics outside the user defined limits (”bad code smells”) can also be queried manually using Show bad smells in the Semantic query menu.

Configure

Using this menu item you can modify the "Basic settings" described above.

Control buffer

Enabling refactorerl-mode in Emacs automatically starts the RefactorErl control buffer. This buffer contains some RefactorErl related functionality and settings.

Files sub-menu

Load directory

Using this item (or C-c C-r L) the whole contents of a directory can be loaded without going through the files one-by-one.

Database contents

The actual contents of the database are shown by this command (or C-c C-r C), the list is shown in the "RefactorErl File List" buffer with links to the files themselves.

Show parse errors

Selecting this item the parse errors in the database which arose while adding files to the database (parse errors for files where the indicated status is "error"). Every parse error is described in a separate row and gives information about the le which contains the actual parse error, the location in the le and context information about the error. The parse errors are listed in the "RefactorErl File List" buffer with links to the location of the error.

Draw graph

There is interface to visualise the content of the database. Choosing the "Draw graph" or typing the C-c C-r G shortcut the interface asks for a file name with extension .dot where to create the description of the database content. The tool creates the description of the graph to the given path and file, using Graphviz a graphic visualisation of the graph can be created. Note that the resulting graph may be too large for Graphviz to handle.

Reset database

With this item you can reset the content of the entire database. It removes every loaded module, header file from the database and deletes the previously set include directories too.

Adding and dropping files

A single file can be loaded into the database by opening it, enabling RefactorErl mode for it, and using the "Add file" command (in the menu, or by the keys C-c C-r a). The "Drop file" command (C-c C-r d) removes the file from the database. When a file is modified and saved, it is automatically updated by removing and re-adding its changed forms.

Undo

For details about the undo function see page EmacsInterface/Undo.

Clustering

For details about the clustering see page ModuleFunctionClustering.

Semantic Queries

You can use the "Semantic Query" menu item to run semantic queries or you can use the shortcut C-c C-r s q. For more details about the queries see page SemanticQuery.

You can ask for a list of running queries (with their name and Query Id) using "Running queries" menu item (shortcut: C-c C-r s r).It is also possible to kill/stop a query with a specific Query ID using "Kill running query" (shortcut: C-c C-r s k).

You can also run metric queries (Run metric query, shortcut: C-c C-r m q) from "Semantic Query" menu or ask for the list of bad smalls found in the code (Show bad smells, shortcut: C-c C-r s b). See the following page for further information: MetricQuery.

Other menu items available from "Semantic Query": Go to definition (jump to the definition of the function, shortcut: M-.) and Find function references (shortcut: C-c C-r q r).

Dependency analysis

There are three available types of dependency analysis in RefactorErl?: module, function and function block dependency analysis. For details check the following page: wiki:Dependency.

If you would like to get information about dependencies between modules or functions, use the menu "Module and function dependencies". The parameters are similar to the ones described here: wiki:Dependency.

To gather information about module group and function block dependencies, you should use menu group titled "Function block dependency analysis". It contains a submenu named "Default FB analysis" where you can start the analysis itself and set its options (see wiki:Dependency), and another submenu called "Define FBs with regexps" where it is possible to define module groups using regular expressions.

Duplicated code analysis

After starting the Emacs with refactorerl-mode on, the duplicate code analysis is available under the Refactor / Duplicated code analysis menu. (You can learn more about this topic and about the usage on CloneIdentifiErl page, whilst the services provided by this interface are detailed below.)

To fine-tune the algorithm select the advanced search option. At first, an algorithm should be chosen.

After the algorithm has been chosen the parameters of the algorithm can be set (it is not necessary to set every parameter). The analysis can be started by clicking on the Run button.

After the analysis have finished, a clone group belonging to the result can be selected.

In this case the first two instances belonging to this group will be shown in separate two columns. The mechanism is similar to the behaviour of diff applications. You can switch between instances from this group by using dropdown lists that are placed above the columns.

Load previously saved result

After the show duplicates menu item has been chosen, a previously saved result can browsed by entering the name of the previously saved duplicated code result.

Search duplicate code by selection

It is possible to make a selection in the source code and start the duplicate code analysis by choosing the search in selected area in the Duplicated code analysis menu. This will start the matrix algorithm which will search for duplicates of the selection.

Refactorings

You can use the menu or shortcuts to call a refactoring. For details aboutthe refactorings see page RefactoringSteps. The following refactorings are available in version 0.9.12.01 of RefactorErl.

Transformation name Selection Shortcut
Rename function Def, call C-c C-r r f
Rename header In module C-c C-r r h
Rename macro Def, use C-c C-r r c
Rename module In module C-c C-r r m
Rename record field Def C-c C-r r r f
Rename record Def C-c C-r r r d
Rename variableDef, use C-c C-r r v
Move function Pop-up C-c C-r m f
Move macro Pop-up C-c C-r m m
Move record Pop-up C-c C-r m r
Eliminate function call Function call C-c C-r e f
Eliminate fun expression Fun expression C-c C-r e u
Eliminate variable Occurrence C-c C-r e v
Eliminate macro substitution Substitution C-c C-r e m
Introduce function Expression, body C-c C-r i f
Introduce import Qualifier C-c C-r i i
Introduce function argument Expression C-c C-r i a
Introduce record Tuple C-c C-r i r
Introduce tuple Def, call C-c C-r i t
Introduce variable Expression C-c C-r i v
Transform list comprehension Expression C-c C-r t l
Reorder function parameters Def, call C-c C-r o f
Upgrade interface: regexp Anywhere C-c C-r u i r
Last modified 10 years ago Last modified on Sep 17, 2014, 4:14:28 PM

Attachments (4)

Download all attachments as: .zip