Visual Studio代码片段重构
问题描述:
我创建了以下简单摘录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);
}
}
是否有可能改变这一切$属性类型$位置时的一个例如在重构期间,它们在初始插入代码片段后发生了变化?
答
编号片段只是生成文本的快捷方式。 VS一旦插入就失去了所有的知识和背景。当然,你可以用正确的类型重新插入片段,但是没有办法让重构知道代码来自代码片段。
如果你感觉特别野心勃勃,你可以在编写一个Roslyn扩展插件来跟踪哪些代码部分来自代码片段变量,并进行代码片段感知重构,以改变所有变量实例。即使如此,除非您使用评论(// snippet: Observable Property
)或(如果您感觉真的雄心勃勃),您可以主动将代码与片段匹配,而不管它们最初是否来自片段,并且在匹配的树上运行。虽然功能强大,但如果有人真的试图更改部分代码,可能会导致意外。
...所以简短的回答是否定的。