#!/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, 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} {'