ReSharper Source Template 介紹

Postfix template 的一種變形,跟 postfix template 不一樣的地方在於,使用 C# 的擴充方法為基底,讓 template 以代碼的形式存在與引用。

JetBrains IDE 有個很好用的功能,postfix template,也就是可以讓你在一段 expression 之後直接在後面加上 .命令,例如 .if,就會將 expression 用 if 的 template 包起來。ReSharper 也有這功能,但 ReSharper 目前似乎還沒有自訂 postfix 的功能。

然而因為 C# 有一個有趣的特性:擴充方法(Extension Method),可以讓我們針對某個型別撰寫擴充方法使用。而 ReSharper 用類似的概念設計出 Source Template 的作法,讓你可以以代碼的形式來定義跟使用類似 postfix template 的效果。

範例代碼

using JetBrains.Annotations;

namespace CustomSourceTemplate
{
    public static class JoeySourceTemplates
    {
        [JetBrains.Annotations.SourceTemplateAttribute]
        [Macro(Target = "expected", Editable = 1)]
        public static void ae<T>(this T source)
        {
            /*$ Assert.AreEqual( $expected$ , source);*/
        }

        [JetBrains.Annotations.SourceTemplateAttribute]
        public static void abs<T>(this T source)
        {
            /*$ Math.Abs(source)*/
        }
    }
}

代碼說明

  1. /*$ Assert.AreEqual( $expected$ , source);*/ 被 /*$ 開頭,*/ 結尾包起來的這一段就是 template 本身。
  2. 而前後透過 $ 框起來部份,就是 argument 的部份。
  3. argument 的型別跟使用方式,是透過 Marco 這個 Attribute 來標示。

來看一下示範影片,可以怎麼使用 source template。

注意事項

source templates 與原本的 postfix template 有一個根本的差異,Postfix Template 是 IDE 上的設定,如果要分享給團隊中其他人,得匯出相關設定檔提供給別人匯入。而 Source Template 則是以代碼形式存在,以擴充方法的方式使用,所以可以跟著版本庫抓下來直接用(當然,前提還是得裝 ReSharper),但省去了手動的匯出匯入設定檔,對團隊中的 share 還是挺方便的。

額外要留意的部份是:

  1. 目前只支援 C#
  2. 寫法是類似 Extension Method
  3. 得參考 nuget JetBrains.Annotations 的 package

參考


或許您會對下列培訓課程感興趣:

  1. 2019/3/15(五)~2019/3/17(日):C#進階設計 201903 第一梯次(台北)
  2. 2019/5/4(六)~2019/5/5(日):Clean Coder: DI 與 AOP 進階實戰 201905 第一梯次(台北)
  3. 2019/5/18(六):【單元測試實戰營】第六梯次(台北)
  4. 2019/5/19(日):【極速開發】第七梯次(台北)
  5. 2019/6/15(六)~2019/6/16(日):工程實踐與流程規範導入實務 201906 第一梯次(台北)
  6. 2019/7/27(六)~2019/7/28(日):演化式設計:測試驅動開發與持續重構 第六梯次(台北)

想收到第一手公開培訓課程資訊,或想詢問企業內訓、顧問、教練、諮詢服務的,請洽 Facebook 粉絲專頁:91敏捷開發之路