Анализ структуры кода с использованием CodeDom? - PullRequest
2 голосов
/ 08 июля 2009

Я недавно написал пост здесь, в Stackoverflow с просьбой предоставить некоторые библиотеки C # для вычисления метрик, в основном CC ... к сожалению, безуспешно. Так что я собираюсь написать это сам. Я провел в Интернете поиск того, что может быть лучшим подходом, но перед тем, как начать, я хотел бы спросить вас, как бы вы это сделали.

В настоящее время я нахожусь между двумя подходами

  • Учитывая каталог исходного кода, для анализа исходного кода с помощью выражений регулярных выражений или аналогичных им для определения конструкций, таких как методы, условные операторы и т. Д. Для возможности вычисления CC
  • При наличии сборки, ее загрузки и анализа (с использованием CodeDom?)

Я больше за 2-й подход, так как парсинг исходного кода напрямую не кажется мне хорошим подходом. Я читал о CodeDom, который интегрирован в .Net Framework. Я знаю, что это используется для динамической генерации кода. Я думаю, я мог бы также использовать его для анализа структуры кода, не так ли? У кого-нибудь из вас есть хорошая отправная точка для использования CodeDom, какие-то советы, хорошие учебники, с чего начать?

Спасибо

Edit: Или, может быть, какая-то другая утилита, которая позволяет легко разбирать исходный код (DOM-подобная структура).

Ответы [ 6 ]

3 голосов
/ 09 июля 2009

Жандарм делает некоторые метрики кода (вроде) с помощью Mono.Cecil , возможно, это поможет с тем, что вы пытаетесь достичь?

1 голос
/ 09 июля 2009

Посмотрите на Common Compiler Infrastructure (CCI) от Microsoft Research.

0 голосов
/ 09 ноября 2009

Поскольку вы рассматриваете .NET, обратите внимание на использование .Net Reflector

Существует множество плагинов , один из которых вычисляет некоторые основные метрики, включая CC.

Если вы не нашли то, что искали, почему бы не написать свое. .NET Reflector имеет подключаемый API , предоставляющий тип модели CodeDom, который можно легко анализировать (см. Также внизу page )

0 голосов
/ 08 августа 2009

См. C # Метрика , которая вычисляет CC и множество других метрик.

0 голосов
/ 09 июля 2009

Взгляните на эту статью CodeProject . Кажется, это начало того, что вы пытаетесь сделать, но потребует некоторых дополнений; так как пример кода в статье не анализирует элементы, только типы и пространства имен.

Не существует полных анализаторов для CodeDOM, о которых я знаю, о чем также упоминается в блоге команды BCL .

0 голосов
/ 08 июля 2009

Проблема с использованием CodeDom заключается в том, что это один из способов - есть API для генерации кода, но нет для анализа кода. Кажется, я вспоминаю, что слышал о некоторых неподдерживаемых / скрытых API, которые анализируют код в структурах CodeDom, но я не уверен.

Кроме того, как бы вы получили код из самой сборки? Отражение не сводится к IL, но только к членам классов.

...