2012-08-05 3 views
3

Помогает ли JSLint, JSHint или какой-либо другой инструмент анализа статического кода с открытым исходным кодом добавлять пользовательские правила для соответствия коду или есть некоторые синтаксические анализаторы, совместимые с ECMAScript, которые я могу использовать, чтобы получить результаты как можно ближе к тем, которые видны в сниппет ниже?Статический анализ с пользовательскими правилами для JavaScript?

Например, я хотел бы изучить код JavaScript и указать, какие функции вызывают, если он вызывает библиотеку (или API, предоставленную смартфонами для виджетов HTML5), чтобы зарегистрировать все, что подпадает под пространства имен этого API, чтобы создать дерево объектов и их свойства, чтобы увидеть, вызвана ли функция из того, из какого объекта можно проследить, возможно, с выходом в XML, JSON или другом структурированном формате.

Скажем, например, я не этот JavaScript-код (он не делает и только ради аргумента):

jobs = mylibrary.getJobs(); 
found = jobs.find("Python"); 
list = found.convert("html"); 

Я хочу, чтобы мой анализатор инструмент, чтобы получить это:

{ 
    "mylibrary": { 
     "jobs": {"maker":"getJobs", "parent": "mylibrary"}, 
     "found": {"maker": "find", "parent": "jobs", "parameters": "Python"}, 
     "list": {"maker": "convert", "parent": "found"} 
    } 
} 
+0

Вы имеете в виду аналитику, но возвращаете данные XML Analytics в свой контент HTML5? Например, отслеживать всех людей, которые щелкают аудио HTML5, а затем отправлять эти данные в XML-данные, чтобы вы могли экспортировать их в диаграммы и т. Д.? – TheBlackBenzKid

+0

@TheBlackBenzKid: Я имею в виду статический анализ (не динамический анализ), а код (разделы .js и

1

Я пробовал что-то с помощью javascript-интерпретатора, к которому можно получить доступ из кода (в моем случае python). Поэтому переводчики вроде pynoceros, pynarcissus или pyv8 могут мне помочь.

Существует ответ здесь о том, как установить py8: https://stackoverflow.com/a/11879224/1577343

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

Со статическим анализом, насколько я мог получить, используется парсер JSLINT (Run JSLint on a .js file from debugging console in chrome or firefox): Но я не знаю, как это использовать дальше.

{ 
    "string": "(begin)", 
    "first": [ 
     { 
      "string": "var", 
      "arity": "statement", 
      "first": [ 
       { 
        "string": "jobs" 
       }, 
       { 
        "string": "found" 
       }, 
       { 
        "string": "list" 
       } 
      ] 
     }, 
     { 
      "string": "=", 
      "arity": "infix", 
      "first": { 
       "string": "jobs" 
      }, 
      "second": { 
       "string": "(", 
       "arity": "infix", 
       "first": { 
        "string": ".", 
        "arity": "infix", 
        "first": { 
         "string": "mylibrary" 
        }, 
        "second": { 
         "string": "getJobs" 
        } 
       }, 
       "second": [] 
      } 
     }, 
     { 
      "string": "=", 
      "arity": "infix", 
      "first": { 
       "string": "found" 
      }, 
      "second": { 
       "string": "(", 
       "arity": "infix", 
       "first": { 
        "string": ".", 
        "arity": "infix", 
        "first": { 
         "string": "jobs" 
        }, 
        "second": { 
         "string": "find" 
        } 
       }, 
       "second": [ 
        { 
         "string": "Python", 
         "arity": "string" 
        } 
       ] 
      } 
     }, 
     { 
      "string": "=", 
      "arity": "infix", 
      "first": { 
       "string": "list" 
      }, 
      "second": { 
       "string": "(", 
       "arity": "infix", 
       "first": { 
        "string": ".", 
        "arity": "infix", 
        "first": { 
         "string": "found" 
        }, 
        "second": { 
         "string": "convert" 
        } 
       }, 
       "second": [ 
        { 
         "string": "html", 
         "arity": "string" 
        } 
       ] 
      } 
     } 
    ] 
} 
1

PMD поддерживает ECMAScript статический анализ с помощью пользовательских правил:

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

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

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

Разделители путей в пути к исходному файлу нормализуются как символ «/», поэтому один и тот же набор правил может использоваться на нескольких платформах прозрачно.

Кроме того, этот метод исключить/включать работает независимо от того, как используется PMD (например, командная строка, IDE, Ant), что упрощает сохранение приложений ваших правил PMD в вашей среде.

Вы можете указать полный путь к пользовательскому имени набора правил наряду с встроенным PMD

наборов правил

Чтобы увидеть его в IDE, добавьте его в наборы правил/rulesets.properties

Ссылки

Смежные вопросы