Resharper 结构查找和替换

发布于 2024-12-26 03:34:56 字数 1084 浏览 4 评论 0原文

我有大量重复代码,我希望在遗留代码库中替换它们,并找到了 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。

getter 模式:

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

如何快速修复此 getter/setter 对?

I have a massive amount of repeating code that I wish to replace in the legacy code base and found Resharper's Structural Search and Replace feature to be a good match for the task. However I have problems making it match my patterns.

The pattern I wish to have quick-fixes for is:

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

It's to be replaced with:

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

I created a pattern:

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

The pattern matches if i do a search, but does not result in a quick fix being available. If I instead create a separate pattern for the getter and setter I get quick fixes, but the getter pattern matches both the getter and the setter.

The getter pattern:

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

How can I get quick-fixes for this getter/setter pair?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

ら栖息 2025-01-02 03:34:56

以下搜索/替换模式的工作方式类似于 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
amp;#xD;
{
    get { return GetProperty($elementName$); }
    set { SetProperty($elementName$, value); }
}
</s:String>
    <s:String x:Key="/Default/PatternsAndTemplates/StructuralSearch/Pattern/=B4B745BE8847784E9BF34E217AEB9C3B/SearchPattern/@EntryValue">public string $propName
amp;#xD;
{
    get { return base.GetSubNode(_parameterNode, $elementName$).InnerText; }
    set { base.GetSubNode(_parameterNode, $elementName$).InnerText = value; }
}
</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 安装中。管理选项> [图层名称]>导入/导出设置>从文件导入

The following search/replace pattern works like a charm in 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
amp;#xD;
{
    get { return GetProperty($elementName$); }
    set { SetProperty($elementName$, value); }
}
</s:String>
    <s:String x:Key="/Default/PatternsAndTemplates/StructuralSearch/Pattern/=B4B745BE8847784E9BF34E217AEB9C3B/SearchPattern/@EntryValue">public string $propName
amp;#xD;
{
    get { return base.GetSubNode(_parameterNode, $elementName$).InnerText; }
    set { base.GetSubNode(_parameterNode, $elementName$).InnerText = value; }
}
</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>

Save it to a .dotsettings file, and import to your ReSharper installation via ReSharper > Manage Options > [layer name] > Import/Export Settings > Import from file

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文