Несколько вопросов о CodeSmith - PullRequest
0 голосов
/ 13 мая 2011

Я недавно начал изучать CodeSmith, и у меня есть несколько вопросов. Я хотел бы сделать шаблон из 4 блоков. Каждый блок будет выбран пользователем.

  1. Как установить текстовый блок (функция) для выбора пользователя?
  2. Как мне переместить блоки в отдельные файлы

Например, есть шаблон

using System;

public class Hello3
{
   public static void Main(string[] args)
   {
    Blocl 1
    Blocl 2
    Blocl 3
    Blocl 4
   }
}

Каждый из этих блоков должен быть выбран пользователем. Каждый блок хранится в отдельном файле. Каждый блок является функцией. Выход одного блока поступает на вход другого блока.

P.S. Извините за мой плохой английский.

Ответы [ 2 ]

0 голосов
/ 11 августа 2011

Вы можете использовать строковое свойство для установки имени шаблона или сгенерированного значения.Затем вы просто визуализируете содержимое этой строки во время генерации.

Другой вариант - создать перечисление с именами различных блоков кода.Затем внутри вашего шаблона вы можете визуализировать под-шаблон или вернуть статический текст.

Вы также можете создать собственный выпадающий список, который позволит вам выбрать шаблон CodeSmith.Вся эта логика должна происходить в UITypeEditor , и вам нужно будет возвращать CodeTemplate с использованием API .Это намного сложнее, чем первый или второй вариант.

0 голосов
/ 17 мая 2011

Я не знаю, как это сделать с помощью CodeSmith, но вам лучше использовать подход "строительные блоки". AtomWeaver предлагает способ создания генератора кода из более мелких частей, называемых «атомами». Эти атомы - это шаблоны, которые вы можете комбинировать вместе.

В вашем случае я бы создал шаблон Atom с именем cs_class:

Исполнительный код шаблона будет:

code([[
using System;

public class Hello3
{
   public static void Main(string[] args)
   {
     {{code_blocks}}
   }
}
]])

Обратите внимание на маркер {{code_blocks}}. Другой шаблон поместит туда немного кода.

Затем создайте шаблон атома cs_code_block. Используйте этот код:

Для Административной секции:

under("cs_class")

Для исполнительного отдела:

cursor("code_blocks")
code([[
  <put user code here>
]])

Команда under () помогает вам создать интерактивную среду моделирования в AtomWeaver. Теперь ваш пользователь может создать модель с одним атомом cs_class, а затем он может добавить столько атомов cs_code_block, сколько пожелает. Выполнение модели сгенерирует желаемый код.

AtomWeaver позволяет вам развивать ваши модели и генераторы кода. Легко начать с нескольких строк, а затем увеличить их, чтобы получить полные генераторы.

Я знаю, что это очень, очень упрощенный пример того, что вы можете построить с помощью AtomWeaver, но это просто, чтобы дать вам быстрое представление о том, чего вы можете достичь.

...