2012-01-12 32 views
1

我有大量的重复代码,我希望在旧版代码库中进行替换,并发现Resharper的Structural Search and Replace feature可以很好地匹配任务。不过,我有问题使它符合我的模式。Resharper结构查找和替换

我希望有快速修复的模式是:

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模式与getter和setter都匹配。

吸气模式:

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

如何,我可以得到快速修复此getter/setter方法对?

+1

看来,结构搜索和替换[只支持身体级别替换](http://devnet.jetbrains.net/message/5298817#5298817)。这将解释为什么完整的Property模式不会导致快速修复。我仍然想要一种方法将快速修复应用到getter和setter中。 – PHeiberg 2012-01-12 11:50:48

+1

VS查找和替换可能就足够了,并明智地使用它的正则表达式支持。 – AakashM 2012-01-12 12:04:01

+0

@AakashM - 的确如此,但我宁愿一次更换一块巨大的代码库,因为最好缺少测试,而且快速修复会让它变得非常容易。这也是我们学习如何利用结构查找和替换功能的好机会。 – PHeiberg 2012-01-12 12:12:04

回答

2

下查找/替换的模式就像在ReSharper的6.1魅力:通过ReSharper的

<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的安装>管理选项> [层名称]>导入/导出设置>从文件导入

+0

谢谢,我会在星期一回来工作后尝试一下。 – PHeiberg 2012-01-14 21:45:43

+0

奇怪的是,我可以发誓,我的模式是一样的,但这个工程。感谢您的帮助,并感谢一个伟大的产品! – PHeiberg 2012-01-16 11:15:20