Как собирать (статически анализировать код) магические числа в Python? - PullRequest
0 голосов
/ 17 октября 2018

Погуглив "магические числа пилинта", ничего полезного не вернулось.Можно ли как-нибудь связать код Python для магических чисел ?

(я поставил , но ответ может быть в любом языке Python.)

1 Ответ

0 голосов
/ 17 октября 2018

Самый простой способ - это создать токенайзер языка Python и выбрать все токены с постоянным числом.

Наш механизм поиска исходного кода выполняет поиск по токенам языка из больших наборов файлов, управляемых токенайзерами языка.(около 40 из них, включая Python 2 и 3).Один формирует запросы, устанавливая ограничения на последовательности токенов, например

 I=*abc* '('

, что означает «найти идентификаторы, содержащие буквы« abc », за которыми следует левый маркер».и распечатать найденные экземпляры.[Такие запросы автоматически игнорируют пробелы и маркеры комментариев]

Требуемый запрос может быть задан в виде:

 N>2

, что означает «найти число токенов со значением больше 2», принимая 0 и1 не считаются магическими константами.(ИМХО они такие же магические, как и другие, но есть место для разногласий, и я хотел бы привести пример, который не был полностью тривиальным).

Вы можете повторить это с помощью генератора лексеров (см. «Сгибание»).) с каким-то настраиваемым кодом сверху, который фильтрует числовые токены.

...