xref: /aosp_15_r20/external/kotlinpoet/docs/code-block-format-strings.md (revision 3c321d951dd070fb96f8ba59e952ffc3131379a0)
1*3c321d95SSadaf EbrahimiCode Block Format Strings
2*3c321d95SSadaf Ebrahimi=========================
3*3c321d95SSadaf Ebrahimi
4*3c321d95SSadaf EbrahimiCode blocks may specify the values for their placeholders in a few ways. Only one style may be used
5*3c321d95SSadaf Ebrahimifor each operation on a code block.
6*3c321d95SSadaf Ebrahimi
7*3c321d95SSadaf Ebrahimi## Relative Arguments
8*3c321d95SSadaf Ebrahimi
9*3c321d95SSadaf EbrahimiPass an argument value for each placeholder in the format string to `CodeBlock.add()`. In each
10*3c321d95SSadaf Ebrahimiexample, we generate code to say "I ate 3 tacos"
11*3c321d95SSadaf Ebrahimi
12*3c321d95SSadaf Ebrahimi```kotlin
13*3c321d95SSadaf EbrahimiCodeBlock.builder().add("I ate %L %L", 3, "tacos")
14*3c321d95SSadaf Ebrahimi```
15*3c321d95SSadaf Ebrahimi
16*3c321d95SSadaf Ebrahimi## Positional Arguments
17*3c321d95SSadaf Ebrahimi
18*3c321d95SSadaf EbrahimiPlace an integer index (1-based) before the placeholder in the format string to specify which
19*3c321d95SSadaf Ebrahimiargument to use.
20*3c321d95SSadaf Ebrahimi
21*3c321d95SSadaf Ebrahimi```kotlin
22*3c321d95SSadaf EbrahimiCodeBlock.builder().add("I ate %2L %1L", "tacos", 3)
23*3c321d95SSadaf Ebrahimi```
24*3c321d95SSadaf Ebrahimi
25*3c321d95SSadaf Ebrahimi## Named Arguments
26*3c321d95SSadaf Ebrahimi
27*3c321d95SSadaf EbrahimiUse the syntax `%argumentName:X` where `X` is the format character and call `CodeBlock.addNamed()`
28*3c321d95SSadaf Ebrahimiwith a map containing all argument keys in the format string. Argument names use characters in
29*3c321d95SSadaf Ebrahimi`a-z`, `A-Z`, `0-9`, and `_`, and must start with a lowercase character.
30*3c321d95SSadaf Ebrahimi
31*3c321d95SSadaf Ebrahimi```kotlin
32*3c321d95SSadaf Ebrahimival map = LinkedHashMap<String, Any>()
33*3c321d95SSadaf Ebrahimimap += "food" to "tacos"
34*3c321d95SSadaf Ebrahimimap += "count" to 3
35*3c321d95SSadaf EbrahimiCodeBlock.builder().addNamed("I ate %count:L %food:L", map)
36*3c321d95SSadaf Ebrahimi```
37