Packages
caffeine_lang
5.0.0
6.3.1
6.3.0
6.2.2
6.2.1
6.2.0
6.1.2
6.1.1
6.1.0
6.0.0
5.6.0
5.5.0
5.4.4
5.4.3
5.4.2
5.4.1
5.4.0
5.3.0
5.2.0
5.1.1
5.1.0
5.0.12
5.0.11
5.0.10
5.0.8
5.0.7
5.0.6
5.0.5
5.0.4
5.0.1
5.0.0
4.10.0
4.9.0
4.8.3
4.8.2
4.8.1
4.8.0
4.7.9
4.7.8
4.7.7
4.7.6
4.7.5
4.6.7
4.6.6
4.6.5
4.6.4
4.6.3
4.6.2
4.6.0
4.5.1
4.5.0
4.4.4
4.4.3
4.4.1
4.4.0
4.3.7
4.3.6
3.0.6
3.0.5
3.0.4
3.0.3
3.0.2
3.0.1
3.0.0
2.0.5
2.0.4
2.0.3
2.0.2
2.0.1
2.0.0
1.0.2
1.0.1
0.1.0
0.0.24
0.0.23
0.0.22
0.0.21
0.0.20
0.0.19
0.0.18
0.0.17
0.0.16
0.0.15
0.0.14
0.0.13
0.0.12
0.0.11
0.0.10
0.0.9
0.0.8
0.0.7
0.0.6
0.0.5
0.0.4
0.0.2
0.0.1
A compiler for generating reliability artifacts from service expectation definitions.
Current section
Files
Jump to
Current section
Files
src/caffeine_lang/analysis/semantic_analyzer.gleam
/// Semantic analysis phase: resolves indicators for intermediate representations.
import caffeine_lang/analysis/vendor
import caffeine_lang/codegen/datadog
import caffeine_lang/errors.{type CompilationError}
import caffeine_lang/linker/ir.{
type DepsValidated, type IntermediateRepresentation, type Resolved,
}
import gleam/list
import gleam/option
/// Resolves indicators for a list of intermediate representations.
/// Accumulates errors from all IRs instead of stopping at the first failure.
@internal
pub fn resolve_intermediate_representations(
irs: List(IntermediateRepresentation(DepsValidated)),
) -> Result(List(IntermediateRepresentation(Resolved)), CompilationError) {
irs
|> list.map(resolve_indicators)
|> errors.from_results()
}
/// Resolves indicator templates in an intermediate representation.
/// Dispatches to vendor-specific resolution; only Datadog uses template resolution.
/// Unmeasured expectations (vendor = None) pass through without indicator resolution.
@internal
pub fn resolve_indicators(
ir: IntermediateRepresentation(DepsValidated),
) -> Result(IntermediateRepresentation(Resolved), CompilationError) {
case ir.vendor {
option.Some(vendor.Datadog) -> datadog.resolve_indicators(ir)
option.Some(vendor.Honeycomb)
| option.Some(vendor.Dynatrace)
| option.Some(vendor.NewRelic) -> Ok(ir.promote(ir))
option.None -> Ok(ir.promote(ir))
}
}