aboutsummaryrefslogtreecommitdiff
path: root/scripts/theme-studio/generate.py
diff options
context:
space:
mode:
authorCraig Jennings <c@cjennings.net>2026-06-24 18:10:38 -0400
committerCraig Jennings <c@cjennings.net>2026-06-24 18:10:38 -0400
commitfd1969eda49b2e6c562439ecea9430ace164e16d (patch)
treec4a9f3874987300845ec180758191d6e59beb163 /scripts/theme-studio/generate.py
parent201a1174ce1e6004087fc53271deac7eac22555a (diff)
downloaddotemacs-fd1969eda49b2e6c562439ecea9430ace164e16d.tar.gz
dotemacs-fd1969eda49b2e6c562439ecea9430ace164e16d.zip
refactor(theme-studio): tier-1 simplification pass
These are behavior-preserving cleanups from the refactor/simplify assessment, all test-verified. I merged syncMockHeight and syncPkgHeight into one syncPaneHeight(tableId, paneId), inlined the two single-use displayHex/displayName closures, dropped a pkgbody guard that buildPkgTable already does, and had paintUI call worstCellHtml instead of rebuilding the covered-contrast cell. I deleted the dead generatorHues "manual" branch (a copy of the fallback) and locateInfoLine (orphaned when I removed the preview info line earlier today). The two nerd-icons loaders now share _load_nerd_icons_artifact, with a sentinel so a null-file edge keeps its exact behavior. face_coverage.classify reads through named locals now, guarded by a new characterization test. Two assessment findings were wrong and skipped after I checked them against the code: LOCATE_REG is live (read by previewSpan), and normalizePaletteEntryCore doesn't exist.
Diffstat (limited to 'scripts/theme-studio/generate.py')
-rw-r--r--scripts/theme-studio/generate.py36
1 files changed, 20 insertions, 16 deletions
diff --git a/scripts/theme-studio/generate.py b/scripts/theme-studio/generate.py
index 09c25d804..b673caefb 100644
--- a/scripts/theme-studio/generate.py
+++ b/scripts/theme-studio/generate.py
@@ -15,6 +15,22 @@ def read_json(name):
NERD_ICONS_LEGEND_FIELDS = ("key", "label", "face", "category", "glyph")
NERD_ICONS_GALLERY_GLYPH_FIELDS = ("glyph", "name")
+_NO_ARTIFACT = object() # distinguishes absent/malformed from a file that parsed to null
+
+def _load_nerd_icons_artifact(path, kind, tail):
+ """Open and JSON-parse the nerd-icons artifact at PATH. Return the parsed value,
+ or _NO_ARTIFACT (with a KIND/TAIL-labeled warning) when absent or malformed.
+ Shared skeleton for the legend and gallery loaders."""
+ if not os.path.exists(path):
+ print(f"WARNING: nerd-icons {kind} absent ({path}); {tail}")
+ return _NO_ARTIFACT
+ try:
+ with open(path) as src:
+ return json.load(src)
+ except (json.JSONDecodeError, OSError) as exc:
+ print(f"WARNING: nerd-icons {kind} malformed ({path}: {exc}); {tail}")
+ return _NO_ARTIFACT
+
def load_nerd_icons_legend(path=None):
"""Return the nerd-icons legend rows, or None when the artifact is unusable.
@@ -27,14 +43,8 @@ def load_nerd_icons_legend(path=None):
file, which lands here as None.
"""
path = path or os.path.join(HERE, "nerd-icons-legend.json")
- if not os.path.exists(path):
- print(f"WARNING: nerd-icons legend absent ({path}); generic nerd-icons app")
- return None
- try:
- with open(path) as src:
- data = json.load(src)
- except (json.JSONDecodeError, OSError) as exc:
- print(f"WARNING: nerd-icons legend malformed ({path}: {exc}); generic nerd-icons app")
+ data = _load_nerd_icons_artifact(path, "legend", "generic nerd-icons app")
+ if data is _NO_ARTIFACT:
return None
rows = data.get("legend") if isinstance(data, dict) else data
if not isinstance(rows, list) or not rows:
@@ -59,14 +69,8 @@ def load_nerd_icons_gallery(path=None):
the legend data still loads. Never raises.
"""
path = path or os.path.join(HERE, "nerd-icons-legend.json")
- if not os.path.exists(path):
- print(f"WARNING: nerd-icons gallery absent ({path}); legend without gallery")
- return None
- try:
- with open(path) as src:
- data = json.load(src)
- except (json.JSONDecodeError, OSError) as exc:
- print(f"WARNING: nerd-icons gallery malformed ({path}: {exc}); legend without gallery")
+ data = _load_nerd_icons_artifact(path, "gallery", "legend without gallery")
+ if data is _NO_ARTIFACT:
return None
groups = data.get("gallery") if isinstance(data, dict) else None
if not isinstance(groups, list) or not groups: