Как может моя надстройка Visual Studio обнаруживать ошибки компилятора перед сборкой так же, как «Удалить и отсортировать» - PullRequest
4 голосов
/ 20 февраля 2010

Я создаю инструмент рефакторинга, который автоматизирует некоторые из самых простых вещей, связанных со стилевым оформлением кода, связанных с StyleCop. Одна из вещей, которую я хотел бы, чтобы моя надстройка могла сделать (в качестве дополнительной функции, которую разработчик может включать / выключать) - это автоматически вызывать функцию «Упорядочить использование -> Удалить и сортировать». Это простой вызов макроса.

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

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

Я знаю, что моя надстройка может проверять список ошибок, однако я много раз обнаруживал, что ошибки, вызывающие проблемы в «Удалить и отсортировать», не всегда появляются в списке. У меня был пустой список, затем я пытаюсь «удалить и отсортировать», и он говорит мне, что есть проблемы со сборкой. Затем я строю решение и, конечно же, оно терпит неудачу, и ошибки заполняются. Единственное решение, которое я вижу, - это использовать ту же функциональность, что и «Удалить и отсортировать», для предварительной проверки.

Кто-нибудь знает, как я могу обнаружить ошибки компилятора перед сборкой так же, как "Удалить и отсортировать использования"?

Ответы [ 2 ]

1 голос
/ 20 февраля 2010

Я не совсем уверен, о каких ошибках вы говорите, я предполагаю, что именно они генерируют синтаксический анализатор IntelliSense. Да, этот парсер не очень надежен. Он не предназначен для полноценного синтаксического анализатора C #, он был оптимизирован для выполнения совершенно другой работы: предоставление контекстно-зависимой справки, даже если код неполон и не может компилироваться. Вы ничего не можете сделать, чтобы сделать его более надежным, кроме ожидания следующего выпуска VS, возможно.

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

0 голосов
/ 24 февраля 2010

Это кажется хакерским, но если кто-то не сможет найти лучшее решение, я воспользуюсь проверкой в ​​списке ошибок, потому что это лучше, чем ничего.

Кроме того, я думаю, что я могу поэкспериментировать с установкой таймера вокруг вызова «Edit.RemoveAndSort» и, если это займет определенное время, всплывающее одноразовое диалоговое окно с упоминанием о том, что RemoveAndSort имеет проблемы и спросить, хочет ли пользователь отменить или хотя бы не вызвать удаление и сортировку.

...