       :ok
 
   """
-  @spec create_file(Path.t, iodata, keyword) :: any
+  @spec create_file(Path.t(), iodata, keyword) :: any
   def create_file(path, contents, opts \\ []) when is_binary(path) do
-    Mix.shell.info [:green, "* creating ", :reset, Path.relative_to_cwd(path)]
+    Mix.shell().info([:green, "* creating ", :reset, Path.relative_to_cwd(path)])
 
     if opts[:force] || Mix.Utils.can_write?(path) do
       File.mkdir_p!(Path.dirname(path))

          c when is_binary(c) -> c
          _ -> raise ArgumentError, "expected string or from_file: file"
        end
      defp unquote(:"#{name}_text")(), do: unquote(contents)
    end
  end

          [from_file: file] ->
            @file file
            File.read!(file)

          c when is_binary(c) ->
            @file {__ENV__.file, __ENV__.line + 1}
            c

          _ ->
            raise ArgumentError, "expected string or from_file: file"
        end

      require EEx

      source = "<% _ = assigns %>" <> contents
      EEx.function_from_string(:defp, :"#{name}_template", source, [:assigns])
    end
  end

