[英]Visual Studio Code Snippet Refactoring
我創建了以下簡單的片段
<?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);
}
}
是否可以更改所有 $PropertyType$ 位置,例如在重構期間初始插入代碼段后更改其中一個位置?
不可以。片段只是生成文本的一種快捷方式。 一旦插入,VS 就會丟失所有關於它的知識和上下文。 當然,您可以簡單地重新插入具有正確類型的代碼段,但是任何重構都無法知道代碼來自代碼段。
如果您感覺特別雄心勃勃,您可以嘗試編寫一個Roslyn擴展來跟蹤哪些代碼部分來自片段變量,並進行片段感知重構以更改所有變量實例。 即便如此,這也無法跨會話工作,除非您使用注釋( // snippet: Observable Property
)制作片段標記代碼,或者(如果您真的很有野心)您主動將代碼與片段進行匹配,無論它們最初是否來自片段,並對匹配的樹進行操作。 雖然功能強大,但如果有人真的試圖僅更改部分代碼,它可能會導致意外。
...所以簡短的回答是否定的。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.