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

Reply via email to