This library provides a Flycheck checker
for the logic / functional programming language Mercury using the Melbourne
Mercury Compiler. See
here for the reasons why it is
not directly part of the flycheck
codebase.
mmc
provides an errorcheck-only mode where it only displays errors and
warning without doing any compilation.
flycheck-mercury
is available as Emacs 24 package on
MELPA.
If you want to install the version from github, first ensure that flycheck
is
installed, then download this code and add the directory to your Emacs
load-path
.
(add-to-list 'load-path
"path-to-flycheck-mercury")
Add to your .emacs
:
(eval-after-load 'flycheck
'(require 'flycheck-mercury))
Make sure that the mmc
binary is present on Emacs' exec-path
and can be
executed.
When flycheck
is enabled (e.g. with global-flycheck-mode
), Mercury buffers
will be automatically checked using this checker if you have prolog-mode with
support for Mercury installed.
mercury-mmc
does not create any files, this includes interface files
(*.int
, *.int{0,2,3}
) which are required to correctly identify type
information etc. However, it will supply the option -I
to mmc
in order to
search for interface files in the directories contained in the list
flycheck-mmc-interface-dirs
. These directories are relative to the position of
the file to check. If interfaces are reported as missing that actually exist, it
should be sufficient to add their location relative to the checked file to the
buffer-local variable flycheck-mmc-interface-dirs
,
(setq-default 'flycheck-mmc-interface-dirs '("<interface-directories>"))
This list defaults to ("Mercury/ints" "Mercury/int0s" "Mercury/int2s" Mercury/int3s")
, i.e., the directory structure created by mmc --make
.
So, in order to make mercury-mmc
recognize any newly added predicate, you must
first create its corresponding interface files, e.g., by launching a compilation
of your program.
mercury-mmc
uses all three levels of error reporting: error
for things which
prevent correct compilation, warning
for things like unused variables
etc. which does not prevent compilation and info
for inferred type signatures.
The user options are defined via buffer-local variables. To change their default value for new buffers use:
(setq-default <variable> <new-value>)
flycheck-mmc-max-message-width
defines the maximal length of a message line.
If the specified value is strictly positive, the line is truncated to this
length and ...
is added at the end (using s-truncate
). A value less than or
equal to 0
has no effect. The default value is 0
.
flycheck-mmc-max-message-lines
defines the maximal number of message lines for
a single source line. If the specified value is strictly positive, the messages
are limited to this number of lines and ...
is added as final line. A value
less than or equal to 0
has no effect. The default value is 0
.
flycheck-mmc-report-inferred
defines whether type/mode/determinism inference
(via --infer-all
) is reported on info
level. The default value is t
.
This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version.
This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.
You should have received a copy of the GNU General Public License along with this program. If not, see http://www.gnu.org/licenses/.