From c769fe15ae99e40ff4f6a0fbb06812234fbd020d Mon Sep 17 00:00:00 2001 From: Zach Daniel Date: Wed, 31 Jul 2024 18:29:11 -0400 Subject: [PATCH] improvement: add `create_module` utility fix: loadpaths after compiling deps --- installer/lib/mix/tasks/igniter.new.ex | 6 ++-- installer/lib/private/deps_compile.ex | 2 ++ lib/igniter/code/module.ex | 39 +++++++++++++++----------- 3 files changed, 28 insertions(+), 19 deletions(-) diff --git a/installer/lib/mix/tasks/igniter.new.ex b/installer/lib/mix/tasks/igniter.new.ex index 2141e17..03e3e7c 100644 --- a/installer/lib/mix/tasks/igniter.new.ex +++ b/installer/lib/mix/tasks/igniter.new.ex @@ -105,10 +105,12 @@ defmodule Mix.Tasks.Igniter.New do "--example" end - install_args = Enum.filter([Enum.join(install, ","), "--yes", example], & &1) + install_args = + Enum.filter([Enum.join(install, ","), "--yes", example], & &1) System.cmd("mix", ["deps.get"]) - System.cmd("mix", ["igniter.install" | install_args], use_stdio: false) + System.cmd("mix", ["deps.compile"]) + System.cmd("mix", ["igniter.install" | install_args]) end :ok diff --git a/installer/lib/private/deps_compile.ex b/installer/lib/private/deps_compile.ex index 3799643..e3cf8e6 100644 --- a/installer/lib/private/deps_compile.ex +++ b/installer/lib/private/deps_compile.ex @@ -45,6 +45,8 @@ defmodule Igniter.Util.DepsCompile do [include_children: true] compile(filter_available_and_local_deps(deps), opts) + Mix.Task.reenable("deps.loadpaths") + Mix.Task.run("deps.loadpaths", ["--no-deps-check"]) end @doc false diff --git a/lib/igniter/code/module.ex b/lib/igniter/code/module.ex index 99169c7..daa04ae 100644 --- a/lib/igniter/code/module.ex +++ b/lib/igniter/code/module.ex @@ -31,23 +31,7 @@ defmodule Igniter.Code.Module do igniter {:error, igniter} -> - contents = - """ - defmodule #{inspect(module_name)} do - #{contents} - end - """ - - location = - case Keyword.get(opts, :path, nil) do - nil -> - proper_location(module_name) - - path -> - path - end - - Igniter.create_new_elixir_file(igniter, location, contents) + create_module(igniter, module_name, contents, opts) end end @@ -63,6 +47,27 @@ defmodule Igniter.Code.Module do find_and_update_or_create_module(igniter, module_name, contents, updater, path: path) end + @doc "Creates a new file & module in its appropriate location." + def create_module(igniter, module_name, contents, opts \\ []) do + contents = + """ + defmodule #{inspect(module_name)} do + #{contents} + end + """ + + location = + case Keyword.get(opts, :path, nil) do + nil -> + proper_location(module_name) + + path -> + path + end + + Igniter.create_new_elixir_file(igniter, location, contents) + end + @doc "Checks if a module is defined somewhere in the project. The returned igniter should not be discarded." def module_exists?(igniter, module_name) do case find_module(igniter, module_name) do