#!/usr/bin/env python """ Анализ шаблонов: поиск встроенных стилей и скриптов. Помогает понять масштаб рефакторинга. """ import re from collections import defaultdict from pathlib import Path # Путь к шаблонам TEMPLATES_DIR = Path(__file__).parent / "templates" def analyze_template(filepath): """Анализирует один шаблон""" try: content = filepath.read_text(encoding="utf-8") except Exception: return None lines = len(content.splitlines()) # Подсчёт тегов style_tags = len(re.findall(r"]*>", content)) script_tags = len(re.findall(r"]*>", content)) # Размер встроенных стилей и скриптов style_blocks = re.findall(r"]*>(.*?)", content, re.DOTALL) script_blocks = re.findall(r"]*>(.*?)", content, re.DOTALL) style_lines = sum(len(block.splitlines()) for block in style_blocks) script_lines = sum(len(block.splitlines()) for block in script_blocks) # Поиск CSS классов css_classes = set(re.findall(r"\.([a-z][a-z0-9\-_]*)\s*{", content, re.IGNORECASE)) # Поиск функций JavaScript js_functions = set( re.findall(r"function\s+([a-zA-Z_$][a-zA-Z0-9_$]*)\s*\(", content) ) return { "path": str(filepath.relative_to(TEMPLATES_DIR)), "total_lines": lines, "style_tags": style_tags, "script_tags": script_tags, "style_lines": style_lines, "script_lines": script_lines, "css_classes": css_classes, "js_functions": js_functions, "has_blocks": bool(re.search(r"{%\s*block\s+extra_(css|js)\s*%}", content)), } def main(): """Главная функция анализа""" print("=" * 80) print("АНАЛИЗ ШАБЛОНОВ: встроенные стили и скрипты") print("=" * 80) # Находим все HTML файлы html_files = list(TEMPLATES_DIR.rglob("*.html")) results = [] for filepath in sorted(html_files): # Пропускаем backup файлы if ".backup" in str(filepath): continue result = analyze_template(filepath) if result and (result["style_tags"] > 0 or result["script_tags"] > 0): results.append(result) # Сортируем по количеству встроенного кода results.sort(key=lambda x: x["style_lines"] + x["script_lines"], reverse=True) print(f"\nНайдено {len(results)} шаблонов со встроенными стилями/скриптами\n") # Таблица результатов print( f"{'Файл':<60} {'Строк':<8} {'