Differences between revisions 10 and 11
Revision 10 as of 2015-10-05 13:23:16
Size: 3528
Editor: JendrikSeipp
Comment:
Revision 11 as of 2016-08-18 11:20:46
Size: 3630
Comment: uncrustify version
Deletions are marked like this. Additions are marked like this.
Line 44: Line 44:
First of all, you will need {{{uncrustify}}} itself. We require at least version 0.61 which added support for C++11. Since this version is in none of the Ubuntu repositories, we provide the steps for compiling and installing it: First of all, you will need {{{uncrustify}}} itself. We require exactly version 0.61 which added support for C++11 and which is the version that runs on our buildbots (newer versions may change formatting rules again). Since this version is in none of the Ubuntu repositories, we provide the steps for compiling and installing it:

Back to developer page.

Using uncrustify to fix code layout

We use uncrustify with a Fast Downward configuration file (.uncrustify.cfg in the repository root) to enforce some of our formatting conventions. If a source file is properly formatted, applying uncrustify should be an idempotent operation (i.e., result in an identical file). This is important so that we can verify our style rules automatically, at least for those rules which uncrustify can handle.

Not all aspects of source layout are handled by uncrustify, so please still pay attention to our ../Whitespace rules and other ../CodingConventions.

Mercurial "uncrustify" extension

The repository contains a Mercurial extension (in file misc/style/uncrustify.py) that provides the new command

hg uncrustify

to automatically run uncrustify with the correct settings on your working directory.

Using the extension

Examples:

hg uncrustify
hg uncrustify .
hg uncrustify --diff bar/baz.cc foo
hg uncrustify --modify foo
hg uncrustify --modify --no-backup foo

In order, these do the following:

  • List all files in the repository that need to be uncrustified (i.e. which violate the formatting conventions).
  • List all files in the repository below the current working directory that need to be uncrustified.
  • Show the diff that would need to be applied to uncrustify source file bar/baz.cc as well as all source files below directory foo.

  • Uncrustify all source files below directory foo. Backup files with extension .crusty are generated for all modified files, containing the original (not yet uncrustified) source.

  • Like the previous command, but without creating backups.

For more details, run

hg help uncrustify

Setting up the extension

/!\ Warning: Mercurial extensions can execute arbitrary code on your machine. If you don't trust everyone with write access to whatever repository you grabbed uncrustify.py from, don't use it.

First of all, you will need uncrustify itself. We require exactly version 0.61 which added support for C++11 and which is the version that runs on our buildbots (newer versions may change formatting rules again). Since this version is in none of the Ubuntu repositories, we provide the steps for compiling and installing it:

# Grab uncrustify-0.61.tar.gz from Sourceforge.
# Github also hosts uncrustify releases, but "uncrustify --version" will print "uncrustify 0.60" for the github 0.61 version.
wget http://downloads.sourceforge.net/project/uncrustify/uncrustify/uncrustify-0.61/uncrustify-0.61.tar.gz
tar -xzvf uncrustify-0.61.tar.gz
cd uncrustify-0.61
./configure
make
sudo cp src/uncrustify /usr/local/bin  # Or somewhere else on your PATH.
hash -r  # Clear PATH cache.
uncrustify --version  # Check version.

To set up the actual extension, add the following lines to your hgrc:

[extensions]
uncrustify = FULL_PATH_TO/uncrustify.py

[alias]
uncrustify = uncrustify -X re:^src/VAL

where FULL_PATH_TO/uncrustify.py is the full path to the uncrustify.py file (absolute, but may use ~ expansion). Alternatively, install uncrustify.py in some directory on your PYTHONPATH and write

[extensions]
uncrustify =

in your hgrc instead of providing the full path to the source file.

The alias section above is optional. It makes hg uncrustify ignore the src/VAL directory, which does not need to be uncrustified.

FastDownward: ForDevelopers/Uncrustify (last edited 2023-07-19 09:23:58 by JendrikSeipp)