axelson
Scenic Core Team
Has anyone written a credo rule that will forbid calling schedule_in with a raw number?
i.e. instead of:
new(arguments, schedule_in: 60 * 1_000)
I want only this to be allowed:
new(arguments, schedule_in: {60, :hours})
Trending in Questions
Hello!
Suppose you are building workflow (order / task / payment) processing system with the following requirements:
Each workflow con...
New
I’m in search of an Elixir library that offers PDF generation capabilities similar to Ruby’s Prawn. While there have been discussions abo...
New
I’m looking to build a personal workflow to quickly deploy web applications written in elixir/phoenix, for local consumption (ie not on t...
New
Before I dive in myself, did anyone successfully sprinkle Hologram into their existing LiveView app?
Looking for hints regarding:
Addi...
New
Kia ora,
We have been using elixir-google-api to connect to Google Drive. However, with the updates to Tesla due to CVEs this is now bro...
New
Hi all, I wanted to ask how the community is dealing with post-release steps.
Today we have Ecto migrations, which make sure that the db...
New
Hello,
I have an Elixir backend that implements a custom protocol over TCP. I want to load test the backend and assess the performance o...
New
Other Trending Topics
Hey, I’m Jesse and I’m the main contributor behind Dexter, a full-featured, lightning-fast Elixir LSP optimized for large codebases. It s...
New
Beam Bots (or just BB for short) is a framework for building fault-tolerant robotics applications in Elixir using familiar OTP patterns. ...
New
ExRatatui lets you cook up rich terminal UIs in Elixir, powered by Rust’s ratatui via Rustler NIFs. Build interactive terminal applicatio...
New
Hello everyone. After busy few months I am happy to announce v0.1.0 of Emerge & Solve.
They are GUI (Emerge) and State management (S...
New
Corex is an accessible, unstyled UI component library for Phoenix that integrates Zag.js state machines using Vanilla JavaScript and Live...
New
Emily is an Elixir library that runs Nx computations on Apple’s MLX. Install it as the default Nx backend and Nx, defn, Axon, Nx.Serving,...
New
Categories:
Sub Categories:
Forums
Popular Tags
- #ecto
- #liveview
- #troubleshooting
- #learning-elixir
- #deployment
- #library
- #erlang
- #testing
- #genserver
- #mix
- #absinthe
- #remote-other
- #otp
- #plug
- #how-to-question
- #macros
- #postgres
- #channels
- #elixirconf
- #exunit
- #discussion
- #code-sync
- #javascript
- #podcasts
- #onsite
- #dialyzer
- #docker
- #authentication
- #umbrella
- #full-time-contract
- #podcasts-by-brainlid
- #ecto-query
- #elixir-ls
- #blog-post
- #phoenix_html
- #iex
- #graphql
- #ai
- #genstage
- #elixirconf-us
- #websockets
- #supervisor
- #advent-of-code
- #distillery
- #processes
- #api
- #forms
- #metaprogramming
- #security
- #hex











Showing Posts 1 to 9- Show Best Posts
- Show All Posts (oldest first)
- Show All Posts (newest first)
sodapopcan
Did you ever sort this out? I’ve been having fun writing credo rules recently and would be happy to make one. My company could likely use this as well.
meraj_enigma
Fooled with AI agent in Zed editor feeding the prompt -
After a few iterations, AI agent came up with this code -
On this test module -
It seems to product correct warnings -
sodapopcan
Well that’s no fun
But if you’re going to keep going… this solution is Good Enough
but not perfect as it checks any
newfunction.Ideally you want to ensure that
newbelongs to a worker. One idea is to include an option to specify a worker namespace or suffix, for example{MyCheck.ObanSchdeduleIn, namespace: [:MyApp, :Workers]}.axelson
I haven’t sorted it out yet. I’ll give @meraj_enigma’s version a try. And I wonder how we could construct a bunch of test cases to ensure that there aren’t any false positives. Maybe we could run it against a bunch of projects from GitHub/hex.pm with some that do and some that don’t use Oban.
meraj_enigma
Like @sodapopcan mentioned, you will need some adjustment in the version I posted as it will check any
newfunction. I did not realize it’s inObanworker context.sodapopcan
Ok, here’s my pass.
This is assuming you want to pass the tuple syntax so that is what it checks for and anything else is considered and error.
It defaults to looking for modules with
Workersuffixes though you can also specify a custom suffix, a namespace, or both. So use like so in your credo config:This does NOT handle the case of importing
Happy to add it, though.
new/2because that’s just kinda evilIf you specify both
:worker_suffixand:worker_namespacethey both must match. IE you could (for some reason) haveMyApp.Workers.AWorkerThisIsNot… though not sure why you would want to do that.EDIT: Oops left some temp stuff in for reporting… sorta fixed it, sorta (ie,
"Some trigger")and tests:
axelson
Thank you for this! Although after testing both of these, they don’t include this common pattern we often use where we call
newas a non-qualified module call from within the worker module itself.And separately it doesn’t handle calls where the
schedule_inis passed through another function first, e.g. like:start_my_worker(user.id, email, schedule_in: 5). Although that probably can’t be reasonably caught.But they are helpful starting points!
sodapopcan
Ya I don’t think this would be possible with Credo AFAIK. You’d have to do some custom parsing of imports. With that, it’s probably better then not to worry about module qualification (ie, @meraj_enigma’s version) and hope that another function
newis not going to have aschedule_inoption.Otherwise, for unqualified calls, you can look for
use Oban.Workerand track it in the accumulator along with issues (I do this for a couple of my checks and it works nicely):meraj_enigma
After learning your use cases, came up with this (several passes with AI agent here too!) that handles all cases except the one above ^^.
Here is the full code -
And here is the file I tested on -
Output credo results -