$ the-wire · showcase
Compiler warnings get paths that survive a cloned _build
By RepoJournal · Filed · About Elixir & Phoenix · Composed from the cited sources · methodology
Phoenix, LiveView and Elixir all moved this week to make compile-time diagnostic paths relative to the working directory, so warnings emitted from @after_verify land on the file you are actually editing rather than the checkout they were compiled in.
Store ~p warning file relative to cwd phoenixframework/phoenix
Route warnings such as "no route path for ... matches ..." come from @after_verify using a file captured at compile time; with an absolute path, a project reusing _build (a git worktree or copy-on-write clone compiled with check_cwd: false) pointed editors and coding agents at the original checkout. warn_location now stores Path.relative_to_cwd(file), which Elixir resolves against the current d...
Make source absolute for diagnostics emitted from after_verify elixir-lang/elixir
The parallel checker never sets :elixir_compiler_file, so a warning from an @after_verify callback carried whatever :file the callback passed to IO.warn/2, and Mix could not match a relative :source against the absolute paths it persists by. Such warnings printed once and never reached the manifest; the checker now makes :source absolute alongside :file.
Store component call file relative to cwd phoenixframework/phoenix_live_view
Component call warnings for missing or unknown attrs and slots suffered the same stale-checkout problem, since they use the file recorded in __components_calls__ at compile time. LiveView now stores Path.relative_to_cwd(state.file) and rewrites the caller tuple handed to Phoenix.LiveView.TagEngine accordingly.
Share one prepare function across router clauses phoenixframework/phoenix
Every __match_route__ clause used to compile its own anonymous function just to merge path params and the route's compile-time private and assigns into the conn, costing large routers one extra function per route in the Erlang compiler. Each clause now returns {private, assigns} as a literal and Phoenix.Router.__call__/5 hands it to a shared Phoenix.Router.Route.prepare/3; __match_route__ is in...
Track atom keys mixed with other domain keys as optional in maps elixir-lang/elixir
Two commits from José Valim close out map-key inference: atom keys mixed with other domain keys are now tracked as optional, and previous atom keys are considered when building maps with negated keys. The remaining items are small: an outdated checksum mention removed from the docs, a test-suite warning fixed, and the two release-side commits that carry the changes above.