Lint — это термин из компьютерной науки , обозначающий инструмент статического анализа кода , используемый для выявления ошибок программирования, багов , стилистических ошибок и подозрительных конструкций. [1] Термин происходит от утилиты Unix , которая проверяла исходный код на языке C. [2] Программа, выполняющая эту функцию, также известна как «linter».
Стивен С. Джонсон , компьютерный ученый из Bell Labs , придумал термин «lint» в 1978 году во время отладки грамматики yacc , которую он писал для C, и решения проблем переносимости , возникших при переносе Unix на 32-битную машину. [5] [2] Термин был заимствован из слова lint , крошечных кусочков волокон и пуха, сбрасываемых одеждой, поскольку написанная им команда действовала как ловушка для ворса в сушилке для одежды, захватывая отработанные волокна, оставляя целые ткани нетронутыми. В 1979 году программирование lint впервые было использовано за пределами Bell Labs, в седьмой версии ( V7 ) Unix.
За эти годы были разработаны различные версии lint для многих компиляторов C и C++ , и хотя современные компиляторы имеют функции, подобные lint, lint-подобные инструменты также расширили свои возможности. Например, PC-Lint от Gimpel , представленный в 1985 году и используемый для анализа исходного кода C++, все еще продается. [5]
В своей оригинальной статье 1978 года Джонсон изложил свои доводы в пользу создания отдельной программы для обнаружения ошибок, отличной от той, которую он анализировал: «...общая идея наличия двух программ хороша» [потому что они концентрируются на разных вещах, тем самым позволяя программисту] «сосредоточиться на одном этапе процесса программирования исключительно на алгоритмах , структурах данных и корректности программы, а затем позже модернизировать с помощью lint желаемые свойства универсальности и переносимости». [2]
Анализ, выполняемый инструментами типа lint, также может быть выполнен оптимизирующим компилятором , который нацелен на генерацию более быстрого кода. Несмотря на то, что современные компиляторы эволюционировали, включив в себя многие исторические функции lint, инструменты типа lint также эволюционировали, чтобы обнаруживать еще более широкий спектр подозрительных конструкций. К ним относятся «предупреждения об ошибках синтаксиса, использование необъявленных переменных , вызовы устаревших функций, соглашения о пробелах и форматировании, неправильное использование области действия, неявные провалы в операторах switch , отсутствующие заголовки лицензий, [и]...опасные особенности языка». [6]
Инструменты типа lint особенно полезны для динамически типизированных языков, таких как JavaScript и Python . Поскольку интерпретаторы таких языков обычно не применяют столько строгих правил во время выполнения , инструменты типа linter также можно использовать в качестве простых отладчиков для поиска распространенных ошибок (например, синтаксических несоответствий), а также труднообнаруживаемых ошибок, таких как гейзенбаги (привлечение внимания к подозрительному коду как к «возможным ошибкам»). [7] Инструменты типа lint обычно выполняют статический анализ исходного кода. [8]
Инструменты, подобные lint, также были разработаны для других аспектов разработки программного обеспечения: обеспечение соблюдения руководств по грамматике и стилю для исходного кода заданного языка. [ необходима цитата ] Некоторые инструменты (например, ESLint ) также позволяют правилам быть автоматически исправимыми: определение правила может также поставляться с определением преобразования, которое делает правило больше не не срабатывающим. Правила о стиле особенно вероятно поставляются с автоматическим исправлением. Если линтер запущен в режиме «исправить все» для файла, который запускает только правила о форматировании, линтер будет действовать так же, как форматер.