Инспекция кода

This commit is contained in:
2026-07-18 11:50:42 +03:00
parent 87a4f06d40
commit cc57591e66
13 changed files with 27 additions and 272 deletions

View File

@@ -0,0 +1,12 @@
# DRF Rack
# Библиотека классов расширений для Django REST Framework
#
# Автор: Николай В. Анохин <n.anokhin@xeaf.net>
# Все права защищены. Лицензия: MIT
"""
Пакет служебных классов для создания команд управления
"""
from .coverage_structure_visitor import CoverageStructureVisitor
from .coverage_test_file_visitor import CoverageTestFileVisitor

View File

@@ -0,0 +1,75 @@
# DRF Rack
# Библиотека классов расширений для Django REST Framework
#
# Автор: Николай В. Анохин <n.anokhin@xeaf.net>
# Все права защищены. Лицензия: MIT
"""
Описание класса CoverageStructureVisitor
"""
import ast
class CoverageStructureVisitor(ast.NodeVisitor):
"""
Обходчик синтаксического дерева кода проекта
"""
def __init__(self, module_dot_path: str):
"""
Инициализация
:param module_dot_path: Путь к модулю
"""
super().__init__()
self.module_dot_path = module_dot_path
self.class_stack = []
self.results = []
def visit_ClassDef(self, class_node) -> None:
"""
Обход класса
:param class_node: Узел класса
"""
self.class_stack.append(class_node.name)
self.generic_visit(class_node)
self.class_stack.pop()
def visit_FunctionDef(self, func_node) -> None:
"""
Обход функции
:param func_node: Узел функции
"""
self._handle_function(func_node)
def visit_AsyncFunctionDef(self, async_func_node) -> None:
"""
Обход асинхронной функции
:param async_func_node: Узел асинхронной функции
"""
self._handle_function(async_func_node)
def _handle_function(self, func_node) -> None:
"""
Общий класс обработки функции
:param func_node: Узел функции
"""
func_name = func_node.name
class_name = self.class_stack[-1] if self.class_stack else None
if self.class_stack:
class_chain = ".".join(self.class_stack)
full_path = f"{self.module_dot_path}.{class_chain}.{func_name}"
else:
full_path = f"{self.module_dot_path}.{func_name}"
self.results.append((func_name, class_name, full_path))

View File

@@ -0,0 +1,33 @@
# DRF Rack
# Библиотека классов расширений для Django REST Framework
#
# Автор: Николай В. Анохин <n.anokhin@xeaf.net>
# Все права защищены. Лицензия: MIT
"""
Описание класса CoverageFileVisitor
"""
import ast
class CoverageTestFileVisitor(ast.NodeVisitor):
"""
Обходчик синтаксического дерева файла тестов
"""
def __init__(self):
"""
Инициализация
"""
super().__init__()
self.test_classes = set()
def visit_ClassDef(self, class_node) -> None:
"""
Обходчик классов
"""
self.test_classes.add(class_node.name)
self.generic_visit(class_node)