#!/usr/bin/env python3 '''One-shot sweep: replace custom ui helpers with gpui-kit tokens.''' import pathlib CRATES = pathlib.Path('crates') REPLACEMENTS = [ # Text ladder -> gpui text classes (Caption2 before Caption) ('.text_style(TextStyle::Headline)', '.text_sm().font_semibold()'), ('.text_style(TextStyle::Body)', '.text_sm()'), ('.text_style(TextStyle::Caption2)', '.text_xs().font_medium()'), ('.text_style(TextStyle::Caption)', '.text_xs()'), ('.text_style(TextStyle::Callout)', '.text_xs()'), ('.text_style(TextStyle::Subheadline)', '.text_xs()'), # Radius ladder -> theme tokens ('px(ui::bubble_radius())', 'cx.theme().radius_lg'), ('px(ui::surface_radius())', 'cx.theme().radius_lg'), ('px(ui::panel_radius())', 'cx.theme().radius_lg'), ('px(ui::control_radius())', 'cx.theme().radius'), ('px(ui::button_radius())', 'cx.theme().radius'), ('px(bubble_radius())', 'cx.theme().radius_lg'), ('px(surface_radius())', 'cx.theme().radius_lg'), ('px(panel_radius())', 'cx.theme().radius_lg'), ('px(control_radius())', 'cx.theme().radius'), ('px(button_radius())', 'cx.theme().radius'), # Spacing -> Tailwind gap ('gap(px(ui::SPACE))', 'gap_2()'), # Custom divider -> kit Separator ('divider(cx)', 'Separator::horizontal()'), # Avatar import swap ('use gpui_kit::component::avatar::Avatar;', 'use ui::Avatar;'), # Import lines that are now unused (whole line, with newline) ('use ui::{TextStyle, Typeset as _, bubble_radius, control_radius};\n', ''), ('use ui::{TextStyle, Typeset as _, button_radius, control_radius};\n', ''), ('use ui::{TextStyle, Typeset as _, button_radius, panel_radius};\n', ''), ('use ui::{TextStyle, Typeset as _, control_radius};\n', ''), ('use ui::{TextStyle, Typeset as _, button_radius};\n', ''), ('use ui::{TextStyle, Typeset as _, surface_radius};\n', ''), ('use ui::{TextStyle, Typeset as _};\n', ''), ('use ui::divider;\n', ''), ('use ui::button_radius;\n', ''), ] def main() -> None: changed = [] for path in CRATES.rglob('*.rs'): if str(path).startswith('crates/ui/'): continue text = path.read_text() original = text for old, new in REPLACEMENTS: text = text.replace(old, new) if text != original: path.write_text(text) changed.append(str(path)) print('\n'.join(changed)) print(f'{len(changed)} files changed') if __name__ == '__main__': main()