veza/scripts/generate_tailwind_list.py

141 lines
4.9 KiB
Python
Raw Normal View History

#!/usr/bin/env python3
"""
Generate a comprehensive list of all Tailwind default color instances.
Excludes test files and backup files.
"""
import re
import subprocess
from collections import defaultdict
from pathlib import Path
# Patterns to search for
PATTERNS = [
r'text-gray-',
r'bg-gray-',
r'border-gray-',
r'text-blue-',
r'bg-blue-',
r'border-blue-',
r'text-red-',
r'bg-red-',
r'border-red-',
r'text-green-',
r'bg-green-',
r'border-green-',
r'text-yellow-',
r'bg-yellow-',
r'text-purple-',
r'bg-purple-',
r'text-pink-',
r'bg-pink-',
r'text-indigo-',
r'bg-indigo-',
r'text-orange-',
r'bg-orange-',
r'from-gray-',
r'to-gray-',
r'from-blue-',
r'to-blue-',
]
# Combine patterns
PATTERN = '|'.join(PATTERNS)
def find_instances():
"""Find all Tailwind default color instances."""
root = Path(__file__).parent.parent / 'apps' / 'web' / 'src'
instances = defaultdict(list)
# Find all .tsx and .ts files
for file_path in root.rglob('*.tsx'):
if 'ui.backup' in str(file_path) or file_path.name.endswith('.test.tsx'):
continue
check_file(file_path, instances)
for file_path in root.rglob('*.ts'):
if 'ui.backup' in str(file_path) or file_path.name.endswith('.test.ts'):
continue
check_file(file_path, instances)
return instances
def check_file(file_path, instances):
"""Check a file for Tailwind default colors."""
try:
with open(file_path, 'r', encoding='utf-8') as f:
for line_num, line in enumerate(f, 1):
if re.search(PATTERN, line):
# Extract the color class
matches = re.findall(r'(' + PATTERN + r'[^\s"\'`)]+)', line)
if matches:
# Get relative path
rel_path = file_path.relative_to(Path(__file__).parent.parent)
instances[str(rel_path)].append({
'line': line_num,
'content': line.strip(),
'colors': matches
})
except Exception as e:
print(f"Error reading {file_path}: {e}", file=sys.stderr)
def generate_markdown(instances):
"""Generate markdown documentation."""
output = []
output.append("# Complete List of Remaining Tailwind Default Color Instances\n")
output.append("**Generated**: Automatically generated list\n")
output.append(f"**Total Files**: {len(instances)}\n")
total_instances = sum(len(v) for v in instances.values())
output.append(f"**Total Instances**: {total_instances}\n")
output.append("**Status**: Action 9.1.1.3 - In Progress (294 instances migrated, ~19.7% complete)\n")
output.append("\n## Usage\n")
output.append("This document lists all remaining Tailwind default color instances organized by file path.\n")
output.append("Each entry includes:\n")
output.append("- File path\n")
output.append("- Line number\n")
output.append("- Color classes found\n")
output.append("- Full line context\n")
output.append("\n## Migration Guidelines\n")
output.append("Refer to `TAILWIND_COLORS_AUDIT.md` for color mapping:\n")
output.append("- `text-gray-*` → `text-kodo-content-dim` or `text-kodo-text-main`\n")
output.append("- `bg-gray-*` → `bg-kodo-graphite`, `bg-kodo-ink`, `bg-kodo-steel`, etc.\n")
output.append("- `border-gray-*` → `border-kodo-steel`\n")
output.append("- `text-blue-*` → `text-kodo-cyan` (when appropriate)\n")
output.append("- Other colors: Map to appropriate Kodo design system colors\n")
output.append("\n## Files with Tailwind Default Colors\n")
output.append("\n---\n")
# Sort files alphabetically
for file_path in sorted(instances.keys()):
file_instances = instances[file_path]
output.append(f"\n### {file_path}\n")
output.append(f"**Total instances in file**: {len(file_instances)}\n")
for inst in file_instances:
colors_str = ', '.join(f"`{c}`" for c in inst['colors'])
output.append(f"\n- **Line {inst['line']}**: {colors_str}\n")
output.append(f" ```tsx\n")
output.append(f" {inst['content']}\n")
output.append(f" ```\n")
output.append("\n---\n")
return ''.join(output)
if __name__ == '__main__':
import sys
instances = find_instances()
markdown = generate_markdown(instances)
output_file = Path(__file__).parent.parent / 'apps' / 'web' / 'docs' / 'TAILWIND_INSTANCES_FULL_LIST.md'
output_file.write_text(markdown, encoding='utf-8')
total = sum(len(v) for v in instances.values())
print(f"Generated list with {total} instances across {len(instances)} files")
print(f"Output saved to: {output_file}")