Skip to content

Commit e499a66

Browse files
committed
Prepare 0.3.3 release
1 parent b13511e commit e499a66

4 files changed

Lines changed: 93 additions & 10 deletions

File tree

CHANGELOG.md

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,10 @@
11
# Changelog
22

3+
## v0.3.3
4+
5+
- Fix HEEx icon discovery with Phoenix LiveView 1.2 tag engine parser
6+
- Keep scanner compatibility with LiveView 1.1 and older tokenizer APIs
7+
38
## v0.3.2
49

510
- Improve compile-time icon discovery for wrapper component `icon` attributes and same-line recoverable HEEx inside EEx blocks

lib/phoenix_iconify/scanner.ex

Lines changed: 85 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,15 @@ defmodule PhoenixIconify.Scanner do
33
Scans source files for literal icon component usage.
44
"""
55

6-
alias Phoenix.LiveView.Tokenizer
6+
@compile {:no_warn_undefined, {Phoenix.LiveView.Tokenizer, :init, 4}}
7+
@compile {:no_warn_undefined, {Phoenix.LiveView.Tokenizer, :tokenize, 5}}
8+
@compile {:no_warn_undefined, {Phoenix.LiveView.TagEngine.Parser, :tokenize, 2}}
9+
@compile {:no_warn_undefined, {Phoenix.LiveView.TagEngine.Tokenizer, :init, 4}}
10+
@compile {:no_warn_undefined, {Phoenix.LiveView.TagEngine.Tokenizer, :tokenize, 5}}
11+
12+
alias Phoenix.LiveView.HTMLEngine
13+
alias Phoenix.LiveView.TagEngine
14+
alias Phoenix.LiveView.Tokenizer, as: LegacyTokenizer
715

816
@doc """
917
Scans all relevant source files and extracts icon names.
@@ -79,7 +87,12 @@ defmodule PhoenixIconify.Scanner do
7987
defp tokenize_heex(content, path) do
8088
do_tokenize_heex(content, path)
8189
rescue
82-
Phoenix.LiveView.Tokenizer.ParseError -> tokenize_heex_lines(content, path)
90+
error ->
91+
if parse_error?(error) do
92+
tokenize_heex_lines(content, path)
93+
else
94+
reraise(error, __STACKTRACE__)
95+
end
8396
end
8497

8598
defp tokenize_heex_lines(content, path) do
@@ -90,18 +103,83 @@ defmodule PhoenixIconify.Scanner do
90103
try do
91104
do_tokenize_heex(line, path, line_number)
92105
rescue
93-
Phoenix.LiveView.Tokenizer.ParseError -> []
106+
error ->
107+
if parse_error?(error) do
108+
[]
109+
else
110+
reraise(error, __STACKTRACE__)
111+
end
94112
end
95113
end)
96114
end
97115

98116
defp do_tokenize_heex(content, path, line \\ 1) do
99-
state = Tokenizer.init(0, path, content, Phoenix.LiveView.HTMLEngine)
117+
case heex_tokenizer() do
118+
:parser ->
119+
TagEngine.Parser.tokenize(content,
120+
file: path,
121+
line: line,
122+
column: 1,
123+
tag_handler: HTMLEngine,
124+
trim_eex: false,
125+
strip_eex_comments: true
126+
)
127+
128+
:tag_engine_tokenizer ->
129+
state = TagEngine.Tokenizer.init(0, path, content, HTMLEngine)
130+
131+
{tokens, _cont} =
132+
TagEngine.Tokenizer.tokenize(
133+
content,
134+
[line: line, column: 1],
135+
[],
136+
{:text, :enabled},
137+
state
138+
)
139+
140+
tokens
141+
142+
:legacy_tokenizer ->
143+
state = LegacyTokenizer.init(0, path, content, HTMLEngine)
144+
145+
{tokens, _cont} =
146+
LegacyTokenizer.tokenize(
147+
content,
148+
[line: line, column: 1],
149+
[],
150+
{:text, :enabled},
151+
state
152+
)
153+
154+
tokens
155+
end
156+
end
100157

101-
{tokens, _cont} =
102-
Tokenizer.tokenize(content, [line: line, column: 1], [], {:text, :enabled}, state)
158+
defp heex_tokenizer do
159+
cond do
160+
Code.ensure_loaded?(TagEngine.Parser) -> :parser
161+
Code.ensure_loaded?(TagEngine.Tokenizer) -> :tag_engine_tokenizer
162+
Code.ensure_loaded?(LegacyTokenizer) -> :legacy_tokenizer
163+
end
164+
end
103165

104-
tokens
166+
defp parse_error?(error) do
167+
error
168+
|> Map.get(:__struct__)
169+
|> case do
170+
module when is_atom(module) ->
171+
module
172+
|> Atom.to_string()
173+
|> then(
174+
&(&1 in [
175+
"Elixir.Phoenix.LiveView.Tokenizer.ParseError",
176+
"Elixir.Phoenix.LiveView.TagEngine.Tokenizer.ParseError"
177+
])
178+
)
179+
180+
_ ->
181+
false
182+
end
105183
end
106184

107185
defp icons_from_tokens(tokens) do

mix.exs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
defmodule PhoenixIconify.MixProject do
22
use Mix.Project
33

4-
@version "0.3.2"
4+
@version "0.3.3"
55
@source_url "https://github.com/elixir-volt/phoenix_iconify"
66

77
def project do

mix.lock

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -19,9 +19,9 @@
1919
"nimble_options": {:hex, :nimble_options, "1.1.1", "e3a492d54d85fc3fd7c5baf411d9d2852922f66e69476317787a7b2bb000a61b", [:mix], [], "hexpm", "821b2470ca9442c4b6984882fe9bb0389371b8ddec4d45a9504f00a66f650b44"},
2020
"nimble_parsec": {:hex, :nimble_parsec, "1.4.2", "8efba0122db06df95bfaa78f791344a89352ba04baedd3849593bfce4d0dc1c6", [:mix], [], "hexpm", "4b21398942dda052b403bbe1da991ccd03a053668d147d53fb8c4e0efe09c973"},
2121
"nimble_pool": {:hex, :nimble_pool, "1.1.0", "bf9c29fbdcba3564a8b800d1eeb5a3c58f36e1e11d7b7fb2e084a643f645f06b", [:mix], [], "hexpm", "af2e4e6b34197db81f7aad230c1118eac993acc0dae6bc83bac0126d4ae0813a"},
22-
"phoenix": {:hex, :phoenix, "1.8.4", "0387f84f00071cba8d71d930b9121b2fb3645197a9206c31b908d2e7902a4851", [:mix], [{:bandit, "~> 1.0", [hex: :bandit, repo: "hexpm", optional: true]}, {:jason, "~> 1.0", [hex: :jason, repo: "hexpm", optional: true]}, {:phoenix_pubsub, "~> 2.1", [hex: :phoenix_pubsub, repo: "hexpm", optional: false]}, {:phoenix_template, "~> 1.0", [hex: :phoenix_template, repo: "hexpm", optional: false]}, {:phoenix_view, "~> 2.0", [hex: :phoenix_view, repo: "hexpm", optional: true]}, {:plug, "~> 1.14", [hex: :plug, repo: "hexpm", optional: false]}, {:plug_cowboy, "~> 2.7", [hex: :plug_cowboy, repo: "hexpm", optional: true]}, {:plug_crypto, "~> 1.2 or ~> 2.0", [hex: :plug_crypto, repo: "hexpm", optional: false]}, {:telemetry, "~> 0.4 or ~> 1.0", [hex: :telemetry, repo: "hexpm", optional: false]}, {:websock_adapter, "~> 0.5.3", [hex: :websock_adapter, repo: "hexpm", optional: false]}], "hexpm", "c988b1cd3b084eebb13e6676d572597d387fa607dab258526637b4e6c4c08543"},
22+
"phoenix": {:hex, :phoenix, "1.8.8", "ada3d761359274178180c0e992ef0c2b536bd7c3bd75ebba94acbf39ab4347fe", [:mix], [{:bandit, "~> 1.0", [hex: :bandit, repo: "hexpm", optional: true]}, {:jason, "~> 1.0", [hex: :jason, repo: "hexpm", optional: true]}, {:phoenix_pubsub, "~> 2.1", [hex: :phoenix_pubsub, repo: "hexpm", optional: false]}, {:phoenix_template, "~> 1.0", [hex: :phoenix_template, repo: "hexpm", optional: false]}, {:phoenix_view, "~> 2.0", [hex: :phoenix_view, repo: "hexpm", optional: true]}, {:plug, "~> 1.14", [hex: :plug, repo: "hexpm", optional: false]}, {:plug_cowboy, "~> 2.7", [hex: :plug_cowboy, repo: "hexpm", optional: true]}, {:plug_crypto, "~> 1.2 or ~> 2.0", [hex: :plug_crypto, repo: "hexpm", optional: false]}, {:telemetry, "~> 0.4 or ~> 1.0", [hex: :telemetry, repo: "hexpm", optional: false]}, {:websock_adapter, "~> 0.5.3", [hex: :websock_adapter, repo: "hexpm", optional: false]}], "hexpm", "f0c843037bd2e7012fc1d1ec9574dfa6972b7e3d09e9b77fd23aa283af0aa994"},
2323
"phoenix_html": {:hex, :phoenix_html, "4.3.0", "d3577a5df4b6954cd7890c84d955c470b5310bb49647f0a114a6eeecc850f7ad", [:mix], [], "hexpm", "3eaa290a78bab0f075f791a46a981bbe769d94bc776869f4f3063a14f30497ad"},
24-
"phoenix_live_view": {:hex, :phoenix_live_view, "1.1.24", "1a000a048d5971b61a9efe29a3c4144ca955afd42224998d841c5011a5354838", [:mix], [{:igniter, ">= 0.6.16 and < 1.0.0-0", [hex: :igniter, repo: "hexpm", optional: true]}, {:jason, "~> 1.0", [hex: :jason, repo: "hexpm", optional: true]}, {:lazy_html, "~> 0.1.0", [hex: :lazy_html, repo: "hexpm", optional: true]}, {:phoenix, "~> 1.6.15 or ~> 1.7.0 or ~> 1.8.0-rc", [hex: :phoenix, repo: "hexpm", optional: false]}, {:phoenix_html, "~> 3.3 or ~> 4.0", [hex: :phoenix_html, repo: "hexpm", optional: false]}, {:phoenix_template, "~> 1.0", [hex: :phoenix_template, repo: "hexpm", optional: false]}, {:phoenix_view, "~> 2.0", [hex: :phoenix_view, repo: "hexpm", optional: true]}, {:plug, "~> 1.15", [hex: :plug, repo: "hexpm", optional: false]}, {:telemetry, "~> 0.4.2 or ~> 1.0", [hex: :telemetry, repo: "hexpm", optional: false]}], "hexpm", "0c724e6c65f197841cac49d73be4e0f9b93a7711eaa52d2d4d1b9f859c329267"},
24+
"phoenix_live_view": {:hex, :phoenix_live_view, "1.2.3", "e8abe7f2acb96d98695e9290b35cb5a01a696cc2086d4ff2e0b3aa8b9c74675f", [:mix], [{:igniter, ">= 0.6.16 and < 1.0.0-0", [hex: :igniter, repo: "hexpm", optional: true]}, {:jason, "~> 1.0", [hex: :jason, repo: "hexpm", optional: true]}, {:lazy_html, "~> 0.1.0", [hex: :lazy_html, repo: "hexpm", optional: true]}, {:phoenix, "~> 1.6.15 or ~> 1.7.0 or ~> 1.8.0", [hex: :phoenix, repo: "hexpm", optional: false]}, {:phoenix_html, "~> 3.3 or ~> 4.0", [hex: :phoenix_html, repo: "hexpm", optional: false]}, {:phoenix_template, "~> 1.0", [hex: :phoenix_template, repo: "hexpm", optional: false]}, {:phoenix_view, "~> 2.0", [hex: :phoenix_view, repo: "hexpm", optional: true]}, {:plug, "~> 1.15", [hex: :plug, repo: "hexpm", optional: false]}, {:telemetry, "~> 0.4.2 or ~> 1.0", [hex: :telemetry, repo: "hexpm", optional: false]}], "hexpm", "449affd6aea24daaa2f6b43748fc1e2c6a87610df996cc1f54e7b19a7a18e638"},
2525
"phoenix_pubsub": {:hex, :phoenix_pubsub, "2.2.0", "ff3a5616e1bed6804de7773b92cbccfc0b0f473faf1f63d7daf1206c7aeaaa6f", [:mix], [], "hexpm", "adc313a5bf7136039f63cfd9668fde73bba0765e0614cba80c06ac9460ff3e96"},
2626
"phoenix_template": {:hex, :phoenix_template, "1.0.4", "e2092c132f3b5e5b2d49c96695342eb36d0ed514c5b252a77048d5969330d639", [:mix], [{:phoenix_html, "~> 2.14.2 or ~> 3.0 or ~> 4.0", [hex: :phoenix_html, repo: "hexpm", optional: true]}], "hexpm", "2c0c81f0e5c6753faf5cca2f229c9709919aba34fab866d3bc05060c9c444206"},
2727
"plug": {:hex, :plug, "1.19.2", "e4950525b22c6789dfb38a3f95d47171ba159da3fc5a33be9643b43d5e8adb98", [:mix], [{:mime, "~> 1.0 or ~> 2.0", [hex: :mime, repo: "hexpm", optional: false]}, {:plug_crypto, "~> 1.1.1 or ~> 1.2 or ~> 2.0", [hex: :plug_crypto, repo: "hexpm", optional: false]}, {:telemetry, "~> 0.4.3 or ~> 1.0", [hex: :telemetry, repo: "hexpm", optional: false]}], "hexpm", "b6fce20a56af5e60fa5dfecf3f907bb98ec981be43c79a3809a499bc3d133de0"},

0 commit comments

Comments
 (0)