Инспекция кода
This commit is contained in:
12
net/xeaf/rack/utils/management/__init__.py
Normal file
12
net/xeaf/rack/utils/management/__init__.py
Normal 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
|
||||
75
net/xeaf/rack/utils/management/coverage_structure_visitor.py
Normal file
75
net/xeaf/rack/utils/management/coverage_structure_visitor.py
Normal 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))
|
||||
33
net/xeaf/rack/utils/management/coverage_test_file_visitor.py
Normal file
33
net/xeaf/rack/utils/management/coverage_test_file_visitor.py
Normal 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)
|
||||
Reference in New Issue
Block a user