lint381 checks your EECS 381 projects for coding style errors.
See http://umich.edu/~eecs381/ for the course homepage. The coding standards can be found here:
Here's lint381 in action:
lint381 requires Python 3, so you may want to install it inside a virtualenv
or use pip3 instead of pip.
Install it:
$ pip install lint381
Pass source files to lint381 to have it check them. Typically you'll just use
a pattern like *.cpp *.h to match all source files in the current directory.
$ lint381 *.cpp *.h
If lint381 detected any errors, it will exit with a non-zero status and print
the errors. Otherwise it will exit with zero and produce no output.
By default, lint381 assumes your source files are in C++. You can explicitly
set the language with --lang=c or --lang=cpp:
$ lint381 --lang=c *.c *.h
The C linter flags the following:
- Use of prohibited types (such as
unsignedandfloat). - Macros that start with an underscore, as they are reserved by the implementation.
- Non-uppercase
#defines(#define foois wrong,#define FOOis right). structs andenums that aren't capitalized.enums that don't end with_e.typedefs that don't end with_t.- Non-idiomatic comparison to
NULL(such asif (foo == NULL)). - Enum members that aren't all-caps.
- Casting the result of
malloc(such asfoo = (char*) malloc(...)). - Defining string constants as an array instead of a pointer.
The C++ linter flags the following:
- All C checks above, except those that are obviated (e.g. we now use
nullptrinstead ofNULL, and don't usemalloc). - Comments with three asterisks (
***) as those are provided by Kieras and should be removed. - Use of
NULLinstead ofnullptr. - Use of
malloc/freeinstead ofnew/delete. - Use of
typedefinstead ofusing. - Use of prohibited functions such as
memmoveorexit. - Creating a type alias for an iterator instead of its container (i.e.
using Foo_t = std::vector<int>::iteratorinstead ofusing Foo_t = std::vector<int>; /* ... */ Foo_t::iterator). - Use of
#defineto create constants. - Use of
classinstead oftypenamein template parameters. - Use of
0or1in loop conditions instead oftrueorfalse. - Use of
string::compare. - Comparing
size()to0instead of usingempty. - Use of post-increment instead of pre-increment for iterators.
- Catching exceptions by value instead of by reference.
lint381 is licensed under GPLv3.
