Bowler — это инструмент для рефакторинга, который работает на уровне синтаксического дерева Python.
Bowler может использоваться для переименования функций и генерации интерактивного diff:
query = (
Query(<путь к файлам>)
.select_function("старое_имя")
.rename("новое_имя")
.diff(interactive=True)
)
#Python #Refactoring #Bowler #CodeOptimization #Программирование #Refactor #PythonDev
https://github.com/facebookincubator/bowler
Please open Telegram to view this post
VIEW IN TELEGRAM
GitHub
GitHub - facebookincubator/Bowler: Safe code refactoring for modern Python.
Safe code refactoring for modern Python. Contribute to facebookincubator/Bowler development by creating an account on GitHub.
1👍5🔥2
Skylos — это инструмент статического анализа кода на Python, который вычищает мёртвый код.
# Установка
pip install skylos
# Анализ проекта
skylos /path/to/project
# Режим с выбором — удалить только то, что хочешь
skylos --interactive
# Предпросмотр изменений без удаления
skylos --dry-run
#Python #DeadCode #StaticAnalysis #OpenSource #Refactoring #CLI #Skylos #DevTools #PyPI #Rustless
https://github.com/duriantaco/skylos
Please open Telegram to view this post
VIEW IN TELEGRAM
GitHub
GitHub - duriantaco/skylos: Open source local-first PR scanner that finds dead code, security bugs, secrets, quality regressions…
Open source local-first PR scanner that finds dead code, security bugs, secrets, quality regressions, and AI-code mistakes before merge. For first timers refer to https://duriantaco.github.io/skylo...
1⚡2 2👍1
Transfunctions — это Python-библиотека, которая позволяет из одного шаблона создавать синхронные, асинхронные и генераторные функции.
С помощью шаблонов вы пишете логику один раз и генерируете сразу несколько версий:
@transfunction
def template():
print('so, ', end='')
with sync_context:
print("it's just usual function!")
with async_context:
print("it's an async function!")
with generator_context:
print("it's a generator function!")
yield
template.get_usual_function()
template.get_async_function()
template.get_generator_function()
#Python #AsyncIO #Generators #CodeQuality #DevTools #Backend #Transfunctions #Refactoring #CodeReuse #PythonTips
https://github.com/pomponchik/transfunctions
Please open Telegram to view this post
VIEW IN TELEGRAM
GitHub
GitHub - mutating/transfunctions: Say NO to Python fragmentation on sync and async
Say NO to Python fragmentation on sync and async. Contribute to mutating/transfunctions development by creating an account on GitHub.
1🔥3👍2 2
Pyupgrade — это инструмент, который автоматически обновляет ваш Python-код под современные версии языка.
Он сам переписывает устаревший или избыточный синтаксис, убирает легаси и приводит код к актуальным стандартам без ручных правок. Очень удобно ставить его как pre-commit hook — и тогда каждый коммит автоматически делает проект чище.
#Python #Pyupgrade #Refactoring #CleanCode #PreCommit #PythonTools #DevTools
https://github.com/asottile/pyupgrade
Please open Telegram to view this post
VIEW IN TELEGRAM
GitHub
GitHub - asottile/pyupgrade: A tool (and pre-commit hook) to automatically upgrade syntax for newer versions of the language.
A tool (and pre-commit hook) to automatically upgrade syntax for newer versions of the language. - asottile/pyupgrade
1 3👍2🔥2
Cohesion — это инструмент статического анализа для измерения связанности (когезии) классов в Python.
В программировании cohesion (связанность) определяет, насколько сильно методы и переменные внутри одного модуля или класса логически подходят друг другу. Как писал Роберт Мартин в книге «Чистый код»: «Когда связанность высока, это означает, что методы и переменные класса зависят друг от друга и составляют единое логическое целое».
Cohesion проверяет, как именно методы класса используют переменные этого класса (как уровня класса, так и уровня экземпляра
self), и выводит процентную оценку для каждого из них.Пример отчета (
cohesion --files example.py --verbose):Class: ExampleClass1
Function: func1 -> Использует 2 из 3 переменных (66.67%)
Function: func2 -> Использует 1 из 3 переменных (33.33%)
Function: func3 -> Использует 0 из 3 переменных (0.00%)
Total (Общая связанность класса): 33.33%
Если общая оценка слишком низкая, это явный сигнал о том, что класс делает слишком много разных вещей и его пора разбивать (нарушен принцип Single Responsibility).
--below и --above позволяют отфильтровать вывод (например, подсветить только те классы, у которых связанность ниже 50%).example.py:1:1: H601 class has low cohesionpip install cohesion
#Python #CleanCode #Cohesion #Refactoring #Flake8 #Linter #DevTools #StaticAnalysis #OpenSource
https://github.com/mschwager/cohesion
Please open Telegram to view this post
VIEW IN TELEGRAM
GitHub
GitHub - mschwager/cohesion: A tool for measuring Python class cohesion.
A tool for measuring Python class cohesion. Contribute to mschwager/cohesion development by creating an account on GitHub.
2⚡3👍3🔥3
Matchify - это CLI-утилита, которая автоматически преобразует длинные цепочки
if/elif/else в современные конструкции match/case (сопоставление с образцом, появившееся в Python 3.10+), сохраняя логику работы и исходное форматирование кода.Инструмент построен на базе LibCST, благодаря чему не ломает существующие отступы, комментарии и стиль оформления кодовой базы.
x == 1, x == 2) и идентичности (x is None).isinstance(p, Point) and p.x == 5 в элегантный case Point(x=5):.len(x) == 2 and x[0] == 0) на распаковку case 0, _:.--safe) утилита переписывает код только тогда, когда семантика гарантированно сохраняется. Для спорных случаев есть флаги явных допущений (--assume pure-subjects, --assume identity-equality и др.).--check) и готовые хуки для pre-commit.До:
if isinstance(node, Point) and node.x == 5:
print("x is 5")
elif isinstance(node, Point):
print("other point")
После обработки Matchify:
match node:
case Point(x=5):
print("x is 5")
case Point():
print("other point")
Запуск на проекте без предварительной установки:
uvx matchify path/to/project/
Или установка в качестве постоянной CLI-утилиты:
uv tool install matchify
# Проверить проект без записи изменений
matchify path/to/project/ --check
#Python #Matchify #PatternMatching #Refactoring #DevTools #LibCST #CleanCode #OpenSource #Programming
https://github.com/15r10nk/matchify
Please open Telegram to view this post
VIEW IN TELEGRAM
GitHub
GitHub - 15r10nk/matchify: converts if-else code to match statements
converts if-else code to match statements. Contribute to 15r10nk/matchify development by creating an account on GitHub.