View Source Mix.Task.Compiler behaviour (Mix v1.12.3)

This module defines the behaviour for a Mix task that does compilation.

A Mix compiler task can be defined by simply using Mix.Task.Compiler in a module whose name starts with Mix.Tasks.Compile. and defining the run/1 function:

defmodule Mix.Tasks.Compile.MyLanguage do
  use Mix.Task.Compiler

  def run(_args) do
    :ok
  end
end

The run/1 function returns an atom indicating the status of the compilation, and optionally can also return a list of "diagnostics" such as warnings or compilation errors. Doing this enables code editors to display issues inline without having to analyze the command-line output.

If the compiler uses manifest files to track stale sources, it should define manifests/0, and if it writes any output to disk it should also define clean/0.

A compiler supports the same attributes for configuration and documentation as a regular Mix task. See Mix.Task for more information.

Link to this section Summary

Callbacks

Removes build artifacts and manifests.

Lists manifest files for the compiler.

Receives command-line arguments and performs compilation. If it produces errors, warnings, or any other diagnostic information, it should return a tuple with the status and a list of diagnostics.

Functions

Adds a callback that runs after a given compiler.

Link to this section Types

@type status() :: :ok | :noop | :error

Link to this section Callbacks

@callback clean() :: any()

Removes build artifacts and manifests.

@callback manifests() :: [Path.t()]

Lists manifest files for the compiler.

@callback run([binary()]) :: status() | {status(), [Mix.Task.Compiler.Diagnostic.t()]}

Receives command-line arguments and performs compilation. If it produces errors, warnings, or any other diagnostic information, it should return a tuple with the status and a list of diagnostics.

Link to this section Functions

Link to this function

after_compiler(name, fun)

View Source (since 1.10.0)
@spec after_compiler(
  atom(),
  ({status(), [Mix.Task.Compiler.Diagnostic.t()]} ->
     {status(), [Mix.Task.Compiler.Diagnostic.t()]})
) :: :ok

Adds a callback that runs after a given compiler.

The callback is invoked after the compiler runs and it receives a tuple with current status and the list of diagnostic. It must return the updated status and diagnostics.