Skip to content

Commit 08d2bb1

Browse files
committed
Ensure full directory match on mix format, closes #12969
1 parent c2a0d8e commit 08d2bb1

File tree

2 files changed

+17
-3
lines changed

2 files changed

+17
-3
lines changed

lib/mix/lib/mix/tasks/format.ex

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -584,8 +584,15 @@ defmodule Mix.Tasks.Format do
584584

585585
defp recur_formatter_opts_for_file(file, {formatter_opts, subs}) do
586586
Enum.find_value(subs, formatter_opts, fn {sub, formatter_opts_and_subs} ->
587-
if String.starts_with?(file, sub) do
588-
recur_formatter_opts_for_file(file, formatter_opts_and_subs)
587+
size = byte_size(sub)
588+
589+
case file do
590+
<<prefix::binary-size(size), dir_separator, _::binary>>
591+
when prefix == sub and dir_separator in [?\\, ?/] ->
592+
recur_formatter_opts_for_file(file, formatter_opts_and_subs)
593+
594+
_ ->
595+
nil
589596
end
590597
end)
591598
end

lib/mix/test/mix/tasks/format_test.exs

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -573,11 +573,18 @@ defmodule Mix.Tasks.FormatTest do
573573
test "reads exported configuration from subdirectories", context do
574574
in_tmp(context.test, fn ->
575575
File.write!(".formatter.exs", """
576-
[subdirectories: ["lib"]]
576+
[subdirectories: ["li", "lib"]]
577577
""")
578578

579+
# We also create a directory called li to ensure files
580+
# from lib won't accidentally match on li.
581+
File.mkdir_p!("li")
579582
File.mkdir_p!("lib")
580583

584+
File.write!("li/.formatter.exs", """
585+
[inputs: "**/*", locals_without_parens: [other_fun: 2]]
586+
""")
587+
581588
File.write!("lib/.formatter.exs", """
582589
[inputs: "a.ex", locals_without_parens: [my_fun: 2]]
583590
""")

0 commit comments

Comments
 (0)