defmodule Mix.Tasks.Npm.Completion do @shortdoc "Generate shell completion data" @moduledoc """ Output shell completion data for npm tasks. mix npm.completion mix npm.completion --tasks mix npm.completion --packages ## Options * `--tasks` — list available npm task names * `--packages` — list installed package names """ use Mix.Task @npm_tasks ~w( audit cache check ci clean completion config dedupe deprecations diff doctor exec explain fund get info init install licenses link list ls outdated pack prune publish rebuild remove run search set shrinkwrap token tree uninstall update version view why ) @impl true def run(args) do {opts, _, _} = OptionParser.parse(args, strict: [tasks: :boolean, packages: :boolean]) shell = Mix.shell() cond do opts[:tasks] -> Enum.each(@npm_tasks, &shell.info/1) opts[:packages] -> list_packages(shell) true -> Enum.each(@npm_tasks, &shell.info("npm.#{&1}")) end end defp list_packages(shell) do case NPM.Lockfile.read() do {:ok, lockfile} -> lockfile |> Map.keys() |> Enum.sort() |> Enum.each(&shell.info/1) _ -> :ok end end end