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

StackOverflow https://stackoverflow.com/questions/534601

  •  22-08-2019
  •  | 
  •  

Вопрос

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

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

Это было полезно?

Решение

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

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

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

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

Другие советы

ОБНОВЛЕННЫЙ ОТВЕТ, 2017:ДА.Используйте ESLint. http://eslint.org


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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Вы можете попробовать это для своего проекта на GitHub.

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

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

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

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

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

  • XSS на основе DOM
  • Внедрение JavaScript
  • Внедрение SQL на стороне клиента
  • Захват веб-кошелька
  • Манипулирование локальным путем к файлу
  • Открытое перенаправление на основе DOM
  • Манипулирование файлами cookie
  • Манипулирование заголовком Ajax-запроса
  • Отказ в обслуживании на основе DOM
  • Манипулирование веб-сообщениями
  • Манипулирование хранилищем HTML5

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

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

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

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

commands-packages-query.js: (стабильная ссылка) (последняя редакция)

series-pie-tests.js: (стабильная ссылка) (последняя редакция)

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

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

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

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

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

npm install --global flow-bin

Там также есть кое-какие инструменты.Взгляните на глоток-тип потока и , возможно , Сублимационный фильтр-поток

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

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

http://jsanalyse.codeplex.com/

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

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

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top