lib/nimble_template/helpers/dependency.ex

defmodule NimbleTemplate.DependencyHelper do
  alias NimbleTemplate.Generator

  def order_dependencies! do
    file_content = File.read!("mix.exs")

    dependencies = extract_dependencies(file_content)

    ordered_dependencies =
      dependencies
      |> String.split(",\n")
      |> Enum.sort()
      |> Enum.join(",\n")

    Generator.replace_content!("mix.exs", dependencies, ordered_dependencies)
  end

  defp extract_dependencies(contents) do
    [_, deps_with_file_footer] =
      String.split(contents, """
        defp deps do
          [
      """)

    [deps | _footer] = String.split(deps_with_file_footer, "\n    ]\n  end")

    deps
  end
end