Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion .tool-versions
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
erlang 27.2.2
elixir 1.18.2-otp-27
elixir 1.19.4-otp-27
8 changes: 4 additions & 4 deletions lib/mix/tasks/surface/surface.init/ex_patcher.ex
Original file line number Diff line number Diff line change
Expand Up @@ -292,8 +292,8 @@ defmodule Mix.Tasks.Surface.Init.ExPatcher do
end
end

def set_result(patcher, status) do
%__MODULE__{patcher | result: status}
def set_result(%__MODULE__{} = patcher, status) do
%{patcher | result: status}
end

def append_code(patcher, text_to_append) do
Expand Down Expand Up @@ -391,7 +391,7 @@ defmodule Mix.Tasks.Surface.Init.ExPatcher do
patcher
end

def patch(patcher, opts, fun) do
def patch(%__MODULE__{} = patcher, opts, fun) do
zipper = zipper(patcher)

patch =
Expand All @@ -406,7 +406,7 @@ defmodule Mix.Tasks.Surface.Init.ExPatcher do

updated_code = patcher |> code() |> Sourceror.patch_string([patch])

%__MODULE__{patcher | code: updated_code, result: :patched}
%{patcher | code: updated_code, result: :patched}
end

def code(%__MODULE__{code: code}) do
Expand Down
4 changes: 2 additions & 2 deletions lib/surface.ex
Original file line number Diff line number Diff line change
Expand Up @@ -172,12 +172,12 @@
end

@doc false
def __compile_sface__(name, file, env) do
def __compile_sface__(name, file, %Macro.Env{} = env) do
file
|> File.read!()
|> Surface.Compiler.compile(1, env, file)
|> Surface.Compiler.to_live_struct(
caller: %Macro.Env{env | file: file, line: 1, function: {String.to_atom(name), 1}},
caller: %{env | file: file, line: 1, function: {String.to_atom(name), 1}},
annotate_content: annotate_content()
)
end
Expand Down Expand Up @@ -500,6 +500,6 @@
defp annotate_content do
Code.ensure_loaded?(Phoenix.LiveView.HTMLEngine) &&
function_exported?(Phoenix.LiveView.HTMLEngine, :annotate_body, 1) &&
(&Phoenix.LiveView.HTMLEngine.annotate_body/1)

Check warning on line 503 in lib/surface.ex

View workflow job for this annotation

GitHub Actions / mix test (Elixir 1.13.4 | Erlang/OTP 25.0)

Phoenix.LiveView.HTMLEngine.annotate_body/1 is undefined or private
end
end
4 changes: 2 additions & 2 deletions lib/surface/macro_component.ex
Original file line number Diff line number Diff line change
Expand Up @@ -50,10 +50,10 @@ defmodule Surface.MacroComponent do
{name, value}
end

defp eval_value(%AST.Attribute{value: value_ast}, prop, caller) do
defp eval_value(%AST.Attribute{value: value_ast}, prop, %Macro.Env{} = caller) do
%AST.AttributeExpr{original: value, value: expr, meta: %{line: line, file: file}} = value_ast

env = %Macro.Env{caller | line: line}
env = %{caller | line: line}

{evaluated_value, _} =
try do
Expand Down
5 changes: 4 additions & 1 deletion mix.exs
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,6 @@ defmodule Surface.MixProject do
start_permanent: Mix.env() == :prod,
elixirc_paths: elixirc_paths(Mix.env()),
deps: deps(),
preferred_cli_env: [docs: :docs],
# Docs
name: "Surface",
source_url: @source_url,
Expand All @@ -32,6 +31,10 @@ defmodule Surface.MixProject do
]
end

def cli do
[preferred_envs: [docs: :docs]]
end

defp elixirc_paths(:dev), do: ["lib"] ++ catalogues()
defp elixirc_paths(:test), do: ["lib", "test/support"] ++ catalogues()
defp elixirc_paths(_), do: ["lib"]
Expand Down
41 changes: 25 additions & 16 deletions test/surface/integrations/lv_change_tracking_test.exs
Original file line number Diff line number Diff line change
Expand Up @@ -28,13 +28,13 @@ defmodule Surface.LVChangeTrackingTest do
"""
end

{socket, full_render, components} = render(comp.(assigns))
{full_render, fingerprints, components} = render(comp.(assigns))

assert has_dynamic_part?(full_render, "INNER WITH ARG")

assigns = Map.put(assigns, :__changed__, %{some_assign: true})

{_, full_render, _} = render(comp.(assigns), socket.fingerprints, components)
{full_render, _, _} = render(comp.(assigns), fingerprints, components)

assert has_dynamic_part?(full_render, "SOME_ASSIGN")
refute has_dynamic_part?(full_render, "INNER WITH ARG")
Expand All @@ -52,13 +52,13 @@ defmodule Surface.LVChangeTrackingTest do
"""
end

{socket, full_render, components} = render(comp.(assigns))
{full_render, fingerprints, components} = render(comp.(assigns))

assert has_dynamic_part?(full_render, "INNER WITH ARG")

assigns = Map.put(assigns, :__changed__, %{some_assign: true})

{_, full_render, _} = render(comp.(assigns), socket.fingerprints, components)
{full_render, _, _} = render(comp.(assigns), fingerprints, components)

assert has_dynamic_part?(full_render, "SOME_ASSIGN")
refute has_dynamic_part?(full_render, "INNER WITH ARG")
Expand All @@ -76,13 +76,13 @@ defmodule Surface.LVChangeTrackingTest do
"""
end

{socket, full_render, components} = render(comp.(assigns))
{full_render, fingerprints, components} = render(comp.(assigns))

assert has_dynamic_part?(full_render, "INNER WITH ARG")

assigns = Map.put(assigns, :__changed__, %{some_assign: true})

{_, full_render, _} = render(comp.(assigns), socket.fingerprints, components)
{full_render, _, _} = render(comp.(assigns), fingerprints, components)

# TODO: Why "INNER WITH ARG" is resent? It shouldn't!
assert has_dynamic_part?(full_render, "INNER WITH ARG")
Expand All @@ -100,13 +100,13 @@ defmodule Surface.LVChangeTrackingTest do
"""
end

{socket, full_render, components} = render(comp.(assigns))
{full_render, fingerprints, components} = render(comp.(assigns))

assert has_dynamic_part?(full_render, "INNER WITH ARG")

assigns = Map.put(assigns, :__changed__, %{some_assign: true})

{_, full_render, _} = render(comp.(assigns), socket.fingerprints, components)
{full_render, _, _} = render(comp.(assigns), fingerprints, components)

# TODO: Why "INNER WITH ARG" is resent? It shouldn't!
assert has_dynamic_part?(full_render, "INNER WITH ARG")
Expand All @@ -123,13 +123,13 @@ defmodule Surface.LVChangeTrackingTest do
"""
end

{socket, full_render, components} = render(comp.(assigns))
{full_render, fingerprints, components} = render(comp.(assigns))

assert has_dynamic_part?(full_render, "STATIC LABEL")

assigns = Map.put(assigns, :__changed__, %{content: true})

{_, full_render, _} = render(comp.(assigns), socket.fingerprints, components)
{full_render, _, _} = render(comp.(assigns), fingerprints, components)

assert has_dynamic_part?(full_render, "DYN CONTENT")
refute has_dynamic_part?(full_render, "STATIC LABEL")
Expand All @@ -146,13 +146,13 @@ defmodule Surface.LVChangeTrackingTest do
"""
end

{socket, full_render, components} = render(comp.(assigns))
{full_render, fingerprints, components} = render(comp.(assigns))

assert full_render[:s] == ["<button phx-click=\"click\">", "</button>\n"]

assigns = Map.put(assigns, :__changed__, %{content: true})

{_, full_render, _} = render(comp.(assigns), socket.fingerprints, components)
{full_render, _, _} = render(comp.(assigns), fingerprints, components)

assert full_render == %{0 => "DYN CONTENT"}
end
Expand All @@ -169,13 +169,13 @@ defmodule Surface.LVChangeTrackingTest do
# """
# end

# {socket, full_render, components} = render(comp.(assigns))
# {full_render, fingerprints, components} = render(comp.(assigns))

# assert full_render[:s] == ["<button phx-click=\"click\">", "</button>\n"]

# assigns = Map.put(assigns, :__changed__, %{content: true})

# {_, full_render, _} = render(comp.(assigns), socket.fingerprints, components)
# {full_render, _, _} = render(comp.(assigns), fingerprints, components)

# assert full_render == %{0 => "DYN CONTENT"}
# end
Expand All @@ -185,8 +185,17 @@ defmodule Surface.LVChangeTrackingTest do
fingerprints \\ Diff.new_fingerprints(),
components \\ Diff.new_components()
) do
socket = %Socket{endpoint: __MODULE__, fingerprints: fingerprints}
Diff.render(socket, rendered, components)
socket = %Socket{endpoint: __MODULE__}

if Map.has_key?(socket, :fingerprints) do
# LV < 1.1, using Diff.render/3
socket = Map.put(socket, :fingerprints, fingerprints)
{socket, full_render, components} = apply(Diff, :render, [socket, rendered, components])
{full_render, socket.fingerprints, components}
else
# LV >= 1.1, using Diff.render/4
apply(Diff, :render, [%Socket{endpoint: __MODULE__}, rendered, fingerprints, components])
end
end

defp has_dynamic_part?([{_, value} | _rest], value) do
Expand Down
2 changes: 1 addition & 1 deletion test/test_helper.exs
Original file line number Diff line number Diff line change
Expand Up @@ -50,7 +50,7 @@ defmodule ANSIHelpers do
"""
def maybe_ansi(text) do
if IO.ANSI.enabled?() do
"(\\e\\[\\d+m)?#{text}(\\e\\[0m)"
"(\\e\\[\\d+m)?#{text}(\\e\\[0m)?"
else
text
end
Expand Down
Loading