Visual Model For F# – Szablony tekstu TT

Szablony tekstu (Text Templates)

W tym poście opisane są szablony tekstu. Wykorzystano je w opracowanym narzędziu. Dzięki nim można generować kod źródłowy modelowanych programów funkcyjnych. Użytkownik ma do wyboru dwie możliwości: może albo skorzystać z domyślnych szablonów dostarczonych razem z wtyczką, albo zdefiniować swoje własne szablony.

Szablony tekstu w Microsoft Visual Studio 2010 są elementami, w których można umieszczać bloki tekstu wspólnie z logiką sterowania generujące inne pliki tekstowe.

W poście tym przedstawiono przykładowe pliki szablonowe .tt służące do generowania plików z kodem źródłowym języka F# z modelów zbudowanych za pomocą narzędzia DSL Tools.

Na poniższym listingu 1 widoczny jest szablon tekstu wykorzystany w projekcie tej wtyczki. W tym szablonie wywołana jest metoda GenerateCode(), która w miejsce między znacznikami przedstawionymi na tym listingu wstawia kod źródłowy.

<#@ output extension=".fs" #>
<#@ VisualModelForFSharp processor="VisualModelForFSharpDirectiveProcessor" requires="fileName='$fileinputname$.vmffs'" #>
<#@ template inherits="Microsoft.VisualStudio.TextTemplating.VSHost.ModelingTextTransformation" #>
//plugin: Visual Model For F#
//author: Adam Bielasty
//website: www.bielasty.pl

<#= this.RootModel.GenerateCode() #>

Listing 1: Szablon tekstu zastosowany w projekcie

Metoda GenerateCode() pośrednio wywołuje inne metody, należą do nich:

  • GenerateCodeForAttribute(Attribute a, int offset)
  • GenerateCodeForFunction(Function f, int offset)
  • GenerateCodeForMethod(Operation o, int offset)
  • GenerateCodeForModule(Module m, int offset)
  • GenerateCodeForOperation(Operation o, int offset)
  • GenerateCodeForProperty(Operation o, int offset)
  • GenerateCodeForType(TypeElement t, int offset)
  • i inne pomocnicze metody

Parametr offset decyduje o długości wcięcia w kodzie.

Metody wykreowano na potrzeby stworzonego narzędzia. Z ich pomocą użytkownik może definiować własną logikę generowania kodu źródłowego w tych szablonach.

Przykładem może być szablon znajdujący się poniżej na listingu 2.

<#@ output extension=".fs" #>
<#@ VisualModelForFSharp processor="VisualModelForFSharpDirectiveProcessor" requires="fileName='$fileinputname$.vmffs'" #>
<#@ template inherits="Microsoft.VisualStudio.TextTemplating.VSHost.ModelingTextTransformation" #>
//plugin: Visual Model For F#
//author: Adam Bielasty
//website: www.bielasty.pl

//Szablon generujący kod źródłowy tylko dla typów.

<#
foreach (TypeElement te in this.RootModel.SubElements)
{
  #>
  //kolejna klasa
  <#= this.RootModel.GenerateCodeForType(te, 0) #>
  //tu można wstawić dowolny kod źródłowy, wywołując metody lub pisząc własną logikę

  <#
}
#>

Listing 2: Szablon tekstu generujący kod tylko dla klas
Jest to pomocny mechanizm, który daje większą elastyczność w generowaniu kodu źródłowego. Użytkownik może w ten sposób zdefiniować dowolną ilość pomocniczych szablonów tekstu.

adamex

About Adam Bielasty

.NET Software Developer

Dodaj komentarz

Twój adres e-mail nie zostanie opublikowany. Pola, których wypełnienie jest wymagane, są oznaczone symbolem *


7 + = 10

Możesz użyć następujących tagów oraz atrybutów HTML-a:

<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>