2012-01-12 31 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