Current section
Files
Jump to
Current section
Files
lib/mix/tasks/h.script.ex
defmodule Mix.Tasks.H.Script do
@shortdoc "Generate a runnable Elixir script file"
use Mix.Task
@switches [dry: :boolean, verbose: :boolean, quiet: :boolean, force: :boolean]
@aliases [d: :dry, v: :verbose, q: :quiet, f: :force]
@impl true
def run(args) do
shell = Mix.shell()
{opts, argv} = OptionParser.parse_head!(args, strict: @switches, aliases: @aliases)
# todo give hint to input a script file if not!!!
script_file = List.first(argv) || "run/hi.exs"
script_file =
if !String.ends_with?(script_file, ".exs") do
script_file <> ".exs"
else
script_file
end
tmpl_file = Mix.Template.get_priv_file("script.exs.eex")
assigns = [script_file: script_file]
dry? = Keyword.get(opts, :dry)
if dry? do
shell.info("# The following file would be generated: #{script_file}\n")
EEx.eval_file(tmpl_file, assigns: assigns)
|> shell.info()
else
File.chmod(script_file, 0o755)
opts = Keyword.put(opts, :format_elixir, true)
Mix.Generator.copy_template(tmpl_file, script_file, assigns, opts)
end
end
end