1*3c321d95SSadaf Ebrahimi%L for Literals 2*3c321d95SSadaf Ebrahimi=============== 3*3c321d95SSadaf Ebrahimi 4*3c321d95SSadaf EbrahimiAlthough Kotlin's string templates usually work well in cases when you want to include literals into 5*3c321d95SSadaf Ebrahimigenerated code, KotlinPoet offers additional syntax inspired-by but incompatible-with 6*3c321d95SSadaf Ebrahimi[`String.format()`][formatter]. It accepts **`%L`** to emit a **literal** value in the output. This 7*3c321d95SSadaf Ebrahimiworks just like `Formatter`'s `%s`: 8*3c321d95SSadaf Ebrahimi 9*3c321d95SSadaf Ebrahimi```kotlin 10*3c321d95SSadaf Ebrahimiprivate fun computeRange(name: String, from: Int, to: Int, op: String): FunSpec { 11*3c321d95SSadaf Ebrahimi return FunSpec.builder(name) 12*3c321d95SSadaf Ebrahimi .returns(Int::class) 13*3c321d95SSadaf Ebrahimi .addStatement("var result = 0") 14*3c321d95SSadaf Ebrahimi .beginControlFlow("for (i in %L..<%L)", from, to) 15*3c321d95SSadaf Ebrahimi .addStatement("result = result %L i", op) 16*3c321d95SSadaf Ebrahimi .endControlFlow() 17*3c321d95SSadaf Ebrahimi .addStatement("return result") 18*3c321d95SSadaf Ebrahimi .build() 19*3c321d95SSadaf Ebrahimi} 20*3c321d95SSadaf Ebrahimi``` 21*3c321d95SSadaf Ebrahimi 22*3c321d95SSadaf EbrahimiLiterals are emitted directly to the output code with no escaping. Arguments for literals may be 23*3c321d95SSadaf Ebrahimistrings, primitives, and a few KotlinPoet types described below. 24*3c321d95SSadaf Ebrahimi 25*3c321d95SSadaf Ebrahimi [formatter]: https://developer.android.com/reference/java/util/Formatter.html 26