簡體   English   中英

Visual Studio 代碼片段重構

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM