Описание тега 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 Я пытаюсь заставить работать некоторые базовые примеры мак…
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…
1 ответ

Вызов функции с неявным параметром из квазицитата

По какой-то причине каждый раз, когда я пытаюсь вызвать функцию с неявным параметром из квазицитат, происходит сбой с Can't unquote x.universe.Tree, consider providing an implicit instance of Liftable[x.universe.Tree] Что в этом плохого? Разве мне н…
0 ответов

Сбой генерации Scaladoc при обращении к методам, сгенерированным макросами аннотаций

У меня есть два класса, позвоните им Foo а также Fizz, Foo использует макрос аннотации под названием expand создавать псевдонимы некоторых из его методов (фактическая реализация делает немного больше, чем создание псевдонимов, но простая версия все …
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) …
0 ответов

Как извлечь первичные параметры конструктора с помощью квазицитаты

В настоящее время я использую: annottees map (_.tree) match { case (classDef @ q"$mods class $tpname[..$tparams] $ctorMods(...$paramss) extends { ..$earlydefns } with ..$parents { $self => ..$stats }") :: Nil => извлечь как classDef и paramss,…
1 ответ

Используйте макросы Scala для генерации методов

Я хочу генерировать псевдонимы методов, используя макросы аннотаций в Scala 2.11+. Я даже не уверен, что это возможно. Если да, то как? Пример. Учитывая это ниже, я хочу, чтобы макросы аннотаций расширились до class Socket { @alias(aliases = Seq("!"…
3 ответа

Тип безопасной строковой интерполяции в Scala

Вдохновленный этим, мне было интересно, можем ли мы иметь безопасную для типов интерполяцию строк в Scala (возможно, используя макросы)? Например, я хочу что-то подобное def a[A] = ??? val greetFormat = f"Hi! My name is ${a[String]}. I am ${a[Int]} …
1 ответ

Обеспечить последствия для всех подтипов закрытого типа

В моем приложении у меня есть несколько классов дел и объектов, которые являются частью иерархии запечатанных признаков. Я использую их как сообщения в Akka. Эти классы необходимо преобразовать в удобную для пользователя форму перед отправкой через …
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(…
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…
1 ответ

Можно ли заменить метод применения по умолчанию, сгенерированный для классов в макросе Scala?

Кажется, что это не работает (с использованием 2.11.1 и macro paradise 2.0.1). Я надеялся, что методы, сгенерированные классом case, будут либо подавлены, либо будут находиться в дереве, чтобы я мог от него избавиться. Это жесткое ограничение? class…
1 ответ

Как проверить тип DefDef

В аннотации Macro я перечисляю членов класса и хочу типы методов, которые я нахожу. Так что я с удовольствием перебираю body класса и собрать все DefDef члены. ... который я не могу проверить Для каждого DefDef Я пытался обернуть его в Expr и исполь…
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 отражений) во время компиляции с использованием макроаннотаций. Я не могу использовать отражение времени выполнения, потому что я нацеливаюсь на время выполнения…
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…