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