Skip to content

Commit 1ca9f08

Browse files
committed
Follow the parser module rename in the coverage ignore list and guard against future orphaned entries
1 parent e8f94de commit 1ca9f08

4 files changed

Lines changed: 77 additions & 7 deletions

File tree

CHANGELOG.md

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,8 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/),
1010

1111
* Change the namespaces on the `leex` lexers and `yecc` parsers to avoid module name clash with `ex_cldr` versions. Thanks to @jerryluk for the PR. Closes #40.
1212

13+
* The coverage ignore list follows the renamed lexer/parser modules, restoring measured coverage above the 90% CI threshold; a guard test now fails when an ignore-list entry names a module that no longer exists.
14+
1315
## [0.48.0] — July 8th, 2026
1416

1517
### Added

mix.exs

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -254,13 +254,13 @@ defmodule Localize.MixProject do
254254
Localizer.Rfc5646.Core,
255255
Localize.Number.PluralRule.Loader,
256256
Localize.Number.PluralRule.Transformer,
257-
:rbnf_lexer,
258-
:rbnf_parser,
259-
:plural_rules_lexer,
260-
:plural_rules_parser,
261-
:decimal_formats_lexer,
262-
:decimal_formats_parser,
263-
:date_time_format_lexer
257+
:localize_rbnf_lexer,
258+
:localize_rbnf_parser,
259+
:localize_plural_rules_lexer,
260+
:localize_plural_rules_parser,
261+
:localize_decimal_formats_lexer,
262+
:localize_decimal_formats_parser,
263+
:localize_date_time_format_lexer
264264
]
265265
end
266266

plans/demo_ideas.md

Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,41 @@
1+
# Conference demo ideas — Elixir/BEAM conference, 2027
2+
3+
The organizers cultivate a "music festival" mood: light, relaxed, creative, energetic. The brief: a new project with a very cool demo and, ideally, audience participation. Four candidates, with a recommendation at the end.
4+
5+
## 1. Emoji DJ — launch `localize_emoji` on stage
6+
7+
Already on the roadmap ([plans/cldr-49.md](cldr-49.md) item 11): a sibling library for emoji search over CLDR annotations with boolean tag queries. Build it over the winter, launch it at the conference.
8+
9+
**The demo.** A giant screen running a LiveView "emoji mixing desk". Type queries live — `face and (happy or mischievous) and not sad`, `"dark skin tone" and musician` — and the wall fills with results in the audience's languages, because annotations are per-locale. Then the drop: the audience joins by QR code, every phone becomes a search box, and matching emoji rain onto the big screen like festival crowd reactions, tagged with the locale that searched for them.
10+
11+
**Why it fits.** Emoji are inherently light and playful; boolean query parsing is a satisfying little language-design story for a BEAM crowd; and the talk ends having shipped a real hex package the audience can add to a project before the next session. The October `ldml2json_v2` pipeline work is the data prerequisite, so the roadmap already points here.
12+
13+
## 2. The Babel Wall — one app, every locale in the room, live
14+
15+
A festival-themed LiveView app (lineup, set times, ticket prices, distances to stages) where each attendee joins on their phone and the app negotiates their locale from `Accept-Language` — the `best_match` story. The big screen is a wall of every locale currently in the room rendering the same screen: Arabic digits, Buddhist calendar dates, 24-hour vs 12-hour, currency symbol placement, km vs miles.
16+
17+
**The demo moment.** "Let's add Japanese" — add one MF2 translation file live, hot-reload, and thirty phones in the room flip. Zero code change. Then a plural-rules quiz: everyone's phone shows "you have N messages" for their locale and the audience discovers together that Arabic has six plural forms.
18+
19+
**Why it fits.** The strongest pure-Localize showcase — process-per-user locale is a genuinely BEAM-shaped design — and presence + PubSub with hundreds of phones is exactly what LiveView was born for.
20+
21+
## 3. OTP Orchestra — the audience is the instrument
22+
23+
Every phone that joins becomes a voice: a process emitting notes/samples, mixed through PubSub (or Membrane for real audio pipelines) into music played through the PA. Sections of the room get instruments by seating block; a conductor view mutes, solos, and layers the crowd. Latency compensation and back-pressure are the technical meat — GenStage as a rhythm section.
24+
25+
**Why it fits.** Maximum festival energy — the room literally makes music together — and "a thousand processes are playing this song right now" is the most visceral BEAM demo there is. The localization tie is thinner (per-locale phone UI, note names per locale), so this trades maintainer authority for spectacle. Highest on-stage failure risk (live audio).
26+
27+
## 4. The Great Collation Race
28+
29+
Sorting as spectator sport. The audience submits words — names, band names, words from their languages — and the big screen animates the same list re-sorting live under different collations: default UCA, German phonebook, Swedish, zh-pinyin vs zh-stroke, numeric mode, backwards French accents. Bars slide past each other like a horse race; the audience bets on where "Öztürk" lands before each round.
30+
31+
**Why it fits.** Collation is the most underexplained topic in software and the animation makes it instantly visible. Probably a 10-minute segment rather than a whole talk — which is why it composes well with ideas 1 or 2.
32+
33+
## Recommendation
34+
35+
**Idea 1 (Emoji DJ) as the spine, with idea 4 as a segment.** It is the only option that leaves a real artifact behind — a new library launched on stage, born from the existing roadmap — and emoji provide festival-mood visuals without manufactured whimsy. The participation mechanic is robust (worst case, people search emoji on their phones, which is already fun), whereas live audio has the highest failure risk. A successful talk doubles as `localize_emoji`'s launch day.
36+
37+
## Timeline sketch
38+
39+
* October 2026 — CLDR 49 cycle lands `ldml2json_v2` and the annotations data path (prerequisite).
40+
* Winter 2026/27 — build `localize_emoji` (package skeleton, normalizer, query DSL, LiveView demo shell).
41+
* Spring 2027 — talk outline, demo hardening (offline fallback, capacity test with simulated phones), collation-race segment.
Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
defmodule Localize.CoverageIgnoreModulesTest do
2+
use ExUnit.Case, async: true
3+
4+
# The coverage ignore list in mix.exs names modules by atom. A
5+
# rename (e.g. the leex/yecc modules gaining the localize_ prefix)
6+
# silently orphans an entry: the renamed module stops being
7+
# excluded, counts as ~0% covered, and drags the total below the
8+
# CI threshold with no pointer to the cause. This test makes the
9+
# drift loud: every atom entry must be a loadable module.
10+
test "every module atom in the coverage ignore list exists" do
11+
ignored = Mix.Project.config()[:test_coverage][:ignore_modules]
12+
13+
missing =
14+
for module <- ignored,
15+
is_atom(module),
16+
not Code.ensure_loaded?(module),
17+
do: module
18+
19+
assert missing == [],
20+
"""
21+
These coverage ignore_modules entries in mix.exs name modules
22+
that do not exist (renamed or removed?): #{inspect(missing)}
23+
Update the list or the renamed modules will count as
24+
uncovered and drop the total below the CI threshold.
25+
"""
26+
end
27+
end

0 commit comments

Comments
 (0)