169 похожих чатов

Такой вопрос: что означает @DslMarker аннотация на функции? В документации (см

https://kotlinlang.org/docs/type-safe-builders.html#scope-control-dslmarker) (и в документации к самой DslMarker! https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-dsl-marker/) рассмотрен только вариант расстановки этой аннотации у классов и интерфейсов. Аннотирование функций не предусмотрено.

Если же заглянуть в kotlinx-html, то там у всех функций-тегов расставлена такая аннотация:
https://github.com/Kotlin/kotlinx.html/blob/24ef7f418687ce4241ec111f757b09e8b4f5bf79/src/commonMain/kotlin/generated/gen-tags-p.kt#L49-L50


@HtmlTagMarker
inline fun PICTURE.img(alt : String? = null, src : String? = null, classes : String? = null, crossinline block : IMG.() -> Unit = {}) : Unit = IMG(attributesMapOf("alt", alt,"src", src,"class", classes), consumer).visit(block)


При этом у интерфейса htmltag такая же аннотация тоже присутствует:
https://github.com/Kotlin/kotlinx.html/blob/24ef7f418687ce4241ec111f757b09e8b4f5bf79/src/commonMain/kotlin/api.kt#L18-L19


@HtmlTagMarker
interface Tag {


Из побочных эффектов заметил, что в моём случае добавление аннотации на fun меняет стиль в IDEA: код становится простым, не наклонным. Но вообще как это должно работать? Нужно аннотации и на типах и на методах расставлять?

13 ответов

17 просмотров

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

Vladimir Sitnikov
screenshot Без проблем вызывается

Я же говорю, она очень мутно работает. Не понятно, где работает, а где нет.

Vladimir-Sitnikov Автор вопроса
Alexander Nozik
Я же говорю, она очень мутно работает. Не понятно,...

Ещё раз: документация описывает использование @DslMaker на типах — там понятно как работает. А вот вариант использования аннотации на fun — не документирован

Vladimir Sitnikov
screenshot Без проблем вызывается

а если сам TransactionControllerScope проаннотировать, ошибка появляется?

Vladimir-Sitnikov Автор вопроса
Leonard Startsev
а если сам TransactionControllerScope проаннотиров...

Я сейчас не рассматриваю проблему вложенных http { http { } } — чтобы её запретить нужно у функции http поменять тип лямбды (ну, чтобы она не TestElementScope принимала, а что-нибудь типа TestSamplerScope, которое отличается от TestElementScope тем, что у него не должно быть дочерних элементов)

Vladimir Sitnikov
Ещё раз: документация описывает использование @Dsl...

я вешал на функции для красивой подсветки 🙂

Vladimir-Sitnikov Автор вопроса

Методом проб и ошибок понял, что IDEA 2021.3 выбирает разные цвета для функций, размеченных разными DslMarker аннотациями. Иными словами, DslMarker аннотации на функциях (пока?) не влияют на receiver'ы, но зато они позволяют раскрасить эти самые функции. val/var properties пока не раскрашиваются.

Vladimir Sitnikov
Методом проб и ошибок понял, что IDEA 2021.3 выбир...

это незадокументированная возможность. цвет вычисляется из названия аннотации и мапится на 4 отконфигурированных варианта. кмк - корявые костыли.

Anton Arhipov
это незадокументированная возможность. цвет вычисл...

Варианты вполне документированные, они в настройках есть

Alexander Nozik
Варианты вполне документированные, они в настройка...

нет полной истории. пока у DslMarker-а target выставлен TYPE - это костыли костыльные

Похожие вопросы

Обсуждают сегодня

Господа, а что сейчас вообще с рынком труда на делфи происходит? Какова ситуация?
Rꙮman Yankꙮvsky
29
А вообще, что может смущать в самой Julia - бы сказал, что нет единого стандартного подхода по многим моментам, поэтому многое выглядит как "хаки" и произвол. Короче говоря, с...
Viktor G.
2
30500 за редактор? )
Владимир
47
а через ESC-код ?
Alexey Kulakov
29
Чёт не понял, я ж правильной функцией воспользовался чтобы вывести отладочную информацию? но что-то она не ловится
notme
18
У меня есть функция где происходит это: write_bit(buffer, 1); write_bit(buffer, 0); write_bit(buffer, 1); write_bit(buffer, 1); write_bit(buffer, 1); w...
~
14
Добрый день! Скажите пожалуйста, а какие программы вы бы рекомендовали написать для того, чтобы научиться управлять памятью? Можно написать динамический массив, можно связный ...
Филипп
7
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
Ребят в СИ можно реализовать ООП?
Николай
33
https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_h_common.erl#L174 https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_olp.erl#L76 15 лет назад...
Maksim Lapshin
20
Карта сайта