Статистический анализатор кода python

Saved searches

Use saved searches to filter your results more quickly

You signed in with another tab or window. Reload to refresh your session. You signed out in another tab or window. Reload to refresh your session. You switched accounts on another tab or window. Reload to refresh your session.

A small linter for python code

kirill-nasonkin/Static_Code_Analyzer

This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.

Name already in use

A tag already exists with the provided branch name. Many Git commands accept both tag and branch names, so creating this branch may cause unexpected behavior. Are you sure you want to create this branch?

Sign In Required

Please sign in to use Codespaces.

Launching GitHub Desktop

If nothing happens, download GitHub Desktop and try again.

Launching GitHub Desktop

If nothing happens, download GitHub Desktop and try again.

Launching Xcode

If nothing happens, download Xcode and try again.

Launching Visual Studio Code

Your codespace will open once ready.

There was a problem preparing your codespace, please try again.

Latest commit

Git stats

Files

Failed to load latest commit information.

README.md

Проект модуля Python Core в Академии JetBrains

Небольшой статический анализатор кода, помогающий понять как работают линтеры, что такое Абстрактное Дерево Синтаксиса в Python. Даёт опыт работы с регулярными выражениями и файловой системой.

Скрипт получает путь к файлу или каталогу в качестве аргумента командной строки. Производит поиск всех файлов «.py» в каталоге или анализирует отдельный файл. Находит общие стилистические проблемы в коде Python и предоставляет вывод в формате:

"Path to file: Line number: Code(S001 - S012) of Issue and Issue message".

#клонировать репозиторий git clone https://github.com/kirill-nasonkin/Static_Code_Analyzer.git # в папке с файлом «code_analyzer.py»в командной строке ввести команду # вместо фигурных скобок указать путь к проверяемым файлам или каталогу python code_analyzer.py

Используемые модули Python: re, sys, ast, os

  • long_line — Длина строки не превышает 79 символов.
  • indentation — Корректность отступов.
  • unnecessary_semicolon — Лишние знаки пунктуации.
  • less_two_space — Менее 2 пробелов перед строчными комментариями.
  • todo_found — Присутствие #todo в коде.
  • blank_line_check — Более 2 пустых линий в коде подряд.
  • many_spaces_after_constr_name — Верное количество пробелов при определении класса или функции.
  • check_class_name — Верное написание названия класса.
  • check_func_name — Верное написание названия функции.
  • check_argnames_errors — Верное написание названия аргументов.
  • check_var_names_errors — Верное написание названия переменных.
  • check_mutable_defaults — Изменяемый тип данных в качаестве значения по умолчанию для аргумента функции.
Читайте также:  Java string for json

About

A small linter for python code

Источник

3 инструмента для Python, которые упростят работу с кодом

Обложка: 3 инструмента для Python, которые упростят работу с кодом

С опытом количество используемых в работе инструментов сокращается, поскольку многие из них вы просто перерастаете. Но такие, как эти, остаются в использовании надолго.

Инструмент 1: ИИ автодополнение и быстрый доступ к документации с Kite

У современных IDE есть встроенное автозаполнение, которое выглядит примерно так:

Встроенный инструмент обычно использует документацию для определения имён и типов возможных функций и параметров. Но что если редактор получит доступ к коду из всех публичных репозиториев GitHub и начнёт подтягивать не просто имена, а целые строки кода? И это реализовано в Kite.

Прим.ред. Такая функциональность доступна в планах Pro и Team. На момент написания материала для плана Pro действует бесплатная бета-версия.

Разберём подробнее особенности Kite — инструмента для Python с функциями умного автодополнения и быстрого доступа к документации.

Умные подсказки

Плагин Kite смотрит в комплексе ваш код, переменные, часто используемые имена параметров, документацию, и только после сбора всех данных рекомендует что-то вроде этого:

Copilot для документации

Прежде чем беспокоить более опытного коллегу или мчаться за ответами на Stack Overflow, почитайте документацию.

Kite Copilot упрощает поиск по документации. Он работает параллельно с IDE и показывает информацию о любых объектах или функциях, на которые наведён курсор.

Kite Copilot
Работает локально, приватно

Вдобавок ко всему, плагин создан для локальной работы, так что вы получаете быстрые советы, работа происходит в автономном режиме, и ваш код никогда не будет отправлен в облако.

Это крайне важно для людей с плохим интернет-соединением и тех, кто работает с закрытым исходным кодом.

Всё, что нужно сделать, это загрузить и установить плагин Kite для вашего редактора: есть бесплатная версия и Free Beta на Pro план с умным автозаполнением.

Инструмент 2: Статический анализ кода с Mypy

Python — динамически типизированный язык. Это значит, что переменная связывается с типом данных не в момент объявления, а в момент присваивания ей значения. То есть одна и та же переменная может быть и строкой, и целым числом, и каким-либо другим типом в зависимости от последнего присвоенного ей значения.

# Например, вот одна и та же переменная с разными типами данных. # Python определяет тип данных динамически: # string var_name = "string here" # integer var_name = 1234 

А вот примеры языков со статической типизацией, где для каждой переменной задан один конкретный тип данных, и в логике кода нужно придерживаться именно его:

# Для многих языков обязательно предварительное объявление типа. # string str str_var_name = "string here" # integer int int_var_name = 1234 

Плюсы и минусы динамической типизации

Главное преимущество динамической типизации в том, что вам может быть лень постоянно прописывать типы, и такой язык, как Python, в этом поможет.

  • как правило, вы сталкиваетесь с ошибками на более поздних этапах разработки;
  • код работает медленнее, ведь Python постоянно вычисляет типы;
  • код становится менее безопасным, так как на входе и выходе функции у одной и той же переменной могут быть разные типы данных;
  • читать ваш код становится сложнее, поскольку другой человек не может быть уверен в том, что уже объявленная переменная не изменит свой тип в дальнейшем.
Читайте также:  Yes no select html

Статическая типизация в Python

В Python нет статической типизации как таковой, но есть аннотации типов, которые проверяются статическими анализаторами с целью контроля типов переменных.

Обратите внимание на Mypy. Это статический анализатор типов для Python, который позволяет находить ошибки несоответствия типов в коде. Mypy выводит ошибку, если при работе с аннотациями типов значение переменной не соответствует присвоенному ей типу.

from typing import Iterator def fib(n: int) -> Iterator[int]: a, b = 0, 1 while a < n: yield a a, b = b, a + b fib(10) fib("10") 

В результате запуска статического анализатора Mypy в приведённом выше коде вы получите следующую ошибку: main.py:10: error: Argument 1 to "fib" has incompatible type "str"; expected "int" . Таким образом Mypy предупреждает, что мы пытаемся присвоить строковое значение переменной с целочисленным типом данных. Это лишь один из примеров использования Mypy. Все функциональные возможности инструмента, более подробно описанные в документации, можно протестировать в песочнице.

Если ваш код работает на проде, и вам важна его устойчивость к ошибкам, связанным с типизацией, используйте инструмент Mypy.

Инструмент 3: Быстрый поиск ошибок и чистый код с SonarLint

Сейчас почти во всех IDE есть линтер — статический анализатор возможных ошибок. Другими словами, он предугадывает ещё до запуска кода, что может пойти не так, и выделяет предполагаемые ошибки.

Python Linter по умолчанию в VS Code

Python Linter по умолчанию в VS Code

В свою очередь, динамический анализ не предугадывает, а действительно запускает/компилирует части кода, чтобы определить, работает ли он, но делает это автоматически в фоновом режиме. То есть он на самом деле знает, что пойдёт не так в процессе выполнения программы.

SonarLint — это тот самый динамический анализатор кода, который поможет решить следующие проблемы.

Лишний код

Допустим, вы не удалили закомментированные части кода, оставили неиспользуемые функции и прочие рудименты. SonarLint предупредит об этом, и вы сможете своевременно очистить код от всего лишнего.

Уязвимости

Большая обновляемая база данных с перечнем уязвимостей позволяет плагину вовремя предупреждать о любых известных уязвимостях, которые встречаются в вашем коде.

Читайте также:  Address to coordinates php

Когнитивная сложность

Подробнее об этом можно прочесть в статье. Если говорить кратко, разработчики плагина создали математическую формулу, которая может оценить, насколько читабелен ваш код.

Это не только полезно, но и просто. Каждый раз, когда SonarLint предупреждает вас о чрезмерной сложности, это сопровождается объяснением правила, которое вы нарушили. Например, «слишком большая вложенность операторов if», более известная как спагетти-код. Удобно, правда?

Плагин SonarLint позволяет использовать лучшие практики и писать понятный чистый код.

Подытожим

  • ИИ автодополнение и быстрый доступ к документации с Kite Copilot и плагином для IDE.
  • Статическая типизация кода с модулем Mypy.
  • Быстрый поиск ошибок и чистый код с плагином SonarLint.

Все перечисленные инструменты для Python бесплатны или же поставляются в нескольких вариантах, включающих бесплатный.

Что думаете?

Ребят, тут собрались ноунеймы которые не работают ни на одном языке, но пишут свое очень важное мнение в комментариях. Лучше проходите мимо и не читайте их. Ах да, учите go и устройтесь в яндекс)

Как вы собираетесь искать хороших сотрудников, если (в большинстве компаний) честных кандидатов отметают даже не пригласив на техническое собеседование?Если умение лгать является обязательным, чтобы устроиться к вам на работу, то не удивляйтесь что "сложно найти хорошего сотрудника".Я знаю о чем говорю. В нашей компании для продвижения программистов на аутсорс есть целая отдельная команда, которая полностью специализируется на "продаже сотрудников". Это люди, которые пристально изучают хотелки чсв hr-ов, пишут "идеальные" резюме и отвечают на все вопросы так, "как надо". А программист приходит только на техническое собеседование в конце.Хорошие сотрудники (как правило) не станут накручивать себе 20 лет стажа, рассказывать про мотивацию "не ради денег", отвечать на глупые вопросы про квадратные люки и прочую ерунду.Вам нужно не учить людей в интернете "как правильно отвечать на наши вопросы, чтобы вы у нас прошли собес", а мыслить шире и заниматься реальным поиском толковых специалистов, которые не обязаны иметь топовые софт-скилы.В противном случае - получайте "идеальные" резюме, написанные по единому шаблону и котов в мешке. И не забудьте пожаловаться что "сложно найти хорошего сотрудника".

Читаю я комментарии и полностью убеждаюсь в том, почему так сложно найти хорошего сотрудника. Да, работодателю неприятно, когда соискатель отключает камеру, а на заднем фоне домашние едят. Неприятно, если человек сразу говорит, что на прошлой работе одни дураки. Настораживают люди, которые каждый год меняют работу и говорят "мало платят". Называть не по имени это вообще признак из серии " Ты, ходор, на фиг не сдался". И прочее. Но большинство комментариев как раз от людей с чсв. Из серии "любите меня любого, я вам одолжение делаю тем, что общаюсь".

Источник

Оцените статью