Описание тега scala-meta

Для метапрограммирования в Scala с новым проектом scalameta.
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…
0 ответов

Как преобразовать класс X[A] в аргумент метода def f(x:X[A])?

Я пытаюсь создать класс декоратора из существующего класса X: class X[A]{....} ... используя scala.meta, сгенерируйте этот код.... class XDecorator[A](enclosed : X[A]) {...} Так что все в порядке, за исключением аргумента конструктора "заключен в: X…
03 ноя '17 в 16:22
1 ответ

Что scala.meta заменит scala.reflect, что будет с ClassTags и TypeTags?

Или это вообще актуально? Я имею в виду использование ClassTag или же TypeTag аннотации, вот так: scala> import scala.reflect.runtime.universe.TypeTag def f[T : TypeTag](ls : List[T]) : String = { ??? } результаты в: f: [T](ls: List[T])(implicit …
1 ответ

Передача параметра типа в мета-макрос / аннотации scala

package scalaworld.macros import scala.meta._ class Argument(arg: Int) extends scala.annotation.StaticAnnotation { inline def apply(defn: Any): Any = meta { println(this.structure) val arg = this match { // The argument needs to be a literal like `1…
15 янв '17 в 18:16
3 ответа

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

Я пишу плагин Scala для редактора, который я использую, чтобы выделить все неиспользуемые пути кода (может быть неиспользованным defs, vals, classes а также implicits), и дать пользователю возможность вытащить их из .scala файл. Как я могу это сдела…
1 ответ

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

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

Скала-мета для приборостроения

Я заметил, что scala-meta предоставляет функции преобразования, но не функции для вставки дополнительного кода (например, операторы импорта или вызов метода при каждом запуске функции). Поскольку все структуры (scala.meta.Tree и его дочерние элемент…
09 окт '17 в 11:46
1 ответ

Скалярный семантический API

В руководстве Scalameta отмечено, что SemanticAPI может использоваться для разрешения имен (println => _root_.scala.Predef.println). FAQ "Как использовать Semantic API?" ссылки на скалафикс, но я не смог найти учебник или конкретные примеры. Так что…
16 фев '18 в 15:21
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 ответ

Определение неявного кодировщика с использованием мета-кавычек и квази-кавычек

Я пытаюсь создать неявный кодер, используя Circe. Однако этот кодировщик будет создан с использованием аннотации, поэтому я использую Scalameta. Вот мой код Однако компилятор жалуется на наличие оператора переопределения в квазицитатах. class HalRes…
1 ответ

Как сопоставить методы, которые возвращают Future и имеют несколько аргументов или список с несколькими аргументами (карри)?

Я играю со скаламетой и хочу иметь общую аннотацию измерения, которая отправляет измерения о том, сколько времени заняло выполнение метода. Я использовал демонстрацию аннотации кеша Цин Вэя. https://www.cakesolutions.net/teamblogs/scalameta-tut-cach…
03 ноя '17 в 09:30
1 ответ

Инициализация фабрики во время компиляции

У меня есть фабрика, которая должна возвращать реализацию в зависимости от имени. val moduleMap = Map(Modules.moduleName -> new ModuleImpl) def getModule(moduleName: String): Module = moduleMap.get(moduleName) match { case Some(m) => m case _ …
25 мар '18 в 11:53
1 ответ

scala-meta: несоответствие типов при кавычках; найдено: опция [scala.meta.Type.Arg] обязательна: scala.meta.Type

Я играю немного с макро-аннотациями нового стиля scala-meta. Поэтому я расширил пример аннотации @Main: SConsumer.scala: import scala.meta._ class SConsumer extends scala.annotation.StaticAnnotation { inline def apply(defn: Any): Any = meta { defn m…
17 фев '17 в 15:42
1 ответ

Получить полное имя для ссылок, использующих скаламету

Я пытаюсь написать простую программу для обхода всего ссылочного кода, начиная с данного метода, используя scalameta, Я мог следить за вызовами, но не мог разрешить ссылки на методы. analyzeme/ SRC / основной / Scala/codelab/FindMe.scala package cod…
03 мар '18 в 23:07
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…
0 ответов

Scala: создание экземпляра из ClassDef

Я играю с метапрограммированием Scala. Допустим, я "определяю" класс case с помощью квазицитат: scala> val t = q"case class Person(name: String)" t: reflect.runtime.universe.ClassDef = case class Person extends scala.Product with scala.Serializab…
1 ответ

Автоматически генерировать объект case для класса case

Как сделать так, чтобы компилятор scala автоматически генерировал объект case? // Pizza class class Pizza (val crust_type: String) // companion object object Pizza { val crustType = "crust_type" } Желаемые свойства для объекта case для каждого атриб…
1 ответ

Как получить метод, возвращающий тип с мета-аннотацией scala?

Я хочу сделать аннотацию журнала, используя scala meta.Usage просто, как: @Log def f1(a: Int) { Future(a + 1) //result is a Future } // after parsed ====> def f1(a: Int) { Future(a + 1).map{x => println(x) x } } Как я могу проверить, если f1 э…
25 апр '17 в 02:22
1 ответ

Создайте класс case с Binding.scala Vars, используя Scala.meta, выдает исключение

У меня есть проект scala.js. Там у меня странное поведение со Scala.Meta и Binding.scala. Я хочу создать класс case из класса case: case class SimpleCaseClass(i: Int, s: String, list: Seq[String]) должен генерировать для: SimpleCaseClassFormData(Var…