trivelop @rrrene on

ElixirStatus & ElixirWeekly: A community success story

ElixirStatus is old by Elixir standards (started pre-1.0 both in terms of Elixir and Phoenix) and will be celebrating its first birthday soon. Over the last year, the service has become a stable source of community announcements around projects, blog posts and version updates.

The big difference to more forum-like formats is that ElixirStatus caters to the people creating stuff as well as interested Elixir enthusiasts who want to here about new blog posts and libraries directly from the creators themselves.

It provides a steady stream of news generated by those creators. As such, it is sometimes a bit hard to follow. And although this is my baby, I have a hard imagining people are actually going to the frontpage of ElixirStatus just to scroll back one or two weeks, sit down with a cup of coffee and simply read up on what’s happened the last 7-14 days.

But I firmly believe there are people who would like to consume ElixirStatus in a way like this; not drinking from a firehose, but more like a magazine subscription.

This is where ElixirWeekly comes in: You get one nice email per week, with everything posted to ElixirStatus plus some (like Podcasts, Videos of talks, etc.).

It is really too early to tell, but I have a gut feeling that this newsletter will become a great addition to our nice little community! Like always, I will share some insights and numbers after 2-3 months. Issue #2 will be out on Thursday!


ElixirConf.EU: The roof is on fire!

I had the pleasure to give a talk about Credo at this year’s ElixirConf.EU in Berlin. It was an amazing experience, with the first day culminating in a memorable rooftop party with old and new #elixirfriends.

Thank you all for two fantastic days full of interesting discussions and great talks (and lightning talks, oh my … I was really sad they were only 5 minutes long and at the same time impressed how much the speakers put into that short timeframe). The hallways were filled with equal levels of laughter, excitement and humble levels of strong confidence.

Everything that impressed me about this community online is even more impactful in person. As the adrenalyn is slowly wearing off, I try to sort all these impressions and new ideas in my head. Just one thing is crystal already: I can’t wait to meet even more of you nice people in September!

P.S.: The slides of my talk are now on SpeakerDeck as well:


Credo: Introducing Lint attributes

I just released v0.3.3 of Credo, a static analysis tool for the Elixir language.

With the v0.3.0 release we finally introduced support for per-function exclusion of checks. This has been a community requested feature since the very beginning and I am happy to announce: it’s finally here.

I was opposed to “magic comments” like # credo: <check-name>:off, since they would clutter your code, be very tool-specific and not very “Elixirish”.

As it turns out the solution was quiet easy: Let’s use a module attribute like @doc, which also contains code-relevant information which is often written in comments in other environments. Building on this idea, Credo now let’s you use a module attribute named @lint to configure linting for specific functions.

@lint attributes let you exclude specific functions completely:

# Case 1: don't lint anything inside `my_fun`

@lint false
def my_fun do
end

In my mind, this reads just right. Given that you should use these function-specific exclusion rarely, it clearly communicates intention and does not clutter your code. But say you have a function where a specific check fails, but you know that this is an instance where you are fine with it. You can now mark that function to ignore all issues generated by that particular check (using the same syntax used in the config file):

# Case 2: don't run the TagTODO check inside `my_fun`

@lint {Credo.Check.Design.TagTODO, false}
def my_fun do
end

To exclude more than one check, e.g. a whole category of checks, you can use a Regex instead of the check module:

# Case 3: don't run any Refactor checks inside `my_fun`

@lint {~r/Refactor/, false}
def my_fun do
end

Finally, you can supply multiple tuples as a list and combine all of the above:

# Case 4: combine the above

@lint [{Credo.Check.Design.TagTODO, false}, {~r/Refactor/, false}]
def my_fun do
end

I hope you enjoy this release as much as I do. Thanks to all your feedback, we’re already at v0.3.3.

You can check out Credo on GitHub.


Fork me on GitHub