# Runtime Mix.Task - set long task description?

**URL:** <https://forum.elixirforum.com/t/runtime-mix-task-set-long-task-description/67495>\
**Category:** Questions\
**Tags:** mix-tasks\
**Created:** [November 14, 2024, 7:10pm UTC](https://forum.elixirforum.com/t/runtime-mix-task-set-long-task-description/67495 "2024-11-14T19:10:11Z")\
**Posts on this page:** 2\
**Page:** 1

<div class="post-metadata">

**Author:** ![gilbertbw](https://forum.elixirforum.com/user_avatar/forum.elixirforum.com/gilbertbw/32/30679_2.png) [@gilbertbw](https://forum.elixirforum.com/u/gilbertbw)\
**Post date:** [November 14, 2024, 7:10pm UTC](https://forum.elixirforum.com/t/runtime-mix-task-set-long-task-description/67495/1 "2024-11-14T19:10:11Z")

</div>

I have a `Mix.Task` I am writing. This is a generic Task runner task, where what it does depends entirely on the project configuration. As such I want running `mix help check` to use a runtime set long task description.

With a configuration like this:

```elixir
def project do
[
  #...
  checks: [
    {"test", "mix", ~W"test --force --warnings-as-errors"},
    {"cspell", "npx", ~W"--package=cspell@8.16.0 --yes -- cspell ."},
    {"compile (no warnings)", "mix", ~W"compile --force --warnings-as-errors"},
  ]
  #...
]
#...

```

I want to show this as the help

```markdown
Runs the following checks:
  - test
  - cspell
  - compile (no warnings)

```

I expect doing this would require getting `Mix.Task.moduledoc` changed to optionally call a callback on the task?

Alternatively if anyone knows of a better way to do what I am doing I am all ears. I believe I can not use an alias, both because I want to call external commands, and because I want to e.g. run test in the test enironment, then compile in the dev environment.

---

<div class="post-metadata">

**Author:** ![harrisi](https://forum.elixirforum.com/user_avatar/forum.elixirforum.com/harrisi/32/33003_2.png) [@harrisi](https://forum.elixirforum.com/u/harrisi)\
**Post date:** [November 14, 2024, 8:50pm UTC](https://forum.elixirforum.com/t/runtime-mix-task-set-long-task-description/67495/2 "2024-11-14T20:50:43Z")

</div>

I think you can probably do this with `Mix.Project.config/0`. Something like:

```elixir
defmodule Mix.Tasks.CheckHelper do
  def build_help do
    checks = Mix.Project.config()
             |> Keyword.get(:checks)
             |> Enum.map(fn el -> elem(el, 0) end)
             |> Enum.join("\n\n")

    {0, checks}
  end
end

```

```elixir
defmodule Mix.Tasks.Check do
  use Mix.Task

  alias Mix.Tasks.CheckHelper

  Module.put_attribute( __MODULE__ , :moduledoc, CheckHelper.build_help())

  @impl Mix.Task
  def run(_args) do
    Mix.shell().info("use `mix help check`")
  end
end

```

```sh
$ mix check && mix help check
                                   mix check                                    

test

cspell

compile (no warnings)

```

I don’t think this is ideal, but it’s a starting point, hopefully. Or it’s bad enough that someone will correct it for an actual solution.
