Анализ кода JavaScript и константы - PullRequest
1 голос
/ 19 июля 2011

Учитывая, что в Javascript нет кросс-браузерной константы, и большинство обходных путей более сложны, чем я забочусь, я просто собираюсь придерживаться соглашения об именах THIS_IS_A_CONSTANT.Все хорошо, но то, что пришло мне в голову, это то, что если бы был способ получить мою среду разработки (VS.NET 2010 с Resharper 6), чтобы я предупреждал о любом коде Javascript, который присваивает значение переменной с этим соглашением об именах, кромев объявлении переменной это решило бы большинство потенциальных проблем, связанных с отсутствием реальных констант в Javascript (по крайней мере, для моих нужд).

Так кто-нибудь знает хороший способ генерировать такие предупреждения?In-IDE была бы лучшей вещью, но другие решения также хороши.Я искал что-то вроде FX-Cop для Javascript;Кажется, jslint не позволяет создавать новые правила, но, возможно, я недостаточно глубоко изучил.Я также могу предложить это как функцию в Resharper (при условии, что я не упускаю способ сделать это уже).

Спасибо, Мэтью

1 Ответ

0 голосов
/ 18 августа 2011

Итак, вы хотите найти любое задание формы:

id = exp ;

где id не содержит подстроку CONSTANT, а exp - числовая константа?

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

Ваш конкретный запрос будет сформулирован:

  (I - I=*CONSTANT*) '=' N ( ';' | O | K | I)

Используется для любого назначения, в котором целевой идентификатор не содержит строковую константу (см. Подстановочные знаки вокруг строки совпадения), для которой назначена константа * N *, за которой не следует число '; ' или * O * ператор, * K * word или * I * dentifier (все эти дополнительные вещи, потому что JavaScript может не иметь точку с запятой для завершения заявление). Это, вероятно, поднимает некоторые случаи, но не должно они легко проверяются.

...