Skip to content

Commit 9b2eda3

Browse files
committed
refactor: using the new dataflow analysis to extract function
1 parent fcf10db commit 9b2eda3

File tree

2 files changed

+3
-28
lines changed

2 files changed

+3
-28
lines changed

lib/refactorex/refactor/function/extract_function.ex

Lines changed: 2 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ defmodule Refactorex.Refactor.Function.ExtractFunction do
55
works_on: :selection
66

77
alias Refactorex.Refactor.{
8+
Dataflow,
89
Function,
910
Module,
1011
Pipeline,
@@ -38,7 +39,7 @@ defmodule Refactorex.Refactor.Function.ExtractFunction do
3839

3940
def refactor(%{node: node} = zipper, selection) do
4041
name = Function.next_available_function_name(zipper, @function_name)
41-
args = find_function_args(zipper, selection)
42+
args = Dataflow.outer_variables(selection)
4243
new_arg = {:arg1, [], nil}
4344

4445
cond do
@@ -69,12 +70,4 @@ defmodule Refactorex.Refactor.Function.ExtractFunction do
6970
|> Function.new_private_function(name, args, selection)
7071
end
7172
end
72-
73-
defp find_function_args(zipper, selection) do
74-
available_variables = Variable.find_available_variables(zipper)
75-
76-
selection
77-
|> Variable.list_unique_variables()
78-
|> Enum.reject(&(not Variable.member?(available_variables, &1)))
79-
end
8073
end

lib/refactorex/refactor/variable.ex

Lines changed: 1 addition & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -48,25 +48,10 @@ defmodule Refactorex.Refactor.Variable do
4848
|> Z.node()
4949
end
5050

51-
# remove later ?
52-
def find_available_variables(%{node: node} = zipper) do
53-
line = AST.get_start_line(node)
54-
55-
zipper
56-
# go to outer scope
57-
|> Z.find(:prev, fn
58-
{id, _, _} when id in ~w(defmodule def defp)a -> true
59-
_ -> false
60-
end)
61-
|> Z.node()
62-
|> list_unique_variables()
63-
|> Enum.reject(&(AST.get_start_line(&1) >= line))
64-
end
65-
6651
def list_unique_variables(node, filter_fn \\ fn _zipper -> true end) do
6752
node
6853
|> list_variables(filter_fn)
69-
|> remove_duplicates()
54+
|> Enum.uniq_by(fn {name, _, _} -> name end)
7055
end
7156

7257
def list_unpinned_variables(node),
@@ -91,9 +76,6 @@ defmodule Refactorex.Refactor.Variable do
9176
|> elem(1)
9277
end
9378

94-
def remove_duplicates(variables),
95-
do: Enum.uniq_by(variables, fn {name, _, _} -> name end)
96-
9779
def member?(variables, {name, _, _} = _variable),
9880
do: Enum.any?(variables, &match?({^name, _, _}, &1))
9981

0 commit comments

Comments
 (0)