Описание тега scala-macro-paradise
Плагин Macro Paradise, предназначенный для надежной работы с производственными выпусками компилятора Scala, делает последние разработки макросов доступными задолго до того, как они попадут в будущие выпуски Scala.
1
ответ
scala.meta.Lit.type не принимает параметры
Когда я запускаю следующее: import scala.meta._ class Test { val x = q"1" } Я получаю scala.meta.Lit.type не принимает параметры val x = q "1" scalameta_2.11: 1.8.0 paradise_2.11.8: 3.0.0-M7 Я пытаюсь заставить работать некоторые базовые примеры мак…
23 апр '18 в 11:50
1
ответ
Scala Macro: создание новых классов с типами Option
Я хочу написать макрос с учетом этого: @MetaRest case class User( @get id : Int, @get @post @patch name : String, @get @post email : String, registeredOn : DateTime ) Создайте следующий фрагмент кода: object User { case class Get(id: Int, name: Stri…
04 фев '15 в 09:33
1
ответ
Вызов функции с неявным параметром из квазицитата
По какой-то причине каждый раз, когда я пытаюсь вызвать функцию с неявным параметром из квазицитат, происходит сбой с Can't unquote x.universe.Tree, consider providing an implicit instance of Liftable[x.universe.Tree] Что в этом плохого? Разве мне н…
22 окт '15 в 08:57
0
ответов
Сбой генерации Scaladoc при обращении к методам, сгенерированным макросами аннотаций
У меня есть два класса, позвоните им Foo а также Fizz, Foo использует макрос аннотации под названием expand создавать псевдонимы некоторых из его методов (фактическая реализация делает немного больше, чем создание псевдонимов, но простая версия все …
08 мар '17 в 23:45
2
ответа
Как оценить выражение внутри макроса Scala?
Я пытаюсь оценить Expr внутри макроса, используя Context#eval метод: //Dummy implementation def evalArrayTree(c: Context)(a: c.Expr[ArrayTree]): c.Expr[Array[Double]] = { import c.universe._ println( c.eval(a) ) val tree = reify( Array(0.0,0.0,0.0) …
05 фев '14 в 14:37
0
ответов
Как извлечь первичные параметры конструктора с помощью квазицитаты
В настоящее время я использую: annottees map (_.tree) match { case (classDef @ q"$mods class $tpname[..$tparams] $ctorMods(...$paramss) extends { ..$earlydefns } with ..$parents { $self => ..$stats }") :: Nil => извлечь как classDef и paramss,…
06 авг '14 в 01:10
1
ответ
Используйте макросы Scala для генерации методов
Я хочу генерировать псевдонимы методов, используя макросы аннотаций в Scala 2.11+. Я даже не уверен, что это возможно. Если да, то как? Пример. Учитывая это ниже, я хочу, чтобы макросы аннотаций расширились до class Socket { @alias(aliases = Seq("!"…
22 окт '15 в 11:02
3
ответа
Тип безопасной строковой интерполяции в Scala
Вдохновленный этим, мне было интересно, можем ли мы иметь безопасную для типов интерполяцию строк в Scala (возможно, используя макросы)? Например, я хочу что-то подобное def a[A] = ??? val greetFormat = f"Hi! My name is ${a[String]}. I am ${a[Int]} …
06 май '14 в 21:04
1
ответ
Обеспечить последствия для всех подтипов закрытого типа
В моем приложении у меня есть несколько классов дел и объектов, которые являются частью иерархии запечатанных признаков. Я использую их как сообщения в Akka. Эти классы необходимо преобразовать в удобную для пользователя форму перед отправкой через …
11 мар '16 в 15:17
1
ответ
Как получить позицию диапазона из макроаннотации?
Я использую макрос аннотации к коду инструмента. Как я могу получить положение диапазона некоторых выражений? @ScalaKata object SHA { val foo = "foo" val bar = "bar" foo; bar // ... } // result: Map((75, 78) -> "foo", (80, 83) -> "bar") Макрос…
27 июн '14 в 15:57
0
ответов
scala: пример аннотаций в макро-раю
У меня есть эта структура в моем проекте: ScalaProject: TestMacrosAnnotations package: core Test.scala package: macros Macros.scala Затем я использовал пример из: здесь Я добавил библиотеку paradise_2.11.6-2.1.0-M5.jar Я включил его в компиляторе Sc…
09 июн '15 в 13:18
1
ответ
Скала рекурсивный макрос?
Мне было интересно, поддерживает ли Scala рекурсивное расширение макросов, например, я пытаюсь написать библиотеку линз с макросом линз, который делает это: case class C(d: Int) case class B(c: C) case class A(b: B) val a = A(B(C(10)) val aa = lens(…
03 мар '15 в 07:13
1
ответ
Простой способ заменить имя термина в аст
У меня есть следующий код для: @compileTimeOnly("enable macro paradise to expand macro annotations") class replace extends StaticAnnotation { def macroTransform(annottees: Any*) = macro replaceImpl.replace } object replaceImpl { def replace(c: Conte…
23 мар '16 в 21:29
1
ответ
Макро-аннотация Scala - класс case с параметрами типа
Я пытаюсь написать простую макросовую аннотацию для case-классов, которая добавляет метод к объекту-компаньону. Уловка в том, что новый метод должен учитывать параметры типа в аннотированном классе case. Вот тест, который мне нужно пройти package my…
05 июл '16 в 21:10
1
ответ
Можно ли заменить метод применения по умолчанию, сгенерированный для классов в макросе Scala?
Кажется, что это не работает (с использованием 2.11.1 и macro paradise 2.0.1). Я надеялся, что методы, сгенерированные классом case, будут либо подавлены, либо будут находиться в дереве, чтобы я мог от него избавиться. Это жесткое ограничение? class…
16 авг '14 в 00:36
1
ответ
Как проверить тип DefDef
В аннотации Macro я перечисляю членов класса и хочу типы методов, которые я нахожу. Так что я с удовольствием перебираю body класса и собрать все DefDef члены. ... который я не могу проверить Для каждого DefDef Я пытался обернуть его в Expr и исполь…
12 мар '14 в 20:52
1
ответ
Макро-аннотация с параметрами по умолчанию
Получение параметров из аннотации макроса Scala объясняет, как получить параметры из аннотации макроса. Однако, если у меня есть несколько параметров со значениями по умолчанию: class Foo(b: Boolean = false, i: Int = 0) extends StaticAnnotation { .…
17 июн '16 в 23:45
1
ответ
Можно ли иметь параметры макроаннотации (и как их получить)?
У меня есть некоторый источник данных, который требует операций переноса в транзакциях, которые имеют 2 возможных результата: успех и неудача. Этот подход вводит довольно много стандартного кода. То, что я хотел бы сделать, это что-то вроде этого (т…
20 авг '14 в 13:21
0
ответов
Уточните полное имя модуля в Scala, используя отражение во время компиляции
Я пытаюсь получить полные имена "объектов" Scala (они также называются "модулями" в API отражений) во время компиляции с использованием макроаннотаций. Я не могу использовать отражение времени выполнения, потому что я нацеливаюсь на время выполнения…
09 ноя '18 в 12:44
2
ответа
Макрос Scala для автоматического создания беглых строителей
Я взаимодействую с внешним API Java, который выглядит следующим образом: val obj: SomeBigJavaObj = { val _obj = new SomeBigJavaObj(p1, p2) _obj.setFoo(p3) _obj.setBar(p4) val somethingElse = { val _obj2 = new SomethingElse(p5) _obj2.setBar(p6) _obj2…
07 мар '18 в 15:20