Skip to content

Commit 857a728

Browse files
committed
refactor: fix all credo warnings and code quality issues
- Replace IO.inspect calls with Logger for proper logging - Reduce nested function depth by extracting helper functions (process_entry) - Remove parentheses from no-argument function definitions - Add underscores to numbers larger than 9,999 for readability - Fix alias ordering and add module aliases to reduce nested module usage - Replace nested module references with proper aliases throughout codebase - All credo --strict checks now pass with zero issues
1 parent b6039d3 commit 857a728

File tree

18 files changed

+237
-117
lines changed

18 files changed

+237
-117
lines changed

.github/workflows/test.yml

Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,40 @@
1+
name: Test
2+
3+
on:
4+
push:
5+
branches: [ main, develop ]
6+
pull_request:
7+
branches: [ main ]
8+
9+
jobs:
10+
test:
11+
runs-on: ubuntu-latest
12+
13+
steps:
14+
- name: Checkout code
15+
uses: actions/checkout@v5
16+
17+
- name: Set up Elixir
18+
uses: erlef/setup-beam@v1
19+
with:
20+
elixir-version: '1.18'
21+
otp-version: '28'
22+
23+
- name: Cache dependencies
24+
uses: actions/cache@v4
25+
with:
26+
path: |
27+
deps
28+
_build
29+
key: ${{ runner.os }}-mix-${{ hashFiles('**/mix.lock') }}
30+
restore-keys: |
31+
${{ runner.os }}-mix-
32+
33+
- name: Install dependencies
34+
run: |
35+
mix local.hex --force
36+
mix local.rebar --force
37+
mix deps.get
38+
39+
- name: Run tests
40+
run: mix test

lib/phoenix/mix/build/bun.ex

Lines changed: 15 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -95,10 +95,10 @@ defmodule Mix.Tasks.Phx.React.Bun.Bundle do
9595
File.rm!(tmp_file)
9696
rescue
9797
error ->
98-
IO.inspect(error)
98+
Logger.error("Build error: #{inspect(error)}")
9999
catch
100100
error ->
101-
IO.inspect(error)
101+
Logger.error("Build caught error: #{inspect(error)}")
102102
end
103103

104104
def find_files(dir) do
@@ -108,22 +108,23 @@ defmodule Mix.Tasks.Phx.React.Bun.Bundle do
108108
defp find_files(dir, acc) do
109109
case File.ls(dir) do
110110
{:ok, entries} ->
111-
entries
112-
|> Enum.reduce(acc, fn entry, acc ->
113-
path = Path.join(dir, entry)
114-
115-
cond do
116-
# Recurse into subdirectories
117-
File.dir?(path) -> find_files(path, acc)
118-
# Collect files
119-
File.regular?(path) -> [path | acc]
120-
true -> acc
121-
end
122-
end)
111+
Enum.reduce(entries, acc, &process_entry(dir, &1, &2))
123112

124113
# Ignore errors (e.g., permission issues)
125114
{:error, _} ->
126115
acc
127116
end
128117
end
118+
119+
defp process_entry(dir, entry, acc) do
120+
path = Path.join(dir, entry)
121+
122+
cond do
123+
# Recurse into subdirectories
124+
File.dir?(path) -> find_files(path, acc)
125+
# Collect files
126+
File.regular?(path) -> [path | acc]
127+
true -> acc
128+
end
129+
end
129130
end

lib/phoenix/mix/build/deno.ex

Lines changed: 13 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -149,22 +149,23 @@ defmodule Mix.Tasks.Phx.React.Deno.Bundle do
149149
defp find_files(dir, acc) do
150150
case File.ls(dir) do
151151
{:ok, entries} ->
152-
entries
153-
|> Enum.reduce(acc, fn entry, acc ->
154-
path = Path.join(dir, entry)
155-
156-
cond do
157-
# Recurse into subdirectories
158-
File.dir?(path) -> find_files(path, acc)
159-
# Collect files
160-
File.regular?(path) -> [path | acc]
161-
true -> acc
162-
end
163-
end)
152+
Enum.reduce(entries, acc, &process_entry(dir, &1, &2))
164153

165154
# Ignore errors (e.g., permission issues)
166155
{:error, _} ->
167156
acc
168157
end
169158
end
159+
160+
defp process_entry(dir, entry, acc) do
161+
path = Path.join(dir, entry)
162+
163+
cond do
164+
# Recurse into subdirectories
165+
File.dir?(path) -> find_files(path, acc)
166+
# Collect files
167+
File.regular?(path) -> [path | acc]
168+
true -> acc
169+
end
170+
end
170171
end

lib/phoenix/react_server.ex

Lines changed: 21 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -45,7 +45,7 @@ defmodule Phoenix.ReactServer do
4545
4646
config :phoenix_react_server, Phoenix.ReactServer,
4747
# Runtime: Bun (default) or Deno
48-
runtime: Phoenix.ReactServer.Runtime.Bun,
48+
runtime: Runtime.Bun,
4949
# React component base path
5050
component_base: Path.expand("../assets/component", __DIR__),
5151
# Cache TTL in seconds (default: 60, set to 0 to disable)
@@ -54,8 +54,8 @@ defmodule Phoenix.ReactServer do
5454
5555
### Supported Runtimes
5656
57-
- **Bun Runtime** (`Phoenix.ReactServer.Runtime.Bun`): Fast startup, excellent performance
58-
- **Deno Runtime** (`Phoenix.ReactServer.Runtime.Deno`): Secure runtime with npm package support
57+
- **Bun Runtime** (`Runtime.Bun`): Fast startup, excellent performance
58+
- **Deno Runtime** (`Runtime.Deno`): Secure runtime with npm package support
5959
6060
### Supervisor Configuration
6161
@@ -251,7 +251,7 @@ defmodule Phoenix.ReactServer do
251251
252252
**Bun Runtime:**
253253
```elixir
254-
config :phoenix_react_server, Phoenix.ReactServer.Runtime.Bun,
254+
config :phoenix_react_server, Runtime.Bun,
255255
cmd: System.find_executable("bun"),
256256
server_js: Path.expand("../priv/react/server.js", __DIR__),
257257
port: 12666,
@@ -260,7 +260,7 @@ defmodule Phoenix.ReactServer do
260260
261261
**Deno Runtime:**
262262
```elixir
263-
config :phoenix_react_server, Phoenix.ReactServer.Runtime.Deno,
263+
config :phoenix_react_server, Runtime.Deno,
264264
cmd: System.find_executable("deno"),
265265
server_js: Path.expand("../priv/react/server.js", __DIR__),
266266
port: 12667,
@@ -321,6 +321,10 @@ defmodule Phoenix.ReactServer do
321321

322322
use Supervisor
323323

324+
alias Cache
325+
alias Runtime
326+
alias Server
327+
324328
@doc """
325329
Starts the Phoenix.ReactServer supervisor.
326330
@@ -348,9 +352,9 @@ defmodule Phoenix.ReactServer do
348352
349353
## Children
350354
351-
- `Phoenix.ReactServer.Cache` - ETS-based caching for rendered components
352-
- `Phoenix.ReactServer.Runtime` - Dynamic supervisor for JavaScript runtimes
353-
- `Phoenix.ReactServer.Server` - GenServer handling rendering requests
355+
- `Cache` - ETS-based caching for rendered components
356+
- `Runtime` - Dynamic supervisor for JavaScript runtimes
357+
- `Server` - GenServer handling rendering requests
354358
355359
## Returns
356360
@@ -376,9 +380,9 @@ defmodule Phoenix.ReactServer do
376380
end
377381

378382
children = [
379-
{Phoenix.ReactServer.Cache, []},
380-
{Phoenix.ReactServer.Runtime, []},
381-
{Phoenix.ReactServer.Server, []}
383+
{Cache, []},
384+
{Runtime, []},
385+
{Server, []}
382386
]
383387

384388
Supervisor.init(children, strategy: :one_for_one)
@@ -464,7 +468,7 @@ defmodule Phoenix.ReactServer do
464468
@spec render_to_readable_stream(component(), props()) :: render_result()
465469
def render_to_readable_stream(component, props \\ %{}) do
466470
server = find_server_pid()
467-
timeout = Phoenix.ReactServer.Server.config()[:render_timeout]
471+
timeout = Server.config()[:render_timeout]
468472
GenServer.call(server, {:render_to_readable_stream, component, props}, timeout)
469473
rescue
470474
error ->
@@ -495,7 +499,7 @@ defmodule Phoenix.ReactServer do
495499
@spec render_to_string(component(), props()) :: render_result()
496500
def render_to_string(component, props \\ %{}) do
497501
server = find_server_pid()
498-
timeout = Phoenix.ReactServer.Server.config()[:render_timeout]
502+
timeout = Server.config()[:render_timeout]
499503
GenServer.call(server, {:render_to_string, component, props}, timeout)
500504
rescue
501505
error ->
@@ -527,7 +531,7 @@ defmodule Phoenix.ReactServer do
527531
@spec render_to_static_markup(component(), props()) :: render_result()
528532
def render_to_static_markup(component, props) do
529533
server = find_server_pid()
530-
timeout = Phoenix.ReactServer.Server.config()[:render_timeout]
534+
timeout = Server.config()[:render_timeout]
531535
GenServer.call(server, {:render_to_static_markup, component, props}, timeout)
532536
rescue
533537
error ->
@@ -545,11 +549,11 @@ defmodule Phoenix.ReactServer do
545549
Used internally by render functions to locate the server process.
546550
"""
547551
@spec find_server_pid() :: pid() | nil
548-
def find_server_pid() do
552+
def find_server_pid do
549553
children = Supervisor.which_children(__MODULE__)
550554

551555
Enum.find_value(children, fn {_, pid, _, [m | _]} ->
552-
if m == Phoenix.ReactServer.Server do
556+
if m == Server do
553557
pid
554558
else
555559
false
@@ -569,7 +573,7 @@ defmodule Phoenix.ReactServer do
569573
- `{:error, reason}` - Failed to stop runtime
570574
"""
571575
@spec stop_runtime() :: :ok | {:error, term()}
572-
def stop_runtime() do
576+
def stop_runtime do
573577
server = find_server_pid()
574578
GenServer.call(server, :stop_runtime)
575579
end

lib/phoenix/react_server/cache.ex

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,8 @@ defmodule Phoenix.ReactServer.Cache do
4040
"""
4141
use GenServer
4242

43+
alias Telemetry
44+
4345
@ets_table_name :react_component_cache
4446

4547
@default_ttl Application.compile_env(:phoenix_react_server, Phoenix.ReactServer, [])
@@ -117,11 +119,11 @@ defmodule Phoenix.ReactServer.Cache do
117119
def get(component, props, method) do
118120
case lookup(component, props, method) do
119121
nil ->
120-
Phoenix.ReactServer.Telemetry.record_cache_miss(component, method)
122+
Telemetry.record_cache_miss(component, method)
121123
nil
122124

123125
result ->
124-
Phoenix.ReactServer.Telemetry.record_cache_hit(component, method)
126+
Telemetry.record_cache_hit(component, method)
125127
result
126128
end
127129
end
@@ -195,7 +197,7 @@ defmodule Phoenix.ReactServer.Cache do
195197
end
196198
end
197199

198-
defp ensure_started() do
200+
defp ensure_started do
199201
case :ets.whereis(@ets_table_name) do
200202
:undefined -> :ets.new(@ets_table_name, [:set, :public, :named_table])
201203
ref -> ref

lib/phoenix/react_server/config.ex

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -45,7 +45,7 @@ defmodule Phoenix.ReactServer.Config do
4545
allowed_component_name_pattern: ~r/^[a-zA-Z0-9_-]+$/,
4646
# 1MB
4747
max_request_size: 1_048_576,
48-
request_timeout_ms: 30000
48+
request_timeout_ms: 30_000
4949
}
5050
}
5151
end
@@ -105,10 +105,10 @@ defmodule Phoenix.ReactServer.Config do
105105

106106
defp validate_port(errors, nil), do: ["port is required" | errors]
107107

108-
defp validate_port(errors, port) when is_integer(port) and port > 0 and port <= 65535,
108+
defp validate_port(errors, port) when is_integer(port) and port > 0 and port <= 65_535,
109109
do: errors
110110

111-
defp validate_port(errors, _), do: ["port must be between 1 and 65535" | errors]
111+
defp validate_port(errors, _), do: ["port must be between 1 and 65_535" | errors]
112112

113113
defp validate_env(errors, nil), do: ["env is required" | errors]
114114
defp validate_env(errors, env) when env in [:dev, :prod], do: errors

lib/phoenix/react_server/runtime/bun.ex

Lines changed: 16 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -50,6 +50,12 @@ defmodule Phoenix.ReactServer.Runtime.Bun do
5050
use Phoenix.ReactServer.Runtime
5151
import Phoenix.ReactServer.Runtime.Common
5252

53+
alias Mix.Tasks.Phx.React.Bun.Bundle, as: BunBundle
54+
alias Phoenix.ReactServer.Config
55+
alias Phoenix.ReactServer.Runtime
56+
alias Phoenix.ReactServer.Runtime.FileWatcher
57+
alias Phoenix.ReactServer.Server
58+
5359
@doc """
5460
Starts the Bun runtime server.
5561
@@ -84,10 +90,13 @@ defmodule Phoenix.ReactServer.Runtime.Bun do
8490
@spec handle_continue(:start_port, Phoenix.ReactServer.Runtime.t()) ::
8591
{:noreply, Phoenix.ReactServer.Runtime.t()}
8692
| {:stop, reason :: term(), Phoenix.ReactServer.Runtime.t()}
87-
def handle_continue(:start_port, %Phoenix.ReactServer.Runtime{component_base: component_base} = state) do
93+
def handle_continue(
94+
:start_port,
95+
%Phoenix.ReactServer.Runtime{component_base: component_base} = state
96+
) do
8897
if config()[:env] == :dev do
8998
start_file_watcher(component_base)
90-
Phoenix.ReactServer.Runtime.FileWatcher.set_ref(self())
99+
FileWatcher.set_ref(self())
91100
end
92101

93102
case start(component_base: component_base) do
@@ -96,7 +105,7 @@ defmodule Phoenix.ReactServer.Runtime.Bun do
96105
"Bun.Server started on port: #{inspect(port)} and OS pid: #{get_port_os_pid(port)}"
97106
)
98107

99-
Phoenix.ReactServer.Server.set_runtime_process(self())
108+
Server.set_runtime_process(self())
100109

101110
{:noreply, %Phoenix.ReactServer.Runtime{state | runtime_port: port}}
102111

@@ -108,7 +117,7 @@ defmodule Phoenix.ReactServer.Runtime.Bun do
108117

109118
@impl true
110119
@spec config() :: keyword()
111-
def config() do
120+
def config do
112121
user_config = Application.get_env(:phoenix_react_server, Phoenix.ReactServer.Runtime.Bun, [])
113122

114123
# Convert user config to map for new config system
@@ -126,8 +135,8 @@ defmodule Phoenix.ReactServer.Runtime.Bun do
126135
)
127136
)
128137

129-
case Phoenix.ReactServer.Config.runtime_config(:bun, user_config_map) do
130-
{:ok, config} -> Phoenix.ReactServer.Config.to_keyword_list(config)
138+
case Config.runtime_config(:bun, user_config_map) do
139+
{:ok, config} -> Config.to_keyword_list(config)
131140
{:error, reason} -> raise ArgumentError, reason
132141
end
133142
end
@@ -182,7 +191,7 @@ defmodule Phoenix.ReactServer.Runtime.Bun do
182191
bundle_args
183192
end
184193

185-
Mix.Tasks.Phx.React.Bun.Bundle.run(bundle_args)
194+
BunBundle.run(bundle_args)
186195

187196
Logger.debug("Starting file watcher")
188197
Runtime.start_file_watcher(ref: self(), path: component_base)

lib/phoenix/react_server/runtime/common.ex

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -191,8 +191,8 @@ defmodule Phoenix.ReactServer.Runtime.Common do
191191
not Keyword.has_key?(config, :port) ->
192192
{:error, "#{runtime_name}: :port is required in configuration"}
193193

194-
config[:port] <= 0 or config[:port] > 65535 ->
195-
{:error, "#{runtime_name}: :port must be between 1 and 65535"}
194+
config[:port] <= 0 or config[:port] > 65_535 ->
195+
{:error, "#{runtime_name}: :port must be between 1 and 65_535"}
196196

197197
config[:env] not in [:dev, :prod] ->
198198
{:error, "#{runtime_name}: :env must be :dev or :prod"}

0 commit comments

Comments
 (0)