Удаление тегов редактора с помощью Visual Studio SDK

Можно ли удалить уже примененные теги редактора? Я только нашел способ добавить новые теги, но это не разрешить мне переопределять или удалять существующие теги.

Кстати, мой сценарий таков: я пытаюсь добавить новое ключевое слово в язык C#. Мой первый шаг — предотвратить указание ключевого слова как ошибки ReSharper. Я считаю, что ReSharper добавил ErrorTag к недопустимому ключевому слову, которое я пытаюсь удалить/переопределить.


person Steven Jeuris    schedule 17.06.2011    source источник
comment
добавить новое ключевое слово в язык? Как это возможно?   -  person A.R.    schedule 17.06.2011
comment
@ А.Р.: Возможно, нет. :) Идея состоит в том, чтобы перехватить событие сборки и перевести исходный код до того, как он будет скомпилирован, настроить его и скомпилировать скорректированный исходный код.   -  person Steven Jeuris    schedule 17.06.2011
comment
хм... интересно. Опасно, но очень интересно. Вы изучали что-то вроде PostSharp и тому подобное? (sharpcrafters.com) Это в том же духе, но, вероятно, не совсем то, что вы ищете. В любом случае, я люблю хорошие технические задачи, так что дайте мне знать, как они идут.   -  person A.R.    schedule 17.06.2011
comment
@A.R.: Да, я использую PostSharp. Насколько я знаю, PostSharp корректирует не фактический исходный код, а код MSIL, поэтому он работает на более позднем этапе. Идея этого подхода заключалась бы в том, чтобы настроить его еще раньше, что-то вроде очень продвинутого макроса.   -  person Steven Jeuris    schedule 17.06.2011
comment
Да и не думал, что получится. Крысы. А как насчет «Специфического для предметной области языка»? Это, вероятно, еще дальше от простого использования ключевого слова, но немного ближе к тому, что вы собираетесь делать.   -  person A.R.    schedule 17.06.2011
comment
@AR: Звучит о том, чего я пытаюсь достичь, но мне нужен способ «расширить» C # и добавить к этому новые ключевые слова. Кратко ознакомились с языковыми службами. в VS SDK, но я не уверен, позволяет ли это расширить язык.   -  person Steven Jeuris    schedule 17.06.2011
comment
Да, это вовсе не для «расширения» языков. Я думаю, что эмпирическое правило заключается в том, что языки и их синтаксис фиксированы/неизменны, поэтому другой разработчик может прочитать ваш код, материал компилятора и т. д. Я думаю, вам придется придумать что-то очень сложное в конце, чтобы достичь вашего Цель. Может быть, сниппет — лучший вариант?   -  person A.R.    schedule 17.06.2011


Ответы (1)


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

Из MSDN:

[Export(typeof(ITaggerProvider))]
[ContentType("text")]
[TagType(typeof(TestTag))]
internal class TestTaggerProvider : ITaggerProvider

Вы можете увидеть атрибут «TagType» в классе «TestTaggerProvider», который фактически выполняет тегирование в среде IDE.

person A.R.    schedule 17.06.2011
comment
Атрибуты на классах? Теги применяются к отрезкам текста. - person Steven Jeuris; 17.06.2011
comment
Да, но вам нужен атрибут в классе, в расширении, который предоставляет тег для применения к тексту. - person A.R.; 17.06.2011
comment
Я не могу запретить ReSharper добавлять эти теги, если, конечно, я не отключу ReSharper. Я полагаю (еще не пробовал), что по крайней мере могу найти теги, добавленные ReSharper, используя ITagAggregator. Если бы у меня был способ их удалить... :) - person Steven Jeuris; 17.06.2011