How to safely read contents of mix.lock?

I would like to read the contents of the mix.lock file. It seems to be valid Elixir syntax and so I can do a File.read and a Code.eval_string but eval_string is inherently unsafe and the contents of mix.lock should just be a data structure without any side-effecting code that might be dangerous.

Ideally I think I’m looking for equivalent of ast.literal_eval in Python: https://docs.python.org/3/library/ast.html#ast.literal_eval But I guess there might also be a official module somewhere that helps with this? I don’t know.

I’m playing around with nushell and trying to write a plugin that generates table data from the mix.lock contents. Just a bit of fun. Not going anywhere really.

2 Likes

Take look at credos config loader.

It’s safe variant basically does load the file and parses it into AST via elixir tooling, but then manually traverses the AST to get the actual value.

I really miss an elixir equivalent of erlangs :file.consult.

3 Likes

Thank you for sharing that. I’ll check it out.