2012-01-12 3 views
1

У меня есть огромное количество повторяющегося кода, который я хочу заменить в устаревшей базе кода, и нашел, что Resharper's Structural Search and Replace feature подходит для этой задачи. Однако у меня возникают проблемы с тем, чтобы он соответствовал моим шаблонам.Resharper Structural Find and Replace

Узор Я хотел бы иметь быстрые решения для является следующим:

public string PropertyName 
{ 
    get { return base.GetSubNode(_parameterNode, "ElementName").InnerText; } 
    set { base.GetSubNode(_parameterNode, "ElementName").InnerText = value; } 
} 

Это должен быть заменен:

public string PropertyName 
{ 
    get { return GetProperty("ElementName"); } 
    set { SetProperty("ElementName", value); } 
} 

Я создал шаблон:

public string $propName$ 
{ 
    get { return base.GetSubNode(_parameterNode, $elementName$).InnerText; } 
    set { base.GetSubNode(_parameterNode, $elementName$).InnerText = value; } 
} 

Узор если я выполняю поиск, но не приводит к быстрому исправлению. Если я вместо этого создаю отдельный шаблон для getter и setter, я получаю быстрые исправления, но шаблон getter соответствует как получателю, так и сеттерам.

Поглотитель картина:

base.GetSubNode(_parameterNode, $elementName$).InnerText 

Как я могу получить быстрые решения для этого геттер/сеттер пары?

+1

Кажется, что Структурный поиск и замена [поддерживает только уровни уровня тела] (http://devnet.jetbrains.net/message/5298817#5298817). Это объясняет, почему полный шаблон свойства не приводит к быстрому исправлению. Мне все равно хотелось бы применить быстрые исправления к получателю и настройщику по отдельности. – PHeiberg

+1

VS Найти и заменить может быть достаточно здесь, с разумным использованием его поддержки регулярных выражений. – AakashM

+0

@AakashM - Верно, но я бы предпочел заменить кусок гигантской базы кода за раз, поскольку тестирование в лучшем случае отсутствует, а быстрое исправление сделает его чрезвычайно простым. Также у нас есть хорошая возможность узнать, как использовать функцию структурной находки и замены. – PHeiberg

ответ

2

Следующая поиск/замена модель работает как шарм в ReSharper 6.1:

<wpf:ResourceDictionary xml:space="preserve" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:s="clr-namespace:System;assembly=mscorlib" xmlns:ss="urn:shemas-jetbrains-com:settings-storage-xaml" xmlns:wpf="http://schemas.microsoft.com/winfx/2006/xaml/presentation"> 
    <s:Boolean x:Key="/Default/PatternsAndTemplates/StructuralSearch/Pattern/=B4B745BE8847784E9BF34E217AEB9C3B/@KeyIndexDefined">True</s:Boolean> 
    <s:String x:Key="/Default/PatternsAndTemplates/StructuralSearch/Pattern/=B4B745BE8847784E9BF34E217AEB9C3B/Comment/@EntryValue">GetSubNode calls in property accessors</s:String> 
    <s:Boolean x:Key="/Default/PatternsAndTemplates/StructuralSearch/Pattern/=B4B745BE8847784E9BF34E217AEB9C3B/FormatAfterReplace/@EntryValue">False</s:Boolean> 
    <s:Boolean x:Key="/Default/PatternsAndTemplates/StructuralSearch/Pattern/=B4B745BE8847784E9BF34E217AEB9C3B/IsReplacePattern/@EntryValue">True</s:Boolean> 
    <s:String x:Key="/Default/PatternsAndTemplates/StructuralSearch/Pattern/=B4B745BE8847784E9BF34E217AEB9C3B/LanguageName/@EntryValue">CSHARP</s:String> 
    <s:String x:Key="/Default/PatternsAndTemplates/StructuralSearch/Pattern/=B4B745BE8847784E9BF34E217AEB9C3B/ReplaceComment/@EntryValue">Replace GetSubNode with GetProperty or SetProperty call</s:String> 
    <s:String x:Key="/Default/PatternsAndTemplates/StructuralSearch/Pattern/=B4B745BE8847784E9BF34E217AEB9C3B/ReplacePattern/@EntryValue">public string $propName$&#xD; 
{&#xD; 
    get { return GetProperty($elementName$); }&#xD; 
    set { SetProperty($elementName$, value); }&#xD; 
}&#xD; 
</s:String> 
    <s:String x:Key="/Default/PatternsAndTemplates/StructuralSearch/Pattern/=B4B745BE8847784E9BF34E217AEB9C3B/SearchPattern/@EntryValue">public string $propName$&#xD; 
{&#xD; 
    get { return base.GetSubNode(_parameterNode, $elementName$).InnerText; }&#xD; 
    set { base.GetSubNode(_parameterNode, $elementName$).InnerText = value; }&#xD; 
}&#xD; 
</s:String> 
    <s:String x:Key="/Default/PatternsAndTemplates/StructuralSearch/Pattern/=B4B745BE8847784E9BF34E217AEB9C3B/Severity/@EntryValue">SUGGESTION</s:String> 
    <s:Boolean x:Key="/Default/PatternsAndTemplates/StructuralSearch/Pattern/=B4B745BE8847784E9BF34E217AEB9C3B/ShortenReferences/@EntryValue">False</s:Boolean> 
    <s:Boolean x:Key="/Default/PatternsAndTemplates/StructuralSearch/Pattern/=B4B745BE8847784E9BF34E217AEB9C3B/CustomPatternPlaceholder/=elementName/@KeyIndexDefined">True</s:Boolean> 
    <s:String x:Key="/Default/PatternsAndTemplates/StructuralSearch/Pattern/=B4B745BE8847784E9BF34E217AEB9C3B/CustomPatternPlaceholder/=elementName/Properties/=Maximal/@EntryIndexedValue">-1</s:String> 
    <s:String x:Key="/Default/PatternsAndTemplates/StructuralSearch/Pattern/=B4B745BE8847784E9BF34E217AEB9C3B/CustomPatternPlaceholder/=elementName/Properties/=Minimal/@EntryIndexedValue">-1</s:String> 
    <s:String x:Key="/Default/PatternsAndTemplates/StructuralSearch/Pattern/=B4B745BE8847784E9BF34E217AEB9C3B/CustomPatternPlaceholder/=elementName/Type/@EntryValue">ArgumentPlaceholder</s:String> 
    <s:Boolean x:Key="/Default/PatternsAndTemplates/StructuralSearch/Pattern/=B4B745BE8847784E9BF34E217AEB9C3B/CustomPatternPlaceholder/=propName/@KeyIndexDefined">True</s:Boolean> 
    <s:String x:Key="/Default/PatternsAndTemplates/StructuralSearch/Pattern/=B4B745BE8847784E9BF34E217AEB9C3B/CustomPatternPlaceholder/=propName/Properties/=CaseSensitive/@EntryIndexedValue">True</s:String> 
    <s:String x:Key="/Default/PatternsAndTemplates/StructuralSearch/Pattern/=B4B745BE8847784E9BF34E217AEB9C3B/CustomPatternPlaceholder/=propName/Properties/=ExactType/@EntryIndexedValue">False</s:String> 
    <s:String x:Key="/Default/PatternsAndTemplates/StructuralSearch/Pattern/=B4B745BE8847784E9BF34E217AEB9C3B/CustomPatternPlaceholder/=propName/Properties/=RegEx/@EntryIndexedValue"></s:String> 
    <s:String x:Key="/Default/PatternsAndTemplates/StructuralSearch/Pattern/=B4B745BE8847784E9BF34E217AEB9C3B/CustomPatternPlaceholder/=propName/Type/@EntryValue">IdentifierPlaceholder</s:String></wpf:ResourceDictionary> 

сохранить его в .dotsettings файлов, а импорт в вашей установке ReSharper через ReSharper> Manage Параметры> [слоя имя]> Параметры импорта/экспорта> Импорт из файла

+0

Спасибо, я попробую, когда вернусь к работе в понедельник. – PHeiberg

+0

Странно, я мог бы поклясться, что мой рисунок был таким же, но этот работает. Спасибо за помощь и благодарность за отличный продукт! – PHeiberg

Смежные вопросы