2016-09-21 76 views
2

我创建了以下简单摘录Visual Studio代码片段重构

<?xml version="1.0" encoding="utf-8"?> 
<CodeSnippets 
    xmlns="http://schemas.microsoft.com/VisualStudio/2005/CodeSnippet"> 
    <CodeSnippet Format="1.0.0"> 
    <Header> 
     <Title>Observable Property</Title> 
     <Description>Generates an Observable property based on type and Name</Description> 
     <Shortcut>nosp</Shortcut> 
    </Header> 

    <Snippet> 
     <Declarations> 
     <Literal> 
      <ID>PropertyName</ID> 
      <ToolTip>Defines the Property Name</ToolTip> 
      <Default>Name</Default> 
     </Literal> 
     <Literal> 
      <ID>PropertyType</ID> 
      <Type>Type</Type> 
      <ToolTip>Defines the Property Type</ToolTip> 
      <Default>String</Default> 
     </Literal> 
     </Declarations> 
     <Code Language="csharp"> 
     <![CDATA[ 
     public $PropertyType$ $PropertyName$ 
     { 
      get { return Get<$PropertyType$>("$PropertyName$"); } 
      set 
      { 
       Set("$PropertyName$", value); 
      } 
     }    
     ]]> 
     </Code> 
    </Snippet> 
    </CodeSnippet> 
</CodeSnippets> 

及其工作像预期的那样创造例如

public VirtualKeyCode Key 
    { 
     get { return Get<VirtualKeyCode>("Key"); } 
     set 
     { 
      Set("Key", value); 
     } 
    } 

是否有可能改变这一切$属性类型$位置时的一个例如在重构期间,它们在初始插入代码片段后发生了变化?

回答

1

编号片段只是生成文本的快捷方式。 VS一旦插入就失去了所有的知识和背景。当然,你可以用正确的类型重新插入片段,但是没有办法让重构知道代码来自代码片段。

如果你感觉特别野心勃勃,你可以在编写一个Roslyn扩展插件来跟踪哪些代码部分来自代码片段变量,并进行代码片段感知重构,以改变所有变量实例。即使如此,除非您使用评论(// snippet: Observable Property)或(如果您感觉真的雄心勃勃),您可以主动将代码与片段匹配,而不管它们最初是否来自片段,并且在匹配的树上运行。虽然功能强大,但如果有人真的试图更改部分代码,可能会导致意外。

...所以简短的回答是否定的。

相关问题