#!/usr/bin/env python """ Анализ шаблонов: поиск встроенных стилей и скриптов. Помогает понять масштаб рефакторинга. """ import os import re from pathlib import Path from collections import defaultdict # Путь к шаблонам TEMPLATES_DIR = Path(__file__).parent / 'templates' def analyze_template(filepath): """Анализирует один шаблон""" try: content = filepath.read_text(encoding='utf-8') except Exception as e: 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} {'