Fellow Julia enthusiasts,
It seems a quarterly update to Lint.jl carries enough weight without being
overwhelming, so here it is again.
Here are the new abuses that would be caught. Most of them I encountered
them the hard way, so hopefully new users won't random-walk into them.
- A first stab at linting staged function (or whatever name it will be
finalized into). It is fairly basic, catching comparisons between
incompatible types.
- Since 0.4 will introduce a few coding style changes (Dict,Array
constructions, Symbol() instead of (or maybe in addition to) symbol()
and so on), some packages would have VERSION predicates. Lint tries to
understand basic predicates (like VERSION < v"0.4-") and would give more
version-appropriate messages
- Catch dangerous variables (e.g. call = 1.0) that would almost
certainly explode in your face
- Catch [1 :end] and [end -1]
- Catch new() with the number of arguments different from the number of
fields in the type (INFO if too few, ERROR if too many)
- Catch silly curly brackets mistake that generates hard-to-debug type
inference error. e.g. d = Dict{ :Symbol, Any}()
- Catch assigning a.b = something when a is proven to be of an immutable
type e.g. Complex.
- Remind Array{ T,n } is not Array( T, n ). (Subsequent usage will
generate type related lint errors.)
- Unused function arguments.
- Other improvements:
- More accurate code locations from the lint messages.
- @doc aware
Thanks to Ariel, Sam, Tim, Tomas and others who pointed out issues.
On IDE integration: some users find the package a bit "bulky" (well it does
check a lot of things) so Julia+Lint takes a while to load, reducing the
code-lint-fix loop productivity. It is certainly an issue. I'm up for
suggestions.
Again please continue with your support by reporting gaps, false positives,
and even better, PR.
Tony