Rich_Morin

Rich_Morin

I’d like to write a custom mix task to capture some “mix xref …” output and rework it for use with a graph database such as Neo4j. Looking at the docs for mix xref, I get the impression that it really wants to print on standard output. The only exception I see is a hard-coded option to (over)write xref_graph.dot in the current directory.

What is the cleanest way to run mix tasks and capture their output? Alternatively, should I simply extract the relevant code from mix xref? Suggestions welcome…

Showing Posts 1 to 8

josevalim

josevalim

Creator of Elixir

Maybe you can try using a project to convert .dot files into cypher statements, such as: GitHub - jexp/dot2cypher: Convert GraphViz dot files into Cypher CREATE statements · GitHub

Another option is to add a CSV format that is just from,to,label, so it is easier to import and transform.

Rich_Morin

Rich_Morin OP

Thanks for the suggestions! I didn’t know about dot2cypher, but I’ll check into it. A generic format such as CSV or JSON would also make sense. (FWIW, Neo4j supports CSV as an import format.)

That said, xref’s stdout fixation is annoying. Also, writing files to hard-coded locations can cause collisions. What about adding an option to redirect output to a specified path?

josevalim

josevalim

Creator of Elixir

mix xref is a command-line tool first and foremost. You should be able to redirect the output using standard Unix tools too.

dimitarvp

dimitarvp

What exactly is the issue with running:

mix xref $other_arguments >my_file.dot

:question:

Rich_Morin

Rich_Morin OP

I know how to run commands and redirect their output, in the context of a shell script. However, I was thinking about doing this inside a custom Mix task. I’ve never done this before and I’m not finding any specific examples in the doc pages I’ve read.

Let’s say that I create Mix.Tasks.Foo and want to invoke the mix xref ... command in the run/1 function. Problem is, I’m not sure how to do this. For example, this looks rather convoluted to me:

def run(_args) do
  xref = ["-c", "mix xref ... > my_file.dot"]
  System.cmd("sh", xref)
  ...
end

I assume that I’m missing something really obvious. Clues, anyone?

Rich_Morin

Rich_Morin OP

I don’t see anything in that doc that would help out with output redirection. Could you explain what you have in mind?

Exadra37

Exadra37

In mix xref 1.16.1 you can use mix xref graph --format dot --output path/to/the/dot/file

— All posts loaded —

Where Next? Top

Trending in Questions Top

RSP87
I’m working on a project that simulates the bumbl example in the programming phoenix book. It acts almost like an email client. We have a...
New
kpanic
Hi everyone, I am toying with the idea of building a “match maker” for giving personal help to people that wants to start coding. I sta...
New
nseaSeb
Hello, I know there is an approach for handling lists that allows for optimized traversal, but I can’t recall the specific method (somet...
New
brecabral
Documentation While reading the Scoped Routes section, I noticed that the documentation currently refers to a problem without explainin...
New
velrest
So my question is quite simple and i have found no conclusive answer on forum, google or AI. Should we use :erlang.float for Integer to ...
New
asweet-confluent
I recently noticed that Elixir’s Logger defaults its primary log level to :debug when no :logger, :level application configuration is pre...
New
apz
I’m new to elixir and just tried to install the elixirLS extension for VScode(ium) and it is throwing some errors that I would like help ...
New

Other Trending Topics Top

GenericJam
Edit: 2026 May 15 - This post is archived. Mob is alive!! Main docs: mob v0.7.11 — Documentation A bit of explanation for the slightly c...
New
JesseHerrick
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
mudasobwa
I am happy to introduce the very α version of the new programming language compiled to BEAM. Welcome Cure. It has literally three kille...
New
marciok
Hi there! We created Gust: A task orchestrator inspired by Airflow. For those who have never heard about Aiflow, it’s a Python-based wor...
New
mhanberg
Hi everyone! The first release candidate for the Expert language server project is now available! We’ve published a press release detai...
New
jimsynz
Beam Bots (or just BB for short) is a framework for building fault-tolerant robotics applications in Elixir using familiar OTP patterns. ...
New

We're in Beta

About us Mission Statement

Options

Thread Display Mode




Thread Preview

Skip Thread Previews