Resharper Custom Patterns: игнорировать атрибуты свойств - PullRequest
5 голосов
/ 23 февраля 2012

Я пишу несколько Resarper Custom Patterns, чтобы предупредить нас о некоторых конструкциях кода, которые требуют внимания. Одним из них является замена OnpropertyChanged ("String") на лямбда-вариант OnPropertyChanged (() => имя свойства)

Шаблон поиска, который я определил:

 public $type$ $property$
 {
            get { return $backingfield$; }
            set
            {
                if($backingfield$  != value) {
                    $backingfield$ = value;
                    OnPropertyChanged($String$);
                }
           }
 }

Этот шаблон заменяется на:

public $type$ $property$
{
        get { return $backingfield$; }
        set
        {
            if($backingfield$  != value) {
                $backingfield$ = value;
                OnPropertyChanged(() => $property$);
            }
        }
}

Проблема: При применении этого Resharper выбрасывает атрибуты, определенные в свойстве. Этот фрагмент:

[MyAttribute]
public int Test
{
            get { return _Test; }
            set
            {
                if (_Test != value)
                {
                    _Test = value;
                    OnPropertyChanged("Test");
                }
            }
}

заменяется на

public int Test
{
            get { return _Test; }
            set
            {
                if (_Test != value)
                {
                    _Test = value;
                    OnPropertyChanged(() => Test);
                }
            }
}

Как я могу сохранить атрибуты ??

UPDATE : Добавление заполнителя типа, полученного из System.Attribute к шаблону поиска и замены, исправляет его частично.

[$Attributes$]
...

Остальная проблема заключается в том, что заполнитель атрибута соответствует только одному атрибуту, он не работает для нескольких атрибутов.

Ответы [ 2 ]

2 голосов
/ 23 февраля 2012

Если вы не можете найти другое решение, есть обходной путь.
Вы используете свой шаблон поиска (без использования шаблона замены), чтобы показать предупреждения.Я думаю, что это уже работает.
Затем вы создаете Шаблон окружения , который заменяет строку на () => PropName .См. Рисунок для примера:

enter image description here

Тогда у вас есть предупреждения по шаблону поиска и замена на шаблон окружения.
Использование: Если вы видите предупреждениевыделите строку, нажмите Ctrl + E, Ctrl + U и выберите шаблон Свойство String to func, возвращающее .

Конечно, выбор строки беспокоит.Но это лучшее, что я узнал до сих пор.

0 голосов
/ 23 февраля 2012

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

Поможет ли это вам?

Upd. Вам не нужно иметь все свойства в группе замены, как предлагает brgernerвам просто нужно преобразовать только одну строку.Например, регулярное выражение поиска будет OnPropertyChanged\("{:w*}"\);, а строка замены будет OnPropertyChanged(() => \1);

Не уверен, что вы можете сделать это в шаблоне замены Resharper.

...