Как создать заглушку F # Azure Function во время сборки? - PullRequest
0 голосов
/ 24 февраля 2019

Допустим, у меня есть прекрасная функция F #, например:

let doWork (item: string) = 
    printf "Hello %s" item

, и теперь я хочу создать из нее функцию Azure.Все, что мне нужно сделать, это объявить другую похожую функцию, но украсить ее определенным атрибутом, например:

[<FunctionName("DoWork")>]
let DoWork([<QueueTrigger("myqueue")>] item: string) = doWork item

После того, как я делаю это в 20-й раз, я спрашиваю себя, могу ли я сгенерировать эти функции сатрибуты во время сборки.Нечто подобное

let functionApp = generateFunctionsMagic [doWork; doWork2; doWork3]

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

Что может быть правильным подходом для этого?

1 Ответ

0 голосов
/ 24 февраля 2019

В F #

нет простых способов создания кода на коде. Вы можете создать собственный кодоген на основе Fantomas .

Обычный рабочий процесс:

  1. Чтение * .fs файла
  2. Вызов FSharp.Compiler.Service для получения AST из текста
  3. Анализ AST
  4. Перезапись AST (в случае Fantomas добавление LongIdentнапример, узлы)
  5. Преобразование AST в текст
  6. Запись текста в файл * .fs

Вы можете разветвить Fantomas для своего собственного инструмента codegen.

PS Также это может помочь - Ионидные анализаторы .Но на самом деле они не поддерживают переписывание AST.AST только для анализа проблемы и после этого вам нужно работать с текстом напрямую.

Добавлено

Я создал пример кодекса на основе AST

...