[erlang-questions] Erlang emacs workflow question

Klas Johansson <>
Mon May 16 21:48:37 CEST 2011


On Thu, May 12, 2011 at 8:39 PM, Mike Oxford <> wrote:
> Write some code
> C-c C-k to make sure it compiles
> Spin a release (using rebar) in another window
> Run the code in another window
> Is there a better/more streamlined way to do this, all from within emacs (I
> have erl running in another window.)
> Optimally it would be C-c C-k to compile it, maybe load the .beam, and test
> directly from within emacs.
> I feel like I'm missing something here...
> Thanks!
> -mox
> _______________________________________________
> erlang-questions mailing list
> 
> http://erlang.org/mailman/listinfo/erlang-questions
>
>

Hi Mike,

There are some options already available within the
Erlang/OTP distribution.  Don't know if you've seen
these? They need (better) documentation to be
easier to find and use, however.

First, there's erlang-eunit which makes it quicker to
work with eunit tests.  Just edit your code or test and
type "C-c C-e k" to compile both source code and test
modules.  Type "C-c C-e t" to toggle between the code
and test.  More bindings and options exist.

Then there's erlang-flymake which will compile an
erlang module and highlight any warnings and errors on
the fly.  This may require some customization if your
project needs include files or beam files from other
apps than the one currently being compiled.

More details below.  Hope that's a start.


Cheers,
Klas


EUnit support
=============

If you work a lot with eunit tests, these addons might
come in handy.

Add this to .emacs:

    (require 'erlang-eunit)

Running test suites
-------------------

C-c C-e k Compile the source and test files and run all
          EUnit tests in the module.

C-c C-e t Switch to the src file if the EUnit test file
          is the current buffer and vice versa

C-c C-e l Compile the source and test files and repeat
          the most recent EUnit test run.

C-c C-e j Compile the source and test files and run the
          current EUnit test.


Code coverage analysis
----------------------

C-c C-e c Compile the source and test files and run the
          EUnit test suite and measure code coverage.

C-c C-e v Cover compile current module.

C-c C-e a Analyze the data collected by cover tool for
          the module in the current buffer.


Customization
-------------

These variables alter the default behaviour of the eunit addons:

erlang-eunit-src-candidate-dirs (default "../src" followed by ".")

    Names of directories which to search for source
    files matching an EUnit test file.  The first
    directory in the list will be used, if there is no
    match.

erlang-eunit-test-candidate-dirs (default "../test" followed by ".")

    Names of directories which to search for EUnit test
    files matching a source file.  The first directory
    in the list will be used, if there is no match.

erlang-eunit-autosave (default nil)

    Set to non-nil to automtically save unsaved buffers
    before running tests.  This is useful, reducing the
    save-compile-load-test cycle to one keychord.


On-the-fly syntax check
=======================

This will compile source code on the fly (integrates
with flymake) and give you instant feedback.

Start using flymake with erlang by putting the
following somewhere in your .emacs file:

    (require 'erlang-flymake)

Flymake is rather eager and does its syntax checks
frequently by default and if you are bothered by this,
you might want to put the following in your .emacs as
well:

    (erlang-flymake-only-on-save)

There are a couple of variables which control the
compilation options:

erlang-flymake-command (default "erlc")

  The command that will be used to perform the syntax
  check.

erlang-flymake-get-code-path-dirs-function

    This is the name of a function which shall return a
    list of ebin directories to add to the code path.
    Will by default return the compiled apps's ebin
    directory.

erlang-flymake-get-include-dirs-function

    This is the name of a function which shall return a
    list of include directories to add to the include
    path.  Will by default return the compiled apps's
    include directory.

erlang-flymake-extra-opts

    A list of options that will be passed to the
    compiler.  These are in there by default:

        warn_obsolete_guard
        warn_unused_import
        warn_shadow_vars
        warn_export_vars
        strong_validation
        report



More information about the erlang-questions mailing list