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

參考


blog 與課程更新內容,請前往新站位置:http://tdd.best/