@zio.dev/zio-blocks 0.0.33 → 0.0.51
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/guides/compile-time-resource-safety-with-scope.md +16 -17
- package/guides/getting-started-with-mux.md +1507 -0
- package/guides/query-dsl-extending.md +161 -102
- package/guides/query-dsl-fluent-builder.md +217 -157
- package/guides/query-dsl-reified-optics.md +12 -10
- package/guides/query-dsl-sql.md +246 -165
- package/guides/telemetry-guide.md +1069 -0
- package/guides/zio-schema-migration.md +29 -22
- package/index.md +292 -50
- package/package.json +1 -1
- package/plans/config-follow-up-prs.md +188 -0
- package/plans/config-pr-assessment-roadmap.md +310 -0
- package/reference/MuxDataFlow.jsx +250 -0
- package/reference/async.md +651 -0
- package/reference/chunk.md +3533 -308
- package/reference/codegen/case-class.md +436 -0
- package/reference/codegen/emitter-config.md +383 -0
- package/reference/codegen/examples.md +664 -0
- package/reference/codegen/field.md +316 -0
- package/reference/codegen/index.md +317 -0
- package/reference/codegen/scala-emitter.md +392 -0
- package/reference/codegen/scala-file.md +276 -0
- package/reference/codegen/sealed-trait.md +408 -0
- package/reference/codegen/type-definition.md +340 -0
- package/reference/codegen/type-ref.md +201 -0
- package/reference/combinators.md +347 -117
- package/reference/config.md +158 -0
- package/reference/context.md +4 -4
- package/reference/datastar.md +346 -0
- package/reference/docs.md +1461 -345
- package/reference/endpoint/auth-type.md +146 -0
- package/reference/endpoint/endpoint.md +297 -0
- package/reference/endpoint/http-codec.md +249 -0
- package/reference/endpoint/index.md +825 -0
- package/reference/endpoint/path-codec.md +237 -0
- package/reference/endpoint/route-pattern.md +196 -0
- package/reference/endpoint/route-tree.md +111 -0
- package/reference/endpoint/segment-codec.md +212 -0
- package/reference/html.md +1120 -0
- package/reference/htmx/attribute-values.md +359 -0
- package/reference/htmx/hx-encoding.md +111 -0
- package/reference/htmx/hx-params.md +204 -0
- package/reference/htmx/hx-swap.md +276 -0
- package/reference/htmx/hx-sync.md +251 -0
- package/reference/htmx/hx-target.md +314 -0
- package/reference/htmx/hx-trigger.md +457 -0
- package/reference/htmx/hx-url-update.md +239 -0
- package/reference/htmx/index.md +855 -0
- package/reference/http-model/index.md +47 -0
- package/reference/http-model/model.md +1481 -0
- package/reference/http-model/schema.md +747 -0
- package/reference/maybe.md +826 -0
- package/reference/media-type.md +2 -2
- package/reference/mux.mdx +823 -0
- package/reference/openapi.md +1351 -0
- package/reference/resource-management/defer-handle.md +1 -1
- package/reference/resource-management/resource.md +31 -2
- package/reference/resource-management/scope.md +28 -12
- package/reference/resource-management/wire.md +3 -7
- package/reference/ringbuffer/MpmcDiagram.jsx +717 -0
- package/reference/ringbuffer/MpscDiagram.jsx +618 -0
- package/reference/ringbuffer/SpmcDiagram.jsx +680 -0
- package/reference/ringbuffer/SpscDiagram.jsx +677 -0
- package/reference/ringbuffer/advanced.mdx +109 -0
- package/reference/ringbuffer/index.mdx +145 -0
- package/reference/ringbuffer/mpmc.mdx +151 -0
- package/reference/ringbuffer/mpsc.mdx +132 -0
- package/reference/ringbuffer/spmc.mdx +108 -0
- package/reference/ringbuffer/spsc.mdx +344 -0
- package/reference/{allows.md → schema/allows.md} +4 -4
- package/reference/{binding-resolver.md → schema/binding-resolver.md} +1 -1
- package/reference/{binding.md → schema/binding.md} +2 -3
- package/reference/schema/built-in-codecs/avro.md +451 -0
- package/reference/schema/built-in-codecs/bson.md +480 -0
- package/reference/schema/built-in-codecs/csv.md +564 -0
- package/reference/schema/built-in-codecs/index.md +77 -0
- package/reference/schema/built-in-codecs/json/index.md +295 -0
- package/reference/schema/built-in-codecs/json/json-config.md +217 -0
- package/reference/{json-patch.md → schema/built-in-codecs/json/json-patch.md} +5 -5
- package/reference/{json-schema.md → schema/built-in-codecs/json/json-schema.md} +14 -47
- package/reference/schema/built-in-codecs/json/json-selection.md +322 -0
- package/reference/{json.md → schema/built-in-codecs/json/json.md} +32 -64
- package/reference/schema/built-in-codecs/messagepack.md +508 -0
- package/reference/schema/built-in-codecs/thrift.md +433 -0
- package/reference/schema/built-in-codecs/toon.md +1078 -0
- package/reference/{xml.md → schema/built-in-codecs/xml.md} +13 -9
- package/reference/schema/built-in-codecs/yaml.md +552 -0
- package/reference/{codec.md → schema/codec.md} +10 -10
- package/reference/{dynamic-optic.md → schema/dynamic-optic.md} +151 -5
- package/reference/{dynamic-schema.md → schema/dynamic-schema.md} +8 -8
- package/reference/schema/format.md +92 -0
- package/reference/schema/index.md +50 -0
- package/reference/schema/migration.md +297 -0
- package/reference/{modifier.md → schema/modifier.md} +58 -7
- package/reference/{optics.md → schema/optics.md} +2 -2
- package/reference/{patch.md → schema/patch.md} +1 -1
- package/{path-interpolator.md → reference/schema/path-interpolator.md} +165 -72
- package/reference/{schema-evolution → schema/schema-evolution}/as.md +8 -8
- package/reference/{schema-evolution → schema/schema-evolution}/index.md +2 -2
- package/reference/{schema-evolution → schema/schema-evolution}/into.md +8 -8
- package/reference/{schema-expr.md → schema/schema-expr.md} +110 -175
- package/reference/{schema.md → schema/schema.md} +12 -0
- package/reference/{structural-types.md → schema/structural-types.md} +1 -1
- package/reference/{type-class-derivation.md → schema/type-class-derivation.md} +63 -1
- package/reference/smithy.md +533 -0
- package/reference/sql/db-codec-deriver.md +71 -0
- package/reference/sql/db-codec.md +687 -0
- package/reference/sql/db-con.md +271 -0
- package/reference/sql/db-connection.md +153 -0
- package/reference/sql/db-param-writer.md +77 -0
- package/reference/sql/db-param.md +66 -0
- package/reference/sql/db-result-reader.md +146 -0
- package/reference/sql/db-tx.md +82 -0
- package/reference/sql/db-value.md +41 -0
- package/reference/sql/ddl.md +85 -0
- package/reference/sql/frag.md +254 -0
- package/reference/sql/index.md +341 -0
- package/reference/sql/repo.md +600 -0
- package/reference/sql/sql-dialect.md +73 -0
- package/reference/sql/sql-logger.md +62 -0
- package/reference/sql/sql-name-mapper.md +70 -0
- package/reference/sql/table-metadata.md +134 -0
- package/reference/sql/table.md +448 -0
- package/reference/sql/transactor-zio.md +399 -0
- package/reference/sql/transactor.md +353 -0
- package/reference/sql-zio.md +112 -0
- package/reference/streams/concurrent-operators.md +106 -0
- package/reference/streams/index.md +653 -0
- package/reference/streams/pipeline.md +718 -0
- package/reference/streams/reader.md +1284 -0
- package/reference/streams/scala-2-compatibility.md +55 -0
- package/reference/streams/sink.md +1426 -0
- package/reference/streams/stream.md +2526 -0
- package/reference/streams/writer.md +1045 -0
- package/reference/streams/zero-boxing.md +275 -0
- package/reference/telemetry.md +693 -0
- package/reference/typeid.md +5 -19
- package/sidebars.js +238 -43
- package/reference/formats.md +0 -694
- package/reference/http-model.md +0 -1716
- package/reference/streams.md +0 -989
- package/ringbuffer.md +0 -249
- /package/reference/{json-differ.md → schema/built-in-codecs/json/json-differ.md} +0 -0
- /package/reference/{dynamic-value.md → schema/dynamic-value.md} +0 -0
- /package/reference/{lazy.md → schema/lazy.md} +0 -0
- /package/reference/{reflect.md → schema/reflect.md} +0 -0
- /package/reference/{registers.md → schema/registers.md} +0 -0
- /package/reference/{schema-error.md → schema/schema-error.md} +0 -0
- /package/reference/{syntax.md → schema/syntax.md} +0 -0
- /package/reference/{validation.md → schema/validation.md} +0 -0
|
@@ -0,0 +1,383 @@
|
|
|
1
|
+
---
|
|
2
|
+
id: emitter-config
|
|
3
|
+
title: "EmitterConfig"
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
`EmitterConfig` controls how `ScalaEmitter` formats Scala code. Customize indentation, import sorting, trailing commas, and target Scala version (2 vs 3) by creating a configured instance.
|
|
7
|
+
|
|
8
|
+
## Use Cases
|
|
9
|
+
|
|
10
|
+
- Configuring code style (indentation, commas) to match your project conventions
|
|
11
|
+
- Targeting Scala 3 features (enums, derives) or Scala 2 fallback syntax
|
|
12
|
+
- Controlling import statement ordering
|
|
13
|
+
- Emitting code for different codebases with different style preferences
|
|
14
|
+
|
|
15
|
+
## Configuration Fields
|
|
16
|
+
|
|
17
|
+
| Field | Type | Default | Description |
|
|
18
|
+
|------------------|---------|---------|-----------------------------------------|
|
|
19
|
+
| `indentWidth` | Int | 2 | Spaces per indentation level |
|
|
20
|
+
| `sortImports` | Boolean | true | Sort import statements alphabetically |
|
|
21
|
+
| `trailingCommas` | Boolean | true | Add trailing commas in collections |
|
|
22
|
+
| `scala3Syntax` | Boolean | true | Target Scala 3 syntax features |
|
|
23
|
+
|
|
24
|
+
## Construction
|
|
25
|
+
|
|
26
|
+
Create a default configuration:
|
|
27
|
+
|
|
28
|
+
```scala
|
|
29
|
+
import zio.blocks.codegen.emit._
|
|
30
|
+
|
|
31
|
+
val default = EmitterConfig()
|
|
32
|
+
// indentWidth=2, sortImports=true, trailingCommas=true, scala3Syntax=true
|
|
33
|
+
```
|
|
34
|
+
|
|
35
|
+
With custom settings:
|
|
36
|
+
|
|
37
|
+
```scala
|
|
38
|
+
import zio.blocks.codegen.emit._
|
|
39
|
+
|
|
40
|
+
val custom = EmitterConfig(
|
|
41
|
+
indentWidth = 4,
|
|
42
|
+
sortImports = true,
|
|
43
|
+
trailingCommas = false,
|
|
44
|
+
scala3Syntax = false
|
|
45
|
+
)
|
|
46
|
+
```
|
|
47
|
+
|
|
48
|
+
## Key Operations
|
|
49
|
+
|
|
50
|
+
All `EmitterConfig` instances provide these operations:
|
|
51
|
+
|
|
52
|
+
### Accessing Configuration
|
|
53
|
+
|
|
54
|
+
Read configuration values:
|
|
55
|
+
|
|
56
|
+
```scala
|
|
57
|
+
import zio.blocks.codegen.emit._
|
|
58
|
+
|
|
59
|
+
val config = EmitterConfig(indentWidth = 4)
|
|
60
|
+
|
|
61
|
+
config.indentWidth // 4
|
|
62
|
+
config.sortImports // true (default)
|
|
63
|
+
config.trailingCommas // true (default)
|
|
64
|
+
config.scala3Syntax // true (default)
|
|
65
|
+
```
|
|
66
|
+
|
|
67
|
+
### Building with Copy
|
|
68
|
+
|
|
69
|
+
Modify a configuration:
|
|
70
|
+
|
|
71
|
+
```scala
|
|
72
|
+
import zio.blocks.codegen.emit._
|
|
73
|
+
|
|
74
|
+
val base = EmitterConfig()
|
|
75
|
+
|
|
76
|
+
val scala2Config = base.copy(
|
|
77
|
+
scala3Syntax = false
|
|
78
|
+
)
|
|
79
|
+
|
|
80
|
+
val wideIndentConfig = base.copy(
|
|
81
|
+
indentWidth = 4
|
|
82
|
+
)
|
|
83
|
+
```
|
|
84
|
+
|
|
85
|
+
## Examples
|
|
86
|
+
|
|
87
|
+
Here are practical examples showing different configuration scenarios:
|
|
88
|
+
|
|
89
|
+
### Example 1: Standard Configuration
|
|
90
|
+
|
|
91
|
+
The default configuration for most projects:
|
|
92
|
+
|
|
93
|
+
```scala
|
|
94
|
+
import zio.blocks.codegen.ir._
|
|
95
|
+
import zio.blocks.codegen.emit._
|
|
96
|
+
|
|
97
|
+
val file = ScalaFile(
|
|
98
|
+
packageDecl = PackageDecl("com.example"),
|
|
99
|
+
types = List(
|
|
100
|
+
CaseClass("User", List(
|
|
101
|
+
Field("id", TypeRef.Long),
|
|
102
|
+
Field("name", TypeRef.String)
|
|
103
|
+
))
|
|
104
|
+
)
|
|
105
|
+
)
|
|
106
|
+
|
|
107
|
+
val config = EmitterConfig()
|
|
108
|
+
```
|
|
109
|
+
|
|
110
|
+
Emits:
|
|
111
|
+
|
|
112
|
+
```scala
|
|
113
|
+
import zio.blocks.codegen.emit._
|
|
114
|
+
ScalaEmitter.emit(file, config)
|
|
115
|
+
// res5: String = """package com.example
|
|
116
|
+
//
|
|
117
|
+
// case class User(
|
|
118
|
+
// id: Long,
|
|
119
|
+
// name: String,
|
|
120
|
+
// )
|
|
121
|
+
// """
|
|
122
|
+
```
|
|
123
|
+
|
|
124
|
+
### Example 2: Wide Indentation (4 spaces)
|
|
125
|
+
|
|
126
|
+
For projects preferring 4-space indentation:
|
|
127
|
+
|
|
128
|
+
```scala
|
|
129
|
+
import zio.blocks.codegen.ir._
|
|
130
|
+
import zio.blocks.codegen.emit._
|
|
131
|
+
|
|
132
|
+
val file = ScalaFile(
|
|
133
|
+
packageDecl = PackageDecl("com.example"),
|
|
134
|
+
types = List(
|
|
135
|
+
SealedTrait(
|
|
136
|
+
"Result",
|
|
137
|
+
cases = List(
|
|
138
|
+
SealedTraitCase.CaseClassCase(
|
|
139
|
+
CaseClass("Success", List(
|
|
140
|
+
Field("value", TypeRef.String)
|
|
141
|
+
))
|
|
142
|
+
),
|
|
143
|
+
SealedTraitCase.CaseObjectCase("Failure")
|
|
144
|
+
)
|
|
145
|
+
)
|
|
146
|
+
)
|
|
147
|
+
)
|
|
148
|
+
|
|
149
|
+
val config = EmitterConfig(indentWidth = 4)
|
|
150
|
+
```
|
|
151
|
+
|
|
152
|
+
Emits with 4-space indentation:
|
|
153
|
+
|
|
154
|
+
```scala
|
|
155
|
+
import zio.blocks.codegen.emit._
|
|
156
|
+
ScalaEmitter.emit(file, config)
|
|
157
|
+
// res7: String = """package com.example
|
|
158
|
+
//
|
|
159
|
+
// sealed trait Result
|
|
160
|
+
//
|
|
161
|
+
// object Result {
|
|
162
|
+
// case class Success(
|
|
163
|
+
// value: String,
|
|
164
|
+
// ) extends Result
|
|
165
|
+
// case object Failure extends Result
|
|
166
|
+
// }
|
|
167
|
+
// """
|
|
168
|
+
```
|
|
169
|
+
|
|
170
|
+
### Example 3: Scala 2 Compatibility
|
|
171
|
+
|
|
172
|
+
Target Scala 2 syntax for older codebases:
|
|
173
|
+
|
|
174
|
+
```scala
|
|
175
|
+
import zio.blocks.codegen.ir._
|
|
176
|
+
import zio.blocks.codegen.emit._
|
|
177
|
+
|
|
178
|
+
val file = ScalaFile(
|
|
179
|
+
packageDecl = PackageDecl("com.legacy"),
|
|
180
|
+
imports = List(
|
|
181
|
+
Import.WildcardImport("scala.collection")
|
|
182
|
+
),
|
|
183
|
+
types = List(
|
|
184
|
+
Enum(
|
|
185
|
+
name = "Color",
|
|
186
|
+
cases = List(
|
|
187
|
+
EnumCase.SimpleCase("Red"),
|
|
188
|
+
EnumCase.SimpleCase("Blue")
|
|
189
|
+
)
|
|
190
|
+
)
|
|
191
|
+
)
|
|
192
|
+
)
|
|
193
|
+
|
|
194
|
+
val scala2Config = EmitterConfig(
|
|
195
|
+
scala3Syntax = false
|
|
196
|
+
)
|
|
197
|
+
```
|
|
198
|
+
|
|
199
|
+
Emits sealed trait syntax (Scala 2 compatible):
|
|
200
|
+
|
|
201
|
+
```scala
|
|
202
|
+
import zio.blocks.codegen.emit._
|
|
203
|
+
ScalaEmitter.emit(file, scala2Config)
|
|
204
|
+
// res9: String = """package com.legacy
|
|
205
|
+
//
|
|
206
|
+
// import scala.collection._
|
|
207
|
+
//
|
|
208
|
+
// sealed trait Color
|
|
209
|
+
//
|
|
210
|
+
// object Color {
|
|
211
|
+
// case object Red extends Color
|
|
212
|
+
// case object Blue extends Color
|
|
213
|
+
// }
|
|
214
|
+
// """
|
|
215
|
+
```
|
|
216
|
+
|
|
217
|
+
### Example 4: No Trailing Commas
|
|
218
|
+
|
|
219
|
+
For projects with strict no-trailing-commas rules:
|
|
220
|
+
|
|
221
|
+
```scala
|
|
222
|
+
import zio.blocks.codegen.ir._
|
|
223
|
+
import zio.blocks.codegen.emit._
|
|
224
|
+
|
|
225
|
+
val file = ScalaFile(
|
|
226
|
+
packageDecl = PackageDecl("com.strict"),
|
|
227
|
+
types = List(
|
|
228
|
+
CaseClass(
|
|
229
|
+
"Options",
|
|
230
|
+
List(
|
|
231
|
+
Field("a", TypeRef.String),
|
|
232
|
+
Field("b", TypeRef.Int),
|
|
233
|
+
Field("c", TypeRef.Boolean)
|
|
234
|
+
)
|
|
235
|
+
)
|
|
236
|
+
)
|
|
237
|
+
)
|
|
238
|
+
|
|
239
|
+
val config = EmitterConfig(
|
|
240
|
+
trailingCommas = false
|
|
241
|
+
)
|
|
242
|
+
```
|
|
243
|
+
|
|
244
|
+
Emits without trailing comma on last field:
|
|
245
|
+
|
|
246
|
+
```scala
|
|
247
|
+
import zio.blocks.codegen.emit._
|
|
248
|
+
ScalaEmitter.emit(file, config)
|
|
249
|
+
// res11: String = """package com.strict
|
|
250
|
+
//
|
|
251
|
+
// case class Options(
|
|
252
|
+
// a: String,
|
|
253
|
+
// b: Int,
|
|
254
|
+
// c: Boolean
|
|
255
|
+
// )
|
|
256
|
+
// """
|
|
257
|
+
```
|
|
258
|
+
|
|
259
|
+
### Example 5: Unsorted Imports
|
|
260
|
+
|
|
261
|
+
For projects that manage imports manually:
|
|
262
|
+
|
|
263
|
+
```scala
|
|
264
|
+
import zio.blocks.codegen.ir._
|
|
265
|
+
import zio.blocks.codegen.emit._
|
|
266
|
+
|
|
267
|
+
val file = ScalaFile(
|
|
268
|
+
packageDecl = PackageDecl("com.example"),
|
|
269
|
+
imports = List(
|
|
270
|
+
Import.WildcardImport("zio"),
|
|
271
|
+
Import.SingleImport("scala.collection", "Seq"),
|
|
272
|
+
Import.WildcardImport("scala")
|
|
273
|
+
),
|
|
274
|
+
types = List(
|
|
275
|
+
CaseClass("Data", List(
|
|
276
|
+
Field("items", TypeRef("Seq", List(TypeRef.String)))
|
|
277
|
+
))
|
|
278
|
+
)
|
|
279
|
+
)
|
|
280
|
+
|
|
281
|
+
val config = EmitterConfig(
|
|
282
|
+
sortImports = false // Keep imports in declaration order
|
|
283
|
+
)
|
|
284
|
+
```
|
|
285
|
+
|
|
286
|
+
Preserves import order:
|
|
287
|
+
|
|
288
|
+
```scala
|
|
289
|
+
import zio.blocks.codegen.emit._
|
|
290
|
+
ScalaEmitter.emit(file, config)
|
|
291
|
+
// res13: String = """package com.example
|
|
292
|
+
//
|
|
293
|
+
// import zio.*
|
|
294
|
+
// import scala.collection.Seq
|
|
295
|
+
// import scala.*
|
|
296
|
+
//
|
|
297
|
+
// case class Data(
|
|
298
|
+
// items: Seq[String],
|
|
299
|
+
// )
|
|
300
|
+
// """
|
|
301
|
+
```
|
|
302
|
+
|
|
303
|
+
### Example 6: Custom Combination
|
|
304
|
+
|
|
305
|
+
Combining multiple preferences:
|
|
306
|
+
|
|
307
|
+
```scala
|
|
308
|
+
import zio.blocks.codegen.ir._
|
|
309
|
+
import zio.blocks.codegen.emit._
|
|
310
|
+
|
|
311
|
+
val file = ScalaFile(
|
|
312
|
+
packageDecl = PackageDecl("com.myproject"),
|
|
313
|
+
imports = List(
|
|
314
|
+
Import.WildcardImport("zio")
|
|
315
|
+
),
|
|
316
|
+
types = List(
|
|
317
|
+
SealedTrait(
|
|
318
|
+
"Response",
|
|
319
|
+
cases = List(
|
|
320
|
+
SealedTraitCase.CaseClassCase(
|
|
321
|
+
CaseClass("Ok", List(
|
|
322
|
+
Field("data", TypeRef.String),
|
|
323
|
+
Field("status", TypeRef.Int)
|
|
324
|
+
))
|
|
325
|
+
),
|
|
326
|
+
SealedTraitCase.CaseObjectCase("Error")
|
|
327
|
+
)
|
|
328
|
+
)
|
|
329
|
+
)
|
|
330
|
+
)
|
|
331
|
+
|
|
332
|
+
val config = EmitterConfig(
|
|
333
|
+
indentWidth = 4,
|
|
334
|
+
sortImports = true,
|
|
335
|
+
trailingCommas = false,
|
|
336
|
+
scala3Syntax = false
|
|
337
|
+
)
|
|
338
|
+
```
|
|
339
|
+
|
|
340
|
+
Emits:
|
|
341
|
+
|
|
342
|
+
```scala
|
|
343
|
+
import zio.blocks.codegen.emit._
|
|
344
|
+
ScalaEmitter.emit(file, config)
|
|
345
|
+
// res15: String = """package com.myproject
|
|
346
|
+
//
|
|
347
|
+
// import zio._
|
|
348
|
+
//
|
|
349
|
+
// sealed trait Response
|
|
350
|
+
//
|
|
351
|
+
// object Response {
|
|
352
|
+
// case class Ok(
|
|
353
|
+
// data: String,
|
|
354
|
+
// status: Int
|
|
355
|
+
// ) extends Response
|
|
356
|
+
// case object Error extends Response
|
|
357
|
+
// }
|
|
358
|
+
// """
|
|
359
|
+
```
|
|
360
|
+
|
|
361
|
+
## Cross-Scala Behavior
|
|
362
|
+
|
|
363
|
+
The `scala3Syntax` field affects code generation:
|
|
364
|
+
|
|
365
|
+
### Scala 3 Features
|
|
366
|
+
|
|
367
|
+
When targeting Scala 3, the emitter uses:
|
|
368
|
+
|
|
369
|
+
- **Enums**: `enum Color { case Red; case Blue }`
|
|
370
|
+
- **Derives (case classes only)**: `derives Show, Eq` (sealed traits and enums do not emit derives)
|
|
371
|
+
- **Wildcard imports**: `import scala.collection.*`
|
|
372
|
+
- **Rename imports**: `import foo.{bar as baz}`
|
|
373
|
+
- **Opaque types**: `opaque type UserId = Long`
|
|
374
|
+
|
|
375
|
+
### Scala 2 Fallback
|
|
376
|
+
|
|
377
|
+
When targeting Scala 2, the emitter uses:
|
|
378
|
+
|
|
379
|
+
- **Sealed traits** instead of enums: `sealed trait Color` + `case object Red`
|
|
380
|
+
- **Implicit/given** syntax converts to Scala 2 compatible form
|
|
381
|
+
- **Wildcard imports**: `import scala.collection._`
|
|
382
|
+
- **Rename imports**: `import foo.{bar => baz}`
|
|
383
|
+
- **Type aliases** instead of opaque types: `type UserId = Long`
|