FilterFormatter

This is a mix formatplugin which filters user-configurable sigils and files by piping their contents to a given command line program.

The program is expected to read input via stdin and produce formatter output on stdout. An exit code of 0 is considered success, any other exit code is considered failure.

This makes it easy to hook any command line tool into mix format

Installation

First, add filter_formatter to your list of dependencies in mix.exs:

def deps do
  [
    {:filter_formatter, "~> 0.1.0"}
  ]
end

Next, add FilterFormatter to your .formatter.exs file and configure the filter_formatter option such that it associates sigils and/or file extensions with commands to execute:

[
  inputs: ["*.{ex,exs,heex}", "priv/*/seeds.exs", ...],
  plugins: [FilterFormatter],
  filter_formatter: [
      ...
  ]
]

Example: filtering SQL via SQLFluff

This specification which makes mix format pass the contents of the SQL sigil as well as the code in any .sql files through SQLFluff:

[
  plugins: [FilterFormatter],
  filter_formatter: [
    [
      extensions: ["*.sql"],
      sigils: [:SQL],
      executable: "sqlformat",
      args: ["format", "-", "--dialect", "postgres", "--nocolor", "--disable-progress-bar"]
    ]
  ]
]

Please see the API documentation for more information.