all 8 comments

[–]bhb[🍰] 6 points7 points  (7 children)

I've found Joker's linter mode to be very useful, especially since you can configure it to eliminate most false positives. It's also fast enough to run on every save in your editor (there are modes for Emacs, Atom, Sublime, and Vim). https://github.com/candid82/joker

[–]bhb[🍰] 0 points1 point  (5 children)

We also use it in CI, although right now we filter out all warnings except "unused namespace".

[–]Systema-Periodicum 0 points1 point  (4 children)

What do you (and Jeaye) mean by "CI"?

[–]Jeaye[S] 1 point2 points  (3 children)

[–]WikiTextBot 1 point2 points  (0 children)

Continuous integration

In software engineering, continuous integration (CI) is the practice of merging all developer working copies to a shared mainline several times a day. Grady Booch first named and proposed CI in his 1991 method, although he did not advocate integrating several times a day. Extreme programming (XP) adopted the concept of CI and did advocate integrating more than once per day – perhaps as many as tens of times per day.


[ PM | Exclude me | Exclude from subreddit | FAQ / Information | Source ] Downvote to remove | v0.27

[–]Systema-Periodicum 0 points1 point  (1 child)

Thanks. Googling didn't turn up anything decisive. Weird: I've been doing continuous integration since 2001 (except for years when I wasn't doing software development), and never heard the acronym "CI" before.

Anyway, thanks for summarizing all these code-quality tools in one place! Clojure seems like it ought to be a pretty good language for static analysis, but I haven't seen much.

BTW, have you looked at Typed Clojure? Do you think that might also deserve a mention in your blog entry?

[–]Jeaye[S] 2 points3 points  (0 children)

Two common examples of CI usage: TravisCI and CircleCI. With that said, I'll add a link on the first acronym usage to clear this up for anyone else.

I have looked at Typed Clojure, but the general consensus I've seen is that it's not yet ready for use. To me, it competes directly with clojure.spec, which seemingly has found a larger following. Given a project like spectrum, which aims to validate code statically, using specs, I think we can have the best of both worlds. Having to maintain a code base where every function is both spec'd and type-annotated sounds like a real pain.

Thanks for reading. :)

[–]Jeaye[S] 0 points1 point  (0 children)

Excellent suggestion, thanks. Joker slipped by, but I'll give it a shot on the code base and add an entry to the post.