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)*/
}
}
}
代碼說明
/*$ Assert.AreEqual( $expected$ , source);*/
被/*$
開頭,*/
結尾包起來的這一段就是 template 本身。- 而前後透過
$
框起來部份,就是 argument 的部份。 - argument 的型別跟使用方式,是透過
Marco
這個 Attribute 來標示。
來看一下示範影片,可以怎麼使用 source template。
注意事項
source templates 與原本的 postfix template 有一個根本的差異,Postfix Template 是 IDE 上的設定,如果要分享給團隊中其他人,得匯出相關設定檔提供給別人匯入。而 Source Template 則是以代碼形式存在,以擴充方法的方式使用,所以可以跟著版本庫抓下來直接用(當然,前提還是得裝 ReSharper),但省去了手動的匯出匯入設定檔,對團隊中的 share 還是挺方便的。
額外要留意的部份是:
- 目前只支援 C#
- 寫法是類似 Extension Method
- 得參考 nuget
JetBrains.Annotations
的 package
參考
blog 與課程更新內容,請前往新站位置:http://tdd.best/