Splint updates! Oops it's been 8 months edition

I forgot to post about the updates back in December, so I'm gonna write about everything from 1.11 through 1.14.

The biggest changes since last summer are a global top-level entry in .splint.edn that applies to all files, supporting the upcoming Clojure 1.12 interop syntax ((^[] String/toUpperCase "noah")), and simplifying the internal logic of the pattern DSL so that the short forms are expanded to their full forms before processing.

Paired with the global entry in .splint.edn, I implemented :excludes, which will skip specified files or directories in global or in specific rules. The paths can be specified with Java's java.nio.file.FileSystem/getPathMatcher globs or regexes, as well as :re-find and :string. Details here.

Additionally, there are performance increases to roughly 20 existing rules. I went through all of the rules that used :on-match in combination with when to move those checks into the DSL, avoiding the costly aggregation of star args (?*) and forcing early exits where possible. I also simplified the ?| matcher so it's much much faster. I'd love to be able to speed up ?* and ?+, but those are gonna be harder to optimize given the reliance on continuations.

My only thought is that I could check to see if a given ?* or ?+ pattern is the final pattern in a given sequence, and if so, not use continuations but some sort of slice? Like how I did before switching to continuations last summer.

Full change logs below the fold.


v1.11 - 2023-12-11

New Rules

Added

Changed

Fixed

v1.12 - 2024-02-09

Added

Changed

v1.13 - 2024-02-14

New Rules

Changed

v1.14.0 - 2024-02-19

Changed

Fixed

Liked the post? Hated the post? Felt nothing whatsoever about the post? Email me, and let me know!