Существуют ли какие-либо инструменты статического анализа JavaScript? [закрытый]


Я привык к тому, что мой компилятор жалуется, когда я делаю что-то глупое, как опечатка на имя переменной, но JavaScript имеет привычку пропускать это.

существуют ли инструменты статического анализа для JavaScript?

13 103

13 ответов:

Я согласен, что JSLint-лучшее место для начала. Обратите внимание, что JavaScript Lint отличается от JSLint. Я бы также предложил проверить JSure, который в моем ограниченном тестировании сделал лучше, чем любой из них, хотя и с некоторыми шероховатостями в реализации-версия Intel Mac разбилась при запуске для меня, хотя версия PowerPC отлично работала даже на Intel, а версия Linux также отлично работала. (Разработчик, Берке дурак, сказал, что он вернется к мне когда это было исправлено, но я не слышал от него.)

Не ожидайте столько от статического анализа JavaScript, сколько вы получаете от хорошей проверки C. Как сказал мне дурак, " любой нетривиальный анализ очень сложен из-за динамической природы Javascript."

(еще одна, еще более неясная ошибка только для Mac, на этот раз с виджетом Konfabulator от JSLint: перетаскивание значка документа BBEdit на виджет перемещает документ в корзину. Разработчик, Дуглас Крокфорд, не пробовал виджет на Mac.)

10 августа 2009: Сегодня в Симпозиум По Статическому Анализу, Саймон Холм Дженсен представил доклад о TAJS: Type Analyzer for JavaScript, написанный с Андерсом Меллером и Петером Тим. В статье не упоминаются вышеупомянутые инструменты, но Дженсен сказал мне, что он посмотрел на некоторые из них и не был впечатлен. Код для TAJS должен быть доступен где-то этим летом.

обновленный ответ, 2017: Да. Используйте ESLint. http://eslint.org


кроме JSLint (уже упоминалось в ответ Флэш Шеридана) и компилятора (ранее упомянутый в ответ awhyte) Я также получил много пользы от бега JSHint и PHP CodeSniffer. По состоянию на 2012 год, все четыре инструмента с открытым исходным кодом и большим и активное сообщество разработчиков за ними. Каждый из них немного отличается (и я думаю, дополняет) в видах проверок, которые они выполняют:

JSLint был разработан, чтобы быть, и остается инструментом личной пылеобразования Дугласа Крокфорда по. Он поставляется с большой набор правил по умолчанию -- собственный Крокфорд,постоянно обновляется!--8--> как он продолжает учиться о JavaScript и его подводных камнях. JSLint-это очень своевольной и это вообще рассматривается как хорошая вещь. таким образом, есть (намеренно) a ограниченное количество вы можете сделать, чтобы настроить или отключить отдельные правила. Но это может сделать его трудно использовать JSLint для унаследованного кода.

JSHint очень похоже на JSLint (на самом деле это начал жизнь как JSLint fork) но это проще / возможно настроить или отключить все проверки JSLint через параметры командной строки или через .jshintrc файл.

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

компилятор закрытия чрезвычайно полезно в этом, если код не компиляция с закрытием, вы может чувствовать себя очень уверенно сказал код и глубоко обманут в каком-то смысле. Компиляция закрытия, возможно, самая близкая вещь, которая есть в мире JS, к проверке синтаксиса "интерпретатора", такой как php -l или ruby -c

закрытие и предупреждает Вас о потенциальных проблемах например, отсутствующие параметры и необъявленные или переопределенные переменные. Если вы не видите предупреждений, которые вы ожидаете, попробуйте увеличить уровень предупреждения, вызвав закрытие с опцией --warning_level VERBOSE

PHP CodeSnifferможет анализировать JavaScript а также PHP и CSS. CodeSniffer поставляется с несколькими различными стандартами кодирования, (скажем phpcs -i чтобы увидеть их), которые включают в себя много полезных нюхает для кода JavaScript, включая проверки против встроенные структуры управления и лишние пробельные символы.

здесь список JavaScript нюхает доступно в PHP CodeSniffer начиная с версии 1.3.6 а вот это пользовательский набор правил, который позволит вам запускать их все сразу. используя пользовательские наборы правил, это легко выбрать правила вы хотите применить. А можно даже напишите свои собственные нюхает если вы хотите применить определенный "стиль дома", который не поддерживается из коробки. Afaik CodeSniffer является единственным инструментом из четырех упомянутых здесь, который поддерживает настройку и создание новых правил статического анализа. Одно предостережение, хотя: CodeSniffer также является самым медленным из всех упомянутых инструментов.

"закрытие" JS компилятора Google создает настраиваемые предупреждения и ошибки во время компиляции. Он определенно находит неверные переменные и методы, а также ошибки arity. Если вы хотите написать JSDoc способ закрытия, он также может многое сделать с информацией о типе.

инструмент "компрессор" YUI также может выдавать предупреждения, но еще не пробовал.

Мне не очень повезло с Aptana IDE, построенной на Eclipse, но другим людям это нравится. См. Стек Переполнение обсуждение JS IDEs.

IntelliJ IDE, который не свободен в последний раз, когда я проверял, имеет отличную поддержку JS. Он будет обнаруживать и выделять неверно написанные vars и методы по мере ввода и многое другое. У него тоже есть автозаполнение.

таким образом, JSLint, JSHint, Plato, ESLint, Google Closure-Linter-это доступные инструменты. Я столкнулся с проблемами установки при попытке закрытия Google-Linter для Windows. Но, он упоминает на веб-странице, что его поддержка Windows является экспериментальной. Я нашел и попробовал другой инструмент, который хорошо работает. Вот ссылка для него: http://esprima.org/

кроме того, это ссылка github для инструмента Esprima: https://github.com/ariya/esprima

Я попробовал ESlint и нашел его хорошим..вы также можете добавить пользовательские правила..Вот репозиторий github:https://github.com/nzakas/eslint и вот введение к нему:http://www.nczonline.net/blog/2013/07/16/introducing-eslint/

вы можете увидеть некоторые инструменты для анализа статического кода JavaScript в этом Wiki.

инструмент в Вики, но не упоминается в этом посте, это DeepScan. Его основное внимание уделяется поиску ошибок времени выполнения и проблем с качеством, а не соглашениям о кодировании линтеров. Он охватывает также TypeScript, React и Vue.js.

вы можете попробовать его для вашего проекта в GitHub.

больше безопасности сосредоточены, чем список общего назначения можно найти на Mozilla Wiki в анализ кода Security/B2G/JavaScript

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

также есть по крайней мере один коммерческий продукт, который делает анализ безопасности: Burp получает новый анализ JavaScript возможности

последний релиз Burp включает в себя новый движок для статического анализа кода JavaScript. Это позволяет Burp Scanner сообщать о ряде новых уязвимостей, в том числе:

  • DOM-based XSS
  • инъекция JavaScript
  • инъекция SQL на стороне клиента
  • WebSocket угон
  • локальная обработка пути к файлу
  • DOM-based open redirection
  • Cookie манипуляции
  • Ajax запрос манипуляции с заголовком
  • отказ в обслуживании на основе DOM
  • манипуляции с веб-сообщениями
  • HTML5 манипуляции с хранилищем

в коммерческой сфере, Статический Анализ Coverity поддерживает анализ JavaScript начиная с версии 7.7 (середина 2015 года). Что касается вашего конкретного запроса о опечатках, my pet project появляется в последней версии (8.0, начало 2016 года)находит опечатки в названиях элементов программы.

в качестве ключевого разработчика в проекте, пожалуйста, примите мой бесстыдный плагин: хотя еще не так зрелый, как почитаемый анализ C / C++, Анализ JavaScript Coverity разделяет большую часть того же движка, с тем же фокусом на поиске высокоценных дефектов с низким уровнем ложноположительных отчетов о дефектах. Мы уделяем все больше внимания поиску дефектов безопасности в JavaScript (и других языках), а также поиску общих ошибок программирования.

теперь, вот некоторые опечатки, которые он находит (точная опечатка оставлена в качестве упражнения для читателя, чтобы подчеркнуть, как легко их можно пропустить):

слияние.js: (Постоянная ссылка)(последняя редакция)

команды-пакетов-запросов.js:(Постоянная ссылка)(последняя редакция)

Мне нравится Jslint для такого рода вещи...

поток выполняет статический анализ с аннотациями и без них.

Если вам нужны аннотации, синтаксис, совместимый с TypeScript.

установить пакета С :

npm install --global flow-bin

есть также некоторые инструменты. Взгляните на gulp-flowtype и возможно SublimeLinter-flow

JSAnalyse только что был опубликован на codeplex. Это инструмент, который анализирует зависимости между файлами javascript. Вы даже можете определить допустимые зависимости, и JSAnalysis проверяет, выполняются ли определенные правила или нет. Это позволяет отслеживать зависимости javascript даже в больших проектах и иметь чистую архитектуру.

JSAnalyse может выполняться как средство командной строки или настраиваться с помощью диаграммы уровня Visual Studio. Это также легко интеграция в сборку. С закрытыми возвратами вы можете держать зависимости под контролем.

http://jsanalyse.codeplex.com/

наши SD ECMAScript CloneDR это инструмент для поиска точных и почти отсутствующих копий дублированного кода в больших базах исходного кода JavaScript.

Он использует синтаксис языка для руководства обнаружением, поэтому он найдет клоны, несмотря на изменения формата, вставленные/удаленные комментарии, переименованные переменные и даже некоторые вставленные/удаленные операторы.

на сайте есть образец CloneDR, запущенный в библиотеке закрытия Google.

полное раскрытие, я за этим:http://www.toptensoftware.com/minime который делает минификацию, обфускацию и разумный набор проверок стиля ворса.