@scala_ru

Страница 912 из 1499
Юрий
30.08.2017
10:23:10
Вдруг будет в скале рассвет всяких линтеров, как в жс

Oleksandr
30.08.2017
10:29:06
Вдруг будет в скале рассвет всяких линтеров, как в жс
дык уже, и давно называется "компилятор"

в смысле, что дофига проверок делается на уровне типов

Юрий
30.08.2017
10:29:38
Но не все

Google
Юрий
30.08.2017
10:30:07
Можно кастомные штуки какие-нибудь делать

Oleg
30.08.2017
10:31:14
Oleksandr
30.08.2017
10:37:42
если в скале будет "рассвет линтеров", то это невероятный фейл так называемой "сильной" системы типов ведь если линтеры (отделенные от компилятора) все равно есть везде, то зачем эти понты с типами?

Юрий
30.08.2017
10:39:36
плагином к компилятору
Можно и плагином. Но тогда ты будешь завязан на кишки компилятора (а их ещё и изучить надо, что в целом нетривиальная задача). С semanticdb можно сделать тулзу, которая не зависит от внутренней реализации компилятора, и может работать как со скалой, так и с дотти. В этом собственно одна из ее целей

Но вообще, я думаю реальных кейсов будет очень мало. Scalafix, scalafmt, и больше даже придумать не могу с ходу

Daniel
30.08.2017
10:41:48
транспайлеры на этом не сделать?

Юрий
30.08.2017
10:42:10
Daniel
30.08.2017
10:42:24
из скалки в нечто прочее

Юрий
30.08.2017
10:43:21
из скалки в нечто прочее
Можно, но не факт, что это будет проще, чем использовать какое-то более низкоуровневое представление

Mikhail
30.08.2017
10:43:25
статические анализаторы могут выполнять много всяких задач, которые с сильной или слабой системой типов могут быть вобще не связаны)

Oleksandr
30.08.2017
10:43:30
https://ru.wikipedia.org/wiki/Lint
ага, я именно о анализирует статический исходный код

статические анализаторы могут выполнять много всяких задач, которые с сильной или слабой системой типов могут быть вобще не связаны)
там "сильная" была в не в контексте автосводимости типов, а в качестве популярного баззворда для скалы

Google
Daniel
30.08.2017
10:44:43
Можно, но не факт, что это будет проще, чем использовать какое-то более низкоуровневое представление
ну или как вариант иметь единое представление, в которое можно конвертить другие япы и из которого можно конвертить другие яп. такой вариант flume или kafka-connector для кода

Mikhail
30.08.2017
10:45:33
ага, я именно о анализирует статический исходный код
например джунам можно запретить использовать .asInstanceOf и в большой корпорации в пайплайн сборки встроить кучу линтеров, один из которых вполне может запрещать эту или другие конструкции)

Oleksandr
30.08.2017
10:45:39
но вообще поинт валидный, ряд доменно-специфичных проверок никак не всунуть в компилятор с другой стороны, они же вряд ли будут использоваться всеми подряд

Mikhail
30.08.2017
10:47:41
так вот как раз это, имхо, должно быть на уровне флагов компилятору, а не внешней тулзы
это коммерческая хотелка, которая к компилятору как раз никакого отношения иметь не должна) (максимум как плагин к компилятору, но проще и нагляднее как линтер)

Oleksandr
30.08.2017
10:48:34
или я не понял, о каком именно уровне мозговитости линтеров идет речь :)

Mikhail
30.08.2017
10:51:31
ну или как вариант иметь единое представление, в которое можно конвертить другие япы и из которого можно конвертить другие яп. такой вариант flume или kafka-connector для кода
я хотеть транспайлер скала кода в плюсы. и тут семантик дб вполне достаточно для poc и гораздо проще чем плагин к компилятору

Daniel
30.08.2017
10:56:53
Нада Амин вроде пилила транспайлер в си но подозреваю сейчас заброшено

Mikhail
30.08.2017
11:27:46
@odomontois ты там в скаламете вопрос задал, можешь пояснить какую строчку ты в итоге хочешь получить? может тебе и не нужен стор.кол)

Mikhail
30.08.2017
11:29:27
object XXX extends ..parents with Enum[XXX]{ ... }
и тут в парентах ты хочешь стор.кол воткнуть?

Oleg
30.08.2017
11:29:44
Type.Apply

мне нужно к уже имеющимся парентам добавить Enum[XXX]

ты там что-то копаешь, или можно не ждать ответа?

Oleg
30.08.2017
11:36:10
Term.ApplyType(Ctor.Ref.Name("Enum"), Seq(Type.Name("A")) говорит парс

Mikhail
30.08.2017
11:38:35
Term.ApplyType(Ctor.Ref.Name("Enum"), Seq(Type.Name("A")) говорит парс
ну да. так и должно вроде быть. т.е. нашел решение?

Oleg
30.08.2017
11:39:00
ну копаюсь пока, но возможно

Google
Mikhail
30.08.2017
11:40:45
ну копаюсь пока, но возможно
не забывай про https://astexplorer.net/ неплохо помогает. просто пишешь конечный вариант который хочешь получить и потом по кирпичикам у себя собираешь

Oleg
30.08.2017
11:41:24
Пока сложно понять, как он может быть полезен

Проще квазиквотами

Mikhail
30.08.2017
11:42:36


оно как раз и показывает все что должно в конце получится по аст

а аст уже строишь как хочешь - хочешь эксплисит, хочешь квазиквотами

Oleg
30.08.2017
11:47:00
так вроде же можно и без этого распарсить

q"object xxxx extends enumeratum.Enum[A]".structure

Mikhail
30.08.2017
11:48:58
q"object xxxx extends enumeratum.Enum[A]".structure
можно. но мне деревом больше нравится смотреть. в сложной конструкции можно только небольшую часть глянуть - сразу вычленяется.

Юрий
30.08.2017
12:13:17
а что говорят?
Послушай подкаст с Бурмако

Alexander
30.08.2017
12:13:30
это которому уже несколько месяцев?

Юрий
30.08.2017
12:13:39
Да

Alexander
30.08.2017
12:13:41
в двух словах можешь резюмировать?

Юрий
30.08.2017
12:14:13
Alexander
30.08.2017
12:14:51
почему? :)

Oleksandr
30.08.2017
12:15:33
Судьба tasty туманна
вроде как не особо туманна — tasty как таковой все, а наследником является semanticdb

Юрий
30.08.2017
12:16:35
почему? :)
Я не помню уже, слушай подкаст :)

Alexander
30.08.2017
12:17:22
ясно спасибо

Oleg
30.08.2017
12:26:39
А как вы дебагаете вашу мету?

Google
Oleg
30.08.2017
12:31:25
println
println где?

Mikhail
30.08.2017
12:33:50
println где?
внутри meta {}. если оно не скомпилируется - ты и так узнаешь. а если скомпилируется то во время раскрытия мета аннотации все принтлн внутри мета{} уйдут в messages

Oleg
30.08.2017
12:34:10
если оно не компилится, и я хочу увидеть результат

Mikhail
30.08.2017
12:34:37
если оно не компилится, и я хочу увидеть результат
не компилится сам макрос, не раскрывается или не компилится результат раскрытия?

Mikhail
30.08.2017
12:36:07
в интеллиджи есть слева кнопкулька для раскрытия. можно итог посмотреть - она сработает, если раскрытие норм и ты сам все увидишь. и все также можно в мете перед возвратом сделать println результата - увидишь сгенерированный код

Mikhail
30.08.2017
12:38:27
в идее есть нюанс, что надо ручками ребилд макроса сделать. но не всегда идея и так подхватывает изменения, поэтому потом желательно запустить ребилд сорца в котором аннотация используется ( в интеллиджи можно один файл ребилдить).

Mikhail
30.08.2017
12:39:57
Это считается ручками?
нет. но в сбт тоже бывает подклинивает и надо явно клин для макроса сделать. ну и напомню на всякий, что мета макрос должен быть в отдельном (под-)-проекте

Юрий
30.08.2017
12:40:01
В идее это всё ещё так себе работает

Oleg
30.08.2017
12:40:07
тогда что такое ручками?

Юрий
30.08.2017
12:40:12
TDD реально спасает

Mikhail
30.08.2017
12:40:37
ручками - значит вручную запустить ребилд проекта в котором определен макрос, прежде чем запускать билд проекта в котором макрос используется

Oleg
30.08.2017
12:40:53
всё билдится в sbt

Google
Mikhail
30.08.2017
12:40:58
не ждать, что сбт или идея подхватят изменения для инкрементальной компиляции

Oleg
30.08.2017
12:41:05
clean compile сделать?

Mikhail
30.08.2017
12:41:49
lazy val macro-project = project lazy val target-project = project macro-project/clean target-project/compile

Oleg
30.08.2017
12:41:52
Или нужно обязательно, чтобы мета компилировалась идеевским компилятором?

Mikhail
30.08.2017
12:42:42
Если все норм, то идея и без этого сработает
оно там через раз-через два работает. у меня где-то есть проект который вобще полностью раскрытие макроса в идее ломает и ничего не помогает и работает только в сбт

Oleg
30.08.2017
12:43:22
В общем, пока что отлажиываю только через ручное применение

Oleg
30.08.2017
12:44:09
для чего?
для того, чтобы идея не писала ошибку при попытке раскрыть макрос визуально

Mikhail
30.08.2017
12:45:56
для того, чтобы идея не писала ошибку при попытке раскрыть макрос визуально
вот это не знаю. но если у тебя при раскрытии возникает эксепшн - в любом случае не покажет результат, оно показывает только если раскрытие успешно(не компиляция, а именно твой макрос отработал и вернул валидное аст в итоге).

принтлн - наше все

Mikhail
30.08.2017
12:47:15
где же оно успешно, если экспаншн фейлд?

Oleg
30.08.2017
12:47:25
Оно на самом деле успешно

sbt даже скомпилил уже

а до этого выдавал ошибки в сгенерированном коде

Это ошибка возникает не при компиляции, а при нажатии на кнопку "раскрыть" в идее

Mikhail
30.08.2017
12:48:12
как я писал чуть выше - у меня тоже есть проект, в котором раскрытие ломается - несмотря на то, что в консоли собирает норм

с этим уже ничего не сделать

Oleg
30.08.2017
12:49:04
Ну т.е. отлаживать только запуская эту трансформацию на распарсенном вручную коде

Страница 912 из 1499