*******************************************
Emacs setup for following coding guidelines
*******************************************
.. _flycheck: http://www.flycheck.org/
.. _flake8: http://flake8.pycqa.org/
The Astropy coding guidelines are listed in :doc:`codeguide`. Here, we describe
how to configure Emacs to help ensure Python code satisfies the guidelines.
For this setup, we add to the standard ``python-mode`` using flycheck_ and the
flake8_ python style checker. For installation instructions, see their
respective web sites (or install via your distribution; e.g., in Debian/Ubuntu,
the packages are called ``elpa-flycheck`` and ``flake8``).
.. note:: Emacs can be configured in several different ways. So instead of
providing a drop in configuration file, only the individual
configurations are presented below.
The setup below is on purpose minimal. In principle, it is possible
to use `Emacs for Python development
`_,
with, e.g., `elpy `_.
No tabs
=======
This setting will cause indentation to use spaces rather than tabs for all
files. For python files, indentation of 4 spaces will be used if the tab key
is pressed.
.. code-block:: scheme
;; Don't use TABS for indentations.
(setq-default indent-tabs-mode nil)
Delete trailing white spaces
============================
One can `delete trailing whitespace
`_ with ``M-x
delete-trailing-whitespace``. To ensure this is done every time a python file
is saved, use::
.. code-block:: scheme
;; Automatically remove trailing whitespace when file is saved.
(add-hook 'python-mode-hook
(lambda () (add-to-list 'write-file-functions 'delete-trailing-whitespace)))
If you want to use this for every type of file, you can use
``(add-hook 'before-save-hook 'delete-trailing-whitespace)``.
Flycheck
========
One can make lines that do not satisfy syntax requirements using flycheck_.
When the cursor is on such a line a message is displayed in the mini-buffer.
When mouse pointer is on such a line a "tool tip" message is also shown. By
default, flycheck_ will check if flake8_ is installed and, if so, use that for
its syntax checking. To ensure flycheck_ starts upon opening python files, add:
.. code-block:: scheme
(add-hook 'python-mode-hook 'flycheck-mode)
Alternatively, you can just use ``(global-flycheck-mode)`` to run flycheck
for all languages it supports.