From 21633e160c81108c4c9d9c797164babd4e209223 Mon Sep 17 00:00:00 2001 From: Bilal Mahmoud <7252775+indietyp@users.noreply.github.com> Date: Thu, 11 Jun 2026 16:35:50 +0200 Subject: [PATCH 01/55] chore: lowering -> lower --- libs/@local/graph/api/src/rest/hashql/compile.rs | 2 +- libs/@local/hashql/ast/src/error.rs | 2 +- libs/@local/hashql/ast/src/lib.rs | 2 +- libs/@local/hashql/ast/src/{lowering => lower}/error.rs | 0 .../ast/src/{lowering => lower}/import_resolver/error.rs | 0 .../hashql/ast/src/{lowering => lower}/import_resolver/mod.rs | 0 libs/@local/hashql/ast/src/{lowering => lower}/mod.rs | 0 .../@local/hashql/ast/src/{lowering => lower}/name_mangler.rs | 0 .../hashql/ast/src/{lowering => lower}/node_renumberer.rs | 0 .../src/{lowering => lower}/pre_expansion_name_resolver.rs | 0 libs/@local/hashql/ast/src/{lowering => lower}/sanitizer.rs | 0 .../src/{lowering => lower}/special_form_expander/error.rs | 0 .../ast/src/{lowering => lower}/special_form_expander/mod.rs | 0 .../ast/src/{lowering => lower}/type_extractor/contractive.rs | 0 .../ast/src/{lowering => lower}/type_extractor/definition.rs | 0 .../ast/src/{lowering => lower}/type_extractor/error.rs | 0 .../hashql/ast/src/{lowering => lower}/type_extractor/mod.rs | 0 .../ast/src/{lowering => lower}/type_extractor/translate.rs | 2 +- libs/@local/hashql/compiletest/src/pipeline.rs | 2 +- .../compiletest/src/suite/ast_lowering_import_resolver.rs | 2 +- .../src/suite/ast_lowering_import_resolver_continue.rs | 2 +- .../hashql/compiletest/src/suite/ast_lowering_node_mangler.rs | 2 +- .../compiletest/src/suite/ast_lowering_node_renumberer.rs | 2 +- .../src/suite/ast_lowering_pre_expansion_name_resolver.rs | 2 +- .../hashql/compiletest/src/suite/ast_lowering_sanitizer.rs | 2 +- .../src/suite/ast_lowering_special_form_expander.rs | 4 ++-- .../src/suite/ast_lowering_type_definition_extractor.rs | 2 +- .../compiletest/src/suite/ast_lowering_type_extractor.rs | 2 +- .../compiletest/src/suite/hir_lower_alias_replacement.rs | 2 +- libs/@local/hashql/compiletest/src/suite/hir_reify.rs | 2 +- libs/@local/hashql/compiletest/src/suite/mir_reify.rs | 2 +- libs/@local/hashql/hir/src/lower/mod.rs | 2 +- libs/@local/hashql/hir/src/reify/mod.rs | 2 +- 33 files changed, 20 insertions(+), 20 deletions(-) rename libs/@local/hashql/ast/src/{lowering => lower}/error.rs (100%) rename libs/@local/hashql/ast/src/{lowering => lower}/import_resolver/error.rs (100%) rename libs/@local/hashql/ast/src/{lowering => lower}/import_resolver/mod.rs (100%) rename libs/@local/hashql/ast/src/{lowering => lower}/mod.rs (100%) rename libs/@local/hashql/ast/src/{lowering => lower}/name_mangler.rs (100%) rename libs/@local/hashql/ast/src/{lowering => lower}/node_renumberer.rs (100%) rename libs/@local/hashql/ast/src/{lowering => lower}/pre_expansion_name_resolver.rs (100%) rename libs/@local/hashql/ast/src/{lowering => lower}/sanitizer.rs (100%) rename libs/@local/hashql/ast/src/{lowering => lower}/special_form_expander/error.rs (100%) rename libs/@local/hashql/ast/src/{lowering => lower}/special_form_expander/mod.rs (100%) rename libs/@local/hashql/ast/src/{lowering => lower}/type_extractor/contractive.rs (100%) rename libs/@local/hashql/ast/src/{lowering => lower}/type_extractor/definition.rs (100%) rename libs/@local/hashql/ast/src/{lowering => lower}/type_extractor/error.rs (100%) rename libs/@local/hashql/ast/src/{lowering => lower}/type_extractor/mod.rs (100%) rename libs/@local/hashql/ast/src/{lowering => lower}/type_extractor/translate.rs (99%) diff --git a/libs/@local/graph/api/src/rest/hashql/compile.rs b/libs/@local/graph/api/src/rest/hashql/compile.rs index a18ed91e4d0..86b44c687cb 100644 --- a/libs/@local/graph/api/src/rest/hashql/compile.rs +++ b/libs/@local/graph/api/src/rest/hashql/compile.rs @@ -68,7 +68,7 @@ impl<'heap> Compilation<'heap> { let Success { value: types, advisories, - } = hashql_ast::lowering::lower(sym::path::main, &mut ast, &env, &modules) + } = hashql_ast::lower::lower(sym::path::main, &mut ast, &env, &modules) .map_category(|category| { HashQlDiagnosticCategory::Ast(AstDiagnosticCategory::Lowering(category)) }) diff --git a/libs/@local/hashql/ast/src/error.rs b/libs/@local/hashql/ast/src/error.rs index 1b3ad7ec5be..dcd2b116685 100644 --- a/libs/@local/hashql/ast/src/error.rs +++ b/libs/@local/hashql/ast/src/error.rs @@ -3,7 +3,7 @@ use alloc::borrow::Cow; use hashql_core::span::SpanId; use hashql_diagnostics::{Diagnostic, category::DiagnosticCategory}; -use crate::lowering::error::LoweringDiagnosticCategory; +use crate::lower::error::LoweringDiagnosticCategory; pub type AstDiagnostic = Diagnostic; diff --git a/libs/@local/hashql/ast/src/lib.rs b/libs/@local/hashql/ast/src/lib.rs index 74ff63dc56e..683fc00e538 100644 --- a/libs/@local/hashql/ast/src/lib.rs +++ b/libs/@local/hashql/ast/src/lib.rs @@ -61,6 +61,6 @@ extern crate alloc; pub mod error; pub mod format; -pub mod lowering; +pub mod lower; pub mod node; pub mod visit; diff --git a/libs/@local/hashql/ast/src/lowering/error.rs b/libs/@local/hashql/ast/src/lower/error.rs similarity index 100% rename from libs/@local/hashql/ast/src/lowering/error.rs rename to libs/@local/hashql/ast/src/lower/error.rs diff --git a/libs/@local/hashql/ast/src/lowering/import_resolver/error.rs b/libs/@local/hashql/ast/src/lower/import_resolver/error.rs similarity index 100% rename from libs/@local/hashql/ast/src/lowering/import_resolver/error.rs rename to libs/@local/hashql/ast/src/lower/import_resolver/error.rs diff --git a/libs/@local/hashql/ast/src/lowering/import_resolver/mod.rs b/libs/@local/hashql/ast/src/lower/import_resolver/mod.rs similarity index 100% rename from libs/@local/hashql/ast/src/lowering/import_resolver/mod.rs rename to libs/@local/hashql/ast/src/lower/import_resolver/mod.rs diff --git a/libs/@local/hashql/ast/src/lowering/mod.rs b/libs/@local/hashql/ast/src/lower/mod.rs similarity index 100% rename from libs/@local/hashql/ast/src/lowering/mod.rs rename to libs/@local/hashql/ast/src/lower/mod.rs diff --git a/libs/@local/hashql/ast/src/lowering/name_mangler.rs b/libs/@local/hashql/ast/src/lower/name_mangler.rs similarity index 100% rename from libs/@local/hashql/ast/src/lowering/name_mangler.rs rename to libs/@local/hashql/ast/src/lower/name_mangler.rs diff --git a/libs/@local/hashql/ast/src/lowering/node_renumberer.rs b/libs/@local/hashql/ast/src/lower/node_renumberer.rs similarity index 100% rename from libs/@local/hashql/ast/src/lowering/node_renumberer.rs rename to libs/@local/hashql/ast/src/lower/node_renumberer.rs diff --git a/libs/@local/hashql/ast/src/lowering/pre_expansion_name_resolver.rs b/libs/@local/hashql/ast/src/lower/pre_expansion_name_resolver.rs similarity index 100% rename from libs/@local/hashql/ast/src/lowering/pre_expansion_name_resolver.rs rename to libs/@local/hashql/ast/src/lower/pre_expansion_name_resolver.rs diff --git a/libs/@local/hashql/ast/src/lowering/sanitizer.rs b/libs/@local/hashql/ast/src/lower/sanitizer.rs similarity index 100% rename from libs/@local/hashql/ast/src/lowering/sanitizer.rs rename to libs/@local/hashql/ast/src/lower/sanitizer.rs diff --git a/libs/@local/hashql/ast/src/lowering/special_form_expander/error.rs b/libs/@local/hashql/ast/src/lower/special_form_expander/error.rs similarity index 100% rename from libs/@local/hashql/ast/src/lowering/special_form_expander/error.rs rename to libs/@local/hashql/ast/src/lower/special_form_expander/error.rs diff --git a/libs/@local/hashql/ast/src/lowering/special_form_expander/mod.rs b/libs/@local/hashql/ast/src/lower/special_form_expander/mod.rs similarity index 100% rename from libs/@local/hashql/ast/src/lowering/special_form_expander/mod.rs rename to libs/@local/hashql/ast/src/lower/special_form_expander/mod.rs diff --git a/libs/@local/hashql/ast/src/lowering/type_extractor/contractive.rs b/libs/@local/hashql/ast/src/lower/type_extractor/contractive.rs similarity index 100% rename from libs/@local/hashql/ast/src/lowering/type_extractor/contractive.rs rename to libs/@local/hashql/ast/src/lower/type_extractor/contractive.rs diff --git a/libs/@local/hashql/ast/src/lowering/type_extractor/definition.rs b/libs/@local/hashql/ast/src/lower/type_extractor/definition.rs similarity index 100% rename from libs/@local/hashql/ast/src/lowering/type_extractor/definition.rs rename to libs/@local/hashql/ast/src/lower/type_extractor/definition.rs diff --git a/libs/@local/hashql/ast/src/lowering/type_extractor/error.rs b/libs/@local/hashql/ast/src/lower/type_extractor/error.rs similarity index 100% rename from libs/@local/hashql/ast/src/lowering/type_extractor/error.rs rename to libs/@local/hashql/ast/src/lower/type_extractor/error.rs diff --git a/libs/@local/hashql/ast/src/lowering/type_extractor/mod.rs b/libs/@local/hashql/ast/src/lower/type_extractor/mod.rs similarity index 100% rename from libs/@local/hashql/ast/src/lowering/type_extractor/mod.rs rename to libs/@local/hashql/ast/src/lower/type_extractor/mod.rs diff --git a/libs/@local/hashql/ast/src/lowering/type_extractor/translate.rs b/libs/@local/hashql/ast/src/lower/type_extractor/translate.rs similarity index 99% rename from libs/@local/hashql/ast/src/lowering/type_extractor/translate.rs rename to libs/@local/hashql/ast/src/lower/type_extractor/translate.rs index 6d025276148..7408584bdf7 100644 --- a/libs/@local/hashql/ast/src/lowering/type_extractor/translate.rs +++ b/libs/@local/hashql/ast/src/lower/type_extractor/translate.rs @@ -35,7 +35,7 @@ use super::error::{ invalid_resolved_item, resolution_error, unknown_intrinsic_type, unused_generic_parameter, }; use crate::{ - lowering::type_extractor::error::{ + lower::type_extractor::error::{ generic_parameter_mismatch, intrinsic_parameter_count_mismatch, unbound_type_variable, }, node::{ diff --git a/libs/@local/hashql/compiletest/src/pipeline.rs b/libs/@local/hashql/compiletest/src/pipeline.rs index e347acb4e28..9fd7613f858 100644 --- a/libs/@local/hashql/compiletest/src/pipeline.rs +++ b/libs/@local/hashql/compiletest/src/pipeline.rs @@ -153,7 +153,7 @@ impl<'heap> Pipeline<'heap> { bind_tri!(&mut self.diagnostics); let registry = ModuleRegistry::new(&self.env); - let types = tri!(hashql_ast::lowering::lower( + let types = tri!(hashql_ast::lower::lower( self.heap.intern_symbol("::main"), &mut expr, &self.env, diff --git a/libs/@local/hashql/compiletest/src/suite/ast_lowering_import_resolver.rs b/libs/@local/hashql/compiletest/src/suite/ast_lowering_import_resolver.rs index 7379ddfbb84..b8c1eff3726 100644 --- a/libs/@local/hashql/compiletest/src/suite/ast_lowering_import_resolver.rs +++ b/libs/@local/hashql/compiletest/src/suite/ast_lowering_import_resolver.rs @@ -1,6 +1,6 @@ use hashql_ast::{ format::SyntaxDump as _, - lowering::{ + lower::{ import_resolver::ImportResolver, pre_expansion_name_resolver::PreExpansionNameResolver, special_form_expander::SpecialFormExpander, }, diff --git a/libs/@local/hashql/compiletest/src/suite/ast_lowering_import_resolver_continue.rs b/libs/@local/hashql/compiletest/src/suite/ast_lowering_import_resolver_continue.rs index d21cd1287bf..c25551ca91b 100644 --- a/libs/@local/hashql/compiletest/src/suite/ast_lowering_import_resolver_continue.rs +++ b/libs/@local/hashql/compiletest/src/suite/ast_lowering_import_resolver_continue.rs @@ -1,6 +1,6 @@ use hashql_ast::{ format::SyntaxDump as _, - lowering::{ + lower::{ import_resolver::ImportResolver, pre_expansion_name_resolver::PreExpansionNameResolver, special_form_expander::SpecialFormExpander, }, diff --git a/libs/@local/hashql/compiletest/src/suite/ast_lowering_node_mangler.rs b/libs/@local/hashql/compiletest/src/suite/ast_lowering_node_mangler.rs index 71c88d4c570..478f56382d4 100644 --- a/libs/@local/hashql/compiletest/src/suite/ast_lowering_node_mangler.rs +++ b/libs/@local/hashql/compiletest/src/suite/ast_lowering_node_mangler.rs @@ -1,6 +1,6 @@ use hashql_ast::{ format::SyntaxDump as _, - lowering::{ + lower::{ name_mangler::NameMangler, pre_expansion_name_resolver::PreExpansionNameResolver, special_form_expander::SpecialFormExpander, }, diff --git a/libs/@local/hashql/compiletest/src/suite/ast_lowering_node_renumberer.rs b/libs/@local/hashql/compiletest/src/suite/ast_lowering_node_renumberer.rs index 16b4434370b..4fe653c1283 100644 --- a/libs/@local/hashql/compiletest/src/suite/ast_lowering_node_renumberer.rs +++ b/libs/@local/hashql/compiletest/src/suite/ast_lowering_node_renumberer.rs @@ -1,6 +1,6 @@ use hashql_ast::{ format::SyntaxDump as _, - lowering::{ + lower::{ node_renumberer::NodeRenumberer, pre_expansion_name_resolver::PreExpansionNameResolver, special_form_expander::SpecialFormExpander, }, diff --git a/libs/@local/hashql/compiletest/src/suite/ast_lowering_pre_expansion_name_resolver.rs b/libs/@local/hashql/compiletest/src/suite/ast_lowering_pre_expansion_name_resolver.rs index 8116282aee4..8110415a05a 100644 --- a/libs/@local/hashql/compiletest/src/suite/ast_lowering_pre_expansion_name_resolver.rs +++ b/libs/@local/hashql/compiletest/src/suite/ast_lowering_pre_expansion_name_resolver.rs @@ -1,5 +1,5 @@ use hashql_ast::{ - format::SyntaxDump as _, lowering::pre_expansion_name_resolver::PreExpansionNameResolver, + format::SyntaxDump as _, lower::pre_expansion_name_resolver::PreExpansionNameResolver, node::expr::Expr, visit::Visitor as _, }; use hashql_core::{module::ModuleRegistry, r#type::environment::Environment}; diff --git a/libs/@local/hashql/compiletest/src/suite/ast_lowering_sanitizer.rs b/libs/@local/hashql/compiletest/src/suite/ast_lowering_sanitizer.rs index be48466b34a..5bd33d64362 100644 --- a/libs/@local/hashql/compiletest/src/suite/ast_lowering_sanitizer.rs +++ b/libs/@local/hashql/compiletest/src/suite/ast_lowering_sanitizer.rs @@ -1,6 +1,6 @@ use hashql_ast::{ format::SyntaxDump as _, - lowering::{ + lower::{ pre_expansion_name_resolver::PreExpansionNameResolver, sanitizer::Sanitizer, special_form_expander::SpecialFormExpander, }, diff --git a/libs/@local/hashql/compiletest/src/suite/ast_lowering_special_form_expander.rs b/libs/@local/hashql/compiletest/src/suite/ast_lowering_special_form_expander.rs index c7dceb6f5f6..c94a0e6f8d1 100644 --- a/libs/@local/hashql/compiletest/src/suite/ast_lowering_special_form_expander.rs +++ b/libs/@local/hashql/compiletest/src/suite/ast_lowering_special_form_expander.rs @@ -1,6 +1,6 @@ use hashql_ast::{ - format::SyntaxDump as _, lowering::special_form_expander::SpecialFormExpander, - node::expr::Expr, visit::Visitor as _, + format::SyntaxDump as _, lower::special_form_expander::SpecialFormExpander, node::expr::Expr, + visit::Visitor as _, }; use super::{RunContext, Suite, SuiteDiagnostic, common::process_issues}; diff --git a/libs/@local/hashql/compiletest/src/suite/ast_lowering_type_definition_extractor.rs b/libs/@local/hashql/compiletest/src/suite/ast_lowering_type_definition_extractor.rs index 4072f547a2b..39ea2b87b97 100644 --- a/libs/@local/hashql/compiletest/src/suite/ast_lowering_type_definition_extractor.rs +++ b/libs/@local/hashql/compiletest/src/suite/ast_lowering_type_definition_extractor.rs @@ -2,7 +2,7 @@ use core::fmt::Write as _; use hashql_ast::{ format::SyntaxDump as _, - lowering::{ + lower::{ import_resolver::ImportResolver, name_mangler::NameMangler, pre_expansion_name_resolver::PreExpansionNameResolver, special_form_expander::SpecialFormExpander, type_extractor::TypeDefinitionExtractor, diff --git a/libs/@local/hashql/compiletest/src/suite/ast_lowering_type_extractor.rs b/libs/@local/hashql/compiletest/src/suite/ast_lowering_type_extractor.rs index 1d0cc4c4de6..7f33d3ddc1a 100644 --- a/libs/@local/hashql/compiletest/src/suite/ast_lowering_type_extractor.rs +++ b/libs/@local/hashql/compiletest/src/suite/ast_lowering_type_extractor.rs @@ -2,7 +2,7 @@ use core::fmt::Write as _; use hashql_ast::{ format::SyntaxDump as _, - lowering::{ + lower::{ import_resolver::ImportResolver, name_mangler::NameMangler, node_renumberer::NodeRenumberer, diff --git a/libs/@local/hashql/compiletest/src/suite/hir_lower_alias_replacement.rs b/libs/@local/hashql/compiletest/src/suite/hir_lower_alias_replacement.rs index bb6a145fcf1..5059bf98f67 100644 --- a/libs/@local/hashql/compiletest/src/suite/hir_lower_alias_replacement.rs +++ b/libs/@local/hashql/compiletest/src/suite/hir_lower_alias_replacement.rs @@ -1,6 +1,6 @@ use core::fmt::Write as _; -use hashql_ast::{lowering::ExtractedTypes, node::expr::Expr}; +use hashql_ast::{lower::ExtractedTypes, node::expr::Expr}; use hashql_core::{ heap::Heap, module::ModuleRegistry, diff --git a/libs/@local/hashql/compiletest/src/suite/hir_reify.rs b/libs/@local/hashql/compiletest/src/suite/hir_reify.rs index bb27d5d5c16..1d3e6767e62 100644 --- a/libs/@local/hashql/compiletest/src/suite/hir_reify.rs +++ b/libs/@local/hashql/compiletest/src/suite/hir_reify.rs @@ -1,5 +1,5 @@ use hashql_ast::{ - lowering::{ExtractedTypes, lower}, + lower::{ExtractedTypes, lower}, node::expr::Expr, }; use hashql_core::{ diff --git a/libs/@local/hashql/compiletest/src/suite/mir_reify.rs b/libs/@local/hashql/compiletest/src/suite/mir_reify.rs index 6e813cae28a..81a96a9baf3 100644 --- a/libs/@local/hashql/compiletest/src/suite/mir_reify.rs +++ b/libs/@local/hashql/compiletest/src/suite/mir_reify.rs @@ -38,7 +38,7 @@ pub(crate) fn mir_reify<'heap>( let hir_interner = hashql_hir::intern::Interner::new(heap); let mut hir_context = HirContext::new(&hir_interner, ®istry); - let result = hashql_ast::lowering::lower( + let result = hashql_ast::lower::lower( heap.intern_symbol("::main"), &mut expr, environment, diff --git a/libs/@local/hashql/hir/src/lower/mod.rs b/libs/@local/hashql/hir/src/lower/mod.rs index 8735c03dcee..fb89dcaa961 100644 --- a/libs/@local/hashql/hir/src/lower/mod.rs +++ b/libs/@local/hashql/hir/src/lower/mod.rs @@ -1,4 +1,4 @@ -use hashql_ast::lowering::ExtractedTypes; +use hashql_ast::lower::ExtractedTypes; use hashql_core::r#type::environment::Environment; use hashql_diagnostics::{DiagnosticIssues, StatusExt as _, Success}; diff --git a/libs/@local/hashql/hir/src/reify/mod.rs b/libs/@local/hashql/hir/src/reify/mod.rs index 38dca9faa87..0253905e5e8 100644 --- a/libs/@local/hashql/hir/src/reify/mod.rs +++ b/libs/@local/hashql/hir/src/reify/mod.rs @@ -3,7 +3,7 @@ pub mod error; use core::mem; use hashql_ast::{ - lowering::ExtractedTypes, + lower::ExtractedTypes, node::{ expr::{ AsExpr, CallExpr, ClosureExpr, DictExpr, Expr, ExprKind, FieldExpr, IfExpr, IndexExpr, From 9456556b0bbb3730996f99268755258e89125a4c Mon Sep 17 00:00:00 2001 From: Bilal Mahmoud <7252775+indietyp@users.noreply.github.com> Date: Thu, 11 Jun 2026 17:15:15 +0200 Subject: [PATCH 02/55] feat: first expander --- .../hashql/ast/src/lower/expander/error.rs | 27 ++++ .../hashql/ast/src/lower/expander/mod.rs | 132 ++++++++++++++++++ libs/@local/hashql/ast/src/lower/mod.rs | 1 + libs/@local/hashql/core/src/module/item.rs | 14 +- 4 files changed, 173 insertions(+), 1 deletion(-) create mode 100644 libs/@local/hashql/ast/src/lower/expander/error.rs create mode 100644 libs/@local/hashql/ast/src/lower/expander/mod.rs diff --git a/libs/@local/hashql/ast/src/lower/expander/error.rs b/libs/@local/hashql/ast/src/lower/expander/error.rs new file mode 100644 index 00000000000..9d92dbb8cfa --- /dev/null +++ b/libs/@local/hashql/ast/src/lower/expander/error.rs @@ -0,0 +1,27 @@ +use alloc::borrow::Cow; + +use hashql_core::span::SpanId; +use hashql_diagnostics::{Diagnostic, DiagnosticIssues, Severity, category::DiagnosticCategory}; + +pub(crate) type ExpanderDiagnostic = + Diagnostic; + +pub(crate) type ExpanderDiagnosticIssues = + DiagnosticIssues; + +#[derive(Debug, Copy, Clone, PartialEq, Eq, Hash)] +pub enum ExpanderDiagnosticCategory {} + +impl DiagnosticCategory for ExpanderDiagnosticCategory { + fn id(&self) -> Cow<'_, str> { + match *self {} + } + + fn name(&self) -> Cow<'_, str> { + match *self {} + } + + fn subcategory(&self) -> Option<&dyn DiagnosticCategory> { + match *self {} + } +} diff --git a/libs/@local/hashql/ast/src/lower/expander/mod.rs b/libs/@local/hashql/ast/src/lower/expander/mod.rs new file mode 100644 index 00000000000..d8fcbd84947 --- /dev/null +++ b/libs/@local/hashql/ast/src/lower/expander/mod.rs @@ -0,0 +1,132 @@ +mod error; + +use hashql_core::{ + heap, + module::{ + self, Reference, Universe, + error::ResolutionError, + namespace::{ModuleNamespace, ResolutionMode, ResolveOptions}, + }, + span::SpanId, + symbol::Ident, +}; + +use self::error::ExpanderDiagnosticIssues; +use crate::{ + node::{self, id::NodeId}, + visit::{self, Visitor}, +}; + +// What does the expander do? +// The expander does the following: +// 1. it resolves imports +// 2. once resolved, it expands special forms +pub struct Expander<'env, 'heap> { + namespace: ModuleNamespace<'env, 'heap>, + current_universe: Universe, + diagnostics: ExpanderDiagnosticIssues, + current_item: Option>, + replace_with_dummy: bool, +} + +impl<'env, 'heap> Expander<'env, 'heap> { + pub const fn new(namespace: ModuleNamespace<'env, 'heap>) -> Self { + Self { + namespace, + current_universe: Universe::Value, + diagnostics: ExpanderDiagnosticIssues::new(), + current_item: None, + replace_with_dummy: false, + } + } +} + +impl<'heap> Visitor<'heap> for Expander<'_, 'heap> { + fn visit_path(&mut self, path: &mut node::path::Path<'heap>) { + self.current_item = None; + visit::walk_path(self, path); + + let [modules @ .., _] = &*path.segments else { + todo!("BUG diagnostic: empty path, should never happen"); + self.replace_with_dummy = true; + return; + }; + + // We don't support generics except for the *last* segment + let mut should_continue = true; + for module in modules { + if !module.arguments.is_empty() { + todo!( + "ERROR: generic arguments in module path, not supported (yet) – module items \ + with self don't exist yet" + ); + + should_continue = false; + } + } + + if !should_continue { + self.replace_with_dummy = true; + return; + } + + let reference = self.namespace.resolve( + path.segments.iter().map(|segment| segment.name.value), + ResolveOptions { + universe: self.current_universe, + mode: if path.rooted { + ResolutionMode::Absolute + } else { + ResolutionMode::Relative + }, + }, + ); + + let reference = match reference { + Ok(reference) => reference, + Err(error) => { + todo!("ERROR: convert from resolution error") + } + }; + + let item = match reference { + Reference::Binding(_) => { + debug_assert_eq!( + path.segments.len(), + 1, + "a binding should always only have a single segment" + ); + + return; + } + Reference::Item(item) => item, + }; + + self.current_item = Some(item); + + let absolute_path = item.absolute_path_rev(self.namespace.registry()); + path.segments.reverse(); + let mut last_span = path.span; + + for (index, name) in absolute_path.into_iter().enumerate() { + if let Some(segment) = path.segments.get_mut(index) { + last_span = path.span; + segment.name.value = name; + } else { + path.segments.push(node::path::PathSegment { + id: NodeId::PLACEHOLDER, + span: last_span, + name: Ident { + span: last_span, + value: name, + kind: hashql_core::symbol::IdentKind::Lexical, + }, + arguments: heap::Vec::new_in(self.namespace.registry().heap), + }); + } + } + + path.segments.reverse(); + path.rooted = true; + } +} diff --git a/libs/@local/hashql/ast/src/lower/mod.rs b/libs/@local/hashql/ast/src/lower/mod.rs index 45e6554ed10..58bc8777b27 100644 --- a/libs/@local/hashql/ast/src/lower/mod.rs +++ b/libs/@local/hashql/ast/src/lower/mod.rs @@ -73,6 +73,7 @@ use self::{ use crate::{node::expr::Expr, visit::Visitor as _}; pub mod error; +mod expander; pub mod import_resolver; pub mod name_mangler; pub mod node_renumberer; diff --git a/libs/@local/hashql/core/src/module/item.rs b/libs/@local/hashql/core/src/module/item.rs index 58402c923dc..e2836cf52bb 100644 --- a/libs/@local/hashql/core/src/module/item.rs +++ b/libs/@local/hashql/core/src/module/item.rs @@ -94,10 +94,11 @@ impl<'heap> Item<'heap> { }) } + // TODO: deprecate pub fn absolute_path( &self, registry: &ModuleRegistry<'heap>, - ) -> impl Iterator> { + ) -> impl IntoIterator> { let mut modules: Vec<_> = self.ancestors(registry).into_iter().collect(); modules.reverse(); @@ -106,4 +107,15 @@ impl<'heap> Item<'heap> { .map(|module| module.name) .chain(iter::once(self.name)) } + + pub fn absolute_path_rev( + &self, + registry: &ModuleRegistry<'heap>, + ) -> impl IntoIterator> { + iter::once(self.name).chain( + self.ancestors(registry) + .into_iter() + .map(|module| module.name), + ) + } } From d0dacaf1a1f5f049fe3688df23c1275efd01a0ba Mon Sep 17 00:00:00 2001 From: Bilal Mahmoud <7252775+indietyp@users.noreply.github.com> Date: Thu, 11 Jun 2026 17:48:15 +0200 Subject: [PATCH 03/55] feat: first expander --- .../hashql/ast/src/lower/expander/mod.rs | 54 +++++++++++-------- .../ast/src/lower/import_resolver/mod.rs | 5 +- libs/@local/hashql/core/src/module/item.rs | 42 ++++++++++++--- libs/@local/hashql/core/src/module/mod.rs | 24 +++++++-- .../hashql/core/src/module/namespace.rs | 3 +- .../@local/hashql/core/src/module/resolver.rs | 3 +- .../hashql/core/src/module/std_lib/mod.rs | 18 ++++--- 7 files changed, 108 insertions(+), 41 deletions(-) diff --git a/libs/@local/hashql/ast/src/lower/expander/mod.rs b/libs/@local/hashql/ast/src/lower/expander/mod.rs index d8fcbd84947..38391d5b060 100644 --- a/libs/@local/hashql/ast/src/lower/expander/mod.rs +++ b/libs/@local/hashql/ast/src/lower/expander/mod.rs @@ -8,7 +8,7 @@ use hashql_core::{ namespace::{ModuleNamespace, ResolutionMode, ResolveOptions}, }, span::SpanId, - symbol::Ident, + symbol::{Ident, sym}, }; use self::error::ExpanderDiagnosticIssues; @@ -105,28 +105,40 @@ impl<'heap> Visitor<'heap> for Expander<'_, 'heap> { self.current_item = Some(item); let absolute_path = item.absolute_path_rev(self.namespace.registry()); - path.segments.reverse(); - let mut last_span = path.span; - - for (index, name) in absolute_path.into_iter().enumerate() { - if let Some(segment) = path.segments.get_mut(index) { - last_span = path.span; - segment.name.value = name; - } else { - path.segments.push(node::path::PathSegment { - id: NodeId::PLACEHOLDER, - span: last_span, - name: Ident { - span: last_span, - value: name, - kind: hashql_core::symbol::IdentKind::Lexical, - }, - arguments: heap::Vec::new_in(self.namespace.registry().heap), - }); - } + if absolute_path.len() < path.segments.len() { + todo!("BUG diagnostic: absolute path shorter than path segments"); + return; + } + + // We must pad the segments with placeholders so that the path segments match the absolute + // path + let padding = absolute_path.len() - path.segments.len(); + let padding_span = path.segments[0].span; + + path.segments.extend(core::iter::repeat_n( + node::path::PathSegment { + id: NodeId::PLACEHOLDER, + span: padding_span, + name: Ident { + span: padding_span, + value: sym::dummy, + kind: hashql_core::symbol::IdentKind::Lexical, + }, + arguments: heap::Vec::new_in(self.namespace.registry().heap), + }, + padding, + )); + path.segments.rotate_right(padding); + + for (segment, name) in path + .segments + .iter_mut() + .rev() + .zip(absolute_path.into_iter()) + { + segment.name.value = name; } - path.segments.reverse(); path.rooted = true; } } diff --git a/libs/@local/hashql/ast/src/lower/import_resolver/mod.rs b/libs/@local/hashql/ast/src/lower/import_resolver/mod.rs index c88b2b30a05..ad23c71f7a3 100644 --- a/libs/@local/hashql/ast/src/lower/import_resolver/mod.rs +++ b/libs/@local/hashql/ast/src/lower/import_resolver/mod.rs @@ -260,7 +260,10 @@ impl<'heap> Visitor<'heap> for ImportResolver<'_, 'heap> { Reference::Item(item) => item, }; - let segments: Vec<_> = item.absolute_path(self.namespace.registry()).collect(); + let segments: Vec<_> = item + .absolute_path(self.namespace.registry()) + .into_iter() + .collect(); // The trailing segments might not be the same due to renames, reset the symbol to the // canonical form (but retain the span) diff --git a/libs/@local/hashql/core/src/module/item.rs b/libs/@local/hashql/core/src/module/item.rs index e2836cf52bb..ce12455a1c2 100644 --- a/libs/@local/hashql/core/src/module/item.rs +++ b/libs/@local/hashql/core/src/module/item.rs @@ -111,11 +111,41 @@ impl<'heap> Item<'heap> { pub fn absolute_path_rev( &self, registry: &ModuleRegistry<'heap>, - ) -> impl IntoIterator> { - iter::once(self.name).chain( - self.ancestors(registry) - .into_iter() - .map(|module| module.name), - ) + ) -> impl ExactSizeIterator> { + struct Iter { + inner: I, + remaining: u32, + } + + impl Iterator for Iter + where + I: Iterator, + { + type Item = I::Item; + + fn next(&mut self) -> Option { + let item = self.inner.next()?; + self.remaining -= 1; + + Some(item) + } + + fn size_hint(&self) -> (usize, Option) { + (self.remaining as usize, Some(self.remaining as usize)) + } + } + + impl ExactSizeIterator for Iter where I: Iterator {} + + let depth = registry.module_depth(self.module); + + Iter { + inner: iter::once(self.name).chain( + self.ancestors(registry) + .into_iter() + .map(|module| module.name), + ), + remaining: depth + 1, + } } } diff --git a/libs/@local/hashql/core/src/module/mod.rs b/libs/@local/hashql/core/src/module/mod.rs index d0b7e253255..df0f0d52135 100644 --- a/libs/@local/hashql/core/src/module/mod.rs +++ b/libs/@local/hashql/core/src/module/mod.rs @@ -12,7 +12,7 @@ mod resolver; pub mod std_lib; pub mod universe; -use core::slice; +use core::{num::NonZero, slice}; use std::sync::RwLock; use self::{ @@ -98,11 +98,12 @@ impl<'heap> ModuleRegistry<'heap> { assert_eq!(item.module, id.value()); // check for modules if the parent is also set *correctly* to our module - if let ItemKind::Module(module) = item.kind { - let module = self.modules.index(module); + if let ItemKind::Module(child) = item.kind { + let child = self.modules.index(child); - assert_eq!(module.parent, id.value()); - assert_eq!(module.name, item.name); + assert_eq!(child.parent, id.value()); + assert_eq!(child.depth.get(), module.depth.get() + 1); + assert_eq!(child.name, item.name); } } } @@ -336,6 +337,16 @@ impl<'heap> ModuleRegistry<'heap> { None }) } + + pub fn module_depth(&self, id: ModuleId) -> u32 { + if id == ModuleId::ROOT { + return 0; + } + + let module = self.modules.index(id); + + module.depth.get() + } } /// A module in the HashQL language. @@ -349,6 +360,7 @@ pub struct Module<'heap> { pub name: Symbol<'heap>, pub parent: ModuleId, + pub depth: NonZero, pub items: Interned<'heap, [Item<'heap>]>, } @@ -379,6 +391,7 @@ impl<'heap> Module<'heap> { pub struct PartialModule<'heap> { name: Symbol<'heap>, parent: ModuleId, + depth: NonZero, items: Interned<'heap, [Item<'heap>]>, } @@ -390,6 +403,7 @@ impl<'heap> Decompose<'heap> for Module<'heap> { id, name: partial.name, parent: partial.parent, + depth: partial.depth, items: partial.items, } } diff --git a/libs/@local/hashql/core/src/module/namespace.rs b/libs/@local/hashql/core/src/module/namespace.rs index 607c489b555..22f6378823d 100644 --- a/libs/@local/hashql/core/src/module/namespace.rs +++ b/libs/@local/hashql/core/src/module/namespace.rs @@ -455,7 +455,7 @@ impl<'env, 'heap> ModuleNamespace<'env, 'heap> { #[cfg(test)] mod tests { #![coverage(off)] - use core::assert_matches; + use core::{assert_matches, num::NonZero}; use super::ModuleNamespace; use crate::{ @@ -664,6 +664,7 @@ mod tests { let module = registry.intern_module(|id| PartialModule { parent: ModuleId::ROOT, + depth: const { NonZero::new(1).unwrap() }, name: heap.intern_symbol("foo"), items: registry.intern_items(&[Item { diff --git a/libs/@local/hashql/core/src/module/resolver.rs b/libs/@local/hashql/core/src/module/resolver.rs index c2edc6827b1..f859f70d64b 100644 --- a/libs/@local/hashql/core/src/module/resolver.rs +++ b/libs/@local/hashql/core/src/module/resolver.rs @@ -469,7 +469,7 @@ impl<'heap> Resolver<'_, 'heap> { #[cfg(test)] mod test { #![coverage(off)] - use core::assert_matches; + use core::{assert_matches, num::NonZero}; use super::{Reference, ResolutionError}; use crate::{ @@ -839,6 +839,7 @@ mod test { PartialModule { name: heap.intern_symbol("empty_module"), parent: ModuleId::ROOT, + depth: const { NonZero::new(1).unwrap() }, items: registry.intern_items(&[]), // No items } }); diff --git a/libs/@local/hashql/core/src/module/std_lib/mod.rs b/libs/@local/hashql/core/src/module/std_lib/mod.rs index 447d3065775..457d2db661d 100644 --- a/libs/@local/hashql/core/src/module/std_lib/mod.rs +++ b/libs/@local/hashql/core/src/module/std_lib/mod.rs @@ -2,7 +2,7 @@ pub mod core; pub mod graph; mod kernel; -use ::core::iter; +use ::core::{iter, num::NonZero}; use super::{ModuleId, ModuleRegistry, item::IntrinsicItem, locals::TypeDef}; use crate::{ @@ -185,7 +185,7 @@ impl<'env, 'heap> StandardLibrary<'env, 'heap> { &self.modules[index].1 } - fn build(&mut self, parent: ModuleId) -> ModuleId + fn build(&mut self, depth: NonZero, parent: ModuleId) -> ModuleId where M: StandardLibraryModule<'heap>, { @@ -215,7 +215,7 @@ impl<'env, 'heap> StandardLibrary<'env, 'heap> { // create all the child modules let children_names = M::Children::names(self.heap); - let children_modules = M::Children::modules(self, id.value()); + let children_modules = M::Children::modules(self, depth.saturating_add(1), id.value()); for (name, module) in children_names.into_iter().zip(children_modules) { output.push(Item { @@ -228,6 +228,7 @@ impl<'env, 'heap> StandardLibrary<'env, 'heap> { PartialModule { name: M::name(self.heap), parent, + depth, items: self.registry.intern_items(&output), } }) @@ -235,9 +236,11 @@ impl<'env, 'heap> StandardLibrary<'env, 'heap> { pub(super) fn register(&mut self) { type Root = (self::core::Core, self::kernel::Kernel, self::graph::Graph); + const ONE: NonZero = NonZero::new(1).unwrap(); - let roots: smallvec::SmallVec<_, 3> = - Root::modules(self, ModuleId::ROOT).into_iter().collect(); + let roots: smallvec::SmallVec<_, 3> = Root::modules(self, ONE, ModuleId::ROOT) + .into_iter() + .collect(); for id in roots { self.registry.register(id); @@ -252,6 +255,7 @@ trait Submodules<'heap> { fn modules( lib: &mut StandardLibrary<'_, 'heap>, + depth: NonZero, parent: ModuleId, ) -> impl IntoIterator; } @@ -265,6 +269,7 @@ impl<'heap> Submodules<'heap> for () { fn modules( _: &mut StandardLibrary<'_, 'heap>, + _: NonZero, _: ModuleId, ) -> impl IntoIterator { iter::empty() @@ -299,9 +304,10 @@ macro_rules! impl_submodules { fn modules( lib: &mut StandardLibrary<'_, 'heap>, + depth: NonZero, parent: ModuleId, ) -> impl IntoIterator { - $(let $item = lib.build::<$item>(parent);)* + $(let $item = lib.build::<$item>(depth, parent);)* [$($item),*] } From f88f2808600575b7f305480de796e390295e0e74 Mon Sep 17 00:00:00 2001 From: Bilal Mahmoud <7252775+indietyp@users.noreply.github.com> Date: Thu, 11 Jun 2026 18:40:48 +0200 Subject: [PATCH 04/55] feat: move to symbols for modules --- .../hashql/ast/src/lower/expander/error.rs | 677 +++++++++++++++++- .../hashql/ast/src/lower/expander/mod.rs | 35 +- .../ast/src/lower/import_resolver/error.rs | 2 +- libs/@local/hashql/core/src/module/item.rs | 8 +- .../hashql/core/src/module/namespace.rs | 41 +- .../core/src/module/std_lib/core/bits.rs | 32 +- .../core/src/module/std_lib/core/bool.rs | 20 +- .../core/src/module/std_lib/core/cmp.rs | 32 +- .../core/src/module/std_lib/core/json.rs | 6 +- .../core/src/module/std_lib/core/math.rs | 54 +- .../core/src/module/std_lib/core/mod.rs | 24 +- .../core/src/module/std_lib/core/option.rs | 4 +- .../core/src/module/std_lib/core/result.rs | 7 +- .../core/src/module/std_lib/core/url.rs | 4 +- .../core/src/module/std_lib/core/uuid.rs | 2 +- .../core/src/module/std_lib/graph/body.rs | 8 +- .../core/src/module/std_lib/graph/entity.rs | 20 +- .../core/src/module/std_lib/graph/head.rs | 9 +- .../core/src/module/std_lib/graph/mod.rs | 7 +- .../core/src/module/std_lib/graph/tail.rs | 13 +- .../core/src/module/std_lib/graph/temporal.rs | 2 +- .../core/src/module/std_lib/graph/tmp.rs | 10 +- .../std_lib/graph/types/knowledge/entity.rs | 2 +- .../std_lib/graph/types/knowledge/mod.rs | 7 +- .../src/module/std_lib/graph/types/mod.rs | 6 +- .../graph/types/ontology/entity_type.rs | 6 +- .../std_lib/graph/types/ontology/mod.rs | 22 +- .../graph/types/principal/actor_group/mod.rs | 21 +- .../graph/types/principal/actor_group/web.rs | 5 +- .../std_lib/graph/types/principal/mod.rs | 6 +- .../core/src/module/std_lib/kernel/mod.rs | 6 +- .../src/module/std_lib/kernel/special_form.rs | 54 +- .../core/src/module/std_lib/kernel/type.rs | 43 +- .../hashql/core/src/module/std_lib/mod.rs | 14 +- libs/@local/hashql/core/src/symbol/sym.rs | 96 ++- 35 files changed, 1039 insertions(+), 266 deletions(-) diff --git a/libs/@local/hashql/ast/src/lower/expander/error.rs b/libs/@local/hashql/ast/src/lower/expander/error.rs index 9d92dbb8cfa..8ff5234db25 100644 --- a/libs/@local/hashql/ast/src/lower/expander/error.rs +++ b/libs/@local/hashql/ast/src/lower/expander/error.rs @@ -1,27 +1,684 @@ use alloc::borrow::Cow; +use core::fmt::{self, Display, Write as _}; -use hashql_core::span::SpanId; -use hashql_diagnostics::{Diagnostic, DiagnosticIssues, Severity, category::DiagnosticCategory}; +use hashql_core::{ + algorithms::did_you_mean, + collections::FastHashSet, + module::{ + ModuleId, ModuleRegistry, Universe, + error::{ResolutionError, ResolutionSuggestion}, + import::Import, + item::Item, + namespace::ModuleNamespace, + }, + span::SpanId, + symbol::Symbol, +}; +use hashql_diagnostics::{ + Diagnostic, DiagnosticIssues, Label, Patch, Suggestions, + category::{DiagnosticCategory, TerminalDiagnosticCategory}, + diagnostic::Message, + severity::Severity, +}; -pub(crate) type ExpanderDiagnostic = - Diagnostic; +use crate::node::path::{Path, PathSegment, PathSegmentArgument}; -pub(crate) type ExpanderDiagnosticIssues = - DiagnosticIssues; +pub(crate) type ExpanderDiagnostic = Diagnostic; + +pub(crate) type ExpanderDiagnosticIssues = DiagnosticIssues; + +const EMPTY_PATH: TerminalDiagnosticCategory = TerminalDiagnosticCategory { + id: "empty-path", + name: "Empty path", +}; + +const ABSOLUTE_PATH_MISMATCH: TerminalDiagnosticCategory = TerminalDiagnosticCategory { + id: "absolute-path-mismatch", + name: "Absolute path length mismatch", +}; + +const GENERIC_ARGUMENTS_IN_MODULE: TerminalDiagnosticCategory = TerminalDiagnosticCategory { + id: "generic-arguments-in-module", + name: "Generic arguments in module path", +}; + +const UNRESOLVED_VARIABLE: TerminalDiagnosticCategory = TerminalDiagnosticCategory { + id: "unresolved-variable", + name: "Unresolved variable", +}; + +const PACKAGE_NOT_FOUND: TerminalDiagnosticCategory = TerminalDiagnosticCategory { + id: "package-not-found", + name: "Package not found", +}; + +const MODULE_NOT_FOUND: TerminalDiagnosticCategory = TerminalDiagnosticCategory { + id: "module-not-found", + name: "Module not found", +}; + +const IMPORT_NOT_FOUND: TerminalDiagnosticCategory = TerminalDiagnosticCategory { + id: "import-not-found", + name: "Import not found", +}; + +const ITEM_NOT_FOUND: TerminalDiagnosticCategory = TerminalDiagnosticCategory { + id: "item-not-found", + name: "Item not found", +}; + +const MODULE_REQUIRED: TerminalDiagnosticCategory = TerminalDiagnosticCategory { + id: "module-required", + name: "Module required", +}; + +const AMBIGUOUS_NAME: TerminalDiagnosticCategory = TerminalDiagnosticCategory { + id: "ambiguous-name", + name: "Ambiguous name", +}; + +const EMPTY_MODULE: TerminalDiagnosticCategory = TerminalDiagnosticCategory { + id: "empty-module", + name: "Empty module", +}; #[derive(Debug, Copy, Clone, PartialEq, Eq, Hash)] -pub enum ExpanderDiagnosticCategory {} +pub enum ExpanderDiagnosticCategory { + EmptyPath, + AbsolutePathMismatch, + GenericArgumentsInModule, + UnresolvedVariable, + PackageNotFound, + ModuleNotFound, + ImportNotFound, + ItemNotFound, + ModuleRequired, + AmbiguousName, + EmptyModule, +} impl DiagnosticCategory for ExpanderDiagnosticCategory { fn id(&self) -> Cow<'_, str> { - match *self {} + Cow::Borrowed("expander") } fn name(&self) -> Cow<'_, str> { - match *self {} + Cow::Borrowed("Expander") } fn subcategory(&self) -> Option<&dyn DiagnosticCategory> { - match *self {} + match self { + Self::EmptyPath => Some(&EMPTY_PATH), + Self::AbsolutePathMismatch => Some(&ABSOLUTE_PATH_MISMATCH), + Self::GenericArgumentsInModule => Some(&GENERIC_ARGUMENTS_IN_MODULE), + Self::UnresolvedVariable => Some(&UNRESOLVED_VARIABLE), + Self::PackageNotFound => Some(&PACKAGE_NOT_FOUND), + Self::ModuleNotFound => Some(&MODULE_NOT_FOUND), + Self::ImportNotFound => Some(&IMPORT_NOT_FOUND), + Self::ItemNotFound => Some(&ITEM_NOT_FOUND), + Self::ModuleRequired => Some(&MODULE_REQUIRED), + Self::AmbiguousName => Some(&AMBIGUOUS_NAME), + Self::EmptyModule => Some(&EMPTY_MODULE), + } + } +} + +/// Formats a user-written path prefix up to (and including) a given depth. +struct FormatUserPath<'a, 'heap> { + rooted: bool, + segments: &'a [PathSegment<'heap>], + up_to: Option, +} + +impl Display for FormatUserPath<'_, '_> { + fn fmt(&self, fmt: &mut fmt::Formatter<'_>) -> fmt::Result { + if self.rooted { + fmt.write_str("::")?; + } + + let segments = match self.up_to { + Some(depth) => &self.segments[..=depth], + None => self.segments, + }; + + for (index, segment) in segments.iter().enumerate() { + if index > 0 { + fmt.write_str("::")?; + } + + Display::fmt(&segment.name.value, fmt)?; + } + + Ok(()) + } +} + +/// Formats a canonical absolute path (always `::` prefixed) for an item in the registry. +fn format_absolute_path<'heap>(item: &Item<'heap>, registry: &ModuleRegistry<'heap>) -> String { + use core::iter; + + let path = item.absolute_path(registry).into_iter().map(Symbol::unwrap); + + iter::once("").chain(path).intersperse("::").collect() +} + +/// Emits one `help` message per did-you-mean candidate, each carrying a `Patch` that replaces +/// `name_span` with the suggested name. +fn emit_spelling_suggestions( + diagnostic: &mut ExpanderDiagnostic, + name_span: SpanId, + name: Symbol<'_>, + candidates: impl IntoIterator> + Clone, + limit: usize, + prefix: &str, +) -> usize { + let similar = did_you_mean(name, candidates, Some(limit), None); + + for candidate in &similar { + let patch = Suggestions::patch(Patch::new(name_span, candidate.as_str().to_owned())); + diagnostic + .add_message(Message::help(format!("{prefix} `{candidate}`")).with_suggestions(patch)); + } + + similar.len() +} + +pub(crate) fn empty_path(span: SpanId) -> ExpanderDiagnostic { + let mut diagnostic = Diagnostic::new(ExpanderDiagnosticCategory::EmptyPath, Severity::Bug) + .primary(Label::new(span, "path has no segments")); + + diagnostic.add_message(Message::note( + "after parsing and lowering, every path must contain at least one segment", + )); + + diagnostic +} + +pub(crate) fn absolute_path_mismatch( + path_span: SpanId, + path_length: usize, + absolute_length: usize, +) -> ExpanderDiagnostic { + let mut diagnostic = Diagnostic::new( + ExpanderDiagnosticCategory::AbsolutePathMismatch, + Severity::Bug, + ) + .primary(Label::new( + path_span, + format!("path has {path_length} segments but resolved to only {absolute_length}"), + )); + + diagnostic.add_message(Message::note( + "expansion can only prepend omitted ancestors, so the resolved absolute path must be at \ + least as long as the user's path", + )); + + diagnostic +} + +pub(crate) fn generic_arguments_in_module( + module_segments: &[PathSegment<'_>], + path_span: SpanId, +) -> ExpanderDiagnostic { + let mut arguments = module_segments + .iter() + .flat_map(|segment| &segment.arguments); + + let primary_span = arguments + .next() + .map_or(path_span, PathSegmentArgument::span); + + let mut diagnostic = Diagnostic::new( + ExpanderDiagnosticCategory::GenericArgumentsInModule, + Severity::Error, + ) + .primary(Label::new( + primary_span, + "generic argument not allowed here", + )); + + for argument in arguments { + diagnostic.add_label(Label::new(argument.span(), "neither is this")); } + + diagnostic.add_message(Message::help( + "move the generic arguments to the final segment of the path, or remove them", + )); + + diagnostic.add_message(Message::note( + "modules are not generic; only the final item in a path can be parameterized", + )); + + diagnostic +} + +/// Converts a `ResolutionError` into an expander diagnostic. +pub(crate) fn from_resolution_error<'heap>( + path: &Path<'heap>, + namespace: &ModuleNamespace<'_, 'heap>, + universe: Universe, + error: ResolutionError<'heap>, +) -> ExpanderDiagnostic { + match error { + ResolutionError::InvalidQueryLength { expected } => invalid_query_length(path, expected), + ResolutionError::ModuleRequired { depth, found } => module_required(path, depth, found), + ResolutionError::PackageNotFound { + depth, + name, + suggestions, + } => package_not_found(path, depth, name, &suggestions), + ResolutionError::ModuleNotFound { + depth, + name, + suggestions, + } => module_not_found(path, depth, name, &suggestions), + ResolutionError::ImportNotFound { + depth, + name, + suggestions, + } => { + if depth == 0 && path.segments.len() == 1 { + unresolved_variable(path, name, namespace, universe, &suggestions) + } else { + import_not_found(path, depth, name, &suggestions) + } + } + ResolutionError::ItemNotFound { + depth, + name, + suggestions, + } => item_not_found(path, depth, name, &suggestions), + ResolutionError::Ambiguous(reference) => ambiguous_name(path, reference.name()), + ResolutionError::ModuleEmpty { depth } => empty_module(path, depth), + } +} + +fn invalid_query_length(path: &Path<'_>, expected: usize) -> ExpanderDiagnostic { + let mut diagnostic = + Diagnostic::new(ExpanderDiagnosticCategory::ImportNotFound, Severity::Error) + .primary(Label::new(path.span, "path is too short to resolve")); + + diagnostic.add_message(Message::help(format!( + "provide a path with at least {expected} segments, for example `module::item`", + ))); + + diagnostic +} + +fn module_required(path: &Path<'_>, depth: usize, found: Option) -> ExpanderDiagnostic { + let segment = &path.segments[depth]; + let user_path = FormatUserPath { + rooted: path.rooted, + segments: &path.segments, + up_to: Some(depth), + }; + + let kind_description = match found { + Some(Universe::Value) => "a value", + Some(Universe::Type) => "a type", + None => "not a module", + }; + + let mut diagnostic = + Diagnostic::new(ExpanderDiagnosticCategory::ModuleRequired, Severity::Error).primary( + Label::new( + segment.name.span, + format!("`{user_path}` is {kind_description}, not a module"), + ), + ); + + if depth + 1 < path.segments.len() { + diagnostic.add_label(Label::new( + path.segments[depth + 1].name.span, + "cannot access items inside a non-module", + )); + } + + let help = match found { + Some(Universe::Value) => "if you meant to access a field, use `.` instead of `::`", + Some(Universe::Type) | None => "only modules can contain sub-items accessible via `::`", + }; + + diagnostic.add_message(Message::help(help)); + + diagnostic.add_message(Message::note( + "the `::` separator navigates into modules; values and types do not contain sub-items", + )); + + diagnostic +} + +fn package_not_found<'heap>( + path: &Path<'heap>, + depth: usize, + name: Symbol<'heap>, + suggestions: &[ResolutionSuggestion<'heap, ModuleId>], +) -> ExpanderDiagnostic { + let segment = &path.segments[depth]; + + let mut diagnostic = + Diagnostic::new(ExpanderDiagnosticCategory::PackageNotFound, Severity::Error).primary( + Label::new(segment.name.span, format!("cannot find package `{name}`")), + ); + + diagnostic.add_label(Label::new(path.span, "in this path")); + + let emitted = emit_spelling_suggestions( + &mut diagnostic, + segment.name.span, + name, + suggestions.iter().map(|suggestion| suggestion.name), + 5, + "use package", + ); + + if emitted == 0 { + diagnostic.add_message(Message::help( + "check the package name, or add it to the project dependencies", + )); + } + + diagnostic.add_message(Message::note( + "absolute paths start from an installed package", + )); + + diagnostic +} + +fn module_not_found<'heap>( + path: &Path<'heap>, + depth: usize, + name: Symbol<'heap>, + suggestions: &[ResolutionSuggestion<'heap, Item<'heap>>], +) -> ExpanderDiagnostic { + let segment = &path.segments[depth]; + let parent_path = FormatUserPath { + rooted: path.rooted, + segments: &path.segments, + up_to: (depth > 0).then_some(depth - 1), + }; + + let primary_message = if depth > 0 { + format!("cannot find module `{name}` in `{parent_path}`") + } else { + format!("cannot find module `{name}`") + }; + + let mut diagnostic = + Diagnostic::new(ExpanderDiagnosticCategory::ModuleNotFound, Severity::Error) + .primary(Label::new(segment.name.span, primary_message)); + + if depth > 0 { + diagnostic.add_label(Label::new( + path.segments[depth - 1].name.span, + "looked in this module", + )); + } + + emit_spelling_suggestions( + &mut diagnostic, + segment.name.span, + name, + suggestions.iter().map(|suggestion| suggestion.name), + 5, + "use module", + ); + + diagnostic.add_message(Message::note( + "only exported sub-modules are reachable via `::`", + )); + + diagnostic +} + +fn import_not_found<'heap>( + path: &Path<'heap>, + depth: usize, + name: Symbol<'heap>, + suggestions: &[ResolutionSuggestion<'heap, Import<'heap>>], +) -> ExpanderDiagnostic { + let segment = &path.segments[depth]; + + let mut diagnostic = + Diagnostic::new(ExpanderDiagnosticCategory::ImportNotFound, Severity::Error).primary( + Label::new(segment.name.span, format!("`{name}` is not imported")), + ); + + diagnostic.add_label(Label::new(path.span, "in this path")); + + let emitted = emit_spelling_suggestions( + &mut diagnostic, + segment.name.span, + name, + suggestions.iter().map(|suggestion| suggestion.name), + 5, + "use", + ); + + if emitted == 0 { + diagnostic.add_message(Message::help( + "import the name with a `use` statement, or qualify it with a full path", + )); + } + + diagnostic +} + +fn item_not_found<'heap>( + path: &Path<'heap>, + depth: usize, + name: Symbol<'heap>, + suggestions: &[ResolutionSuggestion<'heap, Item<'heap>>], +) -> ExpanderDiagnostic { + let segment = &path.segments[depth]; + + let primary_message = if depth > 0 { + let parent_path = FormatUserPath { + rooted: path.rooted, + segments: &path.segments, + up_to: Some(depth - 1), + }; + + format!("cannot find `{name}` in module `{parent_path}`") + } else { + format!("cannot find `{name}` in this scope") + }; + + let mut diagnostic = Diagnostic::new(ExpanderDiagnosticCategory::ItemNotFound, Severity::Error) + .primary(Label::new(segment.name.span, primary_message)); + + if depth > 0 { + diagnostic.add_label(Label::new( + path.segments[depth - 1].name.span, + "looked in this module", + )); + } + + let emitted = emit_spelling_suggestions( + &mut diagnostic, + segment.name.span, + name, + suggestions.iter().map(|suggestion| suggestion.name), + 5, + "use", + ); + + if emitted == 0 { + diagnostic.add_message(Message::help( + "check the spelling and ensure the item is exported", + )); + } + + diagnostic +} + +/// A single unqualified name could not be found in scope. +/// +/// This is the most common resolution failure. Suggestions are tiered: +/// +/// 1. **Local bindings**: names bound by `let`, `fn` parameters, etc. +/// 2. **Imported names**: names brought into scope by `use` +/// 3. **Registry items**: names available in the module registry but not yet imported +/// +/// Each tier produces Patches: tiers 1 and 2 replace the identifier with the +/// corrected spelling; tier 3 replaces it with the fully qualified path. +fn unresolved_variable<'heap>( + path: &Path<'heap>, + name: Symbol<'heap>, + namespace: &ModuleNamespace<'_, 'heap>, + universe: Universe, + import_suggestions: &[ResolutionSuggestion<'heap, Import<'heap>>], +) -> ExpanderDiagnostic { + let registry = namespace.registry(); + let locals = namespace.locals(universe); + let name_span = path.segments[0].name.span; + + let mut diagnostic = Diagnostic::new( + ExpanderDiagnosticCategory::UnresolvedVariable, + Severity::Error, + ) + .primary(Label::new( + name_span, + format!("cannot find `{name}` in this scope"), + )); + + let mut has_suggestions = false; + + // ---- tier 1: local bindings ---- + let local_suggestions = did_you_mean(name, locals, Some(5), None); + + if !local_suggestions.is_empty() { + has_suggestions = true; + + for candidate in &local_suggestions { + let patch = Suggestions::patch(Patch::new(name_span, candidate.as_str().to_owned())); + diagnostic.add_message( + Message::help(format!("use local `{candidate}`")).with_suggestions(patch), + ); + } + } + + // ---- tier 2: already-imported names ---- + // Filter out names that are also local bindings to avoid duplicate suggestions. + let import_names: Vec<_> = import_suggestions + .iter() + .map(|suggestion| suggestion.name) + .filter(|suggestion_name| !locals.contains(suggestion_name)) + .collect(); + + let import_matches = did_you_mean(name, &import_names, Some(5), None); + + if !import_matches.is_empty() { + has_suggestions = true; + + for candidate in &import_matches { + let patch = Suggestions::patch(Patch::new(name_span, candidate.as_str().to_owned())); + diagnostic.add_message( + Message::help(format!("use imported `{candidate}`")).with_suggestions(patch), + ); + } + } + + // ---- tier 3: items available elsewhere in the registry ---- + // Filter out names already covered by local or import suggestions. + let covered: FastHashSet<_> = local_suggestions + .iter() + .chain(&import_matches) + .copied() + .collect(); + + let importable: Vec<_> = registry + .search_by_name(name, universe) + .into_iter() + .filter(|item| !covered.contains(&item.name)) + .collect(); + + if !importable.is_empty() { + has_suggestions = true; + + for item in importable.iter().take(5) { + let absolute = format_absolute_path(item, registry); + let patch = Suggestions::patch(Patch::new(name_span, absolute.clone())); + diagnostic.add_message( + Message::help(format!("qualify the name as `{absolute}`")).with_suggestions(patch), + ); + } + + // Show how to import instead (text-only, no insertion span available) + if let Some(first) = importable.first() { + let absolute = format_absolute_path(first, registry); + diagnostic.add_message(Message::note(format!( + "alternatively, bring it into scope: `use {absolute} in`", + ))); + } + + let remaining = importable.len().saturating_sub(5); + if remaining > 0 { + diagnostic.add_message(Message::note(format!( + "{remaining} more items with this name exist in other modules", + ))); + } + } + + if !has_suggestions { + diagnostic.add_message(Message::help( + "check the spelling, or import the name with a `use` statement", + )); + } + + diagnostic.add_message(Message::note( + "unqualified names resolve against local bindings first, then imported names; names from \ + other modules must be imported or fully qualified", + )); + + diagnostic +} + +fn ambiguous_name(path: &Path<'_>, name: Symbol<'_>) -> ExpanderDiagnostic { + let name_span = path + .segments + .iter() + .find_map(|segment| (segment.name.value == name).then_some(segment.name.span)) + .unwrap_or(path.span); + + let mut diagnostic = + Diagnostic::new(ExpanderDiagnosticCategory::AmbiguousName, Severity::Error).primary( + Label::new(name_span, format!("`{name}` refers to multiple items")), + ); + + diagnostic.add_label(Label::new(path.span, "in this path")); + + diagnostic.add_message(Message::help( + "use a fully qualified path to specify which item you mean", + )); + + diagnostic.add_message(Message::note( + "multiple items with this name are in scope; consider using explicit imports instead of \ + globs to prevent conflicts", + )); + + diagnostic +} + +fn empty_module(path: &Path<'_>, depth: usize) -> ExpanderDiagnostic { + let segment = &path.segments[depth]; + let user_path = FormatUserPath { + rooted: path.rooted, + segments: &path.segments, + up_to: Some(depth), + }; + + let mut diagnostic = Diagnostic::new(ExpanderDiagnosticCategory::EmptyModule, Severity::Error) + .primary(Label::new( + segment.name.span, + format!("module `{user_path}` has no exported items"), + )); + + diagnostic.add_label(Label::new(path.span, "in this path")); + + diagnostic.add_message(Message::help( + "check that the module path is correct, or import a specific item instead of the module", + )); + + diagnostic } diff --git a/libs/@local/hashql/ast/src/lower/expander/mod.rs b/libs/@local/hashql/ast/src/lower/expander/mod.rs index 38391d5b060..504b1b74cb0 100644 --- a/libs/@local/hashql/ast/src/lower/expander/mod.rs +++ b/libs/@local/hashql/ast/src/lower/expander/mod.rs @@ -26,7 +26,7 @@ pub struct Expander<'env, 'heap> { current_universe: Universe, diagnostics: ExpanderDiagnosticIssues, current_item: Option>, - replace_with_dummy: bool, + trampoline: Option>, } impl<'env, 'heap> Expander<'env, 'heap> { @@ -36,7 +36,7 @@ impl<'env, 'heap> Expander<'env, 'heap> { current_universe: Universe::Value, diagnostics: ExpanderDiagnosticIssues::new(), current_item: None, - replace_with_dummy: false, + trampoline: None, } } } @@ -48,7 +48,7 @@ impl<'heap> Visitor<'heap> for Expander<'_, 'heap> { let [modules @ .., _] = &*path.segments else { todo!("BUG diagnostic: empty path, should never happen"); - self.replace_with_dummy = true; + self.trampoline = Some(node::expr::Expr::dummy()); return; }; @@ -66,7 +66,7 @@ impl<'heap> Visitor<'heap> for Expander<'_, 'heap> { } if !should_continue { - self.replace_with_dummy = true; + self.trampoline = Some(node::expr::Expr::dummy()); return; } @@ -141,4 +141,31 @@ impl<'heap> Visitor<'heap> for Expander<'_, 'heap> { path.rooted = true; } + + fn visit_call_expr( + &mut self, + node::expr::CallExpr { + id, + span, + function, + arguments, + labeled_arguments, + }: &mut node::expr::CallExpr<'heap>, + ) { + let prev_current_item = self.current_item.take(); + self.visit_expr(function); + + if let Some(item) = self.current_item { + match item.kind { + module::item::ItemKind::Module(module_id) => todo!(), + module::item::ItemKind::Type(type_def) => todo!(), + module::item::ItemKind::Constructor(_) => { + // this stays a call expression, and is resolved later to a dedicated node. + } + module::item::ItemKind::Intrinsic(intrinsic_item) => todo!(), + } + } + + self.current_item = prev_current_item; + } } diff --git a/libs/@local/hashql/ast/src/lower/import_resolver/error.rs b/libs/@local/hashql/ast/src/lower/import_resolver/error.rs index 7e3c0e1476f..d377e55745f 100644 --- a/libs/@local/hashql/ast/src/lower/import_resolver/error.rs +++ b/libs/@local/hashql/ast/src/lower/import_resolver/error.rs @@ -400,7 +400,7 @@ fn add_available_imports<'heap>( fn format_absolute_path<'heap>(item: &Item<'heap>, registry: &ModuleRegistry<'heap>) -> String { iter::once("") - .chain(item.absolute_path(registry).map(Symbol::unwrap)) + .chain(item.absolute_path(registry).into_iter().map(Symbol::unwrap)) .intersperse("::") .collect() } diff --git a/libs/@local/hashql/core/src/module/item.rs b/libs/@local/hashql/core/src/module/item.rs index ce12455a1c2..bb4906df8e3 100644 --- a/libs/@local/hashql/core/src/module/item.rs +++ b/libs/@local/hashql/core/src/module/item.rs @@ -5,19 +5,19 @@ use crate::symbol::Symbol; #[derive(Debug, Copy, Clone, PartialEq, Eq, Hash)] pub struct IntrinsicValueItem<'heap> { - pub name: &'static str, + pub name: Symbol<'heap>, pub r#type: TypeDef<'heap>, } #[derive(Debug, Copy, Clone, PartialEq, Eq, Hash)] -pub struct IntrinsicTypeItem { - pub name: &'static str, +pub struct IntrinsicTypeItem<'heap> { + pub name: Symbol<'heap>, } #[derive(Debug, Copy, Clone, PartialEq, Eq, Hash, derive_more::From)] pub enum IntrinsicItem<'heap> { Value(IntrinsicValueItem<'heap>), - Type(IntrinsicTypeItem), + Type(IntrinsicTypeItem<'heap>), } impl IntrinsicItem<'_> { diff --git a/libs/@local/hashql/core/src/module/namespace.rs b/libs/@local/hashql/core/src/module/namespace.rs index 22f6378823d..330901db79f 100644 --- a/libs/@local/hashql/core/src/module/namespace.rs +++ b/libs/@local/hashql/core/src/module/namespace.rs @@ -495,9 +495,9 @@ mod tests { assert_matches!( item.kind, ItemKind::Intrinsic(IntrinsicItem::Value(IntrinsicValueItem { - name: "::core::math::add", + name, r#type: _ - })) + })) if name.as_str() == "::core::math::add" ); } @@ -524,11 +524,11 @@ mod tests { assert_eq!(item.name.as_str(), "Dict"); assert_eq!(item.kind.universe(), Some(Universe::Type)); - assert_eq!( + assert_matches!( item.kind, ItemKind::Intrinsic(IntrinsicItem::Type(IntrinsicTypeItem { - name: "::kernel::type::Dict", - })) + name, + })) if name.as_str() == "::kernel::type::Dict" ); } @@ -562,9 +562,9 @@ mod tests { assert_matches!( item.kind, ItemKind::Intrinsic(IntrinsicItem::Value(IntrinsicValueItem { - name: "::kernel::special_form::let", + name, r#type: _ - })) + })) if name.as_str() == "::kernel::special_form::let" ); } @@ -595,11 +595,11 @@ mod tests { assert_eq!(item.name.as_str(), "Dict"); assert_eq!(item.kind.universe(), Some(Universe::Type)); - assert_eq!( + assert_matches!( item.kind, ItemKind::Intrinsic(IntrinsicItem::Type(IntrinsicTypeItem { - name: "::kernel::type::Dict", - })) + name, + })) if name.as_str() == "::kernel::type::Dict" ); } @@ -646,10 +646,11 @@ mod tests { assert_matches!( item.kind, - ItemKind::Intrinsic(IntrinsicItem::Value(IntrinsicValueItem { - name: "::kernel::special_form::let", + ItemKind::Intrinsic( + IntrinsicItem::Value(IntrinsicValueItem { + name, r#type: _ - })) + })) if name.as_str() == "::kernel::special_form::let" ); } @@ -671,7 +672,7 @@ mod tests { module: id.value(), name: heap.intern_symbol("bar"), kind: ItemKind::Intrinsic(IntrinsicItem::Type(IntrinsicTypeItem { - name: "::foo::bar", + name: heap.intern_symbol("::foo::bar"), })), }]), }); @@ -691,11 +692,11 @@ mod tests { assert_eq!(import.name.as_str(), "Dict"); assert_eq!(import.kind.universe(), Some(Universe::Type)); - assert_eq!( + assert_matches!( import.kind, ItemKind::Intrinsic(IntrinsicItem::Type(IntrinsicTypeItem { - name: "::kernel::type::Dict", - })) + name, + })) if name.as_str() == "::kernel::type::Dict" ); namespace @@ -724,11 +725,11 @@ mod tests { assert_eq!(import.name.as_str(), "bar"); assert_eq!(import.kind.universe(), Some(Universe::Type)); - assert_eq!( + assert_matches!( import.kind, ItemKind::Intrinsic(IntrinsicItem::Type(IntrinsicTypeItem { - name: "::foo::bar" - })) + name, + })) if name.as_str() == "::foo::bar" ); } diff --git a/libs/@local/hashql/core/src/module/std_lib/core/bits.rs b/libs/@local/hashql/core/src/module/std_lib/core/bits.rs index 0a238d6475b..ce6428f5cde 100644 --- a/libs/@local/hashql/core/src/module/std_lib/core/bits.rs +++ b/libs/@local/hashql/core/src/module/std_lib/core/bits.rs @@ -5,7 +5,7 @@ use crate::{ locals::TypeDef, std_lib::{ModuleDef, StandardLibrary, StandardLibraryModule, decl}, }, - symbol::Symbol, + symbol::{Symbol, sym}, }; pub(in crate::module::std_lib) struct Bits { @@ -15,8 +15,8 @@ pub(in crate::module::std_lib) struct Bits { impl<'heap> StandardLibraryModule<'heap> for Bits { type Children = (); - fn name(heap: &'heap Heap) -> Symbol<'heap> { - heap.intern_symbol("bits") + fn name() -> Symbol<'heap> { + sym::bits } #[expect(non_snake_case)] @@ -27,41 +27,41 @@ impl<'heap> StandardLibraryModule<'heap> for Bits { let items = [ ( - "::core::bits::and", - &["&"], + sym::path::core::bits::and, + &[sym::and, sym::symbol::ampersand], decl!(lib; <>(lhs: Integer, rhs: Integer) -> Integer), ), ( - "::core::bits::or", - &["|"], + sym::path::core::bits::or, + &[sym::or, sym::symbol::pipe], decl!(lib; <>(lhs: Integer, rhs: Integer) -> Integer), ), ( - "::core::bits::xor", - &["^"], + sym::path::core::bits::xor, + &[sym::xor, sym::symbol::caret], decl!(lib; <>(lhs: Integer, rhs: Integer) -> Integer), ), ( - "::core::bits::not", - &["~"], + sym::path::core::bits::not, + &[sym::not, sym::symbol::tilde], decl!(lib; <>(value: Integer) -> Integer), ), ( - "::core::bits::shl", - &["<<"], + sym::path::core::bits::shl, + &[sym::shl, sym::symbol::ltlt], // In the future we might want to specialize the `shift` to `Natural` decl!(lib; <>(value: Integer, shift: Integer) -> Integer), ), ( - "::core::bits::shr", - &[">>"], + sym::path::core::bits::shr, + &[sym::shr, sym::symbol::gtgt], // In the future we might want to specialize the `shift` to `Natural` decl!(lib; <>(value: Integer, shift: Integer) -> Integer), ), ]; for (name, alias, r#type) in items { - func(lib, &mut def, name, alias, r#type); + func(&mut def, name, alias.iter().copied(), r#type); } def diff --git a/libs/@local/hashql/core/src/module/std_lib/core/bool.rs b/libs/@local/hashql/core/src/module/std_lib/core/bool.rs index 3bc8ce99f0f..851ee8c9103 100644 --- a/libs/@local/hashql/core/src/module/std_lib/core/bool.rs +++ b/libs/@local/hashql/core/src/module/std_lib/core/bool.rs @@ -5,7 +5,7 @@ use crate::{ locals::TypeDef, std_lib::{ModuleDef, StandardLibrary, StandardLibraryModule, decl}, }, - symbol::Symbol, + symbol::{Symbol, sym}, }; pub(in crate::module::std_lib) struct Bool { @@ -15,8 +15,8 @@ pub(in crate::module::std_lib) struct Bool { impl<'heap> StandardLibraryModule<'heap> for Bool { type Children = (); - fn name(heap: &'heap Heap) -> Symbol<'heap> { - heap.intern_symbol("bool") + fn name() -> Symbol<'heap> { + sym::bool } #[expect(non_snake_case)] @@ -27,24 +27,24 @@ impl<'heap> StandardLibraryModule<'heap> for Bool { let items = [ ( - "::core::bool::not", - &["!"], + sym::path::core::bool::not, + &[sym::not, sym::symbol::exclamation], decl!(lib; <>(value: Boolean) -> Boolean), ), ( - "::core::bool::and", - &["&&"], + sym::path::core::bool::and, + &[sym::and, sym::symbol::ampamp], decl!(lib; <>(lhs: Boolean, rhs: Boolean) -> Boolean), ), ( - "::core::bool::or", - &["||"], + sym::path::core::bool::or, + &[sym::or, sym::symbol::pipepipe], decl!(lib; <>(lhs: Boolean, rhs: Boolean) -> Boolean), ), ]; for (name, alias, r#type) in items { - func(lib, &mut def, name, alias, r#type); + func(&mut def, name, alias.iter().copied(), r#type); } def diff --git a/libs/@local/hashql/core/src/module/std_lib/core/cmp.rs b/libs/@local/hashql/core/src/module/std_lib/core/cmp.rs index 2490a3d096c..58b4bed3741 100644 --- a/libs/@local/hashql/core/src/module/std_lib/core/cmp.rs +++ b/libs/@local/hashql/core/src/module/std_lib/core/cmp.rs @@ -5,7 +5,7 @@ use crate::{ locals::TypeDef, std_lib::{ModuleDef, StandardLibrary, StandardLibraryModule, decl}, }, - symbol::Symbol, + symbol::{Symbol, sym}, }; pub(in crate::module::std_lib) struct Cmp { @@ -15,8 +15,8 @@ pub(in crate::module::std_lib) struct Cmp { impl<'heap> StandardLibraryModule<'heap> for Cmp { type Children = (); - fn name(heap: &'heap Heap) -> Symbol<'heap> { - heap.intern_symbol("cmp") + fn name() -> Symbol<'heap> { + sym::cmp } #[expect(non_snake_case)] @@ -28,39 +28,39 @@ impl<'heap> StandardLibraryModule<'heap> for Cmp { let items = [ ( - "::core::cmp::gt", - &[">"], + sym::path::core::cmp::gt, + &[sym::gt, sym::symbol::gt], decl!(lib; <>(lhs: Number, rhs: Number) -> Boolean), ), ( - "::core::cmp::lt", - &["<"], + sym::path::core::cmp::lt, + &[sym::lt, sym::symbol::lt], decl!(lib; <>(lhs: Number, rhs: Number) -> Boolean), ), ( - "::core::cmp::gte", - &[">="], + sym::path::core::cmp::gte, + &[sym::gte, sym::symbol::gteq], decl!(lib; <>(lhs: Number, rhs: Number) -> Boolean), ), ( - "::core::cmp::lte", - &["<="], + sym::path::core::cmp::lte, + &[sym::lte, sym::symbol::lteq], decl!(lib; <>(lhs: Number, rhs: Number) -> Boolean), ), ( - "::core::cmp::eq", - &["=="], + sym::path::core::cmp::eq, + &[sym::eq, sym::symbol::eqeq], decl!(lib; (lhs: T, rhs: U) -> Boolean), ), ( - "::core::cmp::ne", - &["!="], + sym::path::core::cmp::ne, + &[sym::ne, sym::symbol::excleq], decl!(lib; (lhs: T, rhs: U) -> Boolean), ), ]; for (name, alias, r#type) in items { - func(lib, &mut def, name, alias, r#type); + func(&mut def, name, alias.iter().copied(), r#type); } def diff --git a/libs/@local/hashql/core/src/module/std_lib/core/json.rs b/libs/@local/hashql/core/src/module/std_lib/core/json.rs index 663e48ad490..0183c2173c8 100644 --- a/libs/@local/hashql/core/src/module/std_lib/core/json.rs +++ b/libs/@local/hashql/core/src/module/std_lib/core/json.rs @@ -1,7 +1,7 @@ use crate::{ heap::Heap, module::std_lib::{ItemDef, ModuleDef, StandardLibrary, StandardLibraryModule}, - symbol::Symbol, + symbol::{Symbol, sym}, }; pub(in crate::module::std_lib) struct Json { @@ -11,8 +11,8 @@ pub(in crate::module::std_lib) struct Json { impl<'heap> StandardLibraryModule<'heap> for Json { type Children = (); - fn name(heap: &'heap Heap) -> Symbol<'heap> { - heap.intern_symbol("json") + fn name() -> Symbol<'heap> { + sym::json } fn define(lib: &mut StandardLibrary<'_, 'heap>) -> ModuleDef<'heap> { diff --git a/libs/@local/hashql/core/src/module/std_lib/core/math.rs b/libs/@local/hashql/core/src/module/std_lib/core/math.rs index 68af7f7cf2e..86ca1880ae8 100644 --- a/libs/@local/hashql/core/src/module/std_lib/core/math.rs +++ b/libs/@local/hashql/core/src/module/std_lib/core/math.rs @@ -5,7 +5,7 @@ use crate::{ locals::TypeDef, std_lib::{ModuleDef, StandardLibrary, StandardLibraryModule, decl}, }, - symbol::Symbol, + symbol::{Symbol, sym}, }; pub(in crate::module::std_lib) struct Math { @@ -15,11 +15,11 @@ pub(in crate::module::std_lib) struct Math { impl<'heap> StandardLibraryModule<'heap> for Math { type Children = (); - fn name(heap: &'heap Heap) -> Symbol<'heap> { - heap.intern_symbol("math") + fn name() -> Symbol<'heap> { + sym::math } - #[expect(clippy::non_ascii_literal, non_snake_case)] + #[expect(non_snake_case)] fn define(lib: &mut StandardLibrary<'_, 'heap>) -> ModuleDef<'heap> { let mut def = ModuleDef::new(); @@ -28,60 +28,64 @@ impl<'heap> StandardLibraryModule<'heap> for Math { let items = [ ( - "::core::math::add", - &["+"] as &[&'static str], + sym::path::core::math::add, + &[sym::add, sym::symbol::plus] as &[Symbol<'heap>], decl!(lib; (lhs: T, rhs: U) -> lib.ty.union([T, U])), ), ( - "::core::math::sub", - &["-"], + sym::path::core::math::sub, + &[sym::sub, sym::symbol::minus], decl!(lib; (lhs: T, rhs: U) -> lib.ty.union([T, U])), ), ( - "::core::math::mul", - &["*"], + sym::path::core::math::mul, + &[sym::mul, sym::symbol::asterisk], decl!(lib; (lhs: T, rhs: U) -> lib.ty.union([T, U])), ), ( - "::core::math::div", - &["/"], + sym::path::core::math::div, + &[sym::div, sym::symbol::slash], decl!(lib; <>(dividend: Number, divisor: Number) -> Number), ), ( - "::core::math::rem", - &["%"], + sym::path::core::math::rem, + &[sym::rem, sym::symbol::percent], decl!(lib; <>(dividend: Integer, divisor: Integer) -> Integer), ), ( - "::core::math::mod", - &[], + sym::path::core::math::r#mod, + &[sym::r#mod], decl!(lib; <>(value: Integer, modulus: Integer) -> Integer), ), ( - "::core::math::pow", - &["**", "↑"], + sym::path::core::math::pow, + &[ + sym::pow, + sym::symbol::asteriskasterisk, + sym::symbol::upwards, + ], // (cannot be `Integer` on return, as `exponent` can be a negative integer) decl!(lib; <>(base: Number, exponent: Number) -> Number), ), ( - "::core::math::sqrt", - &["√"], + sym::path::core::math::sqrt, + &[sym::sqrt, sym::symbol::sqrt], decl!(lib; <>(value: Number) -> Number), ), ( - "::core::math::cbrt", - &["∛"], + sym::path::core::math::cbrt, + &[sym::cbrt, sym::symbol::cbrt], decl!(lib; <>(value: Number) -> Number), ), ( - "::core::math::root", - &[], // cannot use `ⁿ√` because `ⁿ` is a letter, not a symbol + sym::path::core::math::root, + &[sym::root], // cannot use `ⁿ√` because `ⁿ` is a letter, not a symbol decl!(lib; <>(value: Number, root: Number) -> Number), ), ]; for (name, alias, r#type) in items { - func(lib, &mut def, name, alias, r#type); + func(&mut def, name, alias.iter().copied(), r#type); } def diff --git a/libs/@local/hashql/core/src/module/std_lib/core/mod.rs b/libs/@local/hashql/core/src/module/std_lib/core/mod.rs index fae43081c6b..482115474cb 100644 --- a/libs/@local/hashql/core/src/module/std_lib/core/mod.rs +++ b/libs/@local/hashql/core/src/module/std_lib/core/mod.rs @@ -1,10 +1,8 @@ -use core::iter; - use super::{ItemDef, ModuleDef, StandardLibrary, StandardLibraryModule}; use crate::{ heap::Heap, module::{item::IntrinsicValueItem, locals::TypeDef}, - symbol::Symbol, + symbol::{Symbol, sym}, }; pub(in crate::module::std_lib) mod bits; @@ -18,24 +16,16 @@ pub mod url; pub mod uuid; pub(in crate::module::std_lib) fn func<'heap>( - lib: &StandardLibrary<'_, 'heap>, def: &mut ModuleDef<'heap>, - name: &'static str, - alias: &[&'static str], + path: Symbol<'heap>, + names: impl IntoIterator>, r#type: TypeDef<'heap>, ) { - let value = IntrinsicValueItem { name, r#type }; - - let ident = name.rsplit_once("::").expect("path should be non-empty").1; + let value = IntrinsicValueItem { name: path, r#type }; - def.push_aliased( - iter::once(ident) - .chain(alias.iter().copied()) - .map(|name| lib.heap.intern_symbol(name)), - ItemDef::intrinsic(value), - ); + def.push_aliased(names, ItemDef::intrinsic(value)); } pub(in crate::module::std_lib) struct Core; @@ -53,8 +43,8 @@ impl<'heap> StandardLibraryModule<'heap> for Core { self::uuid::Uuid, ); - fn name(heap: &'heap Heap) -> Symbol<'heap> { - heap.intern_symbol("core") + fn name() -> Symbol<'heap> { + sym::core } fn define(_: &mut StandardLibrary<'_, 'heap>) -> ModuleDef<'heap> { diff --git a/libs/@local/hashql/core/src/module/std_lib/core/option.rs b/libs/@local/hashql/core/src/module/std_lib/core/option.rs index 7bf46204fa5..88f306c7129 100644 --- a/libs/@local/hashql/core/src/module/std_lib/core/option.rs +++ b/libs/@local/hashql/core/src/module/std_lib/core/option.rs @@ -27,8 +27,8 @@ pub(in crate::module::std_lib) struct Option { impl<'heap> StandardLibraryModule<'heap> for Option { type Children = (); - fn name(heap: &'heap Heap) -> Symbol<'heap> { - heap.intern_symbol("option") + fn name() -> Symbol<'heap> { + sym::option } fn define(lib: &mut StandardLibrary<'_, 'heap>) -> ModuleDef<'heap> { diff --git a/libs/@local/hashql/core/src/module/std_lib/core/result.rs b/libs/@local/hashql/core/src/module/std_lib/core/result.rs index 9f8a16dcf6e..91018546d28 100644 --- a/libs/@local/hashql/core/src/module/std_lib/core/result.rs +++ b/libs/@local/hashql/core/src/module/std_lib/core/result.rs @@ -1,7 +1,6 @@ use crate::{ - heap::Heap, module::std_lib::{ItemDef, ModuleDef, StandardLibrary, StandardLibraryModule}, - symbol::Symbol, + symbol::{Symbol, sym}, }; pub(in crate::module::std_lib) struct Result { @@ -11,8 +10,8 @@ pub(in crate::module::std_lib) struct Result { impl<'heap> StandardLibraryModule<'heap> for Result { type Children = (); - fn name(heap: &'heap Heap) -> Symbol<'heap> { - heap.intern_symbol("result") + fn name() -> Symbol<'heap> { + sym::result } fn define(lib: &mut StandardLibrary<'_, 'heap>) -> ModuleDef<'heap> { diff --git a/libs/@local/hashql/core/src/module/std_lib/core/url.rs b/libs/@local/hashql/core/src/module/std_lib/core/url.rs index 0335472f623..f96dfb78632 100644 --- a/libs/@local/hashql/core/src/module/std_lib/core/url.rs +++ b/libs/@local/hashql/core/src/module/std_lib/core/url.rs @@ -22,8 +22,8 @@ pub(in crate::module::std_lib) struct Url { impl<'heap> StandardLibraryModule<'heap> for Url { type Children = (); - fn name(heap: &'heap Heap) -> Symbol<'heap> { - heap.intern_symbol("url") + fn name() -> Symbol<'heap> { + sym::url } fn define(lib: &mut StandardLibrary<'_, 'heap>) -> ModuleDef<'heap> { diff --git a/libs/@local/hashql/core/src/module/std_lib/core/uuid.rs b/libs/@local/hashql/core/src/module/std_lib/core/uuid.rs index a679193e885..4bab6eb757b 100644 --- a/libs/@local/hashql/core/src/module/std_lib/core/uuid.rs +++ b/libs/@local/hashql/core/src/module/std_lib/core/uuid.rs @@ -22,7 +22,7 @@ pub(in crate::module::std_lib) struct Uuid { impl<'heap> StandardLibraryModule<'heap> for Uuid { type Children = (); - fn name(_: &'heap Heap) -> Symbol<'heap> { + fn name() -> Symbol<'heap> { sym::uuid } diff --git a/libs/@local/hashql/core/src/module/std_lib/graph/body.rs b/libs/@local/hashql/core/src/module/std_lib/graph/body.rs index 2ce7f168822..5234a9633ed 100644 --- a/libs/@local/hashql/core/src/module/std_lib/graph/body.rs +++ b/libs/@local/hashql/core/src/module/std_lib/graph/body.rs @@ -5,7 +5,7 @@ use crate::{ locals::TypeDef, std_lib::{self, ModuleDef, StandardLibraryModule, core::func, decl}, }, - symbol::Symbol, + symbol::{Symbol, sym}, }; pub(in crate::module::std_lib) struct Body { @@ -15,8 +15,8 @@ pub(in crate::module::std_lib) struct Body { impl<'heap> StandardLibraryModule<'heap> for Body { type Children = (); - fn name(heap: &'heap Heap) -> Symbol<'heap> { - heap.intern_symbol("body") + fn name() -> Symbol<'heap> { + sym::body } fn define(lib: &mut StandardLibrary<'_, 'heap>) -> ModuleDef<'heap> { @@ -40,7 +40,7 @@ impl<'heap> StandardLibraryModule<'heap> for Body { ) -> lib.ty.apply([(graph_returns.arguments[0].id, T)], graph_returns.id) ); - func(lib, &mut def, "::graph::body::filter", &[], decl); + func(&mut def, sym::path::graph_body_filter, [sym::filter], decl); def } diff --git a/libs/@local/hashql/core/src/module/std_lib/graph/entity.rs b/libs/@local/hashql/core/src/module/std_lib/graph/entity.rs index 8106254199a..2bd8c83a211 100644 --- a/libs/@local/hashql/core/src/module/std_lib/graph/entity.rs +++ b/libs/@local/hashql/core/src/module/std_lib/graph/entity.rs @@ -9,7 +9,7 @@ use crate::{ decl, }, }, - symbol::Symbol, + symbol::{Symbol, sym}, }; pub(in crate::module::std_lib) struct Entity { @@ -22,8 +22,8 @@ pub(in crate::module::std_lib) struct Entity { impl<'heap> StandardLibraryModule<'heap> for Entity { type Children = (); - fn name(heap: &'heap Heap) -> Symbol<'heap> { - heap.intern_symbol("entity") + fn name() -> Symbol<'heap> { + sym::entity } fn define(lib: &mut StandardLibrary<'_, 'heap>) -> ModuleDef<'heap> { @@ -53,7 +53,12 @@ impl<'heap> StandardLibraryModule<'heap> for Entity { ) -> lib.ty.boolean() ); - func(lib, &mut def, "::graph::entity::is_of_type", &[], decl); + func( + &mut def, + sym::path::graph::entity::is_of_type, + [sym::is_of_type], + decl, + ); // `property(entity: Entity, path: JsonPath) -> Option` let decl = decl!(lib; @@ -62,7 +67,12 @@ impl<'heap> StandardLibraryModule<'heap> for Entity { ) -> option(&lib.ty, lib.ty.unknown()) ); - func(lib, &mut def, "::graph::entity::property", &[], decl); + func( + &mut def, + sym::path::graph::entity::property, + [sym::property], + decl, + ); def } diff --git a/libs/@local/hashql/core/src/module/std_lib/graph/head.rs b/libs/@local/hashql/core/src/module/std_lib/graph/head.rs index a157436cf54..a7131ef1872 100644 --- a/libs/@local/hashql/core/src/module/std_lib/graph/head.rs +++ b/libs/@local/hashql/core/src/module/std_lib/graph/head.rs @@ -19,8 +19,8 @@ pub(in crate::module::std_lib) struct Head { impl<'heap> StandardLibraryModule<'heap> for Head { type Children = (); - fn name(heap: &'heap Heap) -> Symbol<'heap> { - heap.intern_symbol("head") + fn name() -> Symbol<'heap> { + sym::head } fn define(lib: &mut StandardLibrary<'_, 'heap>) -> ModuleDef<'heap> { @@ -51,10 +51,9 @@ impl<'heap> StandardLibraryModule<'heap> for Head { graph_ty.id, ); func( - lib, &mut def, - "::graph::head::entities", - &[], + sym::path::graph_head_entities, + [sym::entities], decl!(lib; <>(axis: query_temporal_axes_ty.id) -> entities_returns), ); diff --git a/libs/@local/hashql/core/src/module/std_lib/graph/mod.rs b/libs/@local/hashql/core/src/module/std_lib/graph/mod.rs index 7d6a3380645..ea6bc9ae423 100644 --- a/libs/@local/hashql/core/src/module/std_lib/graph/mod.rs +++ b/libs/@local/hashql/core/src/module/std_lib/graph/mod.rs @@ -7,12 +7,11 @@ pub(in crate::module::std_lib) mod tmp; pub mod types; use crate::{ - heap::Heap, module::{ StandardLibrary, std_lib::{ItemDef, ModuleDef, StandardLibraryModule}, }, - symbol::Symbol, + symbol::{Symbol, sym}, }; pub(in crate::module::std_lib) struct Graph { @@ -30,8 +29,8 @@ impl<'heap> StandardLibraryModule<'heap> for Graph { self::types::Types, ); - fn name(heap: &'heap Heap) -> Symbol<'heap> { - heap.intern_symbol("graph") + fn name() -> Symbol<'heap> { + sym::graph } fn define(lib: &mut StandardLibrary<'_, 'heap>) -> ModuleDef<'heap> { diff --git a/libs/@local/hashql/core/src/module/std_lib/graph/tail.rs b/libs/@local/hashql/core/src/module/std_lib/graph/tail.rs index 91026a5dd1f..8a077ac4549 100644 --- a/libs/@local/hashql/core/src/module/std_lib/graph/tail.rs +++ b/libs/@local/hashql/core/src/module/std_lib/graph/tail.rs @@ -5,7 +5,7 @@ use crate::{ locals::TypeDef, std_lib::{self, ModuleDef, StandardLibraryModule, core::func, decl}, }, - symbol::Symbol, + symbol::{Symbol, sym}, }; pub(in crate::module::std_lib) struct Tail { @@ -15,8 +15,8 @@ pub(in crate::module::std_lib) struct Tail { impl<'heap> StandardLibraryModule<'heap> for Tail { type Children = (); - fn name(heap: &'heap Heap) -> Symbol<'heap> { - heap.intern_symbol("tail") + fn name() -> Symbol<'heap> { + sym::tail } fn define(lib: &mut StandardLibrary<'_, 'heap>) -> ModuleDef<'heap> { @@ -33,7 +33,12 @@ impl<'heap> StandardLibraryModule<'heap> for Tail { (graph: lib.ty.apply([(graph_ty.arguments[0].id, T)], graph_ty.id)) -> lib.ty.list(T) ); - func(lib, &mut def, "::graph::tail::collect", &[], decl); + func( + &mut def, + sym::path::graph_tail_collect, + [sym::collect], + decl, + ); def } diff --git a/libs/@local/hashql/core/src/module/std_lib/graph/temporal.rs b/libs/@local/hashql/core/src/module/std_lib/graph/temporal.rs index 26729210137..f041972eaee 100644 --- a/libs/@local/hashql/core/src/module/std_lib/graph/temporal.rs +++ b/libs/@local/hashql/core/src/module/std_lib/graph/temporal.rs @@ -109,7 +109,7 @@ pub(in crate::module::std_lib) struct Temporal { impl<'heap> StandardLibraryModule<'heap> for Temporal { type Children = (); - fn name(_heap: &'heap Heap) -> Symbol<'heap> { + fn name() -> Symbol<'heap> { sym::temporal } diff --git a/libs/@local/hashql/core/src/module/std_lib/graph/tmp.rs b/libs/@local/hashql/core/src/module/std_lib/graph/tmp.rs index e9bfed600b5..e85867fb5b0 100644 --- a/libs/@local/hashql/core/src/module/std_lib/graph/tmp.rs +++ b/libs/@local/hashql/core/src/module/std_lib/graph/tmp.rs @@ -1,5 +1,4 @@ use crate::{ - heap::Heap, module::{ StandardLibrary, locals::TypeDef, @@ -16,8 +15,8 @@ pub(in crate::module::std_lib) struct Tmp { impl<'heap> StandardLibraryModule<'heap> for Tmp { type Children = (); - fn name(heap: &'heap Heap) -> Symbol<'heap> { - heap.intern_symbol("tmp") + fn name() -> Symbol<'heap> { + sym::tmp } fn define(lib: &mut StandardLibrary<'_, 'heap>) -> ModuleDef<'heap> { @@ -29,10 +28,9 @@ impl<'heap> StandardLibraryModule<'heap> for Tmp { // ::graph::tmp::decision_time_now() -> TimeAxis func( - lib, &mut def, - "::graph::tmp::decision_time_now", - &[], + sym::path::graph::tmp::decision_time_now, + [sym::decision_time_now], TypeDef { id: lib.ty.closure([] as [TypeId; 0], query_temporal_axes_ty.id), arguments: lib.ty.env.intern_generic_argument_references(&[]), diff --git a/libs/@local/hashql/core/src/module/std_lib/graph/types/knowledge/entity.rs b/libs/@local/hashql/core/src/module/std_lib/graph/types/knowledge/entity.rs index dd5b0f19e26..a5e67d8a1da 100644 --- a/libs/@local/hashql/core/src/module/std_lib/graph/types/knowledge/entity.rs +++ b/libs/@local/hashql/core/src/module/std_lib/graph/types/knowledge/entity.rs @@ -373,7 +373,7 @@ pub(in crate::module::std_lib) struct Entity { impl<'heap> StandardLibraryModule<'heap> for Entity { type Children = (); - fn name(_: &'heap Heap) -> Symbol<'heap> { + fn name() -> Symbol<'heap> { sym::entity } diff --git a/libs/@local/hashql/core/src/module/std_lib/graph/types/knowledge/mod.rs b/libs/@local/hashql/core/src/module/std_lib/graph/types/knowledge/mod.rs index 7fd11736062..39359faff79 100644 --- a/libs/@local/hashql/core/src/module/std_lib/graph/types/knowledge/mod.rs +++ b/libs/@local/hashql/core/src/module/std_lib/graph/types/knowledge/mod.rs @@ -1,12 +1,11 @@ pub mod entity; use crate::{ - heap::Heap, module::{ StandardLibrary, std_lib::{ModuleDef, StandardLibraryModule}, }, - symbol::Symbol, + symbol::{Symbol, sym}, }; pub(in crate::module::std_lib) struct Knowledge; @@ -14,8 +13,8 @@ pub(in crate::module::std_lib) struct Knowledge; impl<'heap> StandardLibraryModule<'heap> for Knowledge { type Children = (self::entity::Entity,); - fn name(heap: &'heap Heap) -> Symbol<'heap> { - heap.intern_symbol("knowledge") + fn name() -> Symbol<'heap> { + sym::knowledge } fn define(_: &mut StandardLibrary<'_, 'heap>) -> ModuleDef<'heap> { diff --git a/libs/@local/hashql/core/src/module/std_lib/graph/types/mod.rs b/libs/@local/hashql/core/src/module/std_lib/graph/types/mod.rs index 9e743089972..ced25373b91 100644 --- a/libs/@local/hashql/core/src/module/std_lib/graph/types/mod.rs +++ b/libs/@local/hashql/core/src/module/std_lib/graph/types/mod.rs @@ -5,7 +5,7 @@ use crate::{ StandardLibrary, std_lib::{ModuleDef, StandardLibraryModule}, }, - symbol::Symbol, + symbol::{Symbol, sym}, }; pub mod knowledge; @@ -23,8 +23,8 @@ impl<'heap> StandardLibraryModule<'heap> for Types { self::principal::Principal, ); - fn name(heap: &'heap Heap) -> Symbol<'heap> { - heap.intern_symbol("types") + fn name() -> Symbol<'heap> { + sym::types } fn define(_: &mut StandardLibrary<'_, 'heap>) -> ModuleDef<'heap> { diff --git a/libs/@local/hashql/core/src/module/std_lib/graph/types/ontology/entity_type.rs b/libs/@local/hashql/core/src/module/std_lib/graph/types/ontology/entity_type.rs index b8fb9b034ab..c39a39af04a 100644 --- a/libs/@local/hashql/core/src/module/std_lib/graph/types/ontology/entity_type.rs +++ b/libs/@local/hashql/core/src/module/std_lib/graph/types/ontology/entity_type.rs @@ -4,7 +4,7 @@ use crate::{ StandardLibrary, std_lib::{self, ItemDef, ModuleDef, StandardLibraryModule, core::option::types::option}, }, - symbol::Symbol, + symbol::{Symbol, sym}, }; pub(in crate::module::std_lib) struct EntityType { @@ -17,8 +17,8 @@ pub(in crate::module::std_lib) struct EntityType { impl<'heap> StandardLibraryModule<'heap> for EntityType { type Children = (); - fn name(heap: &'heap Heap) -> Symbol<'heap> { - heap.intern_symbol("entity_type") + fn name() -> Symbol<'heap> { + sym::entity_type } fn define(lib: &mut StandardLibrary<'_, 'heap>) -> ModuleDef<'heap> { diff --git a/libs/@local/hashql/core/src/module/std_lib/graph/types/ontology/mod.rs b/libs/@local/hashql/core/src/module/std_lib/graph/types/ontology/mod.rs index 8edd217d567..202394bcadc 100644 --- a/libs/@local/hashql/core/src/module/std_lib/graph/types/ontology/mod.rs +++ b/libs/@local/hashql/core/src/module/std_lib/graph/types/ontology/mod.rs @@ -1,3 +1,12 @@ +use crate::{ + heap::Heap, + module::{ + StandardLibrary, + std_lib::{self, ItemDef, ModuleDef, StandardLibraryModule}, + }, + symbol::{Symbol, sym}, +}; + pub(in crate::module::std_lib) mod entity_type; pub mod types { @@ -50,15 +59,6 @@ pub mod types { } } -use crate::{ - heap::Heap, - module::{ - StandardLibrary, - std_lib::{self, ItemDef, ModuleDef, StandardLibraryModule}, - }, - symbol::{Symbol, sym}, -}; - pub(in crate::module::std_lib) struct Ontology { _dependencies: (std_lib::core::url::Url,), } @@ -66,8 +66,8 @@ pub(in crate::module::std_lib) struct Ontology { impl<'heap> StandardLibraryModule<'heap> for Ontology { type Children = (self::entity_type::EntityType,); - fn name(heap: &'heap Heap) -> Symbol<'heap> { - heap.intern_symbol("ontology") + fn name() -> Symbol<'heap> { + sym::ontology } fn define(lib: &mut StandardLibrary<'_, 'heap>) -> ModuleDef<'heap> { diff --git a/libs/@local/hashql/core/src/module/std_lib/graph/types/principal/actor_group/mod.rs b/libs/@local/hashql/core/src/module/std_lib/graph/types/principal/actor_group/mod.rs index 2134f79dc61..fdbbe962a42 100644 --- a/libs/@local/hashql/core/src/module/std_lib/graph/types/principal/actor_group/mod.rs +++ b/libs/@local/hashql/core/src/module/std_lib/graph/types/principal/actor_group/mod.rs @@ -1,3 +1,11 @@ +use crate::{ + module::{ + StandardLibrary, + std_lib::{self, ItemDef, ModuleDef, StandardLibraryModule}, + }, + symbol::{Symbol, sym}, +}; + pub mod web; pub mod types { @@ -25,15 +33,6 @@ pub mod types { } } -use crate::{ - heap::Heap, - module::{ - StandardLibrary, - std_lib::{self, ItemDef, ModuleDef, StandardLibraryModule}, - }, - symbol::{Symbol, sym}, -}; - pub(in crate::module::std_lib) struct ActorGroup { _dependencies: (std_lib::core::uuid::Uuid,), } @@ -41,8 +40,8 @@ pub(in crate::module::std_lib) struct ActorGroup { impl<'heap> StandardLibraryModule<'heap> for ActorGroup { type Children = (self::web::Web,); - fn name(heap: &'heap Heap) -> Symbol<'heap> { - heap.intern_symbol("actor_group") + fn name() -> Symbol<'heap> { + sym::actor_group } fn define(lib: &mut StandardLibrary<'_, 'heap>) -> ModuleDef<'heap> { diff --git a/libs/@local/hashql/core/src/module/std_lib/graph/types/principal/actor_group/web.rs b/libs/@local/hashql/core/src/module/std_lib/graph/types/principal/actor_group/web.rs index fa3319c5865..18d196e246e 100644 --- a/libs/@local/hashql/core/src/module/std_lib/graph/types/principal/actor_group/web.rs +++ b/libs/@local/hashql/core/src/module/std_lib/graph/types/principal/actor_group/web.rs @@ -1,5 +1,4 @@ use crate::{ - heap::Heap, module::{ StandardLibrary, std_lib::{self, ItemDef, ModuleDef, StandardLibraryModule}, @@ -40,8 +39,8 @@ pub(in crate::module::std_lib) struct Web { impl<'heap> StandardLibraryModule<'heap> for Web { type Children = (); - fn name(heap: &'heap Heap) -> Symbol<'heap> { - heap.intern_symbol("web") + fn name() -> Symbol<'heap> { + sym::web } fn define(lib: &mut StandardLibrary<'_, 'heap>) -> ModuleDef<'heap> { diff --git a/libs/@local/hashql/core/src/module/std_lib/graph/types/principal/mod.rs b/libs/@local/hashql/core/src/module/std_lib/graph/types/principal/mod.rs index ae6f9075180..d8b3241fd3e 100644 --- a/libs/@local/hashql/core/src/module/std_lib/graph/types/principal/mod.rs +++ b/libs/@local/hashql/core/src/module/std_lib/graph/types/principal/mod.rs @@ -6,7 +6,7 @@ use crate::{ StandardLibrary, std_lib::{ModuleDef, StandardLibraryModule}, }, - symbol::Symbol, + symbol::{Symbol, sym}, }; pub(in crate::module::std_lib) struct Principal { @@ -16,8 +16,8 @@ pub(in crate::module::std_lib) struct Principal { impl<'heap> StandardLibraryModule<'heap> for Principal { type Children = (self::actor_group::ActorGroup,); - fn name(heap: &'heap Heap) -> Symbol<'heap> { - heap.intern_symbol("principal") + fn name() -> Symbol<'heap> { + sym::principal } fn define(_: &mut StandardLibrary<'_, 'heap>) -> ModuleDef<'heap> { diff --git a/libs/@local/hashql/core/src/module/std_lib/kernel/mod.rs b/libs/@local/hashql/core/src/module/std_lib/kernel/mod.rs index 51a6f8818e3..e7a23ecf350 100644 --- a/libs/@local/hashql/core/src/module/std_lib/kernel/mod.rs +++ b/libs/@local/hashql/core/src/module/std_lib/kernel/mod.rs @@ -2,15 +2,15 @@ pub(in crate::module::std_lib) mod special_form; pub(in crate::module::std_lib) mod r#type; use super::{ModuleDef, StandardLibrary, StandardLibraryModule}; -use crate::{heap::Heap, symbol::Symbol}; +use crate::symbol::{Symbol, sym}; pub(in crate::module::std_lib) struct Kernel; impl<'heap> StandardLibraryModule<'heap> for Kernel { type Children = (self::special_form::SpecialForm, self::r#type::Type); - fn name(heap: &'heap Heap) -> Symbol<'heap> { - heap.intern_symbol("kernel") + fn name() -> Symbol<'heap> { + sym::kernel } fn define(_: &mut StandardLibrary<'_, 'heap>) -> ModuleDef<'heap> { diff --git a/libs/@local/hashql/core/src/module/std_lib/kernel/special_form.rs b/libs/@local/hashql/core/src/module/std_lib/kernel/special_form.rs index 3e6f34b9f40..b7f981f273b 100644 --- a/libs/@local/hashql/core/src/module/std_lib/kernel/special_form.rs +++ b/libs/@local/hashql/core/src/module/std_lib/kernel/special_form.rs @@ -1,13 +1,10 @@ -use core::iter; - use crate::{ - heap::Heap, module::{ item::IntrinsicValueItem, locals::TypeDef, std_lib::{ItemDef, ModuleDef, StandardLibrary, StandardLibraryModule}, }, - symbol::Symbol, + symbol::{Symbol, sym}, }; pub(in crate::module::std_lib) struct SpecialForm; @@ -17,48 +14,51 @@ impl SpecialForm { lib: &StandardLibrary<'_, 'heap>, def: &mut ModuleDef<'heap>, - name: &'static str, - alias: &[&'static str], + path: Symbol<'heap>, + names: impl IntoIterator>, ) { let value = IntrinsicValueItem { - name, + name: path, r#type: TypeDef { id: lib.ty.never(), arguments: lib.ty.env.intern_generic_argument_references(&[]), }, }; - let ident = name.rsplit_once("::").expect("path should be non-empty").1; - - def.push_aliased( - iter::once(ident) - .chain(alias.iter().copied()) - .map(|name| lib.heap.intern_symbol(name)), - ItemDef::intrinsic(value), - ); + def.push_aliased(names, ItemDef::intrinsic(value)); } } impl<'heap> StandardLibraryModule<'heap> for SpecialForm { type Children = (); - fn name(heap: &'heap Heap) -> Symbol<'heap> { - heap.intern_symbol("special_form") + fn name() -> Symbol<'heap> { + sym::special_form } fn define(lib: &mut StandardLibrary<'_, 'heap>) -> ModuleDef<'heap> { let mut def = ModuleDef::new(); - Self::make(lib, &mut def, "::kernel::special_form::if", &[]); - Self::make(lib, &mut def, "::kernel::special_form::as", &[]); - Self::make(lib, &mut def, "::kernel::special_form::let", &[]); - Self::make(lib, &mut def, "::kernel::special_form::type", &[]); - Self::make(lib, &mut def, "::kernel::special_form::newtype", &[]); - Self::make(lib, &mut def, "::kernel::special_form::use", &[]); - Self::make(lib, &mut def, "::kernel::special_form::fn", &[]); - Self::make(lib, &mut def, "::kernel::special_form::input", &[]); - Self::make(lib, &mut def, "::kernel::special_form::access", &["."]); - Self::make(lib, &mut def, "::kernel::special_form::index", &["[]"]); + Self::make(lib, &mut def, sym::path::r#if, [sym::r#if]); + Self::make(lib, &mut def, sym::path::r#as, [sym::r#as]); + Self::make(lib, &mut def, sym::path::r#let, [sym::r#let]); + Self::make(lib, &mut def, sym::path::r#type, [sym::r#type]); + Self::make(lib, &mut def, sym::path::newtype, [sym::newtype]); + Self::make(lib, &mut def, sym::path::r#use, [sym::r#use]); + Self::make(lib, &mut def, sym::path::r#fn, [sym::r#fn]); + Self::make(lib, &mut def, sym::path::input, [sym::input]); + Self::make( + lib, + &mut def, + sym::path::access, + [sym::access, sym::symbol::dot], + ); + Self::make( + lib, + &mut def, + sym::path::index, + [sym::index, sym::symbol::brackets], + ); def } diff --git a/libs/@local/hashql/core/src/module/std_lib/kernel/type.rs b/libs/@local/hashql/core/src/module/std_lib/kernel/type.rs index 70221126878..410e5450085 100644 --- a/libs/@local/hashql/core/src/module/std_lib/kernel/type.rs +++ b/libs/@local/hashql/core/src/module/std_lib/kernel/type.rs @@ -1,10 +1,9 @@ use crate::{ - heap::Heap, module::{ item::IntrinsicTypeItem, std_lib::{ItemDef, ModuleDef, StandardLibrary, StandardLibraryModule}, }, - symbol::Symbol, + symbol::{Symbol, sym}, r#type::TypeId, }; @@ -14,54 +13,52 @@ impl Type { fn primitive<'heap>( lib: &StandardLibrary<'_, 'heap>, def: &mut ModuleDef<'heap>, - name: &'static str, + name: Symbol<'heap>, id: TypeId, ) -> usize { let item = ItemDef::r#type(lib.ty.env, id, &[]); - def.push(lib.heap.intern_symbol(name), item) + def.push(name, item) } fn intrinsic<'heap>( - lib: &StandardLibrary<'_, 'heap>, def: &mut ModuleDef<'heap>, - name: &'static str, + path: Symbol<'heap>, + ident: Symbol<'heap>, ) -> usize { - let item = ItemDef::intrinsic(IntrinsicTypeItem { name }); - - let ident = name.rsplit_once("::").expect("path should be non-empty").1; + let item = ItemDef::intrinsic(IntrinsicTypeItem { name: path }); - def.push(lib.heap.intern_symbol(ident), item) + def.push(ident, item) } } impl<'heap> StandardLibraryModule<'heap> for Type { type Children = (); - fn name(heap: &'heap Heap) -> Symbol<'heap> { - heap.intern_symbol("type") + fn name() -> Symbol<'heap> { + sym::r#type } fn define(lib: &mut StandardLibrary<'_, 'heap>) -> ModuleDef<'heap> { let mut def = ModuleDef::new(); - Self::primitive(lib, &mut def, "Boolean", lib.ty.boolean()); - Self::primitive(lib, &mut def, "Null", lib.ty.null()); - Self::primitive(lib, &mut def, "Number", lib.ty.number()); - Self::primitive(lib, &mut def, "Integer", lib.ty.integer()); + Self::primitive(lib, &mut def, sym::Boolean, lib.ty.boolean()); + Self::primitive(lib, &mut def, sym::Null, lib.ty.null()); + Self::primitive(lib, &mut def, sym::Number, lib.ty.number()); + Self::primitive(lib, &mut def, sym::Integer, lib.ty.integer()); // Natural does not yet exist, due to lack of support for refinements - Self::primitive(lib, &mut def, "String", lib.ty.string()); + Self::primitive(lib, &mut def, sym::String, lib.ty.string()); - let unknown = Self::primitive(lib, &mut def, "Unknown", lib.ty.unknown()); - def.alias(unknown, lib.heap.intern_symbol("?")); + let unknown = Self::primitive(lib, &mut def, sym::Unknown, lib.ty.unknown()); + def.alias(unknown, sym::symbol::question_mark); - let never = Self::primitive(lib, &mut def, "Never", lib.ty.never()); - def.alias(never, lib.heap.intern_symbol("!")); + let never = Self::primitive(lib, &mut def, sym::Never, lib.ty.never()); + def.alias(never, sym::symbol::exclamation); // Struct/Tuple are purposefully excluded, as they are // fundamental types and do not have any meaningful value constructors. // Union and Intersections are also excluded, as they have explicit constructors - Self::intrinsic(lib, &mut def, "::kernel::type::List"); - Self::intrinsic(lib, &mut def, "::kernel::type::Dict"); + Self::intrinsic(&mut def, sym::path::List, sym::List); + Self::intrinsic(&mut def, sym::path::Dict, sym::Dict); def } diff --git a/libs/@local/hashql/core/src/module/std_lib/mod.rs b/libs/@local/hashql/core/src/module/std_lib/mod.rs index 457d2db661d..d6631f3213c 100644 --- a/libs/@local/hashql/core/src/module/std_lib/mod.rs +++ b/libs/@local/hashql/core/src/module/std_lib/mod.rs @@ -214,7 +214,7 @@ impl<'env, 'heap> StandardLibrary<'env, 'heap> { } // create all the child modules - let children_names = M::Children::names(self.heap); + let children_names = M::Children::names(); let children_modules = M::Children::modules(self, depth.saturating_add(1), id.value()); for (name, module) in children_names.into_iter().zip(children_modules) { @@ -226,7 +226,7 @@ impl<'env, 'heap> StandardLibrary<'env, 'heap> { } PartialModule { - name: M::name(self.heap), + name: M::name(), parent, depth, items: self.registry.intern_items(&output), @@ -251,7 +251,7 @@ impl<'env, 'heap> StandardLibrary<'env, 'heap> { trait Submodules<'heap> { const LENGTH: usize; - fn names(heap: &'heap Heap) -> impl IntoIterator>; + fn names() -> impl IntoIterator>; fn modules( lib: &mut StandardLibrary<'_, 'heap>, @@ -263,7 +263,7 @@ trait Submodules<'heap> { impl<'heap> Submodules<'heap> for () { const LENGTH: usize = 0; - fn names(_: &'heap Heap) -> impl IntoIterator> { + fn names() -> impl IntoIterator> { iter::empty() } @@ -296,8 +296,8 @@ macro_rules! impl_submodules { { const LENGTH: usize = ${count($item)}; - fn names(heap: &'heap Heap) -> impl IntoIterator> { - $(let $item = $item::name(heap);)* + fn names() -> impl IntoIterator> { + $(let $item = $item::name();)* [$($item),*] } @@ -320,7 +320,7 @@ impl_submodules!(A, B, C, D, E, F, G, H, I, J, K, L, M, N, O, P); trait StandardLibraryModule<'heap>: 'static { type Children: Submodules<'heap>; - fn name(heap: &'heap Heap) -> Symbol<'heap>; + fn name() -> Symbol<'heap>; fn define(lib: &mut StandardLibrary<'_, 'heap>) -> ModuleDef<'heap>; } diff --git a/libs/@local/hashql/core/src/symbol/sym.rs b/libs/@local/hashql/core/src/symbol/sym.rs index 1379e05f3a2..e955cd07db0 100644 --- a/libs/@local/hashql/core/src/symbol/sym.rs +++ b/libs/@local/hashql/core/src/symbol/sym.rs @@ -18,7 +18,11 @@ hashql_macros::define_symbols! { bit_shl, bit_shr, bit_xor, + bits, + bool, Boolean, + cbrt, + cmp, collect, Confidence, confidence, @@ -75,8 +79,8 @@ hashql_macros::define_symbols! { left_entity_provenance, left_entity_uuid, left_entity_web_id, - link_data, LeftClosedTemporalInterval, + link_data, LinkData, List, lt, @@ -125,18 +129,23 @@ hashql_macros::define_symbols! { r#type: "type", r#use: "use", R, - RightBoundedTemporalInterval, - S, record_id, RecordId, + rem, Result, right_entity_confidence, right_entity_id, right_entity_provenance, right_entity_uuid, right_entity_web_id, + RightBoundedTemporalInterval, + root, + S, + shl, + shr, Some, special_form, + sqrt, start, String, sub, @@ -165,6 +174,26 @@ hashql_macros::define_symbols! { VersionedUrl, web_id, WebId, + xor, + tail, + head, + entities, + is_of_type, + property, + body, + tmp, + decision_time_now, + graph, + types, + principal, + web, + actor_group, + ontology, + entity_type, + knowledge, + url, + result, + json, // [tidy] sort alphabetically end internal: { @@ -174,10 +203,15 @@ hashql_macros::define_symbols! { symbol: { // [tidy] sort alphabetically start ampamp: "&&", + upwards: "↑", + sqrt: "√", + cbrt: "∛", + percent: "%", ampersand: "&", arrow: "->", arrow_head: "|>", asterisk: "*", + asteriskasterisk: "**", exclamation: "!", excleq: "!=", brackets: "[]", @@ -221,6 +255,18 @@ hashql_macros::define_symbols! { path: { // [tidy] sort alphabetically start + r#if: "::kernel::special_form::if", + r#as: "::kernel::special_form::as", + r#let: "::kernel::special_form::let", + r#type: "::kernel::special_form::type", + newtype: "::kernel::special_form::newtype", + r#use: "::kernel::special_form::use", + r#fn: "::kernel::special_form::fn", + input: "::kernel::special_form::input", + access: "::kernel::special_form::access", + index: "::kernel::special_form::index", + List: "::kernel::type::List", + Dict: "::kernel::type::Dict", ActorGroupEntityUuid: "::graph::types::principal::actor_group::ActorGroupEntityUuid", BaseUrl: "::graph::types::ontology::BaseUrl", Confidence: "::graph::types::knowledge::entity::Confidence", @@ -264,6 +310,50 @@ hashql_macros::define_symbols! { Uuid: "::core::uuid::Uuid", VersionedUrl: "::graph::types::ontology::VersionedUrl", WebId: "::graph::types::principal::actor_group::web::WebId", + core: { + bits: { + and: "::core::bits::and", + or: "::core::bits::or", + xor: "::core::bits::xor", + not: "::core::bits::not", + shl: "::core::bits::shl", + shr: "::core::bits::shr", + }, + bool: { + not: "::core::bool::not", + and: "::core::bool::and", + or: "::core::bool::or", + }, + cmp: { + gt: "::core::cmp::gt", + lt: "::core::cmp::lt", + gte: "::core::cmp::gte", + lte: "::core::cmp::lte", + eq: "::core::cmp::eq", + ne: "::core::cmp::ne", + }, + math: { + add: "::core::math::add", + sub: "::core::math::sub", + mul: "::core::math::mul", + div: "::core::math::div", + rem: "::core::math::rem", + r#mod: "::core::math::mod", + pow: "::core::math::pow", + sqrt: "::core::math::sqrt", + cbrt: "::core::math::cbrt", + root: "::core::math::root", + } + }, + graph: { + entity: { + is_of_type: "::graph::entity::is_of_type", + property: "::graph::entity::property", + }, + tmp: { + decision_time_now: "::graph::tmp::decision_time_now", + } + } // [tidy] sort alphabetically end } } From 0df387dcd4ec7fa6e8ff6472d356846d0a4a659b Mon Sep 17 00:00:00 2001 From: Bilal Mahmoud <7252775+indietyp@users.noreply.github.com> Date: Thu, 11 Jun 2026 18:44:22 +0200 Subject: [PATCH 05/55] fix: compile errors --- .../hashql/ast/src/lower/expander/error.rs | 27 +++++++++---------- .../src/lower/pre_expansion_name_resolver.rs | 3 ++- .../ast/src/lower/type_extractor/translate.rs | 10 +++---- 3 files changed, 20 insertions(+), 20 deletions(-) diff --git a/libs/@local/hashql/ast/src/lower/expander/error.rs b/libs/@local/hashql/ast/src/lower/expander/error.rs index 8ff5234db25..84a31fdbfa4 100644 --- a/libs/@local/hashql/ast/src/lower/expander/error.rs +++ b/libs/@local/hashql/ast/src/lower/expander/error.rs @@ -164,20 +164,19 @@ fn format_absolute_path<'heap>(item: &Item<'heap>, registry: &ModuleRegistry<'he /// Emits one `help` message per did-you-mean candidate, each carrying a `Patch` that replaces /// `name_span` with the suggested name. -fn emit_spelling_suggestions( +fn emit_spelling_suggestions<'heap>( diagnostic: &mut ExpanderDiagnostic, name_span: SpanId, - name: Symbol<'_>, - candidates: impl IntoIterator> + Clone, + name: Symbol<'heap>, + candidates: impl IntoIterator> + Clone, limit: usize, - prefix: &str, + context: &str, ) -> usize { let similar = did_you_mean(name, candidates, Some(limit), None); for candidate in &similar { let patch = Suggestions::patch(Patch::new(name_span, candidate.as_str().to_owned())); - diagnostic - .add_message(Message::help(format!("{prefix} `{candidate}`")).with_suggestions(patch)); + diagnostic.add_message(Message::help(context).with_suggestions(patch)); } similar.len() @@ -369,7 +368,7 @@ fn package_not_found<'heap>( name, suggestions.iter().map(|suggestion| suggestion.name), 5, - "use package", + "a package with a similar name exists", ); if emitted == 0 { @@ -421,7 +420,7 @@ fn module_not_found<'heap>( name, suggestions.iter().map(|suggestion| suggestion.name), 5, - "use module", + "a module with a similar name exists", ); diagnostic.add_message(Message::note( @@ -452,7 +451,7 @@ fn import_not_found<'heap>( name, suggestions.iter().map(|suggestion| suggestion.name), 5, - "use", + "a similar name is available", ); if emitted == 0 { @@ -500,7 +499,7 @@ fn item_not_found<'heap>( name, suggestions.iter().map(|suggestion| suggestion.name), 5, - "use", + "a similar item exists in this module", ); if emitted == 0 { @@ -545,7 +544,7 @@ fn unresolved_variable<'heap>( let mut has_suggestions = false; // ---- tier 1: local bindings ---- - let local_suggestions = did_you_mean(name, locals, Some(5), None); + let local_suggestions = did_you_mean(name, &locals, Some(5), None); if !local_suggestions.is_empty() { has_suggestions = true; @@ -553,7 +552,7 @@ fn unresolved_variable<'heap>( for candidate in &local_suggestions { let patch = Suggestions::patch(Patch::new(name_span, candidate.as_str().to_owned())); diagnostic.add_message( - Message::help(format!("use local `{candidate}`")).with_suggestions(patch), + Message::help("a similar local binding exists").with_suggestions(patch), ); } } @@ -574,7 +573,7 @@ fn unresolved_variable<'heap>( for candidate in &import_matches { let patch = Suggestions::patch(Patch::new(name_span, candidate.as_str().to_owned())); diagnostic.add_message( - Message::help(format!("use imported `{candidate}`")).with_suggestions(patch), + Message::help("a similar imported name exists").with_suggestions(patch), ); } } @@ -600,7 +599,7 @@ fn unresolved_variable<'heap>( let absolute = format_absolute_path(item, registry); let patch = Suggestions::patch(Patch::new(name_span, absolute.clone())); diagnostic.add_message( - Message::help(format!("qualify the name as `{absolute}`")).with_suggestions(patch), + Message::help("this item is available in another module").with_suggestions(patch), ); } diff --git a/libs/@local/hashql/ast/src/lower/pre_expansion_name_resolver.rs b/libs/@local/hashql/ast/src/lower/pre_expansion_name_resolver.rs index ce317f1879c..06ce57e5f7d 100644 --- a/libs/@local/hashql/ast/src/lower/pre_expansion_name_resolver.rs +++ b/libs/@local/hashql/ast/src/lower/pre_expansion_name_resolver.rs @@ -264,8 +264,9 @@ impl<'env, 'heap> PreExpansionNameResolver<'env, 'heap> { // The name is a fully qualified path, that we need to convert into a path let (rooted, path) = path + .as_str() .strip_prefix("::") - .map_or((false, path), |path| (true, path)); + .map_or((false, path.as_str()), |path| (true, path)); let segments = path .split("::") diff --git a/libs/@local/hashql/ast/src/lower/type_extractor/translate.rs b/libs/@local/hashql/ast/src/lower/type_extractor/translate.rs index 7408584bdf7..02b34e355e6 100644 --- a/libs/@local/hashql/ast/src/lower/type_extractor/translate.rs +++ b/libs/@local/hashql/ast/src/lower/type_extractor/translate.rs @@ -404,15 +404,15 @@ where fn intrinsic( &mut self, span: SpanId, - name: &'static str, + name: Symbol<'heap>, parameters: &[PathSegmentArgument<'heap>], ) -> TypeKind<'heap> { - match name { + match name.as_str() { "::kernel::type::List" => { if parameters.len() != 1 { self.diagnostics.push(intrinsic_parameter_count_mismatch( span, - name, + name.as_str(), 1, parameters.len(), )); @@ -432,7 +432,7 @@ where if parameters.len() != 2 { self.diagnostics.push(intrinsic_parameter_count_mismatch( span, - name, + name.as_str(), 2, parameters.len(), )); @@ -458,7 +458,7 @@ where self.diagnostics.push(unknown_intrinsic_type( span, self.env.heap, - name, + name.as_str(), &["::kernel::type::List", "::kernel::type::Dict"], )); From 9612dfb642af9667c9ea46e5096647362a84c502 Mon Sep 17 00:00:00 2001 From: Bilal Mahmoud <7252775+indietyp@users.noreply.github.com> Date: Fri, 12 Jun 2026 09:47:41 +0200 Subject: [PATCH 06/55] feat: diagnostic errors --- libs/@local/hashql/ast/src/lib.rs | 1 + .../hashql/ast/src/lower/expander/error.rs | 226 +++++++++--------- libs/@local/hashql/core/src/symbol/mod.rs | 23 +- .../diagnostics/src/diagnostic/suggestion.rs | 32 +++ 4 files changed, 167 insertions(+), 115 deletions(-) diff --git a/libs/@local/hashql/ast/src/lib.rs b/libs/@local/hashql/ast/src/lib.rs index 683fc00e538..238ff13d822 100644 --- a/libs/@local/hashql/ast/src/lib.rs +++ b/libs/@local/hashql/ast/src/lib.rs @@ -50,6 +50,7 @@ // Language Features coverage_attribute, macro_metavar_expr_concat, + default_field_values, // Library Features allocator_api, diff --git a/libs/@local/hashql/ast/src/lower/expander/error.rs b/libs/@local/hashql/ast/src/lower/expander/error.rs index 84a31fdbfa4..f3caec1e9ad 100644 --- a/libs/@local/hashql/ast/src/lower/expander/error.rs +++ b/libs/@local/hashql/ast/src/lower/expander/error.rs @@ -11,7 +11,7 @@ use hashql_core::{ item::Item, namespace::ModuleNamespace, }, - span::SpanId, + span::{SpanId, Spanned}, symbol::Symbol, }; use hashql_diagnostics::{ @@ -162,24 +162,43 @@ fn format_absolute_path<'heap>(item: &Item<'heap>, registry: &ModuleRegistry<'he iter::once("").chain(path).intersperse("::").collect() } -/// Emits one `help` message per did-you-mean candidate, each carrying a `Patch` that replaces -/// `name_span` with the suggested name. -fn emit_spelling_suggestions<'heap>( - diagnostic: &mut ExpanderDiagnostic, - name_span: SpanId, - name: Symbol<'heap>, - candidates: impl IntoIterator> + Clone, - limit: usize, - context: &str, -) -> usize { - let similar = did_you_mean(name, candidates, Some(limit), None); - - for candidate in &similar { - let patch = Suggestions::patch(Patch::new(name_span, candidate.as_str().to_owned())); - diagnostic.add_message(Message::help(context).with_suggestions(patch)); - } +pub struct SpellingSuggestions<'heap, I> { + name: Spanned>, + candidates: I, + context: &'static str, - similar.len() + top_n: usize = 5, + cutoff: Option = None, +} + +impl<'heap, I> SpellingSuggestions<'heap, I> { + fn emit(self, diagnostic: &mut ExpanderDiagnostic) -> Vec> + where + I: IntoIterator> + Clone, + { + let similar = did_you_mean( + self.name.value, + self.candidates, + Some(self.top_n), + self.cutoff, + ); + + let len = similar.len(); + + let patches: Vec<_> = similar + .iter() + .copied() + .map(|candidate| Patch::new(self.name.span, candidate.as_str().to_owned())) + .collect(); + + let Some(suggestions) = Suggestions::try_from_iter(patches) else { + debug_assert_eq!(len, 0); + return similar; + }; + + diagnostic.add_message(Message::help(self.context).with_suggestions(suggestions)); + similar + } } pub(crate) fn empty_path(span: SpanId) -> ExpanderDiagnostic { @@ -362,16 +381,15 @@ fn package_not_found<'heap>( diagnostic.add_label(Label::new(path.span, "in this path")); - let emitted = emit_spelling_suggestions( - &mut diagnostic, - segment.name.span, - name, - suggestions.iter().map(|suggestion| suggestion.name), - 5, - "a package with a similar name exists", - ); + let emitted = SpellingSuggestions { + name: segment.name.symbol(), + candidates: suggestions.iter().map(|suggestion| suggestion.name), + context: "a package with a similar name exists", + .. + } + .emit(&mut diagnostic); - if emitted == 0 { + if emitted.is_empty() { diagnostic.add_message(Message::help( "check the package name, or add it to the project dependencies", )); @@ -414,14 +432,13 @@ fn module_not_found<'heap>( )); } - emit_spelling_suggestions( - &mut diagnostic, - segment.name.span, - name, - suggestions.iter().map(|suggestion| suggestion.name), - 5, - "a module with a similar name exists", - ); + SpellingSuggestions { + name: segment.name.symbol(), + candidates: suggestions.iter().map(|suggestion| suggestion.name), + context: "a module with a similar name exists", + .. + } + .emit(&mut diagnostic); diagnostic.add_message(Message::note( "only exported sub-modules are reachable via `::`", @@ -445,16 +462,15 @@ fn import_not_found<'heap>( diagnostic.add_label(Label::new(path.span, "in this path")); - let emitted = emit_spelling_suggestions( - &mut diagnostic, - segment.name.span, - name, - suggestions.iter().map(|suggestion| suggestion.name), - 5, - "a similar name is available", - ); + let emitted = SpellingSuggestions { + name: segment.name.symbol(), + candidates: suggestions.iter().map(|suggestion| suggestion.name), + context: "a similar name is available", + .. + } + .emit(&mut diagnostic); - if emitted == 0 { + if emitted.is_empty() { diagnostic.add_message(Message::help( "import the name with a `use` statement, or qualify it with a full path", )); @@ -493,16 +509,15 @@ fn item_not_found<'heap>( )); } - let emitted = emit_spelling_suggestions( - &mut diagnostic, - segment.name.span, - name, - suggestions.iter().map(|suggestion| suggestion.name), - 5, - "a similar item exists in this module", - ); + let emitted = SpellingSuggestions { + name: segment.name.symbol(), + candidates: suggestions.iter().map(|suggestion| suggestion.name), + context: "a similar item exists in this module", + .. + } + .emit(&mut diagnostic); - if emitted == 0 { + if emitted.is_empty() { diagnostic.add_message(Message::help( "check the spelling and ensure the item is exported", )); @@ -544,79 +559,62 @@ fn unresolved_variable<'heap>( let mut has_suggestions = false; // ---- tier 1: local bindings ---- - let local_suggestions = did_you_mean(name, &locals, Some(5), None); - - if !local_suggestions.is_empty() { - has_suggestions = true; - - for candidate in &local_suggestions { - let patch = Suggestions::patch(Patch::new(name_span, candidate.as_str().to_owned())); - diagnostic.add_message( - Message::help("a similar local binding exists").with_suggestions(patch), - ); - } + let emitted = SpellingSuggestions { + name: Spanned { + span: name_span, + value: name, + }, + candidates: locals.iter().copied(), + context: "a similar local binding exists", + .. } + .emit(&mut diagnostic); + has_suggestions |= !emitted.is_empty(); // ---- tier 2: already-imported names ---- - // Filter out names that are also local bindings to avoid duplicate suggestions. - let import_names: Vec<_> = import_suggestions - .iter() - .map(|suggestion| suggestion.name) - .filter(|suggestion_name| !locals.contains(suggestion_name)) - .collect(); - - let import_matches = did_you_mean(name, &import_names, Some(5), None); - - if !import_matches.is_empty() { - has_suggestions = true; - - for candidate in &import_matches { - let patch = Suggestions::patch(Patch::new(name_span, candidate.as_str().to_owned())); - diagnostic.add_message( - Message::help("a similar imported name exists").with_suggestions(patch), - ); - } + let emitted = SpellingSuggestions { + name: Spanned { + span: name_span, + value: name, + }, + candidates: import_suggestions.iter().map(|suggestion| suggestion.name), + context: "a similar imported name exists", + .. } + .emit(&mut diagnostic); + has_suggestions |= !emitted.is_empty(); // ---- tier 3: items available elsewhere in the registry ---- - // Filter out names already covered by local or import suggestions. - let covered: FastHashSet<_> = local_suggestions - .iter() - .chain(&import_matches) - .copied() - .collect(); - let importable: Vec<_> = registry .search_by_name(name, universe) .into_iter() - .filter(|item| !covered.contains(&item.name)) .collect(); - if !importable.is_empty() { - has_suggestions = true; - - for item in importable.iter().take(5) { - let absolute = format_absolute_path(item, registry); - let patch = Suggestions::patch(Patch::new(name_span, absolute.clone())); - diagnostic.add_message( - Message::help("this item is available in another module").with_suggestions(patch), - ); - } + if let Some(suggestions) = Suggestions::try_from_iter( + importable + .iter() + .take(5) + .map(|item| Patch::new(name_span, format_absolute_path(item, registry))), + ) { + diagnostic.add_message( + Message::help("this item is available in another module").with_suggestions(suggestions), + ); + } + if let Some(first) = importable.first() { // Show how to import instead (text-only, no insertion span available) - if let Some(first) = importable.first() { - let absolute = format_absolute_path(first, registry); - diagnostic.add_message(Message::note(format!( - "alternatively, bring it into scope: `use {absolute} in`", - ))); - } + let absolute = format_absolute_path(first, registry); + diagnostic.add_message(Message::note(format!( + "alternatively, bring it into scope: `use {absolute} in`", + ))); + } - let remaining = importable.len().saturating_sub(5); - if remaining > 0 { - diagnostic.add_message(Message::note(format!( - "{remaining} more items with this name exist in other modules", - ))); - } + let remaining = importable.len().saturating_sub(5); + if remaining > 0 { + diagnostic.add_message(Message::note(format!( + "{remaining} more items with this name exist in other modules", + ))); + has_suggestions = true; } if !has_suggestions { @@ -626,8 +624,8 @@ fn unresolved_variable<'heap>( } diagnostic.add_message(Message::note( - "unqualified names resolve against local bindings first, then imported names; names from \ - other modules must be imported or fully qualified", + "this could be a typo, a name used outside its scope, or a missing declaration; if it is \ + a function or type from another module, you may need to import it first", )); diagnostic diff --git a/libs/@local/hashql/core/src/symbol/mod.rs b/libs/@local/hashql/core/src/symbol/mod.rs index 7ab38ad8f0d..15a53b1da66 100644 --- a/libs/@local/hashql/core/src/symbol/mod.rs +++ b/libs/@local/hashql/core/src/symbol/mod.rs @@ -45,7 +45,7 @@ use core::{ pub use self::lookup::SymbolLookup; use self::repr::{ConstantRepr, Repr}; pub(crate) use self::table::SymbolTable; -use crate::span::SpanId; +use crate::span::{SpanId, Spanned}; /// A predefined symbol that can be used in pattern matching. /// @@ -458,6 +458,27 @@ impl<'heap> Ident<'heap> { kind: IdentKind::Lexical, } } + + /// Drops the [`IdentKind`], keeping only the symbol and its span. + /// + /// # Examples + /// + /// ``` + /// # use hashql_core::symbol::{Ident, sym}; + /// # use hashql_core::span::SpanId; + /// let ident = Ident::synthetic(sym::foo); + /// let spanned = ident.symbol(); + /// + /// assert_eq!(spanned.span, SpanId::SYNTHETIC); + /// assert_eq!(spanned.value, sym::foo); + /// ``` + #[must_use] + pub const fn symbol(self) -> Spanned> { + Spanned { + span: self.span, + value: self.value, + } + } } impl AsRef for Ident<'_> { diff --git a/libs/@local/hashql/diagnostics/src/diagnostic/suggestion.rs b/libs/@local/hashql/diagnostics/src/diagnostic/suggestion.rs index c9d04101780..8000f284693 100644 --- a/libs/@local/hashql/diagnostics/src/diagnostic/suggestion.rs +++ b/libs/@local/hashql/diagnostics/src/diagnostic/suggestion.rs @@ -168,6 +168,38 @@ impl Suggestions { } } + /// Collects patches from an iterator, returning [`None`] if the iterator is empty. + /// + /// Fallible counterpart to [`Suggestions::patch`] for dynamically computed patch sets. + /// + /// # Examples + /// + /// ``` + /// use hashql_diagnostics::{Patch, Suggestions}; + /// + /// // Non-empty iterator produces Some + /// let suggestions = Suggestions::try_from_iter([Patch::new(10..15, "corrected")]); + /// assert!(suggestions.is_some()); + /// + /// // Empty iterator produces None + /// let empty: Option> = Suggestions::try_from_iter(std::iter::empty()); + /// assert!(empty.is_none()); + /// ``` + pub fn try_from_iter(iter: I) -> Option + where + I: IntoIterator>, + { + let patches: Vec<_> = iter.into_iter().collect(); + if patches.is_empty() { + return None; + } + + Some(Self { + patches, + trailer: None, + }) + } + /// Adds an additional patch to this suggestions collection. /// /// # Examples From 6c03972d60b8804ac6e8f892c94edb9f73d74220 Mon Sep 17 00:00:00 2001 From: Bilal Mahmoud <7252775+indietyp@users.noreply.github.com> Date: Fri, 12 Jun 2026 10:07:49 +0200 Subject: [PATCH 07/55] feat: diagnostic --- .../hashql/ast/src/lower/expander/error.rs | 86 +++++++++------- .../hashql/ast/src/lower/expander/mod.rs | 98 ++++++++++--------- libs/@local/hashql/core/src/symbol/sym.rs | 22 ++--- 3 files changed, 115 insertions(+), 91 deletions(-) diff --git a/libs/@local/hashql/ast/src/lower/expander/error.rs b/libs/@local/hashql/ast/src/lower/expander/error.rs index f3caec1e9ad..6d921b704ad 100644 --- a/libs/@local/hashql/ast/src/lower/expander/error.rs +++ b/libs/@local/hashql/ast/src/lower/expander/error.rs @@ -1,9 +1,8 @@ use alloc::borrow::Cow; -use core::fmt::{self, Display, Write as _}; +use core::fmt::{self, Display}; use hashql_core::{ algorithms::did_you_mean, - collections::FastHashSet, module::{ ModuleId, ModuleRegistry, Universe, error::{ResolutionError, ResolutionSuggestion}, @@ -82,6 +81,11 @@ const EMPTY_MODULE: TerminalDiagnosticCategory = TerminalDiagnosticCategory { name: "Empty module", }; +const INVALID_QUERY_LENGTH: TerminalDiagnosticCategory = TerminalDiagnosticCategory { + id: "invalid-query-length", + name: "Invalid query length", +}; + #[derive(Debug, Copy, Clone, PartialEq, Eq, Hash)] pub enum ExpanderDiagnosticCategory { EmptyPath, @@ -95,6 +99,7 @@ pub enum ExpanderDiagnosticCategory { ModuleRequired, AmbiguousName, EmptyModule, + InvalidQueryLength, } impl DiagnosticCategory for ExpanderDiagnosticCategory { @@ -119,6 +124,7 @@ impl DiagnosticCategory for ExpanderDiagnosticCategory { Self::ModuleRequired => Some(&MODULE_REQUIRED), Self::AmbiguousName => Some(&AMBIGUOUS_NAME), Self::EmptyModule => Some(&EMPTY_MODULE), + Self::InvalidQueryLength => Some(&INVALID_QUERY_LENGTH), } } } @@ -136,10 +142,9 @@ impl Display for FormatUserPath<'_, '_> { fmt.write_str("::")?; } - let segments = match self.up_to { - Some(depth) => &self.segments[..=depth], - None => self.segments, - }; + let segments = self + .up_to + .map_or(self.segments, |depth| &self.segments[..=depth]); for (index, segment) in segments.iter().enumerate() { if index > 0 { @@ -236,15 +241,12 @@ pub(crate) fn absolute_path_mismatch( pub(crate) fn generic_arguments_in_module( module_segments: &[PathSegment<'_>], - path_span: SpanId, -) -> ExpanderDiagnostic { +) -> Option { let mut arguments = module_segments .iter() .flat_map(|segment| &segment.arguments); - let primary_span = arguments - .next() - .map_or(path_span, PathSegmentArgument::span); + let primary_span = arguments.next().map(PathSegmentArgument::span)?; let mut diagnostic = Diagnostic::new( ExpanderDiagnosticCategory::GenericArgumentsInModule, @@ -267,7 +269,7 @@ pub(crate) fn generic_arguments_in_module( "modules are not generic; only the final item in a path can be parameterized", )); - diagnostic + Some(diagnostic) } /// Converts a `ResolutionError` into an expander diagnostic. @@ -312,9 +314,11 @@ pub(crate) fn from_resolution_error<'heap>( } fn invalid_query_length(path: &Path<'_>, expected: usize) -> ExpanderDiagnostic { - let mut diagnostic = - Diagnostic::new(ExpanderDiagnosticCategory::ImportNotFound, Severity::Error) - .primary(Label::new(path.span, "path is too short to resolve")); + let mut diagnostic = Diagnostic::new( + ExpanderDiagnosticCategory::InvalidQueryLength, + Severity::Error, + ) + .primary(Label::new(path.span, "path is too short to resolve")); diagnostic.add_message(Message::help(format!( "provide a path with at least {expected} segments, for example `module::item`", @@ -331,19 +335,15 @@ fn module_required(path: &Path<'_>, depth: usize, found: Option) -> Ex up_to: Some(depth), }; - let kind_description = match found { - Some(Universe::Value) => "a value", - Some(Universe::Type) => "a type", - None => "not a module", + let primary_message = match found { + Some(Universe::Value) => format!("`{user_path}` is a value, not a module"), + Some(Universe::Type) => format!("`{user_path}` is a type, not a module"), + None => format!("`{user_path}` is not a module"), }; let mut diagnostic = - Diagnostic::new(ExpanderDiagnosticCategory::ModuleRequired, Severity::Error).primary( - Label::new( - segment.name.span, - format!("`{user_path}` is {kind_description}, not a module"), - ), - ); + Diagnostic::new(ExpanderDiagnosticCategory::ModuleRequired, Severity::Error) + .primary(Label::new(segment.name.span, primary_message)); if depth + 1 < path.segments.len() { diagnostic.add_label(Label::new( @@ -432,7 +432,7 @@ fn module_not_found<'heap>( )); } - SpellingSuggestions { + let emitted = SpellingSuggestions { name: segment.name.symbol(), candidates: suggestions.iter().map(|suggestion| suggestion.name), context: "a module with a similar name exists", @@ -440,6 +440,12 @@ fn module_not_found<'heap>( } .emit(&mut diagnostic); + if emitted.is_empty() { + diagnostic.add_message(Message::help( + "check the module name and ensure it is exported from its parent", + )); + } + diagnostic.add_message(Message::note( "only exported sub-modules are reachable via `::`", )); @@ -558,7 +564,7 @@ fn unresolved_variable<'heap>( let mut has_suggestions = false; - // ---- tier 1: local bindings ---- + // Suggest similar local bindings. let emitted = SpellingSuggestions { name: Spanned { span: name_span, @@ -571,20 +577,26 @@ fn unresolved_variable<'heap>( .emit(&mut diagnostic); has_suggestions |= !emitted.is_empty(); - // ---- tier 2: already-imported names ---- + // Suggest similar imported names, excluding those already covered by locals. + let import_candidates: Vec<_> = import_suggestions + .iter() + .map(|suggestion| suggestion.name) + .filter(|suggestion_name| !locals.contains(suggestion_name)) + .collect(); + let emitted = SpellingSuggestions { name: Spanned { span: name_span, value: name, }, - candidates: import_suggestions.iter().map(|suggestion| suggestion.name), + candidates: import_candidates.iter().copied(), context: "a similar imported name exists", .. } .emit(&mut diagnostic); has_suggestions |= !emitted.is_empty(); - // ---- tier 3: items available elsewhere in the registry ---- + // Suggest fully qualified paths for items available elsewhere in the registry. let importable: Vec<_> = registry .search_by_name(name, universe) .into_iter() @@ -596,17 +608,20 @@ fn unresolved_variable<'heap>( .take(5) .map(|item| Patch::new(name_span, format_absolute_path(item, registry))), ) { + has_suggestions = true; diagnostic.add_message( - Message::help("this item is available in another module").with_suggestions(suggestions), + Message::help("use one of these fully qualified paths").with_suggestions(suggestions), ); } if let Some(first) = importable.first() { - // Show how to import instead (text-only, no insertion span available) let absolute = format_absolute_path(first, registry); - diagnostic.add_message(Message::note(format!( - "alternatively, bring it into scope: `use {absolute} in`", - ))); + let example = if importable.len() > 1 { + format!("for example, bring it into scope: `use {absolute} in`") + } else { + format!("bring it into scope: `use {absolute} in`") + }; + diagnostic.add_message(Message::help(example)); } let remaining = importable.len().saturating_sub(5); @@ -614,7 +629,6 @@ fn unresolved_variable<'heap>( diagnostic.add_message(Message::note(format!( "{remaining} more items with this name exist in other modules", ))); - has_suggestions = true; } if !has_suggestions { diff --git a/libs/@local/hashql/ast/src/lower/expander/mod.rs b/libs/@local/hashql/ast/src/lower/expander/mod.rs index 504b1b74cb0..5c8593057e5 100644 --- a/libs/@local/hashql/ast/src/lower/expander/mod.rs +++ b/libs/@local/hashql/ast/src/lower/expander/mod.rs @@ -4,10 +4,9 @@ use hashql_core::{ heap, module::{ self, Reference, Universe, - error::ResolutionError, + item::{IntrinsicItem, Item}, namespace::{ModuleNamespace, ResolutionMode, ResolveOptions}, }, - span::SpanId, symbol::{Ident, sym}, }; @@ -47,25 +46,14 @@ impl<'heap> Visitor<'heap> for Expander<'_, 'heap> { visit::walk_path(self, path); let [modules @ .., _] = &*path.segments else { - todo!("BUG diagnostic: empty path, should never happen"); + self.diagnostics.push(error::empty_path(path.span)); self.trampoline = Some(node::expr::Expr::dummy()); return; }; // We don't support generics except for the *last* segment - let mut should_continue = true; - for module in modules { - if !module.arguments.is_empty() { - todo!( - "ERROR: generic arguments in module path, not supported (yet) – module items \ - with self don't exist yet" - ); - - should_continue = false; - } - } - - if !should_continue { + if let Some(diagnostic) = error::generic_arguments_in_module(modules) { + self.diagnostics.push(diagnostic); self.trampoline = Some(node::expr::Expr::dummy()); return; } @@ -85,7 +73,14 @@ impl<'heap> Visitor<'heap> for Expander<'_, 'heap> { let reference = match reference { Ok(reference) => reference, Err(error) => { - todo!("ERROR: convert from resolution error") + self.diagnostics.push(error::from_resolution_error( + path, + &self.namespace, + self.current_universe, + error, + )); + self.trampoline = Some(node::expr::Expr::dummy()); + return; } }; @@ -106,7 +101,12 @@ impl<'heap> Visitor<'heap> for Expander<'_, 'heap> { let absolute_path = item.absolute_path_rev(self.namespace.registry()); if absolute_path.len() < path.segments.len() { - todo!("BUG diagnostic: absolute path shorter than path segments"); + self.diagnostics.push(error::absolute_path_mismatch( + path.span, + path.segments.len(), + absolute_path.len(), + )); + self.trampoline = Some(node::expr::Expr::dummy()); return; } @@ -130,42 +130,52 @@ impl<'heap> Visitor<'heap> for Expander<'_, 'heap> { )); path.segments.rotate_right(padding); - for (segment, name) in path - .segments - .iter_mut() - .rev() - .zip(absolute_path.into_iter()) - { + for (segment, name) in path.segments.iter_mut().rev().zip(absolute_path) { segment.name.value = name; } path.rooted = true; } - fn visit_call_expr( - &mut self, - node::expr::CallExpr { - id, - span, - function, - arguments, - labeled_arguments, - }: &mut node::expr::CallExpr<'heap>, - ) { + fn visit_call_expr(&mut self, expr: &mut node::expr::CallExpr<'heap>) { let prev_current_item = self.current_item.take(); - self.visit_expr(function); - - if let Some(item) = self.current_item { - match item.kind { - module::item::ItemKind::Module(module_id) => todo!(), - module::item::ItemKind::Type(type_def) => todo!(), - module::item::ItemKind::Constructor(_) => { - // this stays a call expression, and is resolved later to a dedicated node. - } - module::item::ItemKind::Intrinsic(intrinsic_item) => todo!(), + self.visit_expr(&mut expr.function); + + // TODO: what happens on let-rebinding? + + if let Some(Item { + kind: module::item::ItemKind::Intrinsic(IntrinsicItem::Value(value)), + .. + }) = self.current_item + && let Some(constant) = value.name.as_constant() + { + match constant { + sym::path::r#if::CONST => {} + sym::path::r#as::CONST => {} + sym::path::r#let::CONST => {} + sym::path::r#type::CONST => {} + sym::path::newtype::CONST => {} + sym::path::r#use::CONST => {} + sym::path::r#fn::CONST => {} + sym::path::input::CONST => {} + sym::path::index::CONST => {} + sym::path::access::CONST => {} + _ => {} } } self.current_item = prev_current_item; + + // We haven't encountered a special-form, meaning that we can treat this as a regular call + // expression + visit::walk_call_expr(self, expr); + } + + fn visit_expr(&mut self, expr: &mut node::expr::Expr<'heap>) { + visit::walk_expr(self, expr); + + if let Some(trampoline) = self.trampoline.take() { + *expr = trampoline; + } } } diff --git a/libs/@local/hashql/core/src/symbol/sym.rs b/libs/@local/hashql/core/src/symbol/sym.rs index e955cd07db0..e033fdca4a2 100644 --- a/libs/@local/hashql/core/src/symbol/sym.rs +++ b/libs/@local/hashql/core/src/symbol/sym.rs @@ -255,22 +255,12 @@ hashql_macros::define_symbols! { path: { // [tidy] sort alphabetically start - r#if: "::kernel::special_form::if", - r#as: "::kernel::special_form::as", - r#let: "::kernel::special_form::let", - r#type: "::kernel::special_form::type", - newtype: "::kernel::special_form::newtype", - r#use: "::kernel::special_form::use", - r#fn: "::kernel::special_form::fn", - input: "::kernel::special_form::input", access: "::kernel::special_form::access", - index: "::kernel::special_form::index", - List: "::kernel::type::List", - Dict: "::kernel::type::Dict", ActorGroupEntityUuid: "::graph::types::principal::actor_group::ActorGroupEntityUuid", BaseUrl: "::graph::types::ontology::BaseUrl", Confidence: "::graph::types::knowledge::entity::Confidence", DecisionTime: "::graph::temporal::DecisionTime", + Dict: "::kernel::type::Dict", DraftId: "::graph::types::knowledge::entity::DraftId", Entity: "::graph::types::knowledge::entity::Entity", EntityEditionId: "::graph::types::knowledge::entity::EntityEditionId", @@ -285,11 +275,15 @@ hashql_macros::define_symbols! { graph_head_entities: "::graph::head::entities", graph_tail_collect: "::graph::tail::collect", InclusiveTemporalBound: "::graph::temporal::InclusiveTemporalBound", + index: "::kernel::special_form::index", InferredEntityProvenance: "::graph::types::knowledge::entity::InferredEntityProvenance", + input: "::kernel::special_form::input", Interval: "::graph::temporal::Interval", LeftClosedTemporalInterval: "::graph::temporal::LeftClosedTemporalInterval", LinkData: "::graph::types::knowledge::entity::LinkData", + List: "::kernel::type::List", main: "::main", + newtype: "::kernel::special_form::newtype", None: "::core::option::None", OntologyTypeVersion: "::graph::ontology::OntologyTypeVersion", OpenTemporalBound: "::graph::temporal::OpenTemporalBound", @@ -298,6 +292,12 @@ hashql_macros::define_symbols! { PinnedTransactionTimeTemporalAxes: "::graph::temporal::PinnedTransactionTimeTemporalAxes", PropertyObjectMetadata: "::graph::types::knowledge::entity::PropertyObjectMetadata", PropertyProvenance: "::graph::types::knowledge::entity::PropertyProvenance", + r#as: "::kernel::special_form::as", + r#fn: "::kernel::special_form::fn", + r#if: "::kernel::special_form::if", + r#let: "::kernel::special_form::let", + r#type: "::kernel::special_form::type", + r#use: "::kernel::special_form::use", RecordId: "::graph::types::knowledge::entity::RecordId", RightBoundedTemporalInterval: "::graph::temporal::RightBoundedTemporalInterval", Some: "::core::option::Some", From ab3f078a45eeb08d2b954e14cf41d84b4867afec Mon Sep 17 00:00:00 2001 From: Bilal Mahmoud <7252775+indietyp@users.noreply.github.com> Date: Fri, 12 Jun 2026 10:55:41 +0200 Subject: [PATCH 08/55] feat: port let bindings (WIP) --- .../hashql/ast/src/lower/expander/error.rs | 2 +- .../hashql/ast/src/lower/expander/let.rs | 92 +++++++++++++++++++ .../hashql/ast/src/lower/expander/mod.rs | 56 ++++++++--- .../hashql/core/src/module/namespace.rs | 7 ++ 4 files changed, 143 insertions(+), 14 deletions(-) create mode 100644 libs/@local/hashql/ast/src/lower/expander/let.rs diff --git a/libs/@local/hashql/ast/src/lower/expander/error.rs b/libs/@local/hashql/ast/src/lower/expander/error.rs index 6d921b704ad..dd9ea46e10d 100644 --- a/libs/@local/hashql/ast/src/lower/expander/error.rs +++ b/libs/@local/hashql/ast/src/lower/expander/error.rs @@ -167,7 +167,7 @@ fn format_absolute_path<'heap>(item: &Item<'heap>, registry: &ModuleRegistry<'he iter::once("").chain(path).intersperse("::").collect() } -pub struct SpellingSuggestions<'heap, I> { +struct SpellingSuggestions<'heap, I> { name: Spanned>, candidates: I, context: &'static str, diff --git a/libs/@local/hashql/ast/src/lower/expander/let.rs b/libs/@local/hashql/ast/src/lower/expander/let.rs new file mode 100644 index 00000000000..3fb48fec1c4 --- /dev/null +++ b/libs/@local/hashql/ast/src/lower/expander/let.rs @@ -0,0 +1,92 @@ +use core::mem; + +use hashql_core::{span::SpanId, symbol::Ident}; + +use super::{Expander, error::ExpanderDiagnosticIssues}; +use crate::{ + node::{ + expr::{CallExpr, Expr, ExprKind, LetExpr, call::Argument}, + id::NodeId, + }, + visit::Visitor, +}; + +fn argument_to_ident<'heap>(argument: &Argument<'heap>) -> Option> { + if let ExprKind::Path(path) = &argument.value.kind + && let Some(&ident) = path.as_ident() + { + Some(ident) + } else { + None + } +} + +fn lower_let_3<'heap>( + span: SpanId, + expander: &mut Expander<'_, 'heap>, + + name: &Argument<'heap>, + mut value: Argument<'heap>, + mut body: Argument<'heap>, +) -> Expr<'heap> { + let Some(name) = argument_to_ident(&name) else { + todo!("ERROR: name must be an ident"); + return Expr::dummy(); + }; + + // TODO: we must make sure that the scoping here works out, the problem is that `visit_expr` + // bails out early. + let item = expander.visit(&mut value.value); + + expander.enter( + hashql_core::module::Universe::Value, + name.value, + item, + |expander| { + expander.visit(&mut body.value); + }, + ); + + Expr { + id: NodeId::PLACEHOLDER, + span, + kind: ExprKind::Let(LetExpr { + id: NodeId::PLACEHOLDER, + span, + name, + value: value.value, + r#type: None, + body: body.value, + }), + } +} + +pub(super) fn lower_let<'env, 'heap>( + expander: &mut Expander<'env, 'heap>, + CallExpr { + id: _, + span, + function: _, + arguments, + labeled_arguments, + }: &mut CallExpr<'heap>, +) -> Expr<'heap> { + if !labeled_arguments.is_empty() { + todo!("ERROR: labelled arguments are not supported") + // we continue after diagnostic issue + } + + match &mut **arguments { + [name, value, body] => { + todo!() + } + [name, r#type, value, body] => { + todo!() + } + _ => { + todo!("ERROR: issue diagnostic"); + + Expr::dummy() + } + } +} diff --git a/libs/@local/hashql/ast/src/lower/expander/mod.rs b/libs/@local/hashql/ast/src/lower/expander/mod.rs index 5c8593057e5..b82baaec18c 100644 --- a/libs/@local/hashql/ast/src/lower/expander/mod.rs +++ b/libs/@local/hashql/ast/src/lower/expander/mod.rs @@ -1,4 +1,5 @@ mod error; +mod r#let; use hashql_core::{ heap, @@ -7,7 +8,7 @@ use hashql_core::{ item::{IntrinsicItem, Item}, namespace::{ModuleNamespace, ResolutionMode, ResolveOptions}, }, - symbol::{Ident, sym}, + symbol::{Ident, Symbol, sym}, }; use self::error::ExpanderDiagnosticIssues; @@ -24,10 +25,48 @@ pub struct Expander<'env, 'heap> { namespace: ModuleNamespace<'env, 'heap>, current_universe: Universe, diagnostics: ExpanderDiagnosticIssues, + current_item: Option>, trampoline: Option>, } +impl<'env, 'heap> Expander<'env, 'heap> { + fn visit(&mut self, expr: &mut node::expr::Expr<'heap>) -> Option> { + let prev_current_item = self.current_item.take(); + visit::walk_expr(self, expr); + + if let Some(trampoline) = self.trampoline.take() { + *expr = trampoline; + } + + let current_item = self.current_item.take(); + self.current_item = prev_current_item; + + current_item + } + + fn enter( + &mut self, + universe: Universe, + symbol: Symbol<'heap>, + item: Option>, + closure: impl FnOnce(&mut Self) -> T, + ) -> T { + let snapshot = self.namespace.snapshot(); + if let Some(item) = item { + self.namespace.alias(symbol, item); + } else { + self.namespace.local(symbol, universe); + } + + let result = closure(self); + + self.namespace.rollback_to(snapshot); + + result + } +} + impl<'env, 'heap> Expander<'env, 'heap> { pub const fn new(namespace: ModuleNamespace<'env, 'heap>) -> Self { Self { @@ -138,15 +177,12 @@ impl<'heap> Visitor<'heap> for Expander<'_, 'heap> { } fn visit_call_expr(&mut self, expr: &mut node::expr::CallExpr<'heap>) { - let prev_current_item = self.current_item.take(); - self.visit_expr(&mut expr.function); - - // TODO: what happens on let-rebinding? + let item = self.visit(&mut expr.function); if let Some(Item { kind: module::item::ItemKind::Intrinsic(IntrinsicItem::Value(value)), .. - }) = self.current_item + }) = item && let Some(constant) = value.name.as_constant() { match constant { @@ -164,18 +200,12 @@ impl<'heap> Visitor<'heap> for Expander<'_, 'heap> { } } - self.current_item = prev_current_item; - // We haven't encountered a special-form, meaning that we can treat this as a regular call // expression visit::walk_call_expr(self, expr); } fn visit_expr(&mut self, expr: &mut node::expr::Expr<'heap>) { - visit::walk_expr(self, expr); - - if let Some(trampoline) = self.trampoline.take() { - *expr = trampoline; - } + self.visit(expr); } } diff --git a/libs/@local/hashql/core/src/module/namespace.rs b/libs/@local/hashql/core/src/module/namespace.rs index 330901db79f..5a45b4513b4 100644 --- a/libs/@local/hashql/core/src/module/namespace.rs +++ b/libs/@local/hashql/core/src/module/namespace.rs @@ -174,6 +174,13 @@ impl<'env, 'heap> ModuleNamespace<'env, 'heap> { }); } + pub fn alias(&mut self, name: Symbol<'heap>, item: Item<'heap>) { + self.imports.push(Import { + name, + item: ImportReference::Item(item), + }); + } + /// Return all the locals that have been registered so far. #[must_use] pub fn locals(&self, universe: Universe) -> FastHashSet> { From 323c7256d652bae9c0e26a5b7e3c42523c9d61cd Mon Sep 17 00:00:00 2001 From: Bilal Mahmoud <7252775+indietyp@users.noreply.github.com> Date: Fri, 12 Jun 2026 11:53:57 +0200 Subject: [PATCH 09/55] feat: port let bindings --- libs/@local/hashql/ast/src/lower/error.rs | 6 +- .../hashql/ast/src/lower/expander/let.rs | 28 +-- .../hashql/ast/src/lower/expander/mod.rs | 3 + libs/@local/hashql/ast/src/lower/mod.rs | 18 +- libs/@local/hashql/ast/src/node/expr/call.rs | 2 +- .../hashql/core/src/module/namespace.rs | 179 ++++++++++++++++++ libs/@local/hashql/hir/src/lower/checking.rs | 4 +- libs/@local/hashql/hir/src/lower/inference.rs | 7 +- .../hir/src/lower/specialization/error.rs | 13 +- .../hir/src/lower/specialization/mod.rs | 74 +++++--- libs/@local/hashql/hir/src/reify/mod.rs | 2 +- .../syntax-jexpr/src/parser/array/mod.rs | 41 ++-- 12 files changed, 290 insertions(+), 87 deletions(-) diff --git a/libs/@local/hashql/ast/src/lower/error.rs b/libs/@local/hashql/ast/src/lower/error.rs index 9da864c28f8..ca082629c8b 100644 --- a/libs/@local/hashql/ast/src/lower/error.rs +++ b/libs/@local/hashql/ast/src/lower/error.rs @@ -6,7 +6,7 @@ use hashql_diagnostics::{Diagnostic, category::DiagnosticCategory}; use super::{ import_resolver::error::ImportResolverDiagnosticCategory, sanitizer::SanitizerDiagnosticCategory, - special_form_expander::error::SpecialFormExpanderDiagnosticCategory, + // special_form_expander::error::SpecialFormExpanderDiagnosticCategory, type_extractor::error::TypeExtractorDiagnosticCategory, }; @@ -14,7 +14,7 @@ pub type LoweringDiagnostic = Diagnostic; #[derive(Debug, Copy, Clone, PartialEq, Eq, Hash)] pub enum LoweringDiagnosticCategory { - Expander(SpecialFormExpanderDiagnosticCategory), + // Expander(SpecialFormExpanderDiagnosticCategory), Sanitizer(SanitizerDiagnosticCategory), Resolver(ImportResolverDiagnosticCategory), Extractor(TypeExtractorDiagnosticCategory), @@ -31,7 +31,7 @@ impl DiagnosticCategory for LoweringDiagnosticCategory { fn subcategory(&self) -> Option<&dyn DiagnosticCategory> { match self { - Self::Expander(special_form) => Some(special_form), + // Self::Expander(special_form) => Some(special_form), Self::Sanitizer(sanitizer) => Some(sanitizer), Self::Resolver(resolver) => Some(resolver), Self::Extractor(extractor) => Some(extractor), diff --git a/libs/@local/hashql/ast/src/lower/expander/let.rs b/libs/@local/hashql/ast/src/lower/expander/let.rs index 3fb48fec1c4..ccc1e9ee8b1 100644 --- a/libs/@local/hashql/ast/src/lower/expander/let.rs +++ b/libs/@local/hashql/ast/src/lower/expander/let.rs @@ -2,13 +2,10 @@ use core::mem; use hashql_core::{span::SpanId, symbol::Ident}; -use super::{Expander, error::ExpanderDiagnosticIssues}; -use crate::{ - node::{ - expr::{CallExpr, Expr, ExprKind, LetExpr, call::Argument}, - id::NodeId, - }, - visit::Visitor, +use super::Expander; +use crate::node::{ + expr::{CallExpr, Expr, ExprKind, LetExpr, call::Argument}, + id::NodeId, }; fn argument_to_ident<'heap>(argument: &Argument<'heap>) -> Option> { @@ -26,16 +23,15 @@ fn lower_let_3<'heap>( expander: &mut Expander<'_, 'heap>, name: &Argument<'heap>, - mut value: Argument<'heap>, - mut body: Argument<'heap>, + mut value: &mut Argument<'heap>, + mut r#type: Option<&mut Argument<'heap>>, + mut body: &mut Argument<'heap>, ) -> Expr<'heap> { - let Some(name) = argument_to_ident(&name) else { + let Some(name) = argument_to_ident(name) else { todo!("ERROR: name must be an ident"); return Expr::dummy(); }; - // TODO: we must make sure that the scoping here works out, the problem is that `visit_expr` - // bails out early. let item = expander.visit(&mut value.value); expander.enter( @@ -47,6 +43,10 @@ fn lower_let_3<'heap>( }, ); + if let Some(r#type) = &mut r#type { + expander.visit(&mut r#type.value); + } + Expr { id: NodeId::PLACEHOLDER, span, @@ -54,9 +54,9 @@ fn lower_let_3<'heap>( id: NodeId::PLACEHOLDER, span, name, - value: value.value, + value: Box::new_in(mem::replace(&mut value.value, Expr::dummy()), expander.heap), r#type: None, - body: body.value, + body: Box::new_in(mem::replace(&mut body.value, Expr::dummy()), expander.heap), }), } } diff --git a/libs/@local/hashql/ast/src/lower/expander/mod.rs b/libs/@local/hashql/ast/src/lower/expander/mod.rs index b82baaec18c..fd79e91c606 100644 --- a/libs/@local/hashql/ast/src/lower/expander/mod.rs +++ b/libs/@local/hashql/ast/src/lower/expander/mod.rs @@ -22,6 +22,8 @@ use crate::{ // 1. it resolves imports // 2. once resolved, it expands special forms pub struct Expander<'env, 'heap> { + heap: &'heap heap::Heap, + namespace: ModuleNamespace<'env, 'heap>, current_universe: Universe, diagnostics: ExpanderDiagnosticIssues, @@ -70,6 +72,7 @@ impl<'env, 'heap> Expander<'env, 'heap> { impl<'env, 'heap> Expander<'env, 'heap> { pub const fn new(namespace: ModuleNamespace<'env, 'heap>) -> Self { Self { + heap: namespace.registry().heap, namespace, current_universe: Universe::Value, diagnostics: ExpanderDiagnosticIssues::new(), diff --git a/libs/@local/hashql/ast/src/lower/mod.rs b/libs/@local/hashql/ast/src/lower/mod.rs index 58bc8777b27..1c7c179e320 100644 --- a/libs/@local/hashql/ast/src/lower/mod.rs +++ b/libs/@local/hashql/ast/src/lower/mod.rs @@ -67,7 +67,7 @@ use self::{ node_renumberer::NodeRenumberer, pre_expansion_name_resolver::PreExpansionNameResolver, sanitizer::Sanitizer, - special_form_expander::SpecialFormExpander, + // special_form_expander::SpecialFormExpander, type_extractor::{AnonymousTypes, ClosureSignatures, TypeDefinitionExtractor, TypeExtractor}, }; use crate::{node::expr::Expr, visit::Visitor as _}; @@ -79,7 +79,7 @@ pub mod name_mangler; pub mod node_renumberer; pub mod pre_expansion_name_resolver; pub mod sanitizer; -pub mod special_form_expander; +// pub mod special_form_expander; pub mod type_extractor; /// Type information extracted during the lowering process. @@ -188,13 +188,13 @@ pub fn lower<'heap>( let mut resolver = PreExpansionNameResolver::new(registry); resolver.visit_expr(expr); - let mut expander = SpecialFormExpander::new(env.heap); - expander.visit_expr(expr); - diagnostics.append( - &mut expander - .take_diagnostics() - .map_category(LoweringDiagnosticCategory::Expander), - ); + // let mut expander = SpecialFormExpander::new(env.heap); + // expander.visit_expr(expr); + // diagnostics.append( + // &mut expander + // .take_diagnostics() + // .map_category(LoweringDiagnosticCategory::Expander), + // ); let mut sanitizer = Sanitizer::new(); sanitizer.visit_expr(expr); diff --git a/libs/@local/hashql/ast/src/node/expr/call.rs b/libs/@local/hashql/ast/src/node/expr/call.rs index e4dc0b8cf47..327bcb668c3 100644 --- a/libs/@local/hashql/ast/src/node/expr/call.rs +++ b/libs/@local/hashql/ast/src/node/expr/call.rs @@ -25,7 +25,7 @@ pub struct Argument<'heap> { pub id: NodeId, pub span: SpanId, - pub value: heap::Box<'heap, Expr<'heap>>, + pub value: Expr<'heap>, } /// A labeled (named) argument passed to a function call. diff --git a/libs/@local/hashql/core/src/module/namespace.rs b/libs/@local/hashql/core/src/module/namespace.rs index 5a45b4513b4..f54b43d2796 100644 --- a/libs/@local/hashql/core/src/module/namespace.rs +++ b/libs/@local/hashql/core/src/module/namespace.rs @@ -174,6 +174,19 @@ impl<'env, 'heap> ModuleNamespace<'env, 'heap> { }); } + /// Bind a name to an existing registry item in this namespace. + /// + /// Unlike [`local`](Self::local), which creates an opaque binding that + /// resolves to [`Reference::Binding`], an alias resolves to + /// [`Reference::Item`], preserving the item's identity. This means + /// further rebindings of the name still resolve to the original item. + /// + /// For example, after `use ::core::math::add in`, writing + /// `let foo = add` makes `foo` resolve to `::core::math::add` because + /// the alias preserves the item through the `let` binding. + /// + /// Like all namespace mutations, an alias can be undone by rolling back + /// to a [`Snapshot`] taken before the call. pub fn alias(&mut self, name: Symbol<'heap>, item: Item<'heap>) { self.imports.push(Import { name, @@ -930,4 +943,170 @@ mod tests { assert_matches!(item, Reference::Binding(_)); } + + #[test] + fn alias_shadows_import() { + let heap = Heap::new(); + let environment = Environment::new(&heap); + let registry = ModuleRegistry::new(&environment); + + let mut namespace = ModuleNamespace::new(®istry); + namespace.import_prelude(); + + // `+` resolves to `::core::math::add` via the prelude + let original = namespace + .resolve_relative( + [heap.intern_symbol("+")], + ResolveOptions { + universe: Universe::Value, + mode: ResolutionMode::Relative, + }, + ) + .expect("prelude should have `+`") + .expect_item(); + + assert_eq!(original.name.as_str(), "add"); + + // Create a custom item and alias `+` to it + let ItemKind::Intrinsic(IntrinsicItem::Value(IntrinsicValueItem { + r#type: original_type, + .. + })) = original.kind + else { + panic!("expected intrinsic value item"); + }; + + let custom_module = registry.intern_module(|id| PartialModule { + parent: ModuleId::ROOT, + depth: const { NonZero::new(1).unwrap() }, + name: heap.intern_symbol("custom"), + + items: registry.intern_items(&[Item { + module: id.value(), + name: heap.intern_symbol("my_add"), + kind: ItemKind::Intrinsic(IntrinsicItem::Value(IntrinsicValueItem { + name: heap.intern_symbol("::custom::my_add"), + r#type: original_type, + })), + }]), + }); + registry.register(custom_module); + + let custom_item = *registry + .modules + .index(custom_module) + .items + .into_iter() + .next() + .expect("module should have one item"); + + namespace.alias(heap.intern_symbol("+"), custom_item); + + // `+` now resolves to the aliased item, not the prelude import + let aliased = namespace + .resolve_relative( + [heap.intern_symbol("+")], + ResolveOptions { + universe: Universe::Value, + mode: ResolutionMode::Relative, + }, + ) + .expect("alias should be resolvable") + .expect_item(); + + assert_eq!(aliased.name.as_str(), "my_add"); + assert_matches!( + aliased.kind, + ItemKind::Intrinsic(IntrinsicItem::Value(IntrinsicValueItem { + name, + r#type: _ + })) if name.as_str() == "::custom::my_add" + ); + } + + #[test] + fn alias_rollback() { + let heap = Heap::new(); + let environment = Environment::new(&heap); + let registry = ModuleRegistry::new(&environment); + + let mut namespace = ModuleNamespace::new(®istry); + namespace.import_prelude(); + + let original = namespace + .resolve_relative( + [heap.intern_symbol("+")], + ResolveOptions { + universe: Universe::Value, + mode: ResolutionMode::Relative, + }, + ) + .expect("prelude should have `+`") + .expect_item(); + + let snapshot = namespace.snapshot(); + + // Alias `+` to itself under a different name (simulating a `use` rebinding) + namespace.alias(heap.intern_symbol("+"), original); + + // Still resolves (to the alias, which points to the same item) + let during = namespace + .resolve_relative( + [heap.intern_symbol("+")], + ResolveOptions { + universe: Universe::Value, + mode: ResolutionMode::Relative, + }, + ) + .expect("alias should be resolvable") + .expect_item(); + + assert_eq!(during.name.as_str(), "add"); + + namespace.rollback_to(snapshot); + + // After rollback, `+` resolves through the original prelude import + let after = namespace + .resolve_relative( + [heap.intern_symbol("+")], + ResolveOptions { + universe: Universe::Value, + mode: ResolutionMode::Relative, + }, + ) + .expect("prelude import should still work after rollback") + .expect_item(); + + assert_eq!(after.name.as_str(), "add"); + } + + #[test] + fn alias_not_in_locals() { + let heap = Heap::new(); + let environment = Environment::new(&heap); + let registry = ModuleRegistry::new(&environment); + + let mut namespace = ModuleNamespace::new(®istry); + namespace.import_prelude(); + + let item = namespace + .resolve_relative( + [heap.intern_symbol("+")], + ResolveOptions { + universe: Universe::Value, + mode: ResolutionMode::Relative, + }, + ) + .expect("prelude should have `+`") + .expect_item(); + + namespace.alias(heap.intern_symbol("my_add"), item); + + // An alias is not a local binding, so it should not appear in locals + assert!( + !namespace + .locals(Universe::Value) + .contains(&heap.intern_symbol("my_add")) + ); + } } diff --git a/libs/@local/hashql/hir/src/lower/checking.rs b/libs/@local/hashql/hir/src/lower/checking.rs index eb29a56598f..3317317a225 100644 --- a/libs/@local/hashql/hir/src/lower/checking.rs +++ b/libs/@local/hashql/hir/src/lower/checking.rs @@ -52,7 +52,7 @@ use crate::{ pub struct TypeCheckingResidual<'heap> { pub inputs: FastHashMap, TypeId>, - pub intrinsics: HirIdMap<&'static str>, + pub intrinsics: HirIdMap>, } pub struct TypeChecking<'ctx, 'env, 'hir, 'heap> { @@ -60,7 +60,7 @@ pub struct TypeChecking<'ctx, 'env, 'hir, 'heap> { context: &'ctx mut HirContext<'hir, 'heap>, locals: VarIdMap>, - intrinsics: HirIdMap<&'static str>, + intrinsics: HirIdMap>, closures: HirIdMap, lattice: LatticeEnvironment<'env, 'heap>, diff --git a/libs/@local/hashql/hir/src/lower/inference.rs b/libs/@local/hashql/hir/src/lower/inference.rs index f616cb341d6..6e016592b3b 100644 --- a/libs/@local/hashql/hir/src/lower/inference.rs +++ b/libs/@local/hashql/hir/src/lower/inference.rs @@ -6,6 +6,7 @@ use hashql_core::{ locals::TypeDef, }, span::{SpanId, Spanned}, + symbol::Symbol, r#type::{ PartialType, TypeBuilder, TypeId, environment::{ @@ -46,14 +47,14 @@ use crate::{ #[derive(Debug, Copy, Clone, PartialEq, Eq, Hash)] pub struct Local<'heap> { pub r#type: TypeDef<'heap>, - pub intrinsic: Option<&'static str>, + pub intrinsic: Option>, } // We do not persist the types into the `HirMap` *yet* as we haven't yet verified if they are // correct. pub struct TypeInferenceResidual<'heap> { pub locals: VarIdMap>, - pub intrinsics: HirIdMap<&'static str>, + pub intrinsics: HirIdMap>, pub closures: HirIdMap, } @@ -69,7 +70,7 @@ pub struct TypeInference<'ctx, 'env, 'hir, 'heap> { visited: HirIdSet, locals: VarIdMap>, - intrinsics: HirIdMap<&'static str>, + intrinsics: HirIdMap>, closures: HirIdMap, } diff --git a/libs/@local/hashql/hir/src/lower/specialization/error.rs b/libs/@local/hashql/hir/src/lower/specialization/error.rs index 7c7ea1a25cc..3e41f690b0e 100644 --- a/libs/@local/hashql/hir/src/lower/specialization/error.rs +++ b/libs/@local/hashql/hir/src/lower/specialization/error.rs @@ -3,6 +3,7 @@ use alloc::borrow::Cow; use hashql_core::{ pretty::{Formatter, RenderOptions}, span::SpanId, + symbol::Symbol, r#type::environment::Environment, }; use hashql_diagnostics::{ @@ -76,7 +77,7 @@ impl DiagnosticCategory for SpecializationDiagnosticCategory { /// in the specialization phase. pub(crate) fn unsupported_intrinsic( span: SpanId, - intrinsic_name: &str, + intrinsic_name: Symbol<'_>, issue_url: &str, ) -> SpecializationDiagnostic { let mut diagnostic = Diagnostic::new( @@ -110,7 +111,10 @@ pub(crate) fn unsupported_intrinsic( /// /// This indicates a compiler bug where an intrinsic that should be mapped is missing. #[coverage(off)] // compiler bugs should never be hit -pub(crate) fn unknown_intrinsic(span: SpanId, intrinsic_name: &str) -> SpecializationDiagnostic { +pub(crate) fn unknown_intrinsic( + span: SpanId, + intrinsic_name: Symbol<'_>, +) -> SpecializationDiagnostic { let mut diagnostic = Diagnostic::new( SpecializationDiagnosticCategory::UnknownIntrinsic, Severity::Bug, @@ -214,7 +218,10 @@ pub(crate) fn non_intrinsic_graph_operation<'heap>( /// /// This indicates a compiler bug where a graph intrinsic that should be mapped is missing. #[coverage(off)] // compiler bugs should never be hit -pub(crate) fn non_graph_intrinsic(span: SpanId, intrinsic_name: &str) -> SpecializationDiagnostic { +pub(crate) fn non_graph_intrinsic( + span: SpanId, + intrinsic_name: Symbol<'_>, +) -> SpecializationDiagnostic { let mut diagnostic = Diagnostic::new( SpecializationDiagnosticCategory::NonGraphIntrinsic, Severity::Bug, diff --git a/libs/@local/hashql/hir/src/lower/specialization/mod.rs b/libs/@local/hashql/hir/src/lower/specialization/mod.rs index 055c57964a4..788d449c46c 100644 --- a/libs/@local/hashql/hir/src/lower/specialization/mod.rs +++ b/libs/@local/hashql/hir/src/lower/specialization/mod.rs @@ -5,6 +5,7 @@ use core::convert::Infallible; use hashql_core::{ collections::{FastHashMap, HashMapExt as _, SmallVec}, span::Spanned, + symbol::{Symbol, sym}, r#type::environment::Environment, }; @@ -35,7 +36,7 @@ pub struct Specialization<'ctx, 'env, 'hir, 'heap, 'diag> { env: &'env Environment<'heap>, context: &'ctx mut HirContext<'hir, 'heap>, - intrinsics: HirIdMap<&'static str>, + intrinsics: HirIdMap>, current: HirPtr, visited: HirIdMap>, @@ -47,7 +48,7 @@ impl<'ctx, 'env, 'hir, 'heap, 'diag> Specialization<'ctx, 'env, 'hir, 'heap, 'di pub fn new( env: &'env Environment<'heap>, context: &'ctx mut HirContext<'hir, 'heap>, - intrinsics: HirIdMap<&'static str>, + intrinsics: HirIdMap>, diagnostics: &'diag mut LoweringDiagnosticIssues, ) -> Self { Self { @@ -71,11 +72,11 @@ impl<'ctx, 'env, 'hir, 'heap, 'diag> Specialization<'ctx, 'env, 'hir, 'heap, 'di fn fold_call_into_graph_read( &mut self, call: Call<'heap>, - intrinsic: &'static str, + intrinsic: Symbol<'heap>, ) -> Option> { // The first argument is always the graph we're referring to. - let tail = match intrinsic { - "::graph::tail::collect" => GraphReadTail::Collect, + let tail = match intrinsic.as_constant() { + Some(sym::path::graph_tail_collect::CONST) => GraphReadTail::Collect, _ => unreachable!(), }; @@ -105,8 +106,8 @@ impl<'ctx, 'env, 'hir, 'heap, 'diag> Specialization<'ctx, 'env, 'hir, 'heap, 'di return None; }; - match intrinsic { - "::graph::body::filter" => { + match intrinsic.as_constant() { + Some(sym::path::graph_body_filter::CONST) => { let &[follow, closure] = &*call.arguments else { unreachable!() }; @@ -114,7 +115,7 @@ impl<'ctx, 'env, 'hir, 'heap, 'diag> Specialization<'ctx, 'env, 'hir, 'heap, 'di body.push(GraphReadBody::Filter(closure.value)); next = follow.value; } - "::graph::head::entities" => { + Some(sym::path::graph_head_entities::CONST) => { let head = GraphReadHead::Entity { axis: call.arguments[0].value, }; @@ -137,10 +138,11 @@ impl<'ctx, 'env, 'hir, 'heap, 'diag> Specialization<'ctx, 'env, 'hir, 'heap, 'di } } + #[expect(clippy::too_many_lines, reason = "just a large match statement")] fn fold_intrinsic( &mut self, call: Call<'heap>, - intrinsic: &'static str, + intrinsic: Symbol<'heap>, ) -> >::Output>> { #[derive(Debug, Copy, Clone, PartialEq, Eq, Hash)] enum OpKind { @@ -148,11 +150,19 @@ impl<'ctx, 'env, 'hir, 'heap, 'diag> Specialization<'ctx, 'env, 'hir, 'heap, 'di } #[expect(clippy::match_same_arms)] - let op = match intrinsic { - "::core::math::add" | "::core::math::sub" | "::core::math::mul" - | "::core::math::div" | "::core::math::rem" | "::core::math::mod" - | "::core::math::pow" | "::core::math::sqrt" | "::core::math::cbrt" - | "::core::math::root" => { + let op = match intrinsic.as_constant() { + Some( + sym::path::core::math::add::CONST + | sym::path::core::math::sub::CONST + | sym::path::core::math::mul::CONST + | sym::path::core::math::div::CONST + | sym::path::core::math::rem::CONST + | sym::path::core::math::r#mod::CONST + | sym::path::core::math::pow::CONST + | sym::path::core::math::sqrt::CONST + | sym::path::core::math::cbrt::CONST + | sym::path::core::math::root::CONST, + ) => { self.push_diagnostic(unsupported_intrinsic( call.function.span, intrinsic, @@ -161,8 +171,14 @@ impl<'ctx, 'env, 'hir, 'heap, 'diag> Specialization<'ctx, 'env, 'hir, 'heap, 'di return Ok(None); } - "::core::bits::and" | "::core::bits::or" | "::core::bits::xor" - | "::core::bits::not" | "::core::bits::shl" | "::core::bits::shr" => { + Some( + sym::path::core::bits::and::CONST + | sym::path::core::bits::or::CONST + | sym::path::core::bits::xor::CONST + | sym::path::core::bits::not::CONST + | sym::path::core::bits::shl::CONST + | sym::path::core::bits::shr::CONST, + ) => { self.push_diagnostic(unsupported_intrinsic( call.function.span, intrinsic, @@ -171,13 +187,13 @@ impl<'ctx, 'env, 'hir, 'heap, 'diag> Specialization<'ctx, 'env, 'hir, 'heap, 'di return Ok(None); } - "::core::cmp::gt" => OpKind::Bin(BinOp::Gt), - "::core::cmp::lt" => OpKind::Bin(BinOp::Lt), - "::core::cmp::gte" => OpKind::Bin(BinOp::Gte), - "::core::cmp::lte" => OpKind::Bin(BinOp::Lte), - "::core::cmp::eq" => OpKind::Bin(BinOp::Eq), - "::core::cmp::ne" => OpKind::Bin(BinOp::Ne), - "::core::bool::not" => { + Some(sym::path::core::cmp::gt::CONST) => OpKind::Bin(BinOp::Gt), + Some(sym::path::core::cmp::lt::CONST) => OpKind::Bin(BinOp::Lt), + Some(sym::path::core::cmp::gte::CONST) => OpKind::Bin(BinOp::Gte), + Some(sym::path::core::cmp::lte::CONST) => OpKind::Bin(BinOp::Lte), + Some(sym::path::core::cmp::eq::CONST) => OpKind::Bin(BinOp::Eq), + Some(sym::path::core::cmp::ne::CONST) => OpKind::Bin(BinOp::Ne), + Some(sym::path::core::bool::not::CONST) => { self.push_diagnostic(unsupported_intrinsic( call.function.span, intrinsic, @@ -186,17 +202,17 @@ impl<'ctx, 'env, 'hir, 'heap, 'diag> Specialization<'ctx, 'env, 'hir, 'heap, 'di return Ok(None); } - "::core::bool::and" => OpKind::Bin(BinOp::And), - "::core::bool::or" => OpKind::Bin(BinOp::Or), - "::graph::head::entities" | "::graph::body::filter" => { + Some(sym::path::core::bool::and::CONST) => OpKind::Bin(BinOp::And), + Some(sym::path::core::bool::or::CONST) => OpKind::Bin(BinOp::Or), + Some(sym::path::graph_head_entities::CONST | sym::path::graph_body_filter::CONST) => { // We ignore this on purpose, as `graph::tail::collect` will process these return Ok(None); } - "::graph::tmp::decision_time_now" => { + Some(sym::path::graph::tmp::decision_time_now::CONST) => { // currently a stand-in and not specialized in any way return Ok(None); } - "::graph::tail::collect" => { + Some(sym::path::graph_tail_collect::CONST) => { let Some(read) = self.fold_call_into_graph_read(call, intrinsic) else { return Ok(None); }; @@ -290,7 +306,7 @@ impl<'heap> Fold<'heap> for Specialization<'_, '_, '_, 'heap, '_> { // We need to check **before** folding the call, if the function is an intrinsic, otherwise // the underlying HirId might've been changed let intrinsic_node = if let NodeKind::Call(call) = node.kind - && let Some(intrinsic) = self.intrinsics.get(&call.function.id) + && let Some(&intrinsic) = self.intrinsics.get(&call.function.id) { self.fold_intrinsic(call, intrinsic)? } else { diff --git a/libs/@local/hashql/hir/src/reify/mod.rs b/libs/@local/hashql/hir/src/reify/mod.rs index 0253905e5e8..47035a69c5f 100644 --- a/libs/@local/hashql/hir/src/reify/mod.rs +++ b/libs/@local/hashql/hir/src/reify/mod.rs @@ -71,7 +71,7 @@ impl<'heap> ReificationContext<'_, '_, '_, 'heap> { let mut arguments = SmallVec::with_capacity(args.len()); for argument in args { - let Some(value) = self.expr(*argument.value) else { + let Some(value) = self.expr(argument.value) else { incomplete = true; continue; }; diff --git a/libs/@local/hashql/syntax-jexpr/src/parser/array/mod.rs b/libs/@local/hashql/syntax-jexpr/src/parser/array/mod.rs index 001572ca59a..6915506fd1b 100644 --- a/libs/@local/hashql/syntax-jexpr/src/parser/array/mod.rs +++ b/libs/@local/hashql/syntax-jexpr/src/parser/array/mod.rs @@ -60,28 +60,25 @@ fn parse_labelled_argument_shorthand<'heap>( value: Argument { id: NodeId::PLACEHOLDER, span: token_span, - value: Box::new_in( - Expr { + value: Expr { + id: NodeId::PLACEHOLDER, + span: token_span, + kind: ExprKind::Path(Path { id: NodeId::PLACEHOLDER, span: token_span, - kind: ExprKind::Path(Path { - id: NodeId::PLACEHOLDER, - span: token_span, - rooted: false, - segments: { - let mut segments = Vec::with_capacity_in(1, state.heap()); - segments.push(PathSegment { - id: NodeId::PLACEHOLDER, - span: token_span, - name: key, - arguments: Vec::new_in(state.heap()), - }); - segments - }, - }), - }, - state.heap(), - ), + rooted: false, + segments: { + let mut segments = Vec::with_capacity_in(1, state.heap()); + segments.push(PathSegment { + id: NodeId::PLACEHOLDER, + span: token_span, + name: key, + arguments: Vec::new_in(state.heap()), + }); + segments + }, + }), + }, }, }]) } @@ -163,7 +160,7 @@ fn parse_labelled_argument<'heap>( value: Argument { id: NodeId::PLACEHOLDER, span: value.span, - value: Box::new_in(value, state.heap()), + value, }, }); @@ -208,7 +205,7 @@ pub(crate) fn parse_array<'heap, 'source>( arguments.push(Argument { id: NodeId::PLACEHOLDER, span: expr.span, - value: Box::new_in(expr, state.heap()), + value: expr, }); } function @ None => *function = Some(parse_expr(state)?), From fd71ca32e4d5b089c3ce175c6789808d773399b8 Mon Sep 17 00:00:00 2001 From: Bilal Mahmoud <7252775+indietyp@users.noreply.github.com> Date: Fri, 12 Jun 2026 12:24:13 +0200 Subject: [PATCH 10/55] feat: port let bindings --- .../hashql/ast/src/lower/expander/let.rs | 36 +++-- .../hashql/ast/src/lower/expander/mod.rs | 11 +- .../hashql/ast/src/lower/expander/type.rs | 153 ++++++++++++++++++ .../@local/hashql/ast/src/node/expr/struct.rs | 2 +- libs/@local/hashql/ast/src/node/expr/tuple.rs | 2 +- libs/@local/hashql/ast/src/node/type/mod.rs | 10 ++ .../core/src/module/std_lib/kernel/type.rs | 7 + libs/@local/hashql/core/src/symbol/sym.rs | 2 + 8 files changed, 205 insertions(+), 18 deletions(-) create mode 100644 libs/@local/hashql/ast/src/lower/expander/type.rs diff --git a/libs/@local/hashql/ast/src/lower/expander/let.rs b/libs/@local/hashql/ast/src/lower/expander/let.rs index ccc1e9ee8b1..8ebba43b370 100644 --- a/libs/@local/hashql/ast/src/lower/expander/let.rs +++ b/libs/@local/hashql/ast/src/lower/expander/let.rs @@ -2,7 +2,7 @@ use core::mem; use hashql_core::{span::SpanId, symbol::Ident}; -use super::Expander; +use super::{Expander, r#type::lower_expr_to_type}; use crate::node::{ expr::{CallExpr, Expr, ExprKind, LetExpr, call::Argument}, id::NodeId, @@ -18,14 +18,14 @@ fn argument_to_ident<'heap>(argument: &Argument<'heap>) -> Option> } } -fn lower_let_3<'heap>( +fn lower_let_impl<'heap>( span: SpanId, expander: &mut Expander<'_, 'heap>, name: &Argument<'heap>, - mut value: &mut Argument<'heap>, - mut r#type: Option<&mut Argument<'heap>>, - mut body: &mut Argument<'heap>, + value: &mut Argument<'heap>, + r#type: Option<&mut Argument<'heap>>, + body: &mut Argument<'heap>, ) -> Expr<'heap> { let Some(name) = argument_to_ident(name) else { todo!("ERROR: name must be an ident"); @@ -43,9 +43,17 @@ fn lower_let_3<'heap>( }, ); - if let Some(r#type) = &mut r#type { - expander.visit(&mut r#type.value); - } + let r#type = if let Some(r#type) = r#type { + let mut value = mem::replace(&mut r#type.value, Expr::dummy()); + + expander.with_universe(hashql_core::module::Universe::Type, |expander| { + expander.visit(&mut value); + }); + + Some(lower_expr_to_type(expander, value)) + } else { + None + }; Expr { id: NodeId::PLACEHOLDER, @@ -55,14 +63,14 @@ fn lower_let_3<'heap>( span, name, value: Box::new_in(mem::replace(&mut value.value, Expr::dummy()), expander.heap), - r#type: None, + r#type: r#type.map(|r#type| Box::new_in(r#type, expander.heap)), body: Box::new_in(mem::replace(&mut body.value, Expr::dummy()), expander.heap), }), } } -pub(super) fn lower_let<'env, 'heap>( - expander: &mut Expander<'env, 'heap>, +pub(super) fn lower_let<'heap>( + expander: &mut Expander<'_, 'heap>, CallExpr { id: _, span, @@ -77,11 +85,9 @@ pub(super) fn lower_let<'env, 'heap>( } match &mut **arguments { - [name, value, body] => { - todo!() - } + [name, value, body] => lower_let_impl(*span, expander, name, value, None, body), [name, r#type, value, body] => { - todo!() + lower_let_impl(*span, expander, name, value, Some(r#type), body) } _ => { todo!("ERROR: issue diagnostic"); diff --git a/libs/@local/hashql/ast/src/lower/expander/mod.rs b/libs/@local/hashql/ast/src/lower/expander/mod.rs index fd79e91c606..40ca0dc1af8 100644 --- a/libs/@local/hashql/ast/src/lower/expander/mod.rs +++ b/libs/@local/hashql/ast/src/lower/expander/mod.rs @@ -1,5 +1,6 @@ mod error; mod r#let; +mod r#type; use hashql_core::{ heap, @@ -32,7 +33,7 @@ pub struct Expander<'env, 'heap> { trampoline: Option>, } -impl<'env, 'heap> Expander<'env, 'heap> { +impl<'heap> Expander<'_, 'heap> { fn visit(&mut self, expr: &mut node::expr::Expr<'heap>) -> Option> { let prev_current_item = self.current_item.take(); visit::walk_expr(self, expr); @@ -47,6 +48,14 @@ impl<'env, 'heap> Expander<'env, 'heap> { current_item } + fn with_universe(&mut self, universe: Universe, closure: impl FnOnce(&mut Self) -> T) -> T { + let prev_universe = self.current_universe; + self.current_universe = universe; + let result = closure(self); + self.current_universe = prev_universe; + result + } + fn enter( &mut self, universe: Universe, diff --git a/libs/@local/hashql/ast/src/lower/expander/type.rs b/libs/@local/hashql/ast/src/lower/expander/type.rs new file mode 100644 index 00000000000..8cf05655a2c --- /dev/null +++ b/libs/@local/hashql/ast/src/lower/expander/type.rs @@ -0,0 +1,153 @@ +use hashql_core::{ + module::item::{IntrinsicItem, Item}, + symbol::sym, +}; + +use super::Expander; +use crate::node::{ + expr::{CallExpr, Expr, ExprKind}, + id::NodeId, + r#type::{IntersectionType, StructType, TupleType, Type, TypeKind, UnionType}, +}; + +fn lower_call_to_type<'heap>( + expander: &mut Expander<'_, 'heap>, + mut call: CallExpr<'heap>, +) -> Type<'heap> { + if !call.labeled_arguments.is_empty() { + todo!("ERROR: labeled arguments are not supported in type calls"); + return Type::dummy(); + } + + let Some(Item { + module: _, + name: _, + kind: hashql_core::module::item::ItemKind::Intrinsic(IntrinsicItem::Type(type_intrinsic)), + }) = expander.with_universe(hashql_core::module::Universe::Type, |expander| { + expander.visit(&mut call.function) + }) + else { + todo!("ERROR: unrecognized constructor function"); + return Type::dummy(); + }; + + let mut types = Vec::with_capacity_in(call.arguments.len(), expander.heap); + for argument in call.arguments { + types.push(lower_expr_to_type(expander, argument.value)); + } + + let kind = match type_intrinsic.name.as_constant() { + Some(sym::path::Union::CONST) => TypeKind::Union(UnionType { + id: NodeId::PLACEHOLDER, + span: call.span, + types, + }), + Some(sym::path::Intersection::CONST) => TypeKind::Intersection(IntersectionType { + id: NodeId::PLACEHOLDER, + span: call.span, + types, + }), + _ => { + todo!("ERROR: unrecognized constructor function"); + return Type::dummy(); + } + }; + + Type { + id: NodeId::PLACEHOLDER, + span: call.span, + kind, + } +} + +pub(super) fn lower_expr_to_type<'heap>( + expander: &mut Expander<'_, 'heap>, + expr: Expr<'heap>, +) -> Type<'heap> { + match expr.kind { + ExprKind::Call(call) => lower_call_to_type(expander, call), + ExprKind::Tuple(tuple) => { + if let Some(existing) = &tuple.r#type { + todo!("ERROR: tuple has a type annotation in a type position, invalid") + } + + let mut elements = Vec::with_capacity_in(tuple.elements.len(), expander.heap); + + for element in tuple.elements { + elements.push(crate::node::r#type::TupleField { + id: NodeId::PLACEHOLDER, + span: element.span, + r#type: lower_expr_to_type(expander, element.value), + }); + } + + Type { + id: NodeId::PLACEHOLDER, + span: expr.span, + kind: TypeKind::Tuple(TupleType { + id: NodeId::PLACEHOLDER, + span: expr.span, + fields: elements, + }), + } + } + ExprKind::Struct(r#struct) => { + if let Some(existing) = &r#struct.r#type { + todo!("ERROR: tuple has a type annotation in a type position, invalid") + } + + let mut fields = Vec::with_capacity_in(r#struct.entries.len(), expander.heap); + + for entry in r#struct.entries { + fields.push(crate::node::r#type::StructField { + id: NodeId::PLACEHOLDER, + span: entry.span, + name: entry.key, + r#type: lower_expr_to_type(expander, entry.value), + }); + } + + Type { + id: NodeId::PLACEHOLDER, + span: expr.span, + kind: TypeKind::Struct(StructType { + id: NodeId::PLACEHOLDER, + span: expr.span, + fields, + }), + } + } + ExprKind::Path(path) => Type { + id: NodeId::PLACEHOLDER, + span: expr.span, + kind: TypeKind::Path(path), + }, + ExprKind::Underscore => Type { + id: NodeId::PLACEHOLDER, + span: expr.span, + kind: TypeKind::Infer, + }, + ExprKind::Dict(_) + | ExprKind::List(_) + | ExprKind::Literal(_) + | ExprKind::Let(_) + | ExprKind::Type(_) + | ExprKind::NewType(_) + | ExprKind::Use(_) + | ExprKind::Input(_) + | ExprKind::Closure(_) + | ExprKind::If(_) + | ExprKind::Field(_) + | ExprKind::Index(_) + | ExprKind::As(_) + | ExprKind::Dummy => { + todo!("ERROR: cannot use in type position"); + + Type { + id: NodeId::PLACEHOLDER, + span: expr.span, + kind: TypeKind::Dummy, + } + } + } +} diff --git a/libs/@local/hashql/ast/src/node/expr/struct.rs b/libs/@local/hashql/ast/src/node/expr/struct.rs index e0bd790194b..0a3fed6c2a0 100644 --- a/libs/@local/hashql/ast/src/node/expr/struct.rs +++ b/libs/@local/hashql/ast/src/node/expr/struct.rs @@ -13,7 +13,7 @@ pub struct StructEntry<'heap> { pub span: SpanId, pub key: Ident<'heap>, - pub value: heap::Box<'heap, Expr<'heap>>, + pub value: Expr<'heap>, } /// A struct expression in the HashQL Abstract Syntax Tree. diff --git a/libs/@local/hashql/ast/src/node/expr/tuple.rs b/libs/@local/hashql/ast/src/node/expr/tuple.rs index 410b3ab5228..2e190944ad4 100644 --- a/libs/@local/hashql/ast/src/node/expr/tuple.rs +++ b/libs/@local/hashql/ast/src/node/expr/tuple.rs @@ -12,7 +12,7 @@ pub struct TupleElement<'heap> { pub id: NodeId, pub span: SpanId, - pub value: heap::Box<'heap, Expr<'heap>>, + pub value: Expr<'heap>, } /// A tuple expression in the HashQL Abstract Syntax Tree. diff --git a/libs/@local/hashql/ast/src/node/type/mod.rs b/libs/@local/hashql/ast/src/node/type/mod.rs index f7d80bfdaea..1e5f49c09a6 100644 --- a/libs/@local/hashql/ast/src/node/type/mod.rs +++ b/libs/@local/hashql/ast/src/node/type/mod.rs @@ -206,3 +206,13 @@ pub struct Type<'heap> { pub kind: TypeKind<'heap>, } + +impl<'heap> Type<'heap> { + pub const fn dummy() -> Self { + Self { + id: NodeId::PLACEHOLDER, + span: SpanId::SYNTHETIC, + kind: TypeKind::Dummy, + } + } +} diff --git a/libs/@local/hashql/core/src/module/std_lib/kernel/type.rs b/libs/@local/hashql/core/src/module/std_lib/kernel/type.rs index 410e5450085..c7ffaf4cb3f 100644 --- a/libs/@local/hashql/core/src/module/std_lib/kernel/type.rs +++ b/libs/@local/hashql/core/src/module/std_lib/kernel/type.rs @@ -60,6 +60,13 @@ impl<'heap> StandardLibraryModule<'heap> for Type { Self::intrinsic(&mut def, sym::path::List, sym::List); Self::intrinsic(&mut def, sym::path::Dict, sym::Dict); + // Union and Intersection are both type intrinsics with an alias, they are only used during + // special form desurgaring. + let index = Self::intrinsic(&mut def, sym::path::Union, sym::Union); + def.alias(index, sym::symbol::pipe); + let index = Self::intrinsic(&mut def, sym::path::Intersection, sym::Intersection); + def.alias(index, sym::symbol::ampersand); + def } } diff --git a/libs/@local/hashql/core/src/symbol/sym.rs b/libs/@local/hashql/core/src/symbol/sym.rs index e033fdca4a2..d6cfadfcb59 100644 --- a/libs/@local/hashql/core/src/symbol/sym.rs +++ b/libs/@local/hashql/core/src/symbol/sym.rs @@ -261,6 +261,8 @@ hashql_macros::define_symbols! { Confidence: "::graph::types::knowledge::entity::Confidence", DecisionTime: "::graph::temporal::DecisionTime", Dict: "::kernel::type::Dict", + Union: "::kernel::type::Union", + Intersection: "::kernel::type::Intersection", DraftId: "::graph::types::knowledge::entity::DraftId", Entity: "::graph::types::knowledge::entity::Entity", EntityEditionId: "::graph::types::knowledge::entity::EntityEditionId", From 8a5ae7922df05175d9bf8ce9939937892b333b68 Mon Sep 17 00:00:00 2001 From: Bilal Mahmoud <7252775+indietyp@users.noreply.github.com> Date: Fri, 12 Jun 2026 12:33:59 +0200 Subject: [PATCH 11/55] feat: port let bindings --- .../hashql/ast/src/lower/expander/if.rs | 66 +++++++++++++++++++ .../hashql/ast/src/lower/expander/mod.rs | 34 +++++----- 2 files changed, 84 insertions(+), 16 deletions(-) create mode 100644 libs/@local/hashql/ast/src/lower/expander/if.rs diff --git a/libs/@local/hashql/ast/src/lower/expander/if.rs b/libs/@local/hashql/ast/src/lower/expander/if.rs new file mode 100644 index 00000000000..778dcc0ad47 --- /dev/null +++ b/libs/@local/hashql/ast/src/lower/expander/if.rs @@ -0,0 +1,66 @@ +use core::mem; + +use hashql_core::span::SpanId; + +use super::Expander; +use crate::node::{ + expr::{CallExpr, Expr, ExprKind, IfExpr, call::Argument}, + id::NodeId, +}; + +fn lower_if_impl<'heap>( + span: SpanId, + expander: &mut Expander<'_, 'heap>, + + test: &mut Argument<'heap>, + then: &mut Argument<'heap>, + r#else: Option<&mut Argument<'heap>>, +) -> Expr<'heap> { + let mut test = mem::replace(&mut test.value, Expr::dummy()); + let mut then = mem::replace(&mut then.value, Expr::dummy()); + let mut r#else = r#else.map(|argument| mem::replace(&mut argument.value, Expr::dummy())); + + expander.visit(&mut test); + expander.visit(&mut then); + if let Some(r#else) = r#else.as_mut() { + expander.visit(r#else); + } + + Expr { + id: NodeId::PLACEHOLDER, + span, + kind: ExprKind::If(IfExpr { + id: NodeId::PLACEHOLDER, + span, + test: Box::new_in(test, expander.heap), + then: Box::new_in(then, expander.heap), + r#else: r#else.map(|r#else| Box::new_in(r#else, expander.heap)), + }), + } +} + +pub(super) fn lower_if<'heap>( + expander: &mut Expander<'_, 'heap>, + CallExpr { + id: _, + span, + function: _, + arguments, + labeled_arguments, + }: &mut CallExpr<'heap>, +) -> Expr<'heap> { + if !labeled_arguments.is_empty() { + todo!("ERROR: labelled arguments are not supported") + // we continue after diagnostic issue + } + + match &mut **arguments { + [test, then] => lower_if_impl(*span, expander, test, then, None), + [test, then, r#else] => lower_if_impl(*span, expander, test, then, Some(r#else)), + _ => { + todo!("ERROR: issue diagnostic"); + + Expr::dummy() + } + } +} diff --git a/libs/@local/hashql/ast/src/lower/expander/mod.rs b/libs/@local/hashql/ast/src/lower/expander/mod.rs index 40ca0dc1af8..425a75aed0a 100644 --- a/libs/@local/hashql/ast/src/lower/expander/mod.rs +++ b/libs/@local/hashql/ast/src/lower/expander/mod.rs @@ -1,4 +1,5 @@ mod error; +mod r#if; mod r#let; mod r#type; @@ -12,7 +13,7 @@ use hashql_core::{ symbol::{Ident, Symbol, sym}, }; -use self::error::ExpanderDiagnosticIssues; +use self::{error::ExpanderDiagnosticIssues, r#let::lower_let}; use crate::{ node::{self, id::NodeId}, visit::{self, Visitor}, @@ -33,7 +34,18 @@ pub struct Expander<'env, 'heap> { trampoline: Option>, } -impl<'heap> Expander<'_, 'heap> { +impl<'env, 'heap> Expander<'env, 'heap> { + pub const fn new(namespace: ModuleNamespace<'env, 'heap>) -> Self { + Self { + heap: namespace.registry().heap, + namespace, + current_universe: Universe::Value, + diagnostics: ExpanderDiagnosticIssues::new(), + current_item: None, + trampoline: None, + } + } + fn visit(&mut self, expr: &mut node::expr::Expr<'heap>) -> Option> { let prev_current_item = self.current_item.take(); visit::walk_expr(self, expr); @@ -78,19 +90,6 @@ impl<'heap> Expander<'_, 'heap> { } } -impl<'env, 'heap> Expander<'env, 'heap> { - pub const fn new(namespace: ModuleNamespace<'env, 'heap>) -> Self { - Self { - heap: namespace.registry().heap, - namespace, - current_universe: Universe::Value, - diagnostics: ExpanderDiagnosticIssues::new(), - current_item: None, - trampoline: None, - } - } -} - impl<'heap> Visitor<'heap> for Expander<'_, 'heap> { fn visit_path(&mut self, path: &mut node::path::Path<'heap>) { self.current_item = None; @@ -200,7 +199,10 @@ impl<'heap> Visitor<'heap> for Expander<'_, 'heap> { match constant { sym::path::r#if::CONST => {} sym::path::r#as::CONST => {} - sym::path::r#let::CONST => {} + sym::path::r#let::CONST => { + self.trampoline = Some(lower_let(self, expr)); + return; + } sym::path::r#type::CONST => {} sym::path::newtype::CONST => {} sym::path::r#use::CONST => {} From 7fbd8042150f2991517439efb041e2c72bb8254d Mon Sep 17 00:00:00 2001 From: Bilal Mahmoud <7252775+indietyp@users.noreply.github.com> Date: Fri, 12 Jun 2026 12:48:23 +0200 Subject: [PATCH 12/55] feat: port let bindings --- .../hashql/ast/src/lower/expander/as.rs | 39 ++ .../hashql/ast/src/lower/expander/error.rs | 367 +++++++++++++++++- .../hashql/ast/src/lower/expander/let.rs | 24 +- .../hashql/ast/src/lower/expander/mod.rs | 8 +- .../hashql/ast/src/lower/expander/type.rs | 39 +- 5 files changed, 458 insertions(+), 19 deletions(-) create mode 100644 libs/@local/hashql/ast/src/lower/expander/as.rs diff --git a/libs/@local/hashql/ast/src/lower/expander/as.rs b/libs/@local/hashql/ast/src/lower/expander/as.rs new file mode 100644 index 00000000000..874ab940771 --- /dev/null +++ b/libs/@local/hashql/ast/src/lower/expander/as.rs @@ -0,0 +1,39 @@ +use hashql_core::span::SpanId; + +use super::Expander; +use crate::node::expr::{CallExpr, Expr, call::Argument}; + +fn lower_if_impl<'heap>( + span: SpanId, + expander: &mut Expander<'_, 'heap>, + + body: &mut Argument<'heap>, + r#type: &mut Argument<'heap>, +) -> Expr<'heap> { + todo!() +} + +pub(super) fn lower_as<'heap>( + expander: &mut Expander<'_, 'heap>, + CallExpr { + id: _, + span, + function: _, + arguments, + labeled_arguments, + }: &mut CallExpr<'heap>, +) -> Expr<'heap> { + if !labeled_arguments.is_empty() { + todo!("ERROR: labelled arguments are not supported") + // we continue after diagnostic issue + } + + match &mut **arguments { + [body, r#type] => lower_as_impl(*span, expander, body, r#type), + _ => { + todo!("ERROR: issue diagnostic"); + + Expr::dummy() + } + } +} diff --git a/libs/@local/hashql/ast/src/lower/expander/error.rs b/libs/@local/hashql/ast/src/lower/expander/error.rs index dd9ea46e10d..3274e52bb14 100644 --- a/libs/@local/hashql/ast/src/lower/expander/error.rs +++ b/libs/@local/hashql/ast/src/lower/expander/error.rs @@ -20,7 +20,13 @@ use hashql_diagnostics::{ severity::Severity, }; -use crate::node::path::{Path, PathSegment, PathSegmentArgument}; +use crate::node::{ + expr::{ + ExprKind, + call::{Argument, LabeledArgument}, + }, + path::{Path, PathSegment, PathSegmentArgument}, +}; pub(crate) type ExpanderDiagnostic = Diagnostic; @@ -86,6 +92,37 @@ const INVALID_QUERY_LENGTH: TerminalDiagnosticCategory = TerminalDiagnosticCateg name: "Invalid query length", }; +const INVALID_BINDING_NAME: TerminalDiagnosticCategory = TerminalDiagnosticCategory { + id: "invalid-binding-name", + name: "Invalid binding name", +}; + +const LABELED_ARGUMENTS_NOT_SUPPORTED: TerminalDiagnosticCategory = TerminalDiagnosticCategory { + id: "labeled-arguments-not-supported", + name: "Labeled arguments not supported", +}; + +const INVALID_ARGUMENT_COUNT: TerminalDiagnosticCategory = TerminalDiagnosticCategory { + id: "invalid-argument-count", + name: "Invalid argument count", +}; + +const INVALID_TYPE_CONSTRUCTOR_CALL: TerminalDiagnosticCategory = TerminalDiagnosticCategory { + id: "invalid-type-constructor-call", + name: "Invalid type constructor call", +}; + +const TYPE_ANNOTATION_IN_TYPE_POSITION: TerminalDiagnosticCategory = TerminalDiagnosticCategory { + id: "type-annotation-in-type-position", + name: "Type annotation in type position", +}; + +const INVALID_EXPRESSION_IN_TYPE_POSITION: TerminalDiagnosticCategory = + TerminalDiagnosticCategory { + id: "invalid-expression-in-type-position", + name: "Invalid expression in type position", + }; + #[derive(Debug, Copy, Clone, PartialEq, Eq, Hash)] pub enum ExpanderDiagnosticCategory { EmptyPath, @@ -100,6 +137,12 @@ pub enum ExpanderDiagnosticCategory { AmbiguousName, EmptyModule, InvalidQueryLength, + InvalidBindingName, + LabeledArgumentsNotSupported, + InvalidArgumentCount, + InvalidTypeConstructorCall, + TypeAnnotationInTypePosition, + InvalidExpressionInTypePosition, } impl DiagnosticCategory for ExpanderDiagnosticCategory { @@ -125,6 +168,12 @@ impl DiagnosticCategory for ExpanderDiagnosticCategory { Self::AmbiguousName => Some(&AMBIGUOUS_NAME), Self::EmptyModule => Some(&EMPTY_MODULE), Self::InvalidQueryLength => Some(&INVALID_QUERY_LENGTH), + Self::InvalidBindingName => Some(&INVALID_BINDING_NAME), + Self::LabeledArgumentsNotSupported => Some(&LABELED_ARGUMENTS_NOT_SUPPORTED), + Self::InvalidArgumentCount => Some(&INVALID_ARGUMENT_COUNT), + Self::InvalidTypeConstructorCall => Some(&INVALID_TYPE_CONSTRUCTOR_CALL), + Self::TypeAnnotationInTypePosition => Some(&TYPE_ANNOTATION_IN_TYPE_POSITION), + Self::InvalidExpressionInTypePosition => Some(&INVALID_EXPRESSION_IN_TYPE_POSITION), } } } @@ -693,3 +742,319 @@ fn empty_module(path: &Path<'_>, depth: usize) -> ExpanderDiagnostic { diagnostic } + +/// The first argument to `let` is not a simple identifier. +/// +/// The name position requires a plain name like `x` or `count`, not a qualified +/// path, generic expression, or arbitrary expression. +pub(crate) fn invalid_let_binding_name(name: &Argument<'_>) -> ExpanderDiagnostic { + let mut diagnostic = Diagnostic::new( + ExpanderDiagnosticCategory::InvalidBindingName, + Severity::Error, + ) + .primary(Label::new( + name.value.span, + "expected a simple identifier for the `let` binding name", + )); + + diagnostic.add_message(Message::help( + "write `(let name value body)` with a plain name such as `x`", + )); + + diagnostic.add_message(Message::note( + "the first argument to `let` introduces a new local binding and must be a plain \ + identifier without path qualification or generic arguments", + )); + + diagnostic +} + +/// A `let` call was passed labeled arguments. +/// +/// `let` only accepts positional arguments in a fixed order. +pub(crate) fn labeled_arguments_in_let( + labeled_arguments: &[LabeledArgument<'_>], +) -> ExpanderDiagnostic { + let (first, rest) = labeled_arguments + .split_first() + .expect("caller should check that labeled_arguments is non-empty"); + + let mut diagnostic = Diagnostic::new( + ExpanderDiagnosticCategory::LabeledArgumentsNotSupported, + Severity::Error, + ) + .primary(Label::new( + first.span, + "labeled arguments are not allowed in `let`", + )); + + for argument in rest { + diagnostic.add_label(Label::new( + argument.span, + "labeled argument not allowed here", + )); + } + + diagnostic.add_message(Message::help( + "pass the arguments positionally: `(let name value body)` or `(let name Type value body)`", + )); + + diagnostic.add_message(Message::note( + "`let` has a fixed argument order: name, optional type annotation, value, body", + )); + + diagnostic +} + +/// A `let` call was passed the wrong number of arguments. +/// +/// `let` accepts either 3 arguments `(let name value body)` or 4 arguments +/// `(let name Type value body)`. +pub(crate) fn invalid_let_argument_count( + call_span: SpanId, + arguments: &[Argument<'_>], +) -> ExpanderDiagnostic { + let count = arguments.len(); + + let mut diagnostic = Diagnostic::new( + ExpanderDiagnosticCategory::InvalidArgumentCount, + Severity::Error, + ) + .primary(Label::new( + call_span, + format!("expected 3 or 4 arguments to `let`, found {count}"), + )); + + for argument in arguments.iter().skip(4) { + diagnostic.add_label(Label::new(argument.span, "unexpected argument")); + } + + diagnostic.add_message(Message::help( + "use `(let name value body)` or `(let name type value body)`", + )); + + diagnostic.add_message(Message::note( + "the arguments are, in order: the binding name, an optional type annotation, the bound \ + value, and the body expression where the name is in scope", + )); + + diagnostic +} + +/// A type constructor call was passed labeled arguments. +/// +/// Type constructor calls like `(| Int String)` only accept positional operands. +pub(crate) fn labeled_arguments_in_type_call( + labeled_arguments: &[LabeledArgument<'_>], +) -> ExpanderDiagnostic { + let (first, rest) = labeled_arguments + .split_first() + .expect("caller should check that labeled_arguments is non-empty"); + + let mut diagnostic = Diagnostic::new( + ExpanderDiagnosticCategory::LabeledArgumentsNotSupported, + Severity::Error, + ) + .primary(Label::new( + first.span, + "labeled arguments are not allowed in type constructor calls", + )); + + for argument in rest { + diagnostic.add_label(Label::new( + argument.span, + "labeled argument not allowed here", + )); + } + + diagnostic.add_message(Message::help( + "remove the labels and write the operand types positionally, for example `(| Int String)`", + )); + + diagnostic.add_message(Message::note( + "type constructors such as `|` (union) and `&` (intersection) take positional type \ + operands", + )); + + diagnostic +} + +/// A call expression in type position resolved to something that is not a +/// type constructor. +/// +/// Only type constructors like `|` (union) and `&` (intersection) use call +/// syntax in type position. Other types are referenced directly by path. +pub(crate) fn invalid_type_constructor_call( + function_span: SpanId, + call_span: SpanId, +) -> ExpanderDiagnostic { + let mut diagnostic = Diagnostic::new( + ExpanderDiagnosticCategory::InvalidTypeConstructorCall, + Severity::Error, + ) + .primary(Label::new( + function_span, + "cannot use this as a type constructor", + )); + + diagnostic.add_label(Label::new( + call_span, + "this call appears in a type position", + )); + + diagnostic.add_message(Message::help( + "use a type path directly, or use `(| ...)` / `(& ...)` for unions and intersections", + )); + + diagnostic.add_message(Message::note( + "generic type arguments belong on the type path itself, for example `Foo`, not `(Foo \ + T)`", + )); + + diagnostic +} + +/// A type was called like a function in type position, but types are not +/// callable type constructors. +/// +/// The user wrote something like `(String Int)` when they probably meant +/// `String` for generics or just `String` as a plain type reference. +pub(crate) fn type_is_not_callable( + name: Symbol<'_>, + function_span: SpanId, + call_span: SpanId, +) -> ExpanderDiagnostic { + let mut diagnostic = Diagnostic::new( + ExpanderDiagnosticCategory::InvalidTypeConstructorCall, + Severity::Error, + ) + .primary(Label::new( + function_span, + format!("`{name}` is a type, not a type constructor"), + )); + + diagnostic.add_label(Label::new( + call_span, + "call syntax is only valid for type constructors like `|` and `&`", + )); + + diagnostic.add_message(Message::help(format!( + "use `{name}` directly as a type path, or write `{name}<...>` for generic arguments", + ))); + + diagnostic.add_message(Message::note( + "only `|` (union) and `&` (intersection) can be called as type constructors in type \ + position", + )); + + diagnostic +} + +/// Whether the aggregate expression is a tuple or a struct. +#[derive(Debug, Copy, Clone)] +pub(crate) enum AggregateKind { + Tuple, + Struct, +} + +impl Display for AggregateKind { + fn fmt(&self, fmt: &mut fmt::Formatter<'_>) -> fmt::Result { + match self { + Self::Tuple => fmt.write_str("tuple"), + Self::Struct => fmt.write_str("struct"), + } + } +} + +/// A tuple or struct expression in type position has a redundant type annotation. +/// +/// When used as a type, `(Int, String)` already defines a tuple type and +/// `{name: String}` already defines a struct type. Adding an annotation is +/// contradictory. +pub(crate) fn type_annotation_in_type_position( + annotation_span: SpanId, + expr_span: SpanId, + kind: AggregateKind, +) -> ExpanderDiagnostic { + let mut diagnostic = Diagnostic::new( + ExpanderDiagnosticCategory::TypeAnnotationInTypePosition, + Severity::Error, + ) + .primary(Label::new( + annotation_span, + "type annotations are not allowed inside a type expression", + )); + + diagnostic.add_label(Label::new( + expr_span, + format!("this {kind} is already being used as a type"), + )); + + diagnostic.add_message(Message::help("remove the type annotation")); + + let note = match kind { + AggregateKind::Tuple => "in type position, `(Int, String)` already defines a tuple type", + AggregateKind::Struct => "in type position, `{name: String}` already defines a struct type", + }; + + diagnostic.add_message(Message::note(note)); + + diagnostic +} + +const VALID_TYPE_FORMS: &str = "valid type forms are: type paths like `String`, tuple types like \ + `(Int, String)`, struct types like `{name: String}`, `_` for \ + inference, unions `(| ...)`, and intersections `(& ...)`"; + +/// An expression that cannot be used as a type was found in type position. +/// +/// Type expressions are a restricted subset of general expressions. Paths, +/// tuples, structs, `_`, unions, and intersections are the valid forms. +/// +/// Returns `None` for `Dummy` expressions, which are recovery sentinels from +/// earlier errors. +pub(crate) fn invalid_expression_in_type_position( + span: SpanId, + kind: &ExprKind<'_>, +) -> Option { + let description = match kind { + ExprKind::Dict(_) => "a dictionary expression", + ExprKind::List(_) => "a list expression", + ExprKind::Literal(_) => "a literal value", + ExprKind::Let(_) => "a `let` expression", + ExprKind::Type(_) => "a `type` declaration", + ExprKind::NewType(_) => "a `newtype` declaration", + ExprKind::Use(_) => "a `use` expression", + ExprKind::Input(_) => "an `input` expression", + ExprKind::Closure(_) => "a closure expression", + ExprKind::If(_) => "an `if` expression", + ExprKind::Field(_) => "a field access expression", + ExprKind::Index(_) => "an index expression", + ExprKind::As(_) => "an `as` expression", + ExprKind::Dummy => return None, + ExprKind::Call(_) + | ExprKind::Tuple(_) + | ExprKind::Struct(_) + | ExprKind::Path(_) + | ExprKind::Underscore => { + unreachable!("these expression kinds are valid in type position") + } + }; + + let mut diagnostic = Diagnostic::new( + ExpanderDiagnosticCategory::InvalidExpressionInTypePosition, + Severity::Error, + ) + .primary(Label::new( + span, + format!("cannot use {description} as a type"), + )); + + diagnostic.add_message(Message::help( + "replace this with a type path, tuple type, struct type, `_`, `(| ...)`, or `(& ...)`", + )); + + diagnostic.add_message(Message::note(VALID_TYPE_FORMS)); + + Some(diagnostic) +} diff --git a/libs/@local/hashql/ast/src/lower/expander/let.rs b/libs/@local/hashql/ast/src/lower/expander/let.rs index 8ebba43b370..4e1f538cece 100644 --- a/libs/@local/hashql/ast/src/lower/expander/let.rs +++ b/libs/@local/hashql/ast/src/lower/expander/let.rs @@ -3,9 +3,12 @@ use core::mem; use hashql_core::{span::SpanId, symbol::Ident}; use super::{Expander, r#type::lower_expr_to_type}; -use crate::node::{ - expr::{CallExpr, Expr, ExprKind, LetExpr, call::Argument}, - id::NodeId, +use crate::{ + lower::expander::error, + node::{ + expr::{CallExpr, Expr, ExprKind, LetExpr, call::Argument}, + id::NodeId, + }, }; fn argument_to_ident<'heap>(argument: &Argument<'heap>) -> Option> { @@ -28,7 +31,9 @@ fn lower_let_impl<'heap>( body: &mut Argument<'heap>, ) -> Expr<'heap> { let Some(name) = argument_to_ident(name) else { - todo!("ERROR: name must be an ident"); + expander + .diagnostics + .push(error::invalid_let_binding_name(name)); return Expr::dummy(); }; @@ -80,8 +85,11 @@ pub(super) fn lower_let<'heap>( }: &mut CallExpr<'heap>, ) -> Expr<'heap> { if !labeled_arguments.is_empty() { - todo!("ERROR: labelled arguments are not supported") - // we continue after diagnostic issue + // We continue, to try to recover, if that means that the user has a labeled argument + // instead of a positional one we error twice, but that is deemed acceptable. + expander + .diagnostics + .push(error::labeled_arguments_in_let(labeled_arguments)); } match &mut **arguments { @@ -90,7 +98,9 @@ pub(super) fn lower_let<'heap>( lower_let_impl(*span, expander, name, value, Some(r#type), body) } _ => { - todo!("ERROR: issue diagnostic"); + expander + .diagnostics + .push(error::invalid_let_argument_count(*span, arguments)); Expr::dummy() } diff --git a/libs/@local/hashql/ast/src/lower/expander/mod.rs b/libs/@local/hashql/ast/src/lower/expander/mod.rs index 425a75aed0a..44738c5583c 100644 --- a/libs/@local/hashql/ast/src/lower/expander/mod.rs +++ b/libs/@local/hashql/ast/src/lower/expander/mod.rs @@ -1,3 +1,4 @@ +mod r#as; mod error; mod r#if; mod r#let; @@ -13,7 +14,7 @@ use hashql_core::{ symbol::{Ident, Symbol, sym}, }; -use self::{error::ExpanderDiagnosticIssues, r#let::lower_let}; +use self::{error::ExpanderDiagnosticIssues, r#if::lower_if, r#let::lower_let}; use crate::{ node::{self, id::NodeId}, visit::{self, Visitor}, @@ -197,7 +198,10 @@ impl<'heap> Visitor<'heap> for Expander<'_, 'heap> { && let Some(constant) = value.name.as_constant() { match constant { - sym::path::r#if::CONST => {} + sym::path::r#if::CONST => { + self.trampoline = Some(lower_if(self, expr)); + return; + } sym::path::r#as::CONST => {} sym::path::r#let::CONST => { self.trampoline = Some(lower_let(self, expr)); diff --git a/libs/@local/hashql/ast/src/lower/expander/type.rs b/libs/@local/hashql/ast/src/lower/expander/type.rs index 8cf05655a2c..4a5b348ea5c 100644 --- a/libs/@local/hashql/ast/src/lower/expander/type.rs +++ b/libs/@local/hashql/ast/src/lower/expander/type.rs @@ -4,10 +4,13 @@ use hashql_core::{ }; use super::Expander; -use crate::node::{ - expr::{CallExpr, Expr, ExprKind}, - id::NodeId, - r#type::{IntersectionType, StructType, TupleType, Type, TypeKind, UnionType}, +use crate::{ + lower::expander::error, + node::{ + expr::{CallExpr, Expr, ExprKind}, + id::NodeId, + r#type::{IntersectionType, StructType, TupleType, Type, TypeKind, UnionType}, + }, }; fn lower_call_to_type<'heap>( @@ -67,8 +70,16 @@ pub(super) fn lower_expr_to_type<'heap>( match expr.kind { ExprKind::Call(call) => lower_call_to_type(expander, call), ExprKind::Tuple(tuple) => { - if let Some(existing) = &tuple.r#type { - todo!("ERROR: tuple has a type annotation in a type position, invalid") + if let Some(annotation) = &tuple.r#type { + // We continue, because it's not fatal, we just ignore it, compilation will + // terminate before ever reaching the HIR. + expander + .diagnostics + .push(error::type_annotation_in_type_position( + annotation.span, + expr.span, + error::AggregateKind::Tuple, + )); } let mut elements = Vec::with_capacity_in(tuple.elements.len(), expander.heap); @@ -92,8 +103,16 @@ pub(super) fn lower_expr_to_type<'heap>( } } ExprKind::Struct(r#struct) => { - if let Some(existing) = &r#struct.r#type { - todo!("ERROR: tuple has a type annotation in a type position, invalid") + if let Some(annotation) = &r#struct.r#type { + // We continue, because it's not fatal, we just ignore it, compilation will + // terminate before ever reaching the HIR. + expander + .diagnostics + .push(error::type_annotation_in_type_position( + annotation.span, + expr.span, + error::AggregateKind::Struct, + )); } let mut fields = Vec::with_capacity_in(r#struct.entries.len(), expander.heap); @@ -141,7 +160,9 @@ pub(super) fn lower_expr_to_type<'heap>( | ExprKind::Index(_) | ExprKind::As(_) | ExprKind::Dummy => { - todo!("ERROR: cannot use in type position"); + expander + .diagnostics + .push(error::invalid_expression_in_type_position(expr.span, "...")); Type { id: NodeId::PLACEHOLDER, From 95e33d97ebc84ffafc80ba84ceff58cb3b000a6d Mon Sep 17 00:00:00 2001 From: Bilal Mahmoud <7252775+indietyp@users.noreply.github.com> Date: Fri, 12 Jun 2026 12:53:06 +0200 Subject: [PATCH 13/55] feat: port as --- .../hashql/ast/src/lower/expander/as.rs | 32 ++++++++++++++++--- .../hashql/ast/src/lower/expander/type.rs | 8 +++-- 2 files changed, 33 insertions(+), 7 deletions(-) diff --git a/libs/@local/hashql/ast/src/lower/expander/as.rs b/libs/@local/hashql/ast/src/lower/expander/as.rs index 874ab940771..36f28e4d8e9 100644 --- a/libs/@local/hashql/ast/src/lower/expander/as.rs +++ b/libs/@local/hashql/ast/src/lower/expander/as.rs @@ -1,16 +1,40 @@ -use hashql_core::span::SpanId; +use core::mem; + +use hashql_core::{module::Universe, span::SpanId}; use super::Expander; -use crate::node::expr::{CallExpr, Expr, call::Argument}; +use crate::{ + lower::expander::r#type::lower_expr_to_type, + node::{ + expr::{AsExpr, CallExpr, Expr, ExprKind, call::Argument}, + id::NodeId, + }, +}; -fn lower_if_impl<'heap>( +fn lower_as_impl<'heap>( span: SpanId, expander: &mut Expander<'_, 'heap>, body: &mut Argument<'heap>, r#type: &mut Argument<'heap>, ) -> Expr<'heap> { - todo!() + let mut body = mem::replace(&mut body.value, Expr::dummy()); + let mut r#type = mem::replace(&mut r#type.value, Expr::dummy()); + + expander.visit(&mut body); + expander.with_universe(Universe::Type, |expander| expander.visit(&mut r#type)); + let r#type = lower_expr_to_type(expander, r#type); + + Expr { + id: NodeId::PLACEHOLDER, + span, + kind: ExprKind::As(AsExpr { + id: NodeId::PLACEHOLDER, + span, + value: Box::new_in(body, expander.heap), + r#type: Box::new_in(r#type, expander.heap), + }), + } } pub(super) fn lower_as<'heap>( diff --git a/libs/@local/hashql/ast/src/lower/expander/type.rs b/libs/@local/hashql/ast/src/lower/expander/type.rs index 4a5b348ea5c..11216e0faad 100644 --- a/libs/@local/hashql/ast/src/lower/expander/type.rs +++ b/libs/@local/hashql/ast/src/lower/expander/type.rs @@ -160,9 +160,11 @@ pub(super) fn lower_expr_to_type<'heap>( | ExprKind::Index(_) | ExprKind::As(_) | ExprKind::Dummy => { - expander - .diagnostics - .push(error::invalid_expression_in_type_position(expr.span, "...")); + if let Some(diagnostic) = + error::invalid_expression_in_type_position(expr.span, &expr.kind) + { + expander.diagnostics.push(diagnostic); + } Type { id: NodeId::PLACEHOLDER, From a84448b3b56e6c3cb4c71bd902086d1a6e05b8b5 Mon Sep 17 00:00:00 2001 From: Bilal Mahmoud <7252775+indietyp@users.noreply.github.com> Date: Fri, 12 Jun 2026 12:57:23 +0200 Subject: [PATCH 14/55] feat: port as --- .../hashql/ast/src/lower/expander/as.rs | 11 +- .../hashql/ast/src/lower/expander/error.rs | 137 +++++++++++++++++- .../hashql/ast/src/lower/expander/if.rs | 18 ++- .../hashql/ast/src/lower/expander/mod.rs | 7 +- .../hashql/ast/src/lower/expander/type.rs | 24 ++- 5 files changed, 179 insertions(+), 18 deletions(-) diff --git a/libs/@local/hashql/ast/src/lower/expander/as.rs b/libs/@local/hashql/ast/src/lower/expander/as.rs index 36f28e4d8e9..818545fbcd7 100644 --- a/libs/@local/hashql/ast/src/lower/expander/as.rs +++ b/libs/@local/hashql/ast/src/lower/expander/as.rs @@ -4,7 +4,7 @@ use hashql_core::{module::Universe, span::SpanId}; use super::Expander; use crate::{ - lower::expander::r#type::lower_expr_to_type, + lower::expander::{error, r#type::lower_expr_to_type}, node::{ expr::{AsExpr, CallExpr, Expr, ExprKind, call::Argument}, id::NodeId, @@ -48,14 +48,17 @@ pub(super) fn lower_as<'heap>( }: &mut CallExpr<'heap>, ) -> Expr<'heap> { if !labeled_arguments.is_empty() { - todo!("ERROR: labelled arguments are not supported") - // we continue after diagnostic issue + expander + .diagnostics + .push(error::labeled_arguments_in_as(labeled_arguments)); } match &mut **arguments { [body, r#type] => lower_as_impl(*span, expander, body, r#type), _ => { - todo!("ERROR: issue diagnostic"); + expander + .diagnostics + .push(error::invalid_as_argument_count(*span, arguments)); Expr::dummy() } diff --git a/libs/@local/hashql/ast/src/lower/expander/error.rs b/libs/@local/hashql/ast/src/lower/expander/error.rs index 3274e52bb14..dbef1a956b0 100644 --- a/libs/@local/hashql/ast/src/lower/expander/error.rs +++ b/libs/@local/hashql/ast/src/lower/expander/error.rs @@ -841,6 +841,137 @@ pub(crate) fn invalid_let_argument_count( diagnostic } +/// An `as` call was passed labeled arguments. +/// +/// `as` only accepts positional arguments. +pub(crate) fn labeled_arguments_in_as( + labeled_arguments: &[LabeledArgument<'_>], +) -> ExpanderDiagnostic { + let (first, rest) = labeled_arguments + .split_first() + .expect("caller should check that labeled_arguments is non-empty"); + + let mut diagnostic = Diagnostic::new( + ExpanderDiagnosticCategory::LabeledArgumentsNotSupported, + Severity::Error, + ) + .primary(Label::new( + first.span, + "labeled arguments are not allowed in `as`", + )); + + for argument in rest { + diagnostic.add_label(Label::new( + argument.span, + "labeled argument not allowed here", + )); + } + + diagnostic.add_message(Message::help( + "pass the arguments positionally: `(as value Type)`", + )); + + diagnostic +} + +/// An `as` call was passed the wrong number of arguments. +/// +/// `as` accepts exactly 2 arguments: `(as value Type)`. +pub(crate) fn invalid_as_argument_count( + call_span: SpanId, + arguments: &[Argument<'_>], +) -> ExpanderDiagnostic { + let count = arguments.len(); + + let mut diagnostic = Diagnostic::new( + ExpanderDiagnosticCategory::InvalidArgumentCount, + Severity::Error, + ) + .primary(Label::new( + call_span, + format!("expected 2 arguments to `as`, found {count}"), + )); + + for argument in arguments.iter().skip(2) { + diagnostic.add_label(Label::new(argument.span, "unexpected argument")); + } + + diagnostic.add_message(Message::help("use `(as value Type)`")); + + diagnostic.add_message(Message::note( + "the first argument is the value to cast and the second is the target type", + )); + + diagnostic +} + +/// An `if` call was passed labeled arguments. +/// +/// `if` only accepts positional arguments. +pub(crate) fn labeled_arguments_in_if( + labeled_arguments: &[LabeledArgument<'_>], +) -> ExpanderDiagnostic { + let (first, rest) = labeled_arguments + .split_first() + .expect("caller should check that labeled_arguments is non-empty"); + + let mut diagnostic = Diagnostic::new( + ExpanderDiagnosticCategory::LabeledArgumentsNotSupported, + Severity::Error, + ) + .primary(Label::new( + first.span, + "labeled arguments are not allowed in `if`", + )); + + for argument in rest { + diagnostic.add_label(Label::new( + argument.span, + "labeled argument not allowed here", + )); + } + + diagnostic.add_message(Message::help( + "pass the arguments positionally: `(if condition then)` or `(if condition then else)`", + )); + + diagnostic +} + +/// An `if` call was passed the wrong number of arguments. +/// +/// `if` accepts either 2 arguments `(if condition then)` or 3 arguments +/// `(if condition then else)`. +pub(crate) fn invalid_if_argument_count( + call_span: SpanId, + arguments: &[Argument<'_>], +) -> ExpanderDiagnostic { + let count = arguments.len(); + + let mut diagnostic = Diagnostic::new( + ExpanderDiagnosticCategory::InvalidArgumentCount, + Severity::Error, + ) + .primary(Label::new( + call_span, + format!("expected 2 or 3 arguments to `if`, found {count}"), + )); + + for argument in arguments.iter().skip(3) { + diagnostic.add_label(Label::new(argument.span, "unexpected argument")); + } + + diagnostic.add_message(Message::help( + "use `(if condition then)` or `(if condition then else)`", + )); + + diagnostic.add_message(Message::note( + "the arguments are, in order: the condition, the then branch, and an optional else branch", + )); + + diagnostic +} + /// A type constructor call was passed labeled arguments. /// /// Type constructor calls like `(| Int String)` only accept positional operands. @@ -969,7 +1100,7 @@ impl Display for AggregateKind { /// A tuple or struct expression in type position has a redundant type annotation. /// /// When used as a type, `(Int, String)` already defines a tuple type and -/// `{name: String}` already defines a struct type. Adding an annotation is +/// `(name: String)` already defines a struct type. Adding an annotation is /// contradictory. pub(crate) fn type_annotation_in_type_position( annotation_span: SpanId, @@ -994,7 +1125,7 @@ pub(crate) fn type_annotation_in_type_position( let note = match kind { AggregateKind::Tuple => "in type position, `(Int, String)` already defines a tuple type", - AggregateKind::Struct => "in type position, `{name: String}` already defines a struct type", + AggregateKind::Struct => "in type position, `(name: String)` already defines a struct type", }; diagnostic.add_message(Message::note(note)); @@ -1003,7 +1134,7 @@ pub(crate) fn type_annotation_in_type_position( } const VALID_TYPE_FORMS: &str = "valid type forms are: type paths like `String`, tuple types like \ - `(Int, String)`, struct types like `{name: String}`, `_` for \ + `(Int, String)`, struct types like `(name: String)`, `_` for \ inference, unions `(| ...)`, and intersections `(& ...)`"; /// An expression that cannot be used as a type was found in type position. diff --git a/libs/@local/hashql/ast/src/lower/expander/if.rs b/libs/@local/hashql/ast/src/lower/expander/if.rs index 778dcc0ad47..626964951e4 100644 --- a/libs/@local/hashql/ast/src/lower/expander/if.rs +++ b/libs/@local/hashql/ast/src/lower/expander/if.rs @@ -3,9 +3,12 @@ use core::mem; use hashql_core::span::SpanId; use super::Expander; -use crate::node::{ - expr::{CallExpr, Expr, ExprKind, IfExpr, call::Argument}, - id::NodeId, +use crate::{ + lower::expander::error, + node::{ + expr::{CallExpr, Expr, ExprKind, IfExpr, call::Argument}, + id::NodeId, + }, }; fn lower_if_impl<'heap>( @@ -50,15 +53,18 @@ pub(super) fn lower_if<'heap>( }: &mut CallExpr<'heap>, ) -> Expr<'heap> { if !labeled_arguments.is_empty() { - todo!("ERROR: labelled arguments are not supported") - // we continue after diagnostic issue + expander + .diagnostics + .push(error::labeled_arguments_in_if(labeled_arguments)); } match &mut **arguments { [test, then] => lower_if_impl(*span, expander, test, then, None), [test, then, r#else] => lower_if_impl(*span, expander, test, then, Some(r#else)), _ => { - todo!("ERROR: issue diagnostic"); + expander + .diagnostics + .push(error::invalid_if_argument_count(*span, arguments)); Expr::dummy() } diff --git a/libs/@local/hashql/ast/src/lower/expander/mod.rs b/libs/@local/hashql/ast/src/lower/expander/mod.rs index 44738c5583c..d30bf8a6d52 100644 --- a/libs/@local/hashql/ast/src/lower/expander/mod.rs +++ b/libs/@local/hashql/ast/src/lower/expander/mod.rs @@ -14,7 +14,7 @@ use hashql_core::{ symbol::{Ident, Symbol, sym}, }; -use self::{error::ExpanderDiagnosticIssues, r#if::lower_if, r#let::lower_let}; +use self::{r#as::lower_as, error::ExpanderDiagnosticIssues, r#if::lower_if, r#let::lower_let}; use crate::{ node::{self, id::NodeId}, visit::{self, Visitor}, @@ -202,7 +202,10 @@ impl<'heap> Visitor<'heap> for Expander<'_, 'heap> { self.trampoline = Some(lower_if(self, expr)); return; } - sym::path::r#as::CONST => {} + sym::path::r#as::CONST => { + self.trampoline = Some(lower_as(self, expr)); + return; + } sym::path::r#let::CONST => { self.trampoline = Some(lower_let(self, expr)); return; diff --git a/libs/@local/hashql/ast/src/lower/expander/type.rs b/libs/@local/hashql/ast/src/lower/expander/type.rs index 11216e0faad..2af71117423 100644 --- a/libs/@local/hashql/ast/src/lower/expander/type.rs +++ b/libs/@local/hashql/ast/src/lower/expander/type.rs @@ -18,7 +18,11 @@ fn lower_call_to_type<'heap>( mut call: CallExpr<'heap>, ) -> Type<'heap> { if !call.labeled_arguments.is_empty() { - todo!("ERROR: labeled arguments are not supported in type calls"); + expander + .diagnostics + .push(error::labeled_arguments_in_type_call( + &call.labeled_arguments, + )); return Type::dummy(); } @@ -30,7 +34,17 @@ fn lower_call_to_type<'heap>( expander.visit(&mut call.function) }) else { - todo!("ERROR: unrecognized constructor function"); + // Only emit a diagnostic if the function didn't become Dummy from an earlier + // resolution error. Dummy means a resolution diagnostic was already emitted. + if !matches!(call.function.kind, ExprKind::Dummy) { + expander + .diagnostics + .push(error::invalid_type_constructor_call( + call.function.span, + call.span, + )); + } + return Type::dummy(); }; @@ -51,7 +65,11 @@ fn lower_call_to_type<'heap>( types, }), _ => { - todo!("ERROR: unrecognized constructor function"); + expander.diagnostics.push(error::type_is_not_callable( + type_intrinsic.name, + call.function.span, + call.span, + )); return Type::dummy(); } }; From 714ab03228719b626b22afcf59d24d1235aff25d Mon Sep 17 00:00:00 2001 From: Bilal Mahmoud <7252775+indietyp@users.noreply.github.com> Date: Fri, 12 Jun 2026 13:06:05 +0200 Subject: [PATCH 15/55] feat: port index,input,access --- .../hashql/ast/src/lower/expander/access.rs | 122 +++++++ .../hashql/ast/src/lower/expander/error.rs | 317 +++++++++++++++++- .../hashql/ast/src/lower/expander/index.rs | 65 ++++ .../hashql/ast/src/lower/expander/input.rs | 91 +++++ .../hashql/ast/src/lower/expander/mod.rs | 18 +- 5 files changed, 606 insertions(+), 7 deletions(-) create mode 100644 libs/@local/hashql/ast/src/lower/expander/access.rs create mode 100644 libs/@local/hashql/ast/src/lower/expander/index.rs create mode 100644 libs/@local/hashql/ast/src/lower/expander/input.rs diff --git a/libs/@local/hashql/ast/src/lower/expander/access.rs b/libs/@local/hashql/ast/src/lower/expander/access.rs new file mode 100644 index 00000000000..150313490af --- /dev/null +++ b/libs/@local/hashql/ast/src/lower/expander/access.rs @@ -0,0 +1,122 @@ +use core::mem; + +use hashql_core::{ + span::SpanId, + symbol::{Ident, IdentKind}, + value::Primitive, +}; + +use super::Expander; +use crate::{ + lower::expander::error, + node::{ + expr::{CallExpr, Expr, ExprKind, FieldExpr, call::Argument}, + id::NodeId, + }, +}; + +/// Extract a field identifier from an argument. +/// +/// Handles both named field access (identifiers like `name`) and indexed field +/// access (integer literals like `0` for tuple fields). Integer literals are +/// validated for bounds. +fn argument_to_field<'heap>( + expander: &mut Expander<'_, 'heap>, + argument: &Argument<'heap>, +) -> Option> { + // Integer literal for tuple field access + if let ExprKind::Literal(literal) = &argument.value.kind { + if literal.r#type.is_some() { + expander + .diagnostics + .push(error::field_literal_type_annotation(literal.span)); + } + + let Primitive::Integer(integer) = literal.kind else { + expander + .diagnostics + .push(error::invalid_field_literal_type(literal.span)); + return None; + }; + + if integer.as_usize().is_none() { + expander + .diagnostics + .push(error::field_index_out_of_bounds(literal.span)); + return None; + } + + return Some(Ident { + span: literal.span, + value: integer.as_symbol(), + kind: IdentKind::Lexical, + }); + } + + // Named field access + if let ExprKind::Path(path) = &argument.value.kind + && let Some(&ident) = path.as_ident() + { + return Some(ident); + } + + expander + .diagnostics + .push(error::invalid_access_field(argument)); + + None +} + +fn lower_access_impl<'heap>( + span: SpanId, + expander: &mut Expander<'_, 'heap>, + + value: &mut Argument<'heap>, + field: &Argument<'heap>, +) -> Expr<'heap> { + let Some(field) = argument_to_field(expander, field) else { + return Expr::dummy(); + }; + + let mut value = mem::replace(&mut value.value, Expr::dummy()); + expander.visit(&mut value); + + Expr { + id: NodeId::PLACEHOLDER, + span, + kind: ExprKind::Field(FieldExpr { + id: NodeId::PLACEHOLDER, + span, + value: Box::new_in(value, expander.heap), + field, + }), + } +} + +pub(super) fn lower_access<'heap>( + expander: &mut Expander<'_, 'heap>, + CallExpr { + id: _, + span, + function: _, + arguments, + labeled_arguments, + }: &mut CallExpr<'heap>, +) -> Expr<'heap> { + if !labeled_arguments.is_empty() { + expander + .diagnostics + .push(error::labeled_arguments_in_access(labeled_arguments)); + } + + match &mut **arguments { + [value, field] => lower_access_impl(*span, expander, value, field), + _ => { + expander + .diagnostics + .push(error::invalid_access_argument_count(*span, arguments)); + + Expr::dummy() + } + } +} diff --git a/libs/@local/hashql/ast/src/lower/expander/error.rs b/libs/@local/hashql/ast/src/lower/expander/error.rs index dbef1a956b0..d93b73f4742 100644 --- a/libs/@local/hashql/ast/src/lower/expander/error.rs +++ b/libs/@local/hashql/ast/src/lower/expander/error.rs @@ -123,6 +123,26 @@ const INVALID_EXPRESSION_IN_TYPE_POSITION: TerminalDiagnosticCategory = name: "Invalid expression in type position", }; +const FIELD_LITERAL_TYPE_ANNOTATION: TerminalDiagnosticCategory = TerminalDiagnosticCategory { + id: "field-literal-type-annotation", + name: "Field literal with type annotation", +}; + +const INVALID_FIELD_LITERAL_TYPE: TerminalDiagnosticCategory = TerminalDiagnosticCategory { + id: "invalid-field-literal-type", + name: "Invalid field literal type", +}; + +const FIELD_INDEX_OUT_OF_BOUNDS: TerminalDiagnosticCategory = TerminalDiagnosticCategory { + id: "field-index-out-of-bounds", + name: "Field index out of bounds", +}; + +const INVALID_ACCESS_FIELD: TerminalDiagnosticCategory = TerminalDiagnosticCategory { + id: "invalid-access-field", + name: "Invalid access field", +}; + #[derive(Debug, Copy, Clone, PartialEq, Eq, Hash)] pub enum ExpanderDiagnosticCategory { EmptyPath, @@ -143,6 +163,10 @@ pub enum ExpanderDiagnosticCategory { InvalidTypeConstructorCall, TypeAnnotationInTypePosition, InvalidExpressionInTypePosition, + FieldLiteralTypeAnnotation, + InvalidFieldLiteralType, + FieldIndexOutOfBounds, + InvalidAccessField, } impl DiagnosticCategory for ExpanderDiagnosticCategory { @@ -174,6 +198,10 @@ impl DiagnosticCategory for ExpanderDiagnosticCategory { Self::InvalidTypeConstructorCall => Some(&INVALID_TYPE_CONSTRUCTOR_CALL), Self::TypeAnnotationInTypePosition => Some(&TYPE_ANNOTATION_IN_TYPE_POSITION), Self::InvalidExpressionInTypePosition => Some(&INVALID_EXPRESSION_IN_TYPE_POSITION), + Self::FieldLiteralTypeAnnotation => Some(&FIELD_LITERAL_TYPE_ANNOTATION), + Self::InvalidFieldLiteralType => Some(&INVALID_FIELD_LITERAL_TYPE), + Self::FieldIndexOutOfBounds => Some(&FIELD_INDEX_OUT_OF_BOUNDS), + Self::InvalidAccessField => Some(&INVALID_ACCESS_FIELD), } } } @@ -796,7 +824,7 @@ pub(crate) fn labeled_arguments_in_let( } diagnostic.add_message(Message::help( - "pass the arguments positionally: `(let name value body)` or `(let name Type value body)`", + "pass the arguments positionally: `(let name value body)` or `(let name type value body)`", )); diagnostic.add_message(Message::note( @@ -809,7 +837,7 @@ pub(crate) fn labeled_arguments_in_let( /// A `let` call was passed the wrong number of arguments. /// /// `let` accepts either 3 arguments `(let name value body)` or 4 arguments -/// `(let name Type value body)`. +/// `(let name type value body)`. pub(crate) fn invalid_let_argument_count( call_span: SpanId, arguments: &[Argument<'_>], @@ -868,7 +896,7 @@ pub(crate) fn labeled_arguments_in_as( } diagnostic.add_message(Message::help( - "pass the arguments positionally: `(as value Type)`", + "pass the arguments positionally: `(as value type)`", )); diagnostic @@ -896,7 +924,7 @@ pub(crate) fn invalid_as_argument_count( diagnostic.add_label(Label::new(argument.span, "unexpected argument")); } - diagnostic.add_message(Message::help("use `(as value Type)`")); + diagnostic.add_message(Message::help("use `(as value type)`")); diagnostic.add_message(Message::note( "the first argument is the value to cast and the second is the target type", @@ -972,6 +1000,287 @@ pub(crate) fn invalid_if_argument_count( diagnostic } +/// An `input` call was passed labeled arguments. +pub(crate) fn labeled_arguments_in_input( + labeled_arguments: &[LabeledArgument<'_>], +) -> ExpanderDiagnostic { + let (first, rest) = labeled_arguments + .split_first() + .expect("caller should check that labeled_arguments is non-empty"); + + let mut diagnostic = Diagnostic::new( + ExpanderDiagnosticCategory::LabeledArgumentsNotSupported, + Severity::Error, + ) + .primary(Label::new( + first.span, + "labeled arguments are not allowed in `input`", + )); + + for argument in rest { + diagnostic.add_label(Label::new( + argument.span, + "labeled argument not allowed here", + )); + } + + diagnostic.add_message(Message::help( + "pass the arguments positionally: `(input name type)` or `(input name type default)`", + )); + + diagnostic +} + +/// An `input` call was passed the wrong number of arguments. +/// +/// `input` accepts either 2 arguments `(input name Type)` or 3 arguments +/// `(input name Type default)`. +pub(crate) fn invalid_input_argument_count( + call_span: SpanId, + arguments: &[Argument<'_>], +) -> ExpanderDiagnostic { + let count = arguments.len(); + + let mut diagnostic = Diagnostic::new( + ExpanderDiagnosticCategory::InvalidArgumentCount, + Severity::Error, + ) + .primary(Label::new( + call_span, + format!("expected 2 or 3 arguments to `input`, found {count}"), + )); + + for argument in arguments.iter().skip(3) { + diagnostic.add_label(Label::new(argument.span, "unexpected argument")); + } + + diagnostic.add_message(Message::help( + "use `(input name type)` or `(input name type default)`", + )); + + diagnostic.add_message(Message::note( + "the arguments are, in order: the input name, its type, and an optional default value", + )); + + diagnostic +} + +/// The first argument to `input` is not a simple identifier. +pub(crate) fn invalid_input_binding_name(name: &Argument<'_>) -> ExpanderDiagnostic { + let mut diagnostic = Diagnostic::new( + ExpanderDiagnosticCategory::InvalidBindingName, + Severity::Error, + ) + .primary(Label::new( + name.value.span, + "expected a simple identifier for the `input` name", + )); + + diagnostic.add_message(Message::help( + "write `(input name type)` with a plain name such as `user_id`", + )); + + diagnostic.add_message(Message::note( + "the first argument to `input` declares a named parameter and must be a plain identifier", + )); + + diagnostic +} + +/// An `index` call was passed labeled arguments. +pub(crate) fn labeled_arguments_in_index( + labeled_arguments: &[LabeledArgument<'_>], +) -> ExpanderDiagnostic { + let (first, rest) = labeled_arguments + .split_first() + .expect("caller should check that labeled_arguments is non-empty"); + + let mut diagnostic = Diagnostic::new( + ExpanderDiagnosticCategory::LabeledArgumentsNotSupported, + Severity::Error, + ) + .primary(Label::new( + first.span, + "labeled arguments are not allowed in `[]`", + )); + + for argument in rest { + diagnostic.add_label(Label::new( + argument.span, + "labeled argument not allowed here", + )); + } + + diagnostic.add_message(Message::help( + "pass the arguments positionally: `([] collection index)`", + )); + + diagnostic +} + +/// An `index` call was passed the wrong number of arguments. +/// +/// `index` accepts exactly 2 arguments: `([] collection index)`. +pub(crate) fn invalid_index_argument_count( + call_span: SpanId, + arguments: &[Argument<'_>], +) -> ExpanderDiagnostic { + let count = arguments.len(); + + let mut diagnostic = Diagnostic::new( + ExpanderDiagnosticCategory::InvalidArgumentCount, + Severity::Error, + ) + .primary(Label::new( + call_span, + format!("expected 2 arguments to `[]`, found {count}"), + )); + + for argument in arguments.iter().skip(2) { + diagnostic.add_label(Label::new(argument.span, "unexpected argument")); + } + + diagnostic.add_message(Message::help("use `([] collection index)`")); + + diagnostic.add_message(Message::note( + "the first argument is the collection and the second is the index", + )); + + diagnostic +} + +/// An `access` call was passed labeled arguments. +pub(crate) fn labeled_arguments_in_access( + labeled_arguments: &[LabeledArgument<'_>], +) -> ExpanderDiagnostic { + let (first, rest) = labeled_arguments + .split_first() + .expect("caller should check that labeled_arguments is non-empty"); + + let mut diagnostic = Diagnostic::new( + ExpanderDiagnosticCategory::LabeledArgumentsNotSupported, + Severity::Error, + ) + .primary(Label::new( + first.span, + "labeled arguments are not allowed in `.`", + )); + + for argument in rest { + diagnostic.add_label(Label::new( + argument.span, + "labeled argument not allowed here", + )); + } + + diagnostic.add_message(Message::help( + "pass the arguments positionally: `(. value field)`", + )); + + diagnostic +} + +/// An `access` call was passed the wrong number of arguments. +/// +/// `access` accepts exactly 2 arguments: `(. value field)`. +pub(crate) fn invalid_access_argument_count( + call_span: SpanId, + arguments: &[Argument<'_>], +) -> ExpanderDiagnostic { + let count = arguments.len(); + + let mut diagnostic = Diagnostic::new( + ExpanderDiagnosticCategory::InvalidArgumentCount, + Severity::Error, + ) + .primary(Label::new( + call_span, + format!("expected 2 arguments to `.`, found {count}"), + )); + + for argument in arguments.iter().skip(2) { + diagnostic.add_label(Label::new(argument.span, "unexpected argument")); + } + + diagnostic.add_message(Message::help("use `(. value field)`")); + + diagnostic.add_message(Message::note( + "the first argument is the value and the second is the field name or index", + )); + + diagnostic +} + +/// The field argument to `access` is not a valid field identifier or integer index. +pub(crate) fn invalid_access_field(argument: &Argument<'_>) -> ExpanderDiagnostic { + let mut diagnostic = Diagnostic::new( + ExpanderDiagnosticCategory::InvalidAccessField, + Severity::Error, + ) + .primary(Label::new( + argument.value.span, + "expected a field name or integer index", + )); + + diagnostic.add_message(Message::help( + "use a simple identifier like `name` or an integer like `0` for tuple fields", + )); + + diagnostic +} + +/// A numeric field literal in `access` has a type annotation. +pub(crate) fn field_literal_type_annotation(annotation_span: SpanId) -> ExpanderDiagnostic { + let mut diagnostic = Diagnostic::new( + ExpanderDiagnosticCategory::FieldLiteralTypeAnnotation, + Severity::Error, + ) + .primary(Label::new( + annotation_span, + "type annotations are not allowed on field index literals", + )); + + diagnostic.add_message(Message::help( + "remove the type annotation and use a plain integer like `0`", + )); + + diagnostic +} + +/// A field literal in `access` is not an integer. +pub(crate) fn invalid_field_literal_type(literal_span: SpanId) -> ExpanderDiagnostic { + let mut diagnostic = Diagnostic::new( + ExpanderDiagnosticCategory::InvalidFieldLiteralType, + Severity::Error, + ) + .primary(Label::new( + literal_span, + "expected an integer for field indexing", + )); + + diagnostic.add_message(Message::help( + "use an integer index like `0` for tuple field access, or a name like `field` for named \ + field access", + )); + + diagnostic +} + +/// A field index literal is too large. +pub(crate) fn field_index_out_of_bounds(literal_span: SpanId) -> ExpanderDiagnostic { + let mut diagnostic = Diagnostic::new( + ExpanderDiagnosticCategory::FieldIndexOutOfBounds, + Severity::Error, + ) + .primary(Label::new(literal_span, "field index is out of bounds")); + + diagnostic.add_message(Message::help( + "use a non-negative integer that fits within platform bounds", + )); + + diagnostic +} + /// A type constructor call was passed labeled arguments. /// /// Type constructor calls like `(| Int String)` only accept positional operands. diff --git a/libs/@local/hashql/ast/src/lower/expander/index.rs b/libs/@local/hashql/ast/src/lower/expander/index.rs new file mode 100644 index 00000000000..64ee02e078d --- /dev/null +++ b/libs/@local/hashql/ast/src/lower/expander/index.rs @@ -0,0 +1,65 @@ +use core::mem; + +use hashql_core::span::SpanId; + +use super::Expander; +use crate::{ + lower::expander::error, + node::{ + expr::{CallExpr, Expr, ExprKind, IndexExpr, call::Argument}, + id::NodeId, + }, +}; + +fn lower_index_impl<'heap>( + span: SpanId, + expander: &mut Expander<'_, 'heap>, + + value: &mut Argument<'heap>, + index: &mut Argument<'heap>, +) -> Expr<'heap> { + let mut value = mem::replace(&mut value.value, Expr::dummy()); + let mut index = mem::replace(&mut index.value, Expr::dummy()); + + expander.visit(&mut value); + expander.visit(&mut index); + + Expr { + id: NodeId::PLACEHOLDER, + span, + kind: ExprKind::Index(IndexExpr { + id: NodeId::PLACEHOLDER, + span, + value: Box::new_in(value, expander.heap), + index: Box::new_in(index, expander.heap), + }), + } +} + +pub(super) fn lower_index<'heap>( + expander: &mut Expander<'_, 'heap>, + CallExpr { + id: _, + span, + function: _, + arguments, + labeled_arguments, + }: &mut CallExpr<'heap>, +) -> Expr<'heap> { + if !labeled_arguments.is_empty() { + expander + .diagnostics + .push(error::labeled_arguments_in_index(labeled_arguments)); + } + + match &mut **arguments { + [value, index] => lower_index_impl(*span, expander, value, index), + _ => { + expander + .diagnostics + .push(error::invalid_index_argument_count(*span, arguments)); + + Expr::dummy() + } + } +} diff --git a/libs/@local/hashql/ast/src/lower/expander/input.rs b/libs/@local/hashql/ast/src/lower/expander/input.rs new file mode 100644 index 00000000000..90c4e822b5e --- /dev/null +++ b/libs/@local/hashql/ast/src/lower/expander/input.rs @@ -0,0 +1,91 @@ +use core::mem; + +use hashql_core::{module::Universe, span::SpanId, symbol::Ident}; + +use super::Expander; +use crate::{ + lower::expander::{error, r#type::lower_expr_to_type}, + node::{ + expr::{CallExpr, Expr, ExprKind, InputExpr, call::Argument}, + id::NodeId, + }, +}; + +fn argument_to_ident<'heap>(argument: &Argument<'heap>) -> Option> { + if let ExprKind::Path(path) = &argument.value.kind + && let Some(&ident) = path.as_ident() + { + Some(ident) + } else { + None + } +} + +fn lower_input_impl<'heap>( + span: SpanId, + expander: &mut Expander<'_, 'heap>, + + name: &Argument<'heap>, + r#type: &mut Argument<'heap>, + default: Option<&mut Argument<'heap>>, +) -> Expr<'heap> { + let Some(name) = argument_to_ident(name) else { + expander + .diagnostics + .push(error::invalid_input_binding_name(name)); + return Expr::dummy(); + }; + + let mut type_expr = mem::replace(&mut r#type.value, Expr::dummy()); + expander.with_universe(Universe::Type, |expander| { + expander.visit(&mut type_expr); + }); + let r#type = lower_expr_to_type(expander, type_expr); + + let default = default.map(|default| { + let mut value = mem::replace(&mut default.value, Expr::dummy()); + expander.visit(&mut value); + Box::new_in(value, expander.heap) + }); + + Expr { + id: NodeId::PLACEHOLDER, + span, + kind: ExprKind::Input(InputExpr { + id: NodeId::PLACEHOLDER, + span, + name, + r#type: Box::new_in(r#type, expander.heap), + default, + }), + } +} + +pub(super) fn lower_input<'heap>( + expander: &mut Expander<'_, 'heap>, + CallExpr { + id: _, + span, + function: _, + arguments, + labeled_arguments, + }: &mut CallExpr<'heap>, +) -> Expr<'heap> { + if !labeled_arguments.is_empty() { + expander + .diagnostics + .push(error::labeled_arguments_in_input(labeled_arguments)); + } + + match &mut **arguments { + [name, r#type] => lower_input_impl(*span, expander, name, r#type, None), + [name, r#type, default] => lower_input_impl(*span, expander, name, r#type, Some(default)), + _ => { + expander + .diagnostics + .push(error::invalid_input_argument_count(*span, arguments)); + + Expr::dummy() + } + } +} diff --git a/libs/@local/hashql/ast/src/lower/expander/mod.rs b/libs/@local/hashql/ast/src/lower/expander/mod.rs index d30bf8a6d52..d6e819952c2 100644 --- a/libs/@local/hashql/ast/src/lower/expander/mod.rs +++ b/libs/@local/hashql/ast/src/lower/expander/mod.rs @@ -1,6 +1,9 @@ +mod access; mod r#as; mod error; mod r#if; +mod index; +mod input; mod r#let; mod r#type; @@ -214,9 +217,18 @@ impl<'heap> Visitor<'heap> for Expander<'_, 'heap> { sym::path::newtype::CONST => {} sym::path::r#use::CONST => {} sym::path::r#fn::CONST => {} - sym::path::input::CONST => {} - sym::path::index::CONST => {} - sym::path::access::CONST => {} + sym::path::input::CONST => { + self.trampoline = Some(input::lower_input(self, expr)); + return; + } + sym::path::index::CONST => { + self.trampoline = Some(index::lower_index(self, expr)); + return; + } + sym::path::access::CONST => { + self.trampoline = Some(access::lower_access(self, expr)); + return; + } _ => {} } } From 5df45716d2c75d9c055b2b378c00bbeecdbb2f4d Mon Sep 17 00:00:00 2001 From: Bilal Mahmoud <7252775+indietyp@users.noreply.github.com> Date: Fri, 12 Jun 2026 15:02:08 +0200 Subject: [PATCH 16/55] feat: port type --- .../hashql/ast/src/lower/expander/access.rs | 23 ++- .../hashql/ast/src/lower/expander/as.rs | 20 +- .../hashql/ast/src/lower/expander/if.rs | 20 +- .../hashql/ast/src/lower/expander/index.rs | 20 +- .../hashql/ast/src/lower/expander/input.rs | 20 +- .../hashql/ast/src/lower/expander/let.rs | 22 ++- .../hashql/ast/src/lower/expander/mod.rs | 20 +- .../hashql/ast/src/lower/expander/type.rs | 185 +++++++++++++++++- libs/@local/hashql/ast/src/node/generic.rs | 6 +- libs/@local/hashql/ast/src/node/path.rs | 11 ++ 10 files changed, 285 insertions(+), 62 deletions(-) diff --git a/libs/@local/hashql/ast/src/lower/expander/access.rs b/libs/@local/hashql/ast/src/lower/expander/access.rs index 150313490af..a15aeef0302 100644 --- a/libs/@local/hashql/ast/src/lower/expander/access.rs +++ b/libs/@local/hashql/ast/src/lower/expander/access.rs @@ -1,6 +1,7 @@ use core::mem; use hashql_core::{ + heap::BumpAllocator, span::SpanId, symbol::{Ident, IdentKind}, value::Primitive, @@ -20,8 +21,8 @@ use crate::{ /// Handles both named field access (identifiers like `name`) and indexed field /// access (integer literals like `0` for tuple fields). Integer literals are /// validated for bounds. -fn argument_to_field<'heap>( - expander: &mut Expander<'_, 'heap>, +fn argument_to_field<'heap, S>( + expander: &mut Expander<'_, 'heap, S>, argument: &Argument<'heap>, ) -> Option> { // Integer literal for tuple field access @@ -67,13 +68,16 @@ fn argument_to_field<'heap>( None } -fn lower_access_impl<'heap>( +fn lower_access_impl<'heap, S>( span: SpanId, - expander: &mut Expander<'_, 'heap>, + expander: &mut Expander<'_, 'heap, S>, value: &mut Argument<'heap>, field: &Argument<'heap>, -) -> Expr<'heap> { +) -> Expr<'heap> +where + S: BumpAllocator, +{ let Some(field) = argument_to_field(expander, field) else { return Expr::dummy(); }; @@ -93,8 +97,8 @@ fn lower_access_impl<'heap>( } } -pub(super) fn lower_access<'heap>( - expander: &mut Expander<'_, 'heap>, +pub(super) fn lower_access<'heap, S>( + expander: &mut Expander<'_, 'heap, S>, CallExpr { id: _, span, @@ -102,7 +106,10 @@ pub(super) fn lower_access<'heap>( arguments, labeled_arguments, }: &mut CallExpr<'heap>, -) -> Expr<'heap> { +) -> Expr<'heap> +where + S: BumpAllocator, +{ if !labeled_arguments.is_empty() { expander .diagnostics diff --git a/libs/@local/hashql/ast/src/lower/expander/as.rs b/libs/@local/hashql/ast/src/lower/expander/as.rs index 818545fbcd7..d48e40fd9a0 100644 --- a/libs/@local/hashql/ast/src/lower/expander/as.rs +++ b/libs/@local/hashql/ast/src/lower/expander/as.rs @@ -1,6 +1,6 @@ use core::mem; -use hashql_core::{module::Universe, span::SpanId}; +use hashql_core::{heap::BumpAllocator, module::Universe, span::SpanId}; use super::Expander; use crate::{ @@ -11,13 +11,16 @@ use crate::{ }, }; -fn lower_as_impl<'heap>( +fn lower_as_impl<'heap, S>( span: SpanId, - expander: &mut Expander<'_, 'heap>, + expander: &mut Expander<'_, 'heap, S>, body: &mut Argument<'heap>, r#type: &mut Argument<'heap>, -) -> Expr<'heap> { +) -> Expr<'heap> +where + S: BumpAllocator, +{ let mut body = mem::replace(&mut body.value, Expr::dummy()); let mut r#type = mem::replace(&mut r#type.value, Expr::dummy()); @@ -37,8 +40,8 @@ fn lower_as_impl<'heap>( } } -pub(super) fn lower_as<'heap>( - expander: &mut Expander<'_, 'heap>, +pub(super) fn lower_as<'heap, S>( + expander: &mut Expander<'_, 'heap, S>, CallExpr { id: _, span, @@ -46,7 +49,10 @@ pub(super) fn lower_as<'heap>( arguments, labeled_arguments, }: &mut CallExpr<'heap>, -) -> Expr<'heap> { +) -> Expr<'heap> +where + S: BumpAllocator, +{ if !labeled_arguments.is_empty() { expander .diagnostics diff --git a/libs/@local/hashql/ast/src/lower/expander/if.rs b/libs/@local/hashql/ast/src/lower/expander/if.rs index 626964951e4..0799c46103b 100644 --- a/libs/@local/hashql/ast/src/lower/expander/if.rs +++ b/libs/@local/hashql/ast/src/lower/expander/if.rs @@ -1,6 +1,6 @@ use core::mem; -use hashql_core::span::SpanId; +use hashql_core::{heap::BumpAllocator, span::SpanId}; use super::Expander; use crate::{ @@ -11,14 +11,17 @@ use crate::{ }, }; -fn lower_if_impl<'heap>( +fn lower_if_impl<'heap, S>( span: SpanId, - expander: &mut Expander<'_, 'heap>, + expander: &mut Expander<'_, 'heap, S>, test: &mut Argument<'heap>, then: &mut Argument<'heap>, r#else: Option<&mut Argument<'heap>>, -) -> Expr<'heap> { +) -> Expr<'heap> +where + S: BumpAllocator, +{ let mut test = mem::replace(&mut test.value, Expr::dummy()); let mut then = mem::replace(&mut then.value, Expr::dummy()); let mut r#else = r#else.map(|argument| mem::replace(&mut argument.value, Expr::dummy())); @@ -42,8 +45,8 @@ fn lower_if_impl<'heap>( } } -pub(super) fn lower_if<'heap>( - expander: &mut Expander<'_, 'heap>, +pub(super) fn lower_if<'heap, S>( + expander: &mut Expander<'_, 'heap, S>, CallExpr { id: _, span, @@ -51,7 +54,10 @@ pub(super) fn lower_if<'heap>( arguments, labeled_arguments, }: &mut CallExpr<'heap>, -) -> Expr<'heap> { +) -> Expr<'heap> +where + S: BumpAllocator, +{ if !labeled_arguments.is_empty() { expander .diagnostics diff --git a/libs/@local/hashql/ast/src/lower/expander/index.rs b/libs/@local/hashql/ast/src/lower/expander/index.rs index 64ee02e078d..68ba8036c97 100644 --- a/libs/@local/hashql/ast/src/lower/expander/index.rs +++ b/libs/@local/hashql/ast/src/lower/expander/index.rs @@ -1,6 +1,6 @@ use core::mem; -use hashql_core::span::SpanId; +use hashql_core::{heap::BumpAllocator, span::SpanId}; use super::Expander; use crate::{ @@ -11,13 +11,16 @@ use crate::{ }, }; -fn lower_index_impl<'heap>( +fn lower_index_impl<'heap, S>( span: SpanId, - expander: &mut Expander<'_, 'heap>, + expander: &mut Expander<'_, 'heap, S>, value: &mut Argument<'heap>, index: &mut Argument<'heap>, -) -> Expr<'heap> { +) -> Expr<'heap> +where + S: BumpAllocator, +{ let mut value = mem::replace(&mut value.value, Expr::dummy()); let mut index = mem::replace(&mut index.value, Expr::dummy()); @@ -36,8 +39,8 @@ fn lower_index_impl<'heap>( } } -pub(super) fn lower_index<'heap>( - expander: &mut Expander<'_, 'heap>, +pub(super) fn lower_index<'heap, S>( + expander: &mut Expander<'_, 'heap, S>, CallExpr { id: _, span, @@ -45,7 +48,10 @@ pub(super) fn lower_index<'heap>( arguments, labeled_arguments, }: &mut CallExpr<'heap>, -) -> Expr<'heap> { +) -> Expr<'heap> +where + S: BumpAllocator, +{ if !labeled_arguments.is_empty() { expander .diagnostics diff --git a/libs/@local/hashql/ast/src/lower/expander/input.rs b/libs/@local/hashql/ast/src/lower/expander/input.rs index 90c4e822b5e..25a6f0871a0 100644 --- a/libs/@local/hashql/ast/src/lower/expander/input.rs +++ b/libs/@local/hashql/ast/src/lower/expander/input.rs @@ -1,6 +1,6 @@ use core::mem; -use hashql_core::{module::Universe, span::SpanId, symbol::Ident}; +use hashql_core::{heap::BumpAllocator, module::Universe, span::SpanId, symbol::Ident}; use super::Expander; use crate::{ @@ -21,14 +21,17 @@ fn argument_to_ident<'heap>(argument: &Argument<'heap>) -> Option> } } -fn lower_input_impl<'heap>( +fn lower_input_impl<'heap, S>( span: SpanId, - expander: &mut Expander<'_, 'heap>, + expander: &mut Expander<'_, 'heap, S>, name: &Argument<'heap>, r#type: &mut Argument<'heap>, default: Option<&mut Argument<'heap>>, -) -> Expr<'heap> { +) -> Expr<'heap> +where + S: BumpAllocator, +{ let Some(name) = argument_to_ident(name) else { expander .diagnostics @@ -61,8 +64,8 @@ fn lower_input_impl<'heap>( } } -pub(super) fn lower_input<'heap>( - expander: &mut Expander<'_, 'heap>, +pub(super) fn lower_input<'heap, S>( + expander: &mut Expander<'_, 'heap, S>, CallExpr { id: _, span, @@ -70,7 +73,10 @@ pub(super) fn lower_input<'heap>( arguments, labeled_arguments, }: &mut CallExpr<'heap>, -) -> Expr<'heap> { +) -> Expr<'heap> +where + S: BumpAllocator, +{ if !labeled_arguments.is_empty() { expander .diagnostics diff --git a/libs/@local/hashql/ast/src/lower/expander/let.rs b/libs/@local/hashql/ast/src/lower/expander/let.rs index 4e1f538cece..e7a6e1805dc 100644 --- a/libs/@local/hashql/ast/src/lower/expander/let.rs +++ b/libs/@local/hashql/ast/src/lower/expander/let.rs @@ -1,6 +1,6 @@ use core::mem; -use hashql_core::{span::SpanId, symbol::Ident}; +use hashql_core::{heap::BumpAllocator, span::SpanId, symbol::Ident}; use super::{Expander, r#type::lower_expr_to_type}; use crate::{ @@ -11,7 +11,7 @@ use crate::{ }, }; -fn argument_to_ident<'heap>(argument: &Argument<'heap>) -> Option> { +pub(super) fn argument_to_ident<'heap>(argument: &Argument<'heap>) -> Option> { if let ExprKind::Path(path) = &argument.value.kind && let Some(&ident) = path.as_ident() { @@ -21,15 +21,18 @@ fn argument_to_ident<'heap>(argument: &Argument<'heap>) -> Option> } } -fn lower_let_impl<'heap>( +fn lower_let_impl<'heap, S>( span: SpanId, - expander: &mut Expander<'_, 'heap>, + expander: &mut Expander<'_, 'heap, S>, name: &Argument<'heap>, value: &mut Argument<'heap>, r#type: Option<&mut Argument<'heap>>, body: &mut Argument<'heap>, -) -> Expr<'heap> { +) -> Expr<'heap> +where + S: BumpAllocator, +{ let Some(name) = argument_to_ident(name) else { expander .diagnostics @@ -74,8 +77,8 @@ fn lower_let_impl<'heap>( } } -pub(super) fn lower_let<'heap>( - expander: &mut Expander<'_, 'heap>, +pub(super) fn lower_let<'heap, S>( + expander: &mut Expander<'_, 'heap, S>, CallExpr { id: _, span, @@ -83,7 +86,10 @@ pub(super) fn lower_let<'heap>( arguments, labeled_arguments, }: &mut CallExpr<'heap>, -) -> Expr<'heap> { +) -> Expr<'heap> +where + S: BumpAllocator, +{ if !labeled_arguments.is_empty() { // We continue, to try to recover, if that means that the user has a labeled argument // instead of a positional one we error twice, but that is deemed acceptable. diff --git a/libs/@local/hashql/ast/src/lower/expander/mod.rs b/libs/@local/hashql/ast/src/lower/expander/mod.rs index d6e819952c2..1273664380f 100644 --- a/libs/@local/hashql/ast/src/lower/expander/mod.rs +++ b/libs/@local/hashql/ast/src/lower/expander/mod.rs @@ -8,7 +8,7 @@ mod r#let; mod r#type; use hashql_core::{ - heap, + heap::{self, BumpAllocator}, module::{ self, Reference, Universe, item::{IntrinsicItem, Item}, @@ -27,8 +27,9 @@ use crate::{ // The expander does the following: // 1. it resolves imports // 2. once resolved, it expands special forms -pub struct Expander<'env, 'heap> { +pub struct Expander<'env, 'heap, S> { heap: &'heap heap::Heap, + scratch: S, namespace: ModuleNamespace<'env, 'heap>, current_universe: Universe, @@ -38,11 +39,12 @@ pub struct Expander<'env, 'heap> { trampoline: Option>, } -impl<'env, 'heap> Expander<'env, 'heap> { - pub const fn new(namespace: ModuleNamespace<'env, 'heap>) -> Self { +impl<'env, 'heap, S> Expander<'env, 'heap, S> { + pub const fn new(namespace: ModuleNamespace<'env, 'heap>, scratch: S) -> Self { Self { heap: namespace.registry().heap, namespace, + scratch, current_universe: Universe::Value, diagnostics: ExpanderDiagnosticIssues::new(), current_item: None, @@ -50,7 +52,10 @@ impl<'env, 'heap> Expander<'env, 'heap> { } } - fn visit(&mut self, expr: &mut node::expr::Expr<'heap>) -> Option> { + fn visit(&mut self, expr: &mut node::expr::Expr<'heap>) -> Option> + where + S: BumpAllocator, + { let prev_current_item = self.current_item.take(); visit::walk_expr(self, expr); @@ -94,7 +99,10 @@ impl<'env, 'heap> Expander<'env, 'heap> { } } -impl<'heap> Visitor<'heap> for Expander<'_, 'heap> { +impl<'heap, S> Visitor<'heap> for Expander<'_, 'heap, S> +where + S: BumpAllocator, +{ fn visit_path(&mut self, path: &mut node::path::Path<'heap>) { self.current_item = None; visit::walk_path(self, path); diff --git a/libs/@local/hashql/ast/src/lower/expander/type.rs b/libs/@local/hashql/ast/src/lower/expander/type.rs index 2af71117423..b90a40c1859 100644 --- a/libs/@local/hashql/ast/src/lower/expander/type.rs +++ b/libs/@local/hashql/ast/src/lower/expander/type.rs @@ -1,22 +1,32 @@ +use core::mem; + use hashql_core::{ + collections::fast_hash_map_with_capacity_in, + heap::{self, BumpAllocator}, module::item::{IntrinsicItem, Item}, - symbol::sym, + span::SpanId, + symbol::{Ident, sym}, }; use super::Expander; use crate::{ - lower::expander::error, + lower::expander::{error, r#let::argument_to_ident}, node::{ - expr::{CallExpr, Expr, ExprKind}, + expr::{CallExpr, Expr, ExprKind, TypeExpr, call::Argument}, + generic::{self, GenericConstraint}, id::NodeId, + path::PathSegmentArgument, r#type::{IntersectionType, StructType, TupleType, Type, TypeKind, UnionType}, }, }; -fn lower_call_to_type<'heap>( - expander: &mut Expander<'_, 'heap>, +fn lower_call_to_type<'heap, S>( + expander: &mut Expander<'_, 'heap, S>, mut call: CallExpr<'heap>, -) -> Type<'heap> { +) -> Type<'heap> +where + S: BumpAllocator, +{ if !call.labeled_arguments.is_empty() { expander .diagnostics @@ -81,10 +91,13 @@ fn lower_call_to_type<'heap>( } } -pub(super) fn lower_expr_to_type<'heap>( - expander: &mut Expander<'_, 'heap>, +pub(super) fn lower_expr_to_type<'heap, S>( + expander: &mut Expander<'_, 'heap, S>, expr: Expr<'heap>, -) -> Type<'heap> { +) -> Type<'heap> +where + S: BumpAllocator, +{ match expr.kind { ExprKind::Call(call) => lower_call_to_type(expander, call), ExprKind::Tuple(tuple) => { @@ -192,3 +205,157 @@ pub(super) fn lower_expr_to_type<'heap>( } } } + +fn path_arguments_to_constraints<'heap, S>( + expander: &mut Expander<'_, 'heap, S>, + + arguments: &mut [PathSegmentArgument<'heap>], +) -> heap::Vec<'heap, GenericConstraint<'heap>> +where + S: BumpAllocator, +{ + let mut constraints = heap::Vec::with_capacity_in(arguments.len(), expander.heap); + let mut seen = fast_hash_map_with_capacity_in(arguments.len(), &expander.scratch); + + for argument in arguments { + match argument { + PathSegmentArgument::Argument(generic::GenericArgument { + id, + span, + r#type: + Type { + id: _, + span: _, + kind: TypeKind::Path(path), + }, + }) if let Some(&ident) = path.as_ident() => { + // In this case it's simply interpreted as a generic constraint with no bounds. + if let Err(error) = seen.try_insert(ident.value, ident.span) { + todo!("kael you know what to do"); + continue; + } + + constraints.push(GenericConstraint { + id: *id, + span: *span, + name: ident, + bound: None, + }); + } + PathSegmentArgument::Argument(_) => { + todo!( + "kael you know what to do, means that there's no path, we may want to \ + specialize in case of a path encountered to educate the user" + ) + } + PathSegmentArgument::Constraint(generic_constraint) => { + if let Err(error) = + seen.try_insert(generic_constraint.name.value, generic_constraint.name.span) + { + todo!("kael you know what to do"); + + continue; + } + + constraints.push(GenericConstraint { + id: NodeId::PLACEHOLDER, + span: generic_constraint.span, + name: generic_constraint.name, + bound: generic_constraint.bound.take(), + }); + } + } + } + + constraints +} + +fn argument_to_generic_ident<'argument, 'heap, S>( + expander: &mut Expander<'_, 'heap, S>, + + argument: &mut Argument<'heap>, +) -> Option<(Ident<'heap>, heap::Vec<'heap, GenericConstraint<'heap>>)> +where + S: BumpAllocator, +{ + if let ExprKind::Path(path) = &mut argument.value.kind + && let Some((name, arguments)) = path.as_generic_ident_mut() + { + let constraints = path_arguments_to_constraints(expander, arguments); + + Some((name, constraints)) + } else { + None + } +} + +fn lower_type_impl<'heap, S>( + span: SpanId, + expander: &mut Expander<'_, 'heap, S>, + + name: &mut Argument<'heap>, + value: &mut Argument<'heap>, + body: &mut Argument<'heap>, +) -> Expr<'heap> +where + S: BumpAllocator, +{ + let Some((name, constraints)) = argument_to_generic_ident(expander, name) else { + todo!("kael you know what to do :3"); + + return Expr::dummy(); + }; + + let mut value = mem::replace(&mut value.value, Expr::dummy()); + let mut body = mem::replace(&mut body.value, Expr::dummy()); + + expander.with_universe(hashql_core::module::Universe::Type, |expander| { + expander.visit(&mut value) + }); + let value = lower_expr_to_type(expander, value); + + expander.enter( + hashql_core::module::Universe::Type, + name.value, + None, + |expander| expander.visit(&mut body), + ); + + Expr { + id: NodeId::PLACEHOLDER, + span, + kind: ExprKind::Type(TypeExpr { + id: NodeId::PLACEHOLDER, + span, + name, + constraints, + value: Box::new_in(value, expander.heap), + body: Box::new_in(body, expander.heap), + }), + } +} + +pub(super) fn lower_type<'heap, S>( + expander: &mut Expander<'_, 'heap, S>, + CallExpr { + id: _, + span, + function: _, + arguments, + labeled_arguments, + }: &mut CallExpr<'heap>, +) -> Expr<'heap> +where + S: BumpAllocator, +{ + if !labeled_arguments.is_empty() { + todo!("kael you know what to do") + } + + match &mut **arguments { + [name, value, body] => lower_type_impl(*span, expander, name, value, body), + _ => { + todo!("kael you know what to do :3") + } + } +} diff --git a/libs/@local/hashql/ast/src/node/generic.rs b/libs/@local/hashql/ast/src/node/generic.rs index c2f9b849ee8..7301976646a 100644 --- a/libs/@local/hashql/ast/src/node/generic.rs +++ b/libs/@local/hashql/ast/src/node/generic.rs @@ -17,7 +17,7 @@ pub struct GenericArgument<'heap> { pub id: NodeId, pub span: SpanId, - pub r#type: heap::Box<'heap, Type<'heap>>, + pub r#type: Type<'heap>, } /// Represents a constraint applied to a generic type parameter. @@ -46,7 +46,7 @@ pub struct GenericConstraint<'heap> { pub name: Ident<'heap>, // Due to the fact that we have `&` and `|`, we don't need to have `Vec` of bounds - pub bound: Option>>, + pub bound: Option>, } /// A generic type parameter declaration. @@ -66,7 +66,7 @@ pub struct GenericParam<'heap> { pub span: SpanId, pub name: Ident<'heap>, - pub bound: Option>>, + pub bound: Option>, } /// A collection of generic parameters for a type or function. diff --git a/libs/@local/hashql/ast/src/node/path.rs b/libs/@local/hashql/ast/src/node/path.rs index 93cabe0d4f5..e353bca4092 100644 --- a/libs/@local/hashql/ast/src/node/path.rs +++ b/libs/@local/hashql/ast/src/node/path.rs @@ -163,6 +163,17 @@ impl<'heap> Path<'heap> { Some((segment.name, &segment.arguments)) } + pub fn as_generic_ident_mut( + &mut self, + ) -> Option<(Ident<'heap>, &mut [PathSegmentArgument<'heap>])> { + if !self.is_generic_ident() { + return None; + } + + let segment = &mut self.segments[0]; + Some((segment.name, &mut segment.arguments)) + } + pub(crate) fn into_ident(mut self) -> Option> { if !self.is_ident() { return None; From 993d67f743ab156b44b0c2207a926af885c59764 Mon Sep 17 00:00:00 2001 From: Bilal Mahmoud <7252775+indietyp@users.noreply.github.com> Date: Fri, 12 Jun 2026 15:17:22 +0200 Subject: [PATCH 17/55] feat: convert type and newtype --- .../hashql/ast/src/lower/expander/access.rs | 15 +- .../hashql/ast/src/lower/expander/as.rs | 15 +- .../hashql/ast/src/lower/expander/error.rs | 245 ++++++++++++++++++ .../hashql/ast/src/lower/expander/index.rs | 15 +- .../hashql/ast/src/lower/expander/mod.rs | 16 +- .../hashql/ast/src/lower/expander/newtype.rs | 93 +++++++ .../hashql/ast/src/lower/expander/type.rs | 73 ++++-- 7 files changed, 423 insertions(+), 49 deletions(-) create mode 100644 libs/@local/hashql/ast/src/lower/expander/newtype.rs diff --git a/libs/@local/hashql/ast/src/lower/expander/access.rs b/libs/@local/hashql/ast/src/lower/expander/access.rs index a15aeef0302..669cb375969 100644 --- a/libs/@local/hashql/ast/src/lower/expander/access.rs +++ b/libs/@local/hashql/ast/src/lower/expander/access.rs @@ -116,14 +116,13 @@ where .push(error::labeled_arguments_in_access(labeled_arguments)); } - match &mut **arguments { - [value, field] => lower_access_impl(*span, expander, value, field), - _ => { - expander - .diagnostics - .push(error::invalid_access_argument_count(*span, arguments)); + if let [value, field] = &mut **arguments { + lower_access_impl(*span, expander, value, field) + } else { + expander + .diagnostics + .push(error::invalid_access_argument_count(*span, arguments)); - Expr::dummy() - } + Expr::dummy() } } diff --git a/libs/@local/hashql/ast/src/lower/expander/as.rs b/libs/@local/hashql/ast/src/lower/expander/as.rs index d48e40fd9a0..05fd2fc8b4c 100644 --- a/libs/@local/hashql/ast/src/lower/expander/as.rs +++ b/libs/@local/hashql/ast/src/lower/expander/as.rs @@ -59,14 +59,13 @@ where .push(error::labeled_arguments_in_as(labeled_arguments)); } - match &mut **arguments { - [body, r#type] => lower_as_impl(*span, expander, body, r#type), - _ => { - expander - .diagnostics - .push(error::invalid_as_argument_count(*span, arguments)); + if let [body, r#type] = &mut **arguments { + lower_as_impl(*span, expander, body, r#type) + } else { + expander + .diagnostics + .push(error::invalid_as_argument_count(*span, arguments)); - Expr::dummy() - } + Expr::dummy() } } diff --git a/libs/@local/hashql/ast/src/lower/expander/error.rs b/libs/@local/hashql/ast/src/lower/expander/error.rs index d93b73f4742..86d6ebe8fdf 100644 --- a/libs/@local/hashql/ast/src/lower/expander/error.rs +++ b/libs/@local/hashql/ast/src/lower/expander/error.rs @@ -143,6 +143,16 @@ const INVALID_ACCESS_FIELD: TerminalDiagnosticCategory = TerminalDiagnosticCateg name: "Invalid access field", }; +const DUPLICATE_GENERIC_CONSTRAINT: TerminalDiagnosticCategory = TerminalDiagnosticCategory { + id: "duplicate-generic-constraint", + name: "Duplicate generic constraint", +}; + +const INVALID_GENERIC_ARGUMENT: TerminalDiagnosticCategory = TerminalDiagnosticCategory { + id: "invalid-generic-argument", + name: "Invalid generic argument", +}; + #[derive(Debug, Copy, Clone, PartialEq, Eq, Hash)] pub enum ExpanderDiagnosticCategory { EmptyPath, @@ -167,6 +177,8 @@ pub enum ExpanderDiagnosticCategory { InvalidFieldLiteralType, FieldIndexOutOfBounds, InvalidAccessField, + DuplicateGenericConstraint, + InvalidGenericArgument, } impl DiagnosticCategory for ExpanderDiagnosticCategory { @@ -202,6 +214,8 @@ impl DiagnosticCategory for ExpanderDiagnosticCategory { Self::InvalidFieldLiteralType => Some(&INVALID_FIELD_LITERAL_TYPE), Self::FieldIndexOutOfBounds => Some(&FIELD_INDEX_OUT_OF_BOUNDS), Self::InvalidAccessField => Some(&INVALID_ACCESS_FIELD), + Self::DuplicateGenericConstraint => Some(&DUPLICATE_GENERIC_CONSTRAINT), + Self::InvalidGenericArgument => Some(&INVALID_GENERIC_ARGUMENT), } } } @@ -1281,6 +1295,237 @@ pub(crate) fn field_index_out_of_bounds(literal_span: SpanId) -> ExpanderDiagnos diagnostic } +/// A `type` call was passed labeled arguments. +pub(crate) fn labeled_arguments_in_type( + labeled_arguments: &[LabeledArgument<'_>], +) -> ExpanderDiagnostic { + let (first, rest) = labeled_arguments + .split_first() + .expect("caller should check that labeled_arguments is non-empty"); + + let mut diagnostic = Diagnostic::new( + ExpanderDiagnosticCategory::LabeledArgumentsNotSupported, + Severity::Error, + ) + .primary(Label::new( + first.span, + "labeled arguments are not allowed in `type`", + )); + + for argument in rest { + diagnostic.add_label(Label::new( + argument.span, + "labeled argument not allowed here", + )); + } + + diagnostic.add_message(Message::help( + "pass the arguments positionally: `(type Name type-expr body)`", + )); + + diagnostic +} + +/// A `type` call was passed the wrong number of arguments. +/// +/// `type` accepts exactly 3 arguments: `(type Name type-expr body)`. +pub(crate) fn invalid_type_argument_count( + call_span: SpanId, + arguments: &[Argument<'_>], +) -> ExpanderDiagnostic { + let count = arguments.len(); + + let mut diagnostic = Diagnostic::new( + ExpanderDiagnosticCategory::InvalidArgumentCount, + Severity::Error, + ) + .primary(Label::new( + call_span, + format!("expected 3 arguments to `type`, found {count}"), + )); + + for argument in arguments.iter().skip(3) { + diagnostic.add_label(Label::new(argument.span, "unexpected argument")); + } + + diagnostic.add_message(Message::help("use `(type Name type-expr body)`")); + + diagnostic.add_message(Message::note( + "the arguments are, in order: the type name (optionally with generic parameters), the \ + type definition, and the body where the name is in scope", + )); + + diagnostic +} + +/// The first argument to `type` is not a valid type name. +/// +/// The name position requires a simple identifier, optionally with generic +/// parameters like `Foo`, not a qualified path or arbitrary expression. +pub(crate) fn invalid_type_binding_name(name: &Argument<'_>) -> ExpanderDiagnostic { + let mut diagnostic = Diagnostic::new( + ExpanderDiagnosticCategory::InvalidBindingName, + Severity::Error, + ) + .primary(Label::new( + name.value.span, + "expected a type name for the `type` binding", + )); + + diagnostic.add_message(Message::help( + "write `(type Name type-expr body)` with a name like `MyType` or `Pair`", + )); + + diagnostic.add_message(Message::note( + "the first argument to `type` introduces a new type alias and must be a simple \ + identifier, optionally with generic parameters", + )); + + diagnostic +} + +/// The first argument to `newtype` is not a valid type name. +pub(crate) fn invalid_newtype_binding_name(name: &Argument<'_>) -> ExpanderDiagnostic { + let mut diagnostic = Diagnostic::new( + ExpanderDiagnosticCategory::InvalidBindingName, + Severity::Error, + ) + .primary(Label::new( + name.value.span, + "expected a type name for the `newtype` binding", + )); + + diagnostic.add_message(Message::help( + "write `(newtype Name type-expr body)` with a name like `UserId` or `Pair`", + )); + + diagnostic.add_message(Message::note( + "the first argument to `newtype` introduces a new distinct type and must be a simple \ + identifier, optionally with generic parameters", + )); + + diagnostic +} + +/// A `newtype` call was passed labeled arguments. +pub(crate) fn labeled_arguments_in_newtype( + labeled_arguments: &[LabeledArgument<'_>], +) -> ExpanderDiagnostic { + let (first, rest) = labeled_arguments + .split_first() + .expect("caller should check that labeled_arguments is non-empty"); + + let mut diagnostic = Diagnostic::new( + ExpanderDiagnosticCategory::LabeledArgumentsNotSupported, + Severity::Error, + ) + .primary(Label::new( + first.span, + "labeled arguments are not allowed in `newtype`", + )); + + for argument in rest { + diagnostic.add_label(Label::new( + argument.span, + "labeled argument not allowed here", + )); + } + + diagnostic.add_message(Message::help( + "pass the arguments positionally: `(newtype Name type-expr body)`", + )); + + diagnostic +} + +/// A `newtype` call was passed the wrong number of arguments. +/// +/// `newtype` accepts exactly 3 arguments: `(newtype Name type-expr body)`. +pub(crate) fn invalid_newtype_argument_count( + call_span: SpanId, + arguments: &[Argument<'_>], +) -> ExpanderDiagnostic { + let count = arguments.len(); + + let mut diagnostic = Diagnostic::new( + ExpanderDiagnosticCategory::InvalidArgumentCount, + Severity::Error, + ) + .primary(Label::new( + call_span, + format!("expected 3 arguments to `newtype`, found {count}"), + )); + + for argument in arguments.iter().skip(3) { + diagnostic.add_label(Label::new(argument.span, "unexpected argument")); + } + + diagnostic.add_message(Message::help("use `(newtype Name type-expr body)`")); + + diagnostic.add_message(Message::note( + "the arguments are, in order: the type name (optionally with generic parameters), the \ + underlying type, and the body where the name is in scope", + )); + + diagnostic +} + +/// A generic parameter was declared more than once. +pub(crate) fn duplicate_generic_constraint( + duplicate_span: SpanId, + name: Symbol<'_>, + original_span: SpanId, +) -> ExpanderDiagnostic { + let mut diagnostic = Diagnostic::new( + ExpanderDiagnosticCategory::DuplicateGenericConstraint, + Severity::Error, + ) + .primary(Label::new( + duplicate_span, + format!("duplicate generic parameter `{name}`"), + )); + + diagnostic.add_label(Label::new( + original_span, + format!("`{name}` was first declared here"), + )); + + diagnostic.add_message(Message::help( + "remove the duplicate declaration or use a different name", + )); + + diagnostic +} + +/// A generic argument in a type name is not a valid constraint. +/// +/// Generic arguments must be simple identifiers (for unconstrained parameters) +/// or named constraints like `T: Bound`. +pub(crate) fn invalid_generic_argument(span: SpanId, is_path: bool) -> ExpanderDiagnostic { + let mut diagnostic = Diagnostic::new( + ExpanderDiagnosticCategory::InvalidGenericArgument, + Severity::Error, + ) + .primary(Label::new(span, "expected a simple type parameter")); + + if is_path { + diagnostic.add_message(Message::help( + "use a simple identifier like `T`, not a qualified path", + )); + } else { + diagnostic.add_message(Message::help( + "use a simple identifier like `T` or a constraint like `T: Bound`", + )); + } + + diagnostic.add_message(Message::note( + "generic parameters are declared as `Name` for unconstrained or `Name` for \ + constrained parameters", + )); + + diagnostic +} + /// A type constructor call was passed labeled arguments. /// /// Type constructor calls like `(| Int String)` only accept positional operands. diff --git a/libs/@local/hashql/ast/src/lower/expander/index.rs b/libs/@local/hashql/ast/src/lower/expander/index.rs index 68ba8036c97..09f3952a7b9 100644 --- a/libs/@local/hashql/ast/src/lower/expander/index.rs +++ b/libs/@local/hashql/ast/src/lower/expander/index.rs @@ -58,14 +58,13 @@ where .push(error::labeled_arguments_in_index(labeled_arguments)); } - match &mut **arguments { - [value, index] => lower_index_impl(*span, expander, value, index), - _ => { - expander - .diagnostics - .push(error::invalid_index_argument_count(*span, arguments)); + if let [value, index] = &mut **arguments { + lower_index_impl(*span, expander, value, index) + } else { + expander + .diagnostics + .push(error::invalid_index_argument_count(*span, arguments)); - Expr::dummy() - } + Expr::dummy() } } diff --git a/libs/@local/hashql/ast/src/lower/expander/mod.rs b/libs/@local/hashql/ast/src/lower/expander/mod.rs index 1273664380f..936afec02df 100644 --- a/libs/@local/hashql/ast/src/lower/expander/mod.rs +++ b/libs/@local/hashql/ast/src/lower/expander/mod.rs @@ -5,6 +5,7 @@ mod r#if; mod index; mod input; mod r#let; +mod newtype; mod r#type; use hashql_core::{ @@ -17,7 +18,10 @@ use hashql_core::{ symbol::{Ident, Symbol, sym}, }; -use self::{r#as::lower_as, error::ExpanderDiagnosticIssues, r#if::lower_if, r#let::lower_let}; +use self::{ + r#as::lower_as, error::ExpanderDiagnosticIssues, r#if::lower_if, r#let::lower_let, + r#type::lower_type, +}; use crate::{ node::{self, id::NodeId}, visit::{self, Visitor}, @@ -221,8 +225,14 @@ where self.trampoline = Some(lower_let(self, expr)); return; } - sym::path::r#type::CONST => {} - sym::path::newtype::CONST => {} + sym::path::r#type::CONST => { + self.trampoline = Some(lower_type(self, expr)); + return; + } + sym::path::newtype::CONST => { + self.trampoline = Some(newtype::lower_newtype(self, expr)); + return; + } sym::path::r#use::CONST => {} sym::path::r#fn::CONST => {} sym::path::input::CONST => { diff --git a/libs/@local/hashql/ast/src/lower/expander/newtype.rs b/libs/@local/hashql/ast/src/lower/expander/newtype.rs new file mode 100644 index 00000000000..96cc8a6f28d --- /dev/null +++ b/libs/@local/hashql/ast/src/lower/expander/newtype.rs @@ -0,0 +1,93 @@ +use core::mem; + +use hashql_core::{heap::BumpAllocator, span::SpanId}; + +use super::Expander; +use crate::{ + lower::expander::{ + error, + r#type::{argument_to_generic_ident, lower_expr_to_type}, + }, + node::{ + expr::{CallExpr, Expr, ExprKind, NewTypeExpr, call::Argument}, + id::NodeId, + }, +}; + +fn lower_newtype_impl<'heap, S>( + span: SpanId, + expander: &mut Expander<'_, 'heap, S>, + + name: &mut Argument<'heap>, + value: &mut Argument<'heap>, + body: &mut Argument<'heap>, +) -> Expr<'heap> +where + S: BumpAllocator, +{ + let Some((name, constraints)) = argument_to_generic_ident(expander, name) else { + expander + .diagnostics + .push(error::invalid_newtype_binding_name(name)); + + return Expr::dummy(); + }; + + let mut value = mem::replace(&mut value.value, Expr::dummy()); + let mut body = mem::replace(&mut body.value, Expr::dummy()); + + expander.with_universe(hashql_core::module::Universe::Type, |expander| { + expander.visit(&mut value) + }); + let value = lower_expr_to_type(expander, value); + + expander.enter( + hashql_core::module::Universe::Type, + name.value, + None, + |expander| expander.visit(&mut body), + ); + + Expr { + id: NodeId::PLACEHOLDER, + span, + kind: ExprKind::NewType(NewTypeExpr { + id: NodeId::PLACEHOLDER, + span, + name, + constraints, + value: Box::new_in(value, expander.heap), + body: Box::new_in(body, expander.heap), + }), + } +} + +pub(super) fn lower_newtype<'heap, S>( + expander: &mut Expander<'_, 'heap, S>, + CallExpr { + id: _, + span, + function: _, + arguments, + labeled_arguments, + }: &mut CallExpr<'heap>, +) -> Expr<'heap> +where + S: BumpAllocator, +{ + if !labeled_arguments.is_empty() { + expander + .diagnostics + .push(error::labeled_arguments_in_newtype(labeled_arguments)); + } + + if let [name, value, body] = &mut **arguments { + lower_newtype_impl(*span, expander, name, value, body) + } else { + expander + .diagnostics + .push(error::invalid_newtype_argument_count(*span, arguments)); + + Expr::dummy() + } +} diff --git a/libs/@local/hashql/ast/src/lower/expander/type.rs b/libs/@local/hashql/ast/src/lower/expander/type.rs index b90a40c1859..4404e9e47a5 100644 --- a/libs/@local/hashql/ast/src/lower/expander/type.rs +++ b/libs/@local/hashql/ast/src/lower/expander/type.rs @@ -2,15 +2,15 @@ use core::mem; use hashql_core::{ collections::fast_hash_map_with_capacity_in, - heap::{self, BumpAllocator}, + heap::{self, BumpAllocator, Heap}, module::item::{IntrinsicItem, Item}, span::SpanId, symbol::{Ident, sym}, }; -use super::Expander; +use super::{Expander, error::ExpanderDiagnosticIssues}; use crate::{ - lower::expander::{error, r#let::argument_to_ident}, + lower::expander::error, node::{ expr::{CallExpr, Expr, ExprKind, TypeExpr, call::Argument}, generic::{self, GenericConstraint}, @@ -207,15 +207,17 @@ where } fn path_arguments_to_constraints<'heap, S>( - expander: &mut Expander<'_, 'heap, S>, + heap: &'heap Heap, + scratch: S, + diagnostics: &mut ExpanderDiagnosticIssues, arguments: &mut [PathSegmentArgument<'heap>], ) -> heap::Vec<'heap, GenericConstraint<'heap>> where S: BumpAllocator, { - let mut constraints = heap::Vec::with_capacity_in(arguments.len(), expander.heap); - let mut seen = fast_hash_map_with_capacity_in(arguments.len(), &expander.scratch); + let mut constraints = heap::Vec::with_capacity_in(arguments.len(), heap); + let mut seen = fast_hash_map_with_capacity_in(arguments.len(), scratch); for argument in arguments { match argument { @@ -231,7 +233,12 @@ where }) if let Some(&ident) = path.as_ident() => { // In this case it's simply interpreted as a generic constraint with no bounds. if let Err(error) = seen.try_insert(ident.value, ident.span) { - todo!("kael you know what to do"); + diagnostics.push(error::duplicate_generic_constraint( + ident.span, + ident.value, + *error.entry.get(), + )); + continue; } @@ -242,17 +249,25 @@ where bound: None, }); } - PathSegmentArgument::Argument(_) => { - todo!( - "kael you know what to do, means that there's no path, we may want to \ - specialize in case of a path encountered to educate the user" - ) + PathSegmentArgument::Argument(generic_argument) => { + let is_path = matches!(generic_argument.r#type.kind, TypeKind::Path(_)); + let span = if is_path { + generic_argument.r#type.span + } else { + generic_argument.span + }; + + diagnostics.push(error::invalid_generic_argument(span, is_path)); } PathSegmentArgument::Constraint(generic_constraint) => { if let Err(error) = seen.try_insert(generic_constraint.name.value, generic_constraint.name.span) { - todo!("kael you know what to do"); + diagnostics.push(error::duplicate_generic_constraint( + generic_constraint.name.span, + generic_constraint.name.value, + *error.entry.get(), + )); continue; } @@ -270,7 +285,7 @@ where constraints } -fn argument_to_generic_ident<'argument, 'heap, S>( +pub(super) fn argument_to_generic_ident<'heap, S>( expander: &mut Expander<'_, 'heap, S>, argument: &mut Argument<'heap>, @@ -281,7 +296,14 @@ where if let ExprKind::Path(path) = &mut argument.value.kind && let Some((name, arguments)) = path.as_generic_ident_mut() { - let constraints = path_arguments_to_constraints(expander, arguments); + let constraints = expander.scratch.scoped(|scratch| { + path_arguments_to_constraints( + expander.heap, + scratch, + &mut expander.diagnostics, + arguments, + ) + }); Some((name, constraints)) } else { @@ -301,7 +323,9 @@ where S: BumpAllocator, { let Some((name, constraints)) = argument_to_generic_ident(expander, name) else { - todo!("kael you know what to do :3"); + expander + .diagnostics + .push(error::invalid_type_binding_name(name)); return Expr::dummy(); }; @@ -349,13 +373,18 @@ where S: BumpAllocator, { if !labeled_arguments.is_empty() { - todo!("kael you know what to do") + expander + .diagnostics + .push(error::labeled_arguments_in_type(labeled_arguments)); } - match &mut **arguments { - [name, value, body] => lower_type_impl(*span, expander, name, value, body), - _ => { - todo!("kael you know what to do :3") - } + if let [name, value, body] = &mut **arguments { + lower_type_impl(*span, expander, name, value, body) + } else { + expander + .diagnostics + .push(error::invalid_type_argument_count(*span, arguments)); + + Expr::dummy() } } From dce112bd81f44d0f6cc7ee42c5a67ff54939aa80 Mon Sep 17 00:00:00 2001 From: Bilal Mahmoud <7252775+indietyp@users.noreply.github.com> Date: Fri, 12 Jun 2026 16:40:21 +0200 Subject: [PATCH 18/55] feat: convert type and newtype --- .../hashql/ast/src/lower/expander/fn.rs | 105 ++++++++++++++++++ .../hashql/ast/src/lower/expander/let.rs | 18 ++- .../hashql/ast/src/lower/expander/mod.rs | 50 +++++++-- .../hashql/ast/src/lower/expander/newtype.rs | 10 +- .../hashql/ast/src/lower/expander/type.rs | 46 +++++--- 5 files changed, 197 insertions(+), 32 deletions(-) create mode 100644 libs/@local/hashql/ast/src/lower/expander/fn.rs diff --git a/libs/@local/hashql/ast/src/lower/expander/fn.rs b/libs/@local/hashql/ast/src/lower/expander/fn.rs new file mode 100644 index 00000000000..0968cae4f17 --- /dev/null +++ b/libs/@local/hashql/ast/src/lower/expander/fn.rs @@ -0,0 +1,105 @@ +use hashql_core::{ + heap::{BumpAllocator, Heap}, + span::SpanId, +}; + +use super::{Expander, r#let::expr_to_ident}; +use crate::node::{ + expr::{CallExpr, Expr, ExprKind, call::Argument}, + generic::{GenericParam, Generics}, + id::NodeId, +}; + +fn lower_params<'heap>(span: SpanId, params: &mut Argument<'heap>) -> Expr<'heap> { + todo!() +} + +fn lower_generics<'heap, S>( + expander: &mut Expander<'_, 'heap, S>, + + generics: &mut Argument<'heap>, +) -> Generics<'heap> +where + S: BumpAllocator, +{ + match &mut generics.value.kind { + ExprKind::Tuple(tuple) => { + let mut params = Vec::with_capacity_in(tuple.elements.len(), expander.heap); + + for element in &mut tuple.elements { + let Some(ident) = expr_to_ident(&element.value) else { + todo!("kael you know what to do"); + + continue; + }; + + params.push(GenericParam { + id: NodeId::PLACEHOLDER, + span: element.span, + name: ident, + bound: None, + }); + } + + Generics { + id: NodeId::PLACEHOLDER, + span: tuple.span, + params, + } + } + ExprKind::Struct(r#struct) => { + let mut params = Vec::with_capacity_in(r#struct.entries.len(), heap); + + for entry in &mut r#struct.entries { + todo!("recursive types"); + } + + Generics { + id: NodeId::PLACEHOLDER, + span: r#struct.span, + params, + } + } + _ => todo!("error out and return empty"), + } +} + +fn lower_fn_impl<'heap, S>( + span: SpanId, + expander: &mut Expander<'_, 'heap, S>, + + generics: &mut Argument<'heap>, + params: &mut Argument<'heap>, + r#return: &mut Argument<'heap>, + body: &mut Argument<'heap>, +) -> Expr<'heap> +where + S: BumpAllocator, +{ + todo!() +} + +pub(super) fn lower_fn<'heap, S>( + expander: &mut Expander<'_, 'heap, S>, + CallExpr { + id: _, + span, + function: _, + arguments, + labeled_arguments, + }: &mut CallExpr<'heap>, +) -> Expr<'heap> +where + S: BumpAllocator, +{ + if !labeled_arguments.is_empty() { + todo!("kael you know what to do"); + } + + if let [generics, params, r#return, body] = &mut **arguments { + lower_fn_impl(*span, expander, generics, params, r#return, body) + } else { + todo!("kael you know what to do"); + Expr::dummy() + } +} diff --git a/libs/@local/hashql/ast/src/lower/expander/let.rs b/libs/@local/hashql/ast/src/lower/expander/let.rs index e7a6e1805dc..fc384dad8a8 100644 --- a/libs/@local/hashql/ast/src/lower/expander/let.rs +++ b/libs/@local/hashql/ast/src/lower/expander/let.rs @@ -2,7 +2,7 @@ use core::mem; use hashql_core::{heap::BumpAllocator, span::SpanId, symbol::Ident}; -use super::{Expander, r#type::lower_expr_to_type}; +use super::{BindingKind, Expander, r#type::lower_expr_to_type}; use crate::{ lower::expander::error, node::{ @@ -11,8 +11,8 @@ use crate::{ }, }; -pub(super) fn argument_to_ident<'heap>(argument: &Argument<'heap>) -> Option> { - if let ExprKind::Path(path) = &argument.value.kind +pub(super) fn expr_to_ident<'heap>(expr: &Expr<'heap>) -> Option> { + if let ExprKind::Path(path) = &expr.kind && let Some(&ident) = path.as_ident() { Some(ident) @@ -21,6 +21,10 @@ pub(super) fn argument_to_ident<'heap>(argument: &Argument<'heap>) -> Option(argument: &Argument<'heap>) -> Option> { + expr_to_ident(&argument.value) +} + fn lower_let_impl<'heap, S>( span: SpanId, expander: &mut Expander<'_, 'heap, S>, @@ -42,10 +46,12 @@ where let item = expander.visit(&mut value.value); - expander.enter( - hashql_core::module::Universe::Value, + expander.bind( name.value, - item, + item.map_or( + BindingKind::Local(hashql_core::module::Universe::Value), + Into::into, + ), |expander| { expander.visit(&mut body.value); }, diff --git a/libs/@local/hashql/ast/src/lower/expander/mod.rs b/libs/@local/hashql/ast/src/lower/expander/mod.rs index 936afec02df..14241ff8546 100644 --- a/libs/@local/hashql/ast/src/lower/expander/mod.rs +++ b/libs/@local/hashql/ast/src/lower/expander/mod.rs @@ -1,6 +1,7 @@ mod access; mod r#as; mod error; +mod r#fn; mod r#if; mod index; mod input; @@ -27,6 +28,23 @@ use crate::{ visit::{self, Visitor}, }; +enum BindingKind<'heap> { + Local(Universe), + Remote(Item<'heap>), +} + +impl<'heap> From> for BindingKind<'heap> { + fn from(v: Item<'heap>) -> Self { + Self::Remote(v) + } +} + +impl<'heap> From for BindingKind<'heap> { + fn from(v: Universe) -> Self { + Self::Local(v) + } +} + // What does the expander do? // The expander does the following: // 1. it resolves imports @@ -81,18 +99,34 @@ impl<'env, 'heap, S> Expander<'env, 'heap, S> { result } - fn enter( + fn bind( &mut self, - universe: Universe, - symbol: Symbol<'heap>, - item: Option>, + variable: Symbol<'heap>, + kind: impl Into>, closure: impl FnOnce(&mut Self) -> T, ) -> T { + self.bind_many([(variable, kind)], closure) + } + + fn bind_many( + &mut self, + variables: impl IntoIterator, K)>, + closure: impl FnOnce(&mut Self) -> T, + ) -> T + where + K: Into>, + { let snapshot = self.namespace.snapshot(); - if let Some(item) = item { - self.namespace.alias(symbol, item); - } else { - self.namespace.local(symbol, universe); + for (variable, kind) in variables { + let kind = kind.into(); + match kind { + BindingKind::Local(universe) => { + self.namespace.local(variable, universe); + } + BindingKind::Remote(item) => { + self.namespace.alias(variable, item); + } + } } let result = closure(self); diff --git a/libs/@local/hashql/ast/src/lower/expander/newtype.rs b/libs/@local/hashql/ast/src/lower/expander/newtype.rs index 96cc8a6f28d..02441206be9 100644 --- a/libs/@local/hashql/ast/src/lower/expander/newtype.rs +++ b/libs/@local/hashql/ast/src/lower/expander/newtype.rs @@ -41,10 +41,12 @@ where }); let value = lower_expr_to_type(expander, value); - expander.enter( - hashql_core::module::Universe::Type, - name.value, - None, + expander.bind_many( + // Newtype expressions are scoped to both universes + [ + (name.value, hashql_core::module::Universe::Type), + (name.value, hashql_core::module::Universe::Value), + ], |expander| expander.visit(&mut body), ); diff --git a/libs/@local/hashql/ast/src/lower/expander/type.rs b/libs/@local/hashql/ast/src/lower/expander/type.rs index 4404e9e47a5..fb3ba9da9a8 100644 --- a/libs/@local/hashql/ast/src/lower/expander/type.rs +++ b/libs/@local/hashql/ast/src/lower/expander/type.rs @@ -3,7 +3,10 @@ use core::mem; use hashql_core::{ collections::fast_hash_map_with_capacity_in, heap::{self, BumpAllocator, Heap}, - module::item::{IntrinsicItem, Item}, + module::{ + Universe, + item::{IntrinsicItem, Item}, + }, span::SpanId, symbol::{Ident, sym}, }; @@ -18,6 +21,7 @@ use crate::{ path::PathSegmentArgument, r#type::{IntersectionType, StructType, TupleType, Type, TypeKind, UnionType}, }, + visit::Visitor, }; fn lower_call_to_type<'heap, S>( @@ -207,9 +211,7 @@ where } fn path_arguments_to_constraints<'heap, S>( - heap: &'heap Heap, - scratch: S, - diagnostics: &mut ExpanderDiagnosticIssues, + expander: &mut Expander<'_, 'heap, S>, arguments: &mut [PathSegmentArgument<'heap>], ) -> heap::Vec<'heap, GenericConstraint<'heap>> @@ -282,6 +284,19 @@ where } } + expander.bind_many( + seen.into_keys().map(|variable| (variable, Universe::Type)), + |expander| { + // The constraints _have not yet_ been validated, this is on purpose, because we must + // first convert them, now that they are converted, we can validate them. + for constraint in &mut constraints { + if let Some(bound) = constraint.bound.as_mut() { + expander.visit_type(bound); + } + } + }, + ); + constraints } @@ -296,13 +311,17 @@ where if let ExprKind::Path(path) = &mut argument.value.kind && let Some((name, arguments)) = path.as_generic_ident_mut() { - let constraints = expander.scratch.scoped(|scratch| { - path_arguments_to_constraints( - expander.heap, - scratch, - &mut expander.diagnostics, - arguments, - ) + // Generic constraints _may_ be recursive. To allow for that we must put the name of the + // ident into view before we do anything + let constraints = expander.bind(name.value, Universe::Type, |expander| { + expander.scratch.scoped(|scratch| { + path_arguments_to_constraints( + expander.heap, + scratch, + &mut expander.diagnostics, + arguments, + ) + }) }); Some((name, constraints)) @@ -338,10 +357,9 @@ where }); let value = lower_expr_to_type(expander, value); - expander.enter( - hashql_core::module::Universe::Type, + expander.bind( name.value, - None, + hashql_core::module::Universe::Type, |expander| expander.visit(&mut body), ); From 954ba06da715cf7d8f7b43084a5268fb7b038871 Mon Sep 17 00:00:00 2001 From: Bilal Mahmoud <7252775+indietyp@users.noreply.github.com> Date: Fri, 12 Jun 2026 17:25:10 +0200 Subject: [PATCH 19/55] feat: convert fn --- .../hashql/ast/src/lower/expander/fn.rs | 150 ++++++++++++++++-- .../hashql/ast/src/lower/expander/mod.rs | 60 +++++-- .../hashql/ast/src/lower/expander/type.rs | 65 +++++--- .../hashql/ast/src/node/expr/closure.rs | 4 +- 4 files changed, 224 insertions(+), 55 deletions(-) diff --git a/libs/@local/hashql/ast/src/lower/expander/fn.rs b/libs/@local/hashql/ast/src/lower/expander/fn.rs index 0968cae4f17..e5201977d87 100644 --- a/libs/@local/hashql/ast/src/lower/expander/fn.rs +++ b/libs/@local/hashql/ast/src/lower/expander/fn.rs @@ -1,19 +1,23 @@ +use core::mem; + use hashql_core::{ - heap::{BumpAllocator, Heap}, + heap::{self, BumpAllocator, Heap}, + module::Universe, span::SpanId, + symbol::{Symbol, sym::path::r#type}, }; -use super::{Expander, r#let::expr_to_ident}; +use super::{Expander, r#let::expr_to_ident, r#type::lower_expr_to_type}; use crate::node::{ - expr::{CallExpr, Expr, ExprKind, call::Argument}, + expr::{ + CallExpr, ClosureExpr, Expr, ExprKind, + call::Argument, + closure::{ClosureParam, ClosureSignature}, + }, generic::{GenericParam, Generics}, id::NodeId, }; -fn lower_params<'heap>(span: SpanId, params: &mut Argument<'heap>) -> Expr<'heap> { - todo!() -} - fn lower_generics<'heap, S>( expander: &mut Expander<'_, 'heap, S>, @@ -24,6 +28,10 @@ where { match &mut generics.value.kind { ExprKind::Tuple(tuple) => { + if let Some(annotation) = tuple.r#type.as_ref() { + todo!("ERROR: issue diagnostic"); + } + let mut params = Vec::with_capacity_in(tuple.elements.len(), expander.heap); for element in &mut tuple.elements { @@ -48,12 +56,38 @@ where } } ExprKind::Struct(r#struct) => { - let mut params = Vec::with_capacity_in(r#struct.entries.len(), heap); - - for entry in &mut r#struct.entries { - todo!("recursive types"); + if let Some(annotation) = r#struct.r#type.as_ref() { + todo!("ERROR: issue diagnostic"); } + let mut params = Vec::with_capacity_in(r#struct.entries.len(), expander.heap); + + expander.with_universe(Universe::Type, |expander| { + expander.bind_many_with( + &mut r#struct.entries, + |entries, binder| { + for entry in &**entries { + binder.bind(entry.key.value, Universe::Type); + } + }, + |expander, entries| { + for mut entry in entries.drain(..) { + expander.visit(&mut entry.value); + let bound = lower_expr_to_type(expander, entry.value); + + params.push(GenericParam { + id: NodeId::PLACEHOLDER, + span: entry.span, + name: entry.key, + bound: Some(bound).filter(|bound| { + matches!(bound.kind, crate::node::r#type::TypeKind::Infer) + }), + }); + } + }, + ) + }); + Generics { id: NodeId::PLACEHOLDER, span: r#struct.span, @@ -64,6 +98,43 @@ where } } +fn lower_params<'heap, S>( + expander: &mut Expander<'_, 'heap, S>, + + generics: &Generics<'heap>, + params: &mut Argument<'heap>, +) -> heap::Vec<'heap, ClosureParam<'heap>> +where + S: BumpAllocator, +{ + let ExprKind::Struct(r#struct) = &mut params.value.kind else { + todo!("ERROR: issue diagnostic"); + return heap::Vec::new_in(expander.heap); + }; + + if let Some(annotation) = r#struct.r#type.as_ref() { + todo!("ERROR: issue diagnostic"); + } + + let mut params = Vec::with_capacity_in(r#struct.entries.len(), expander.heap); + + expander.with_universe(Universe::Type, |expander| { + for mut entry in r#struct.entries.drain(..) { + expander.visit(&mut entry.value); + let bound = lower_expr_to_type(expander, entry.value); + + params.push(ClosureParam { + id: NodeId::PLACEHOLDER, + span: entry.span, + name: entry.key, + bound, + }); + } + }); + + params +} + fn lower_fn_impl<'heap, S>( span: SpanId, expander: &mut Expander<'_, 'heap, S>, @@ -76,7 +147,62 @@ fn lower_fn_impl<'heap, S>( where S: BumpAllocator, { - todo!() + let generics = lower_generics(expander, generics); + + let (params, returns, body) = expander.bind_many( + generics + .params + .iter() + .map(|param| (param.name.value, Universe::Type)), + |expander| { + let params = lower_params(expander, &generics, params); + + let (returns, body) = expander.bind_many( + params + .iter() + .map(|param| (param.name.value, Universe::Value)), + |expander| { + expander.with_universe(Universe::Type, |expander| { + expander.visit(&mut r#return.value); + }); + + let returns = mem::replace(&mut r#return.value, Expr::dummy()); + let returns = lower_expr_to_type(expander, returns); + + expander + .with_universe(Universe::Value, |expander| expander.visit(&mut body.value)); + + let body = mem::replace(&mut body.value, Expr::dummy()); + + (returns, body) + }, + ); + + (params, returns, body) + }, + ); + + Expr { + id: NodeId::PLACEHOLDER, + span, + kind: ExprKind::Closure(ClosureExpr { + id: NodeId::PLACEHOLDER, + span, + signature: Box::new_in( + ClosureSignature { + id: NodeId::PLACEHOLDER, + // TODO(BE-76): We can narrow this significantly if we have the possibility of + // span tree creation inside the AST + span, + generics, + inputs: params, + output: returns, + }, + expander.heap, + ), + body: Box::new_in(body, expander.heap), + }), + } } pub(super) fn lower_fn<'heap, S>( diff --git a/libs/@local/hashql/ast/src/lower/expander/mod.rs b/libs/@local/hashql/ast/src/lower/expander/mod.rs index 14241ff8546..d42f84e59e0 100644 --- a/libs/@local/hashql/ast/src/lower/expander/mod.rs +++ b/libs/@local/hashql/ast/src/lower/expander/mod.rs @@ -45,6 +45,19 @@ impl<'heap> From for BindingKind<'heap> { } } +struct Binder<'ns, 'env, 'heap> { + namespace: &'ns mut ModuleNamespace<'env, 'heap>, +} + +impl<'heap> Binder<'_, '_, 'heap> { + fn bind(&mut self, symbol: Symbol<'heap>, kind: impl Into>) { + match kind.into() { + BindingKind::Local(universe) => self.namespace.local(symbol, universe), + BindingKind::Remote(item) => self.namespace.alias(symbol, item), + } + } +} + // What does the expander do? // The expander does the following: // 1. it resolves imports @@ -108,6 +121,26 @@ impl<'env, 'heap, S> Expander<'env, 'heap, S> { self.bind_many([(variable, kind)], closure) } + fn bind_many_with( + &mut self, + mut value: U, + register: impl FnOnce(&U, &mut Binder<'_, '_, 'heap>), + closure: impl FnOnce(&mut Self, &mut U) -> T, + ) -> (U, T) { + let snapshot = self.namespace.snapshot(); + + let mut binder = Binder { + namespace: &mut self.namespace, + }; + register(&value, &mut binder); + + let result = closure(self, &mut value); + + self.namespace.rollback_to(snapshot); + + (value, result) + } + fn bind_many( &mut self, variables: impl IntoIterator, K)>, @@ -116,22 +149,19 @@ impl<'env, 'heap, S> Expander<'env, 'heap, S> { where K: Into>, { - let snapshot = self.namespace.snapshot(); - for (variable, kind) in variables { - let kind = kind.into(); - match kind { - BindingKind::Local(universe) => { - self.namespace.local(variable, universe); + // The inline is here, because this is a hot path, this is just desugaring of the underlying + // iterator, make it explicit so that it indeed inlines the call + let ((), result) = self.bind_many_with( + (), + #[inline] + |(), binder| { + for (variable, kind) in variables { + binder.bind(variable, kind); } - BindingKind::Remote(item) => { - self.namespace.alias(variable, item); - } - } - } - - let result = closure(self); - - self.namespace.rollback_to(snapshot); + }, + #[inline] + |this, ()| closure(this), + ); result } diff --git a/libs/@local/hashql/ast/src/lower/expander/type.rs b/libs/@local/hashql/ast/src/lower/expander/type.rs index fb3ba9da9a8..87d9bca058e 100644 --- a/libs/@local/hashql/ast/src/lower/expander/type.rs +++ b/libs/@local/hashql/ast/src/lower/expander/type.rs @@ -1,4 +1,4 @@ -use core::mem; +use core::{iter, mem}; use hashql_core::{ collections::fast_hash_map_with_capacity_in, @@ -21,7 +21,7 @@ use crate::{ path::PathSegmentArgument, r#type::{IntersectionType, StructType, TupleType, Type, TypeKind, UnionType}, }, - visit::Visitor, + visit::Visitor as _, }; fn lower_call_to_type<'heap, S>( @@ -210,8 +210,10 @@ where } } -fn path_arguments_to_constraints<'heap, S>( - expander: &mut Expander<'_, 'heap, S>, +fn path_arguments_to_constraints_unvalidated<'heap, S>( + heap: &'heap Heap, + scratch: S, + diagnostics: &mut ExpanderDiagnosticIssues, arguments: &mut [PathSegmentArgument<'heap>], ) -> heap::Vec<'heap, GenericConstraint<'heap>> @@ -284,19 +286,6 @@ where } } - expander.bind_many( - seen.into_keys().map(|variable| (variable, Universe::Type)), - |expander| { - // The constraints _have not yet_ been validated, this is on purpose, because we must - // first convert them, now that they are converted, we can validate them. - for constraint in &mut constraints { - if let Some(bound) = constraint.bound.as_mut() { - expander.visit_type(bound); - } - } - }, - ); - constraints } @@ -313,17 +302,41 @@ where { // Generic constraints _may_ be recursive. To allow for that we must put the name of the // ident into view before we do anything - let constraints = expander.bind(name.value, Universe::Type, |expander| { - expander.scratch.scoped(|scratch| { - path_arguments_to_constraints( - expander.heap, - scratch, - &mut expander.diagnostics, - arguments, - ) - }) + let constraints = expander.scratch.scoped(|scratch| { + path_arguments_to_constraints_unvalidated( + expander.heap, + scratch, + &mut expander.diagnostics, + arguments, + ) }); + // constraints are not yet validated (which is what we're doing now) + let (constraints, ()) = expander.bind_many_with( + constraints, + |constraints, binder| { + iter::chain( + iter::once((name.value, Universe::Type)), + constraints + .iter() + .map(|constraint| (constraint.name.value, Universe::Type)), + ) + .for_each(|(symbol, universe)| { + binder.bind(symbol, universe); + }); + }, + |expander, constraints| { + // The constraints _have not yet_ been validated, this is on purpose, because we + // must first convert them, now that they are converted, we can + // validate them. + for constraint in constraints { + if let Some(bound) = constraint.bound.as_mut() { + expander.visit_type(bound); + } + } + }, + ); + Some((name, constraints)) } else { None diff --git a/libs/@local/hashql/ast/src/node/expr/closure.rs b/libs/@local/hashql/ast/src/node/expr/closure.rs index d72a0237d9c..6f7402fceb2 100644 --- a/libs/@local/hashql/ast/src/node/expr/closure.rs +++ b/libs/@local/hashql/ast/src/node/expr/closure.rs @@ -12,7 +12,7 @@ pub struct ClosureParam<'heap> { pub span: SpanId, pub name: Ident<'heap>, - pub bound: heap::Box<'heap, Type<'heap>>, + pub bound: Type<'heap>, } /// The signature of a closure. @@ -28,7 +28,7 @@ pub struct ClosureSignature<'heap> { pub generics: Generics<'heap>, pub inputs: heap::Vec<'heap, ClosureParam<'heap>>, - pub output: heap::Box<'heap, Type<'heap>>, + pub output: Type<'heap>, } /// A closure expression in the HashQL Abstract Syntax Tree. From 4db0075f7b76c93ef6024b212422b697eed0dbdf Mon Sep 17 00:00:00 2001 From: Bilal Mahmoud <7252775+indietyp@users.noreply.github.com> Date: Fri, 12 Jun 2026 17:33:31 +0200 Subject: [PATCH 20/55] feat: convert fn --- .../hashql/ast/src/lower/expander/error.rs | 207 ++++++++++++++++++ .../hashql/ast/src/lower/expander/fn.rs | 64 ++++-- 2 files changed, 253 insertions(+), 18 deletions(-) diff --git a/libs/@local/hashql/ast/src/lower/expander/error.rs b/libs/@local/hashql/ast/src/lower/expander/error.rs index 86d6ebe8fdf..b67b4379848 100644 --- a/libs/@local/hashql/ast/src/lower/expander/error.rs +++ b/libs/@local/hashql/ast/src/lower/expander/error.rs @@ -153,6 +153,31 @@ const INVALID_GENERIC_ARGUMENT: TerminalDiagnosticCategory = TerminalDiagnosticC name: "Invalid generic argument", }; +const FN_GENERICS_TYPE_ANNOTATION: TerminalDiagnosticCategory = TerminalDiagnosticCategory { + id: "fn-generics-type-annotation", + name: "Type annotation on generic parameter list", +}; + +const INVALID_FN_GENERICS: TerminalDiagnosticCategory = TerminalDiagnosticCategory { + id: "invalid-fn-generics", + name: "Invalid generic parameter list", +}; + +const INVALID_FN_GENERIC_PARAM: TerminalDiagnosticCategory = TerminalDiagnosticCategory { + id: "invalid-fn-generic-param", + name: "Invalid generic parameter", +}; + +const FN_PARAMS_TYPE_ANNOTATION: TerminalDiagnosticCategory = TerminalDiagnosticCategory { + id: "fn-params-type-annotation", + name: "Type annotation on parameter list", +}; + +const INVALID_FN_PARAMS: TerminalDiagnosticCategory = TerminalDiagnosticCategory { + id: "invalid-fn-params", + name: "Invalid parameter list", +}; + #[derive(Debug, Copy, Clone, PartialEq, Eq, Hash)] pub enum ExpanderDiagnosticCategory { EmptyPath, @@ -179,6 +204,11 @@ pub enum ExpanderDiagnosticCategory { InvalidAccessField, DuplicateGenericConstraint, InvalidGenericArgument, + FnGenericsTypeAnnotation, + InvalidFnGenerics, + InvalidFnGenericParam, + FnParamsTypeAnnotation, + InvalidFnParams, } impl DiagnosticCategory for ExpanderDiagnosticCategory { @@ -216,6 +246,11 @@ impl DiagnosticCategory for ExpanderDiagnosticCategory { Self::InvalidAccessField => Some(&INVALID_ACCESS_FIELD), Self::DuplicateGenericConstraint => Some(&DUPLICATE_GENERIC_CONSTRAINT), Self::InvalidGenericArgument => Some(&INVALID_GENERIC_ARGUMENT), + Self::FnGenericsTypeAnnotation => Some(&FN_GENERICS_TYPE_ANNOTATION), + Self::InvalidFnGenerics => Some(&INVALID_FN_GENERICS), + Self::InvalidFnGenericParam => Some(&INVALID_FN_GENERIC_PARAM), + Self::FnParamsTypeAnnotation => Some(&FN_PARAMS_TYPE_ANNOTATION), + Self::InvalidFnParams => Some(&INVALID_FN_PARAMS), } } } @@ -1743,3 +1778,175 @@ pub(crate) fn invalid_expression_in_type_position( Some(diagnostic) } + +/// A `fn` call was passed labeled arguments. +pub(crate) fn labeled_arguments_in_fn( + labeled_arguments: &[LabeledArgument<'_>], +) -> ExpanderDiagnostic { + let (first, rest) = labeled_arguments + .split_first() + .expect("caller should check that labeled_arguments is non-empty"); + + let mut diagnostic = Diagnostic::new( + ExpanderDiagnosticCategory::LabeledArgumentsNotSupported, + Severity::Error, + ) + .primary(Label::new( + first.span, + "labeled arguments are not allowed in `fn`", + )); + + for argument in rest { + diagnostic.add_label(Label::new( + argument.span, + "labeled argument not allowed here", + )); + } + + diagnostic.add_message(Message::help( + "pass the arguments positionally: `(fn generics params return-type body)`", + )); + + diagnostic +} + +/// A `fn` call was passed the wrong number of arguments. +/// +/// `fn` accepts exactly 4 arguments: `(fn generics params return-type body)`. +pub(crate) fn invalid_fn_argument_count( + call_span: SpanId, + arguments: &[Argument<'_>], +) -> ExpanderDiagnostic { + let count = arguments.len(); + + let mut diagnostic = Diagnostic::new( + ExpanderDiagnosticCategory::InvalidArgumentCount, + Severity::Error, + ) + .primary(Label::new( + call_span, + format!("expected 4 arguments to `fn`, found {count}"), + )); + + for argument in arguments.iter().skip(4) { + diagnostic.add_label(Label::new(argument.span, "unexpected argument")); + } + + diagnostic.add_message(Message::help("use `(fn generics params return-type body)`")); + + diagnostic.add_message(Message::note( + "the arguments are, in order: the generic parameters (a tuple or struct), the function \ + parameters (a struct), the return type, and the body expression", + )); + + diagnostic +} + +/// The generic parameter list of a `fn` has a type annotation. +/// +/// The generics argument to `fn` is a tuple or struct that declares type +/// variables. Annotating it with a type (e.g., `(T, U): something`) is not +/// meaningful. +pub(crate) fn fn_generics_type_annotation(annotation_span: SpanId) -> ExpanderDiagnostic { + let mut diagnostic = Diagnostic::new( + ExpanderDiagnosticCategory::FnGenericsTypeAnnotation, + Severity::Error, + ) + .primary(Label::new( + annotation_span, + "type annotation is not allowed on the generic parameter list", + )); + + diagnostic.add_message(Message::help( + "remove the type annotation; the generic parameter list declares type variables, not a \ + typed value", + )); + + diagnostic.add_message(Message::note( + "write `(fn (T, U) ...)` for unbounded generics or `(fn (T: bound, U: _) ...)` for \ + bounded generics", + )); + + diagnostic +} + +/// The generics argument to `fn` is not a valid form. +/// +/// Generic parameters must be specified as a tuple of identifiers (unbounded) +/// or a struct with optional bounds. +pub(crate) fn invalid_fn_generics(span: SpanId) -> ExpanderDiagnostic { + let mut diagnostic = Diagnostic::new( + ExpanderDiagnosticCategory::InvalidFnGenerics, + Severity::Error, + ) + .primary(Label::new( + span, + "expected a tuple or struct for generic parameters", + )); + + diagnostic.add_message(Message::help( + "use a tuple like `(T, U)` for unbounded generics or a struct like `(T: bound, U: _)` for \ + bounded generics", + )); + + diagnostic +} + +/// A generic parameter in a `fn` tuple is not a simple identifier. +/// +/// Each element of the generics tuple must be a plain name like `T`, +/// not a qualified path or complex expression. +pub(crate) fn invalid_fn_generic_param(span: SpanId) -> ExpanderDiagnostic { + let mut diagnostic = Diagnostic::new( + ExpanderDiagnosticCategory::InvalidFnGenericParam, + Severity::Error, + ) + .primary(Label::new(span, "expected a simple type parameter name")); + + diagnostic.add_message(Message::help( + "each generic parameter must be a plain identifier like `T`, not a qualified path or \ + expression", + )); + + diagnostic +} + +/// The parameter list of a `fn` has a type annotation. +/// +/// The params argument to `fn` is a struct where each field declares a +/// parameter and its type. Annotating the struct itself is not meaningful. +pub(crate) fn fn_params_type_annotation(annotation_span: SpanId) -> ExpanderDiagnostic { + let mut diagnostic = Diagnostic::new( + ExpanderDiagnosticCategory::FnParamsTypeAnnotation, + Severity::Error, + ) + .primary(Label::new( + annotation_span, + "type annotation is not allowed on the parameter list", + )); + + diagnostic.add_message(Message::help( + "remove the type annotation; each parameter already declares its type individually as \ + `(name: type)`", + )); + + diagnostic +} + +/// The params argument to `fn` is not a struct expression. +/// +/// Function parameters must be declared as a struct where each field is a +/// parameter with its type. +pub(crate) fn invalid_fn_params(span: SpanId) -> ExpanderDiagnostic { + let mut diagnostic = + Diagnostic::new(ExpanderDiagnosticCategory::InvalidFnParams, Severity::Error).primary( + Label::new(span, "expected a struct for function parameters"), + ); + + diagnostic.add_message(Message::help( + "write parameters as `(x: int, y: string)` where each field declares a parameter and its \ + type", + )); + + diagnostic +} diff --git a/libs/@local/hashql/ast/src/lower/expander/fn.rs b/libs/@local/hashql/ast/src/lower/expander/fn.rs index e5201977d87..35026a45ada 100644 --- a/libs/@local/hashql/ast/src/lower/expander/fn.rs +++ b/libs/@local/hashql/ast/src/lower/expander/fn.rs @@ -1,21 +1,23 @@ use core::mem; use hashql_core::{ - heap::{self, BumpAllocator, Heap}, + heap::{self, BumpAllocator}, module::Universe, span::SpanId, - symbol::{Symbol, sym::path::r#type}, }; use super::{Expander, r#let::expr_to_ident, r#type::lower_expr_to_type}; -use crate::node::{ - expr::{ - CallExpr, ClosureExpr, Expr, ExprKind, - call::Argument, - closure::{ClosureParam, ClosureSignature}, +use crate::{ + lower::expander::error, + node::{ + expr::{ + CallExpr, ClosureExpr, Expr, ExprKind, + call::Argument, + closure::{ClosureParam, ClosureSignature}, + }, + generic::{GenericParam, Generics}, + id::NodeId, }, - generic::{GenericParam, Generics}, - id::NodeId, }; fn lower_generics<'heap, S>( @@ -29,14 +31,18 @@ where match &mut generics.value.kind { ExprKind::Tuple(tuple) => { if let Some(annotation) = tuple.r#type.as_ref() { - todo!("ERROR: issue diagnostic"); + expander + .diagnostics + .push(error::fn_generics_type_annotation(annotation.span)); } let mut params = Vec::with_capacity_in(tuple.elements.len(), expander.heap); for element in &mut tuple.elements { let Some(ident) = expr_to_ident(&element.value) else { - todo!("kael you know what to do"); + expander + .diagnostics + .push(error::invalid_fn_generic_param(element.value.span)); continue; }; @@ -57,7 +63,9 @@ where } ExprKind::Struct(r#struct) => { if let Some(annotation) = r#struct.r#type.as_ref() { - todo!("ERROR: issue diagnostic"); + expander + .diagnostics + .push(error::fn_generics_type_annotation(annotation.span)); } let mut params = Vec::with_capacity_in(r#struct.entries.len(), expander.heap); @@ -80,7 +88,7 @@ where span: entry.span, name: entry.key, bound: Some(bound).filter(|bound| { - matches!(bound.kind, crate::node::r#type::TypeKind::Infer) + !matches!(bound.kind, crate::node::r#type::TypeKind::Infer) }), }); } @@ -94,7 +102,17 @@ where params, } } - _ => todo!("error out and return empty"), + _ => { + expander + .diagnostics + .push(error::invalid_fn_generics(generics.value.span)); + + Generics { + id: NodeId::PLACEHOLDER, + span: generics.value.span, + params: heap::Vec::new_in(expander.heap), + } + } } } @@ -108,12 +126,17 @@ where S: BumpAllocator, { let ExprKind::Struct(r#struct) = &mut params.value.kind else { - todo!("ERROR: issue diagnostic"); + expander + .diagnostics + .push(error::invalid_fn_params(params.value.span)); + return heap::Vec::new_in(expander.heap); }; if let Some(annotation) = r#struct.r#type.as_ref() { - todo!("ERROR: issue diagnostic"); + expander + .diagnostics + .push(error::fn_params_type_annotation(annotation.span)); } let mut params = Vec::with_capacity_in(r#struct.entries.len(), expander.heap); @@ -219,13 +242,18 @@ where S: BumpAllocator, { if !labeled_arguments.is_empty() { - todo!("kael you know what to do"); + expander + .diagnostics + .push(error::labeled_arguments_in_fn(labeled_arguments)); } if let [generics, params, r#return, body] = &mut **arguments { lower_fn_impl(*span, expander, generics, params, r#return, body) } else { - todo!("kael you know what to do"); + expander + .diagnostics + .push(error::invalid_fn_argument_count(*span, arguments)); + Expr::dummy() } } From 7872e6e0306b33ed14f513259d75da00ed2e80c0 Mon Sep 17 00:00:00 2001 From: Bilal Mahmoud <7252775+indietyp@users.noreply.github.com> Date: Fri, 12 Jun 2026 17:58:58 +0200 Subject: [PATCH 21/55] feat: convert fn --- .../hashql/ast/src/lower/expander/fn.rs | 54 +++++++++++++++++-- 1 file changed, 49 insertions(+), 5 deletions(-) diff --git a/libs/@local/hashql/ast/src/lower/expander/fn.rs b/libs/@local/hashql/ast/src/lower/expander/fn.rs index 35026a45ada..a93d06d39ba 100644 --- a/libs/@local/hashql/ast/src/lower/expander/fn.rs +++ b/libs/@local/hashql/ast/src/lower/expander/fn.rs @@ -1,6 +1,7 @@ use core::mem; use hashql_core::{ + collections::fast_hash_map_with_capacity_in, heap::{self, BumpAllocator}, module::Universe, span::SpanId, @@ -28,7 +29,7 @@ fn lower_generics<'heap, S>( where S: BumpAllocator, { - match &mut generics.value.kind { + let mut generics = match &mut generics.value.kind { ExprKind::Tuple(tuple) => { if let Some(annotation) = tuple.r#type.as_ref() { expander @@ -102,7 +103,23 @@ where params, } } - _ => { + ExprKind::Call(_) + | ExprKind::Dict(_) + | ExprKind::List(_) + | ExprKind::Literal(_) + | ExprKind::Path(_) + | ExprKind::Let(_) + | ExprKind::Type(_) + | ExprKind::NewType(_) + | ExprKind::Use(_) + | ExprKind::Input(_) + | ExprKind::Closure(_) + | ExprKind::If(_) + | ExprKind::Field(_) + | ExprKind::Index(_) + | ExprKind::As(_) + | ExprKind::Underscore + | ExprKind::Dummy => { expander .diagnostics .push(error::invalid_fn_generics(generics.value.span)); @@ -113,13 +130,27 @@ where params: heap::Vec::new_in(expander.heap), } } - } + }; + + expander.scratch.scoped(|scratch| { + let mut seen = fast_hash_map_with_capacity_in(generics.params.len(), scratch); + + generics.params.retain(|param| { + if let Err(error) = seen.try_insert(param.name.value, param.span) { + todo!("issue diagnostic"); + return false; + } + + true + }); + }); + + generics } fn lower_params<'heap, S>( expander: &mut Expander<'_, 'heap, S>, - generics: &Generics<'heap>, params: &mut Argument<'heap>, ) -> heap::Vec<'heap, ClosureParam<'heap>> where @@ -155,6 +186,19 @@ where } }); + expander.scratch.scoped(|scratch| { + let mut seen = fast_hash_map_with_capacity_in(params.len(), scratch); + + params.retain(|param| { + if let Err(error) = seen.try_insert(param.name.value, param.span) { + todo!("issue diagnostic"); + return false; + } + + true + }); + }); + params } @@ -178,7 +222,7 @@ where .iter() .map(|param| (param.name.value, Universe::Type)), |expander| { - let params = lower_params(expander, &generics, params); + let params = lower_params(expander, params); let (returns, body) = expander.bind_many( params From b99ae3c82b3953bc8954b6df3102aac3c9dc9c34 Mon Sep 17 00:00:00 2001 From: Bilal Mahmoud <7252775+indietyp@users.noreply.github.com> Date: Fri, 12 Jun 2026 18:08:23 +0200 Subject: [PATCH 22/55] feat: convert use --- .../hashql/ast/src/lower/expander/error.rs | 68 ++++++++++++++ .../hashql/ast/src/lower/expander/fn.rs | 58 +++++++----- .../hashql/ast/src/lower/expander/mod.rs | 19 ++-- .../hashql/ast/src/lower/expander/use.rs | 91 +++++++++++++++++++ 4 files changed, 207 insertions(+), 29 deletions(-) create mode 100644 libs/@local/hashql/ast/src/lower/expander/use.rs diff --git a/libs/@local/hashql/ast/src/lower/expander/error.rs b/libs/@local/hashql/ast/src/lower/expander/error.rs index b67b4379848..7030a5e9a86 100644 --- a/libs/@local/hashql/ast/src/lower/expander/error.rs +++ b/libs/@local/hashql/ast/src/lower/expander/error.rs @@ -178,6 +178,16 @@ const INVALID_FN_PARAMS: TerminalDiagnosticCategory = TerminalDiagnosticCategory name: "Invalid parameter list", }; +const DUPLICATE_FN_GENERIC: TerminalDiagnosticCategory = TerminalDiagnosticCategory { + id: "duplicate-fn-generic", + name: "Duplicate generic parameter", +}; + +const DUPLICATE_FN_PARAMETER: TerminalDiagnosticCategory = TerminalDiagnosticCategory { + id: "duplicate-fn-parameter", + name: "Duplicate function parameter", +}; + #[derive(Debug, Copy, Clone, PartialEq, Eq, Hash)] pub enum ExpanderDiagnosticCategory { EmptyPath, @@ -209,6 +219,8 @@ pub enum ExpanderDiagnosticCategory { InvalidFnGenericParam, FnParamsTypeAnnotation, InvalidFnParams, + DuplicateFnGeneric, + DuplicateFnParameter, } impl DiagnosticCategory for ExpanderDiagnosticCategory { @@ -251,6 +263,8 @@ impl DiagnosticCategory for ExpanderDiagnosticCategory { Self::InvalidFnGenericParam => Some(&INVALID_FN_GENERIC_PARAM), Self::FnParamsTypeAnnotation => Some(&FN_PARAMS_TYPE_ANNOTATION), Self::InvalidFnParams => Some(&INVALID_FN_PARAMS), + Self::DuplicateFnGeneric => Some(&DUPLICATE_FN_GENERIC), + Self::DuplicateFnParameter => Some(&DUPLICATE_FN_PARAMETER), } } } @@ -1950,3 +1964,57 @@ pub(crate) fn invalid_fn_params(span: SpanId) -> ExpanderDiagnostic { diagnostic } + +/// A generic parameter name was declared more than once in a `fn` form. +pub(crate) fn duplicate_fn_generic( + duplicate_span: SpanId, + name: Symbol<'_>, + original_span: SpanId, +) -> ExpanderDiagnostic { + let mut diagnostic = Diagnostic::new( + ExpanderDiagnosticCategory::DuplicateFnGeneric, + Severity::Error, + ) + .primary(Label::new( + duplicate_span, + format!("duplicate generic parameter `{name}`"), + )); + + diagnostic.add_label(Label::new( + original_span, + format!("`{name}` was first declared here"), + )); + + diagnostic.add_message(Message::help( + "remove the duplicate declaration or use a different name", + )); + + diagnostic +} + +/// A function parameter name was declared more than once in a `fn` form. +pub(crate) fn duplicate_fn_parameter( + duplicate_span: SpanId, + name: Symbol<'_>, + original_span: SpanId, +) -> ExpanderDiagnostic { + let mut diagnostic = Diagnostic::new( + ExpanderDiagnosticCategory::DuplicateFnParameter, + Severity::Error, + ) + .primary(Label::new( + duplicate_span, + format!("duplicate parameter `{name}`"), + )); + + diagnostic.add_label(Label::new( + original_span, + format!("`{name}` was first declared here"), + )); + + diagnostic.add_message(Message::help( + "remove the duplicate parameter or use a different name", + )); + + diagnostic +} diff --git a/libs/@local/hashql/ast/src/lower/expander/fn.rs b/libs/@local/hashql/ast/src/lower/expander/fn.rs index a93d06d39ba..b1b1e473a7c 100644 --- a/libs/@local/hashql/ast/src/lower/expander/fn.rs +++ b/libs/@local/hashql/ast/src/lower/expander/fn.rs @@ -132,18 +132,25 @@ where } }; - expander.scratch.scoped(|scratch| { - let mut seen = fast_hash_map_with_capacity_in(generics.params.len(), scratch); - - generics.params.retain(|param| { - if let Err(error) = seen.try_insert(param.name.value, param.span) { - todo!("issue diagnostic"); - return false; - } - - true + { + let diagnostics = &mut expander.diagnostics; + expander.scratch.scoped(|scratch| { + let mut seen = fast_hash_map_with_capacity_in(generics.params.len(), scratch); + + generics.params.retain(|param| { + if let Err(error) = seen.try_insert(param.name.value, param.span) { + diagnostics.push(error::duplicate_fn_generic( + param.span, + param.name.value, + *error.entry.get(), + )); + return false; + } + + true + }); }); - }); + } generics } @@ -186,18 +193,25 @@ where } }); - expander.scratch.scoped(|scratch| { - let mut seen = fast_hash_map_with_capacity_in(params.len(), scratch); - - params.retain(|param| { - if let Err(error) = seen.try_insert(param.name.value, param.span) { - todo!("issue diagnostic"); - return false; - } - - true + { + let diagnostics = &mut expander.diagnostics; + expander.scratch.scoped(|scratch| { + let mut seen = fast_hash_map_with_capacity_in(params.len(), scratch); + + params.retain(|param| { + if let Err(error) = seen.try_insert(param.name.value, param.span) { + diagnostics.push(error::duplicate_fn_parameter( + param.span, + param.name.value, + *error.entry.get(), + )); + return false; + } + + true + }); }); - }); + } params } diff --git a/libs/@local/hashql/ast/src/lower/expander/mod.rs b/libs/@local/hashql/ast/src/lower/expander/mod.rs index d42f84e59e0..d0d1e6043cd 100644 --- a/libs/@local/hashql/ast/src/lower/expander/mod.rs +++ b/libs/@local/hashql/ast/src/lower/expander/mod.rs @@ -8,6 +8,7 @@ mod input; mod r#let; mod newtype; mod r#type; +mod r#use; use hashql_core::{ heap::{self, BumpAllocator}, @@ -20,8 +21,9 @@ use hashql_core::{ }; use self::{ - r#as::lower_as, error::ExpanderDiagnosticIssues, r#if::lower_if, r#let::lower_let, - r#type::lower_type, + access::lower_access, r#as::lower_as, error::ExpanderDiagnosticIssues, r#fn::lower_fn, + r#if::lower_if, index::lower_index, input::lower_input, r#let::lower_let, + newtype::lower_newtype, r#type::lower_type, }; use crate::{ node::{self, id::NodeId}, @@ -294,21 +296,24 @@ where return; } sym::path::newtype::CONST => { - self.trampoline = Some(newtype::lower_newtype(self, expr)); + self.trampoline = Some(lower_newtype(self, expr)); return; } sym::path::r#use::CONST => {} - sym::path::r#fn::CONST => {} + sym::path::r#fn::CONST => { + self.trampoline = Some(lower_fn(self, expr)); + return; + } sym::path::input::CONST => { - self.trampoline = Some(input::lower_input(self, expr)); + self.trampoline = Some(lower_input(self, expr)); return; } sym::path::index::CONST => { - self.trampoline = Some(index::lower_index(self, expr)); + self.trampoline = Some(lower_index(self, expr)); return; } sym::path::access::CONST => { - self.trampoline = Some(access::lower_access(self, expr)); + self.trampoline = Some(lower_access(self, expr)); return; } _ => {} diff --git a/libs/@local/hashql/ast/src/lower/expander/use.rs b/libs/@local/hashql/ast/src/lower/expander/use.rs new file mode 100644 index 00000000000..cd3a10da7dc --- /dev/null +++ b/libs/@local/hashql/ast/src/lower/expander/use.rs @@ -0,0 +1,91 @@ +use core::mem; + +use hashql_core::{heap::BumpAllocator, span::SpanId, symbol::sym}; + +use super::Expander; +use crate::node::{ + expr::{ + CallExpr, Expr, ExprKind, + call::Argument, + r#use::{self, UseKind}, + }, + id::NodeId, +}; + +fn lower_imports<'heap, S>( + expander: &mut Expander<'_, 'heap, S>, + + imports: &mut Argument<'heap>, +) -> Option> +where + S: BumpAllocator, +{ + match &mut imports.value.kind { + ExprKind::Path(path) + if let Some(&ident) = path.as_ident() + && ident.value.as_constant() == Some(sym::symbol::asterisk::CONST) => + { + Some(UseKind::Glob(r#use::Glob { + id: NodeId::PLACEHOLDER, + span: ident.span, + })) + } + ExprKind::Tuple(tuple) => {} + ExprKind::Struct(r#struct) => {} + _ => { + todo!("kael you know what to do"); + None + } + } +} + +fn lower_use_impl<'heap, S>( + span: SpanId, + expander: &mut Expander<'_, 'heap, S>, + + path: &mut Argument<'heap>, + imports: &mut Argument<'heap>, + body: &mut Argument<'heap>, +) -> Expr<'heap> +where + S: BumpAllocator, +{ + let path = mem::replace(&mut path.value, Expr::dummy()); + let ExprKind::Path(path) = path.kind else { + todo!("kael you know what to do!"); + return Expr::dummy(); + }; + + if path.has_generic_arguments() { + todo!("kael you know what to do!"); + // we continue here, because it's not "fatal" + } + + todo!() +} + +pub(super) fn lower_use<'heap, S>( + expander: &mut Expander<'_, 'heap, S>, + CallExpr { + id: _, + span, + function: _, + arguments, + labeled_arguments, + }: &mut CallExpr<'heap>, +) -> Expr<'heap> +where + S: BumpAllocator, +{ + if !labeled_arguments.is_empty() { + todo!("kael you know what to do :3") + } + + if let [path, imports, body, body] = &mut **arguments { + lower_use_impl(*span, expander, path, imports, body) + } else { + todo!("kael you know what to do :3"); + + Expr::dummy() + } +} From 16640afa3ab043253b2491b9cf64133a3b8a7959 Mon Sep 17 00:00:00 2001 From: Bilal Mahmoud <7252775+indietyp@users.noreply.github.com> Date: Fri, 12 Jun 2026 18:26:52 +0200 Subject: [PATCH 23/55] feat: convert use --- .../hashql/ast/src/lower/expander/use.rs | 181 ++++++++++++++++-- 1 file changed, 169 insertions(+), 12 deletions(-) diff --git a/libs/@local/hashql/ast/src/lower/expander/use.rs b/libs/@local/hashql/ast/src/lower/expander/use.rs index cd3a10da7dc..7f3547345de 100644 --- a/libs/@local/hashql/ast/src/lower/expander/use.rs +++ b/libs/@local/hashql/ast/src/lower/expander/use.rs @@ -1,15 +1,22 @@ -use core::mem; +use core::{iter, mem}; -use hashql_core::{heap::BumpAllocator, span::SpanId, symbol::sym}; +use hashql_core::{ + collections::fast_hash_map_with_capacity_in, + heap::BumpAllocator, + module::namespace::{ImportOptions, ResolutionMode}, + span::SpanId, + symbol::sym, +}; -use super::Expander; +use super::{BindingKind, Expander}; use crate::node::{ expr::{ CallExpr, Expr, ExprKind, call::Argument, - r#use::{self, UseKind}, + r#use::{self, UseBinding, UseKind}, }, id::NodeId, + path::Path, }; fn lower_imports<'heap, S>( @@ -20,7 +27,7 @@ fn lower_imports<'heap, S>( where S: BumpAllocator, { - match &mut imports.value.kind { + let mut imports = match &mut imports.value.kind { ExprKind::Path(path) if let Some(&ident) = path.as_ident() && ident.value.as_constant() == Some(sym::symbol::asterisk::CONST) => @@ -30,17 +37,159 @@ where span: ident.span, })) } - ExprKind::Tuple(tuple) => {} - ExprKind::Struct(r#struct) => {} + ExprKind::Tuple(tuple) => { + let mut bindings = Vec::with_capacity_in(tuple.elements.len(), expander.heap); + + for element in tuple.elements.drain(..) { + let ExprKind::Path(path) = element.value.kind else { + todo!("diagnostic"); + continue; + }; + + let Some(name) = path.into_ident() else { + todo!("diagnostic"); + continue; + }; + + bindings.push(UseBinding { + id: NodeId::PLACEHOLDER, + span: element.span, + name, + alias: None, + }); + } + + Some(UseKind::Named(bindings)) + } + ExprKind::Struct(r#struct) => { + let mut bindings = Vec::with_capacity_in(r#struct.entries.len(), expander.heap); + + for entry in r#struct.entries.drain(..) { + let alias = match &entry.value.kind { + ExprKind::Underscore => None, + ExprKind::Path(path) if let Some(&ident) = path.as_ident() => Some(ident), + _ => { + todo!("diagnostic"); + None + } + }; + + bindings.push(UseBinding { + id: NodeId::PLACEHOLDER, + span: entry.span, + name: entry.key, + alias, + }); + } + + Some(UseKind::Named(bindings)) + } _ => { todo!("kael you know what to do"); None } + }; + + if let Some(UseKind::Named(bindings)) = &mut imports { + expander.scratch.scoped(|scratch| { + let mut seen = fast_hash_map_with_capacity_in(bindings.len(), scratch); + + bindings.retain(|binding| { + if let Err(error) = + seen.try_insert(binding.alias.unwrap_or(binding.name).value, binding.span) + { + todo!("diagnostic"); + return false; + } + + true + }); + }); + } + + imports +} + +fn lower_body<'heap, S>( + expander: &mut Expander<'_, 'heap, S>, + path: Path<'heap>, + imports: UseKind<'heap>, + body: &mut Argument<'heap>, +) -> Expr<'heap> +where + S: BumpAllocator, +{ + let mode = if path.rooted { + ResolutionMode::Absolute + } else { + ResolutionMode::Relative + }; + let query = path.segments.iter().map(|segment| segment.name.value); + + match imports { + UseKind::Named(use_bindings) => { + let mut errored = false; + + for UseBinding { + id: _, + span: _, + name, + alias, + } in use_bindings + { + let alias = alias.map_or(name.value, |alias| alias.value); + + let result = expander.namespace.import( + alias, + query.clone().chain(iter::once(name.value)), + ImportOptions { + glob: false, + mode, + suggestions: true, + }, + ); + + if let Err(error) = result { + todo!("diagnostic"); + errored |= true; + continue; + } + } + + let mut body = mem::replace(&mut body.value, Expr::dummy()); + expander.visit(&mut body); + + if errored { + return Expr::dummy(); + } + + body + } + UseKind::Glob(_) => { + let result = expander.namespace.import( + sym::symbol::asterisk, + query.iter().copied(), + ImportOptions { + glob: true, + mode, + suggestions: true, + }, + ); + + let mut body = mem::replace(&mut body.value, Expr::dummy()); + expander.visit(&mut body); + + if let Err(error) = result { + todo!("diagnostic"); + return Expr::dummy(); + } + + body + } } } fn lower_use_impl<'heap, S>( - span: SpanId, expander: &mut Expander<'_, 'heap, S>, path: &mut Argument<'heap>, @@ -61,14 +210,22 @@ where // we continue here, because it's not "fatal" } - todo!() + let Some(imports) = lower_imports(expander, imports) else { + return Expr::dummy(); + }; + + let snapshot = expander.namespace.snapshot(); + let body = lower_body(expander, path, imports, body); + expander.namespace.rollback_to(snapshot); + + body } pub(super) fn lower_use<'heap, S>( expander: &mut Expander<'_, 'heap, S>, CallExpr { id: _, - span, + span: _, function: _, arguments, labeled_arguments, @@ -81,8 +238,8 @@ where todo!("kael you know what to do :3") } - if let [path, imports, body, body] = &mut **arguments { - lower_use_impl(*span, expander, path, imports, body) + if let [path, imports, body] = &mut **arguments { + lower_use_impl(expander, path, imports, body) } else { todo!("kael you know what to do :3"); From 538edbe259940e000e4462b65944799c92845223 Mon Sep 17 00:00:00 2001 From: Bilal Mahmoud <7252775+indietyp@users.noreply.github.com> Date: Fri, 12 Jun 2026 18:36:25 +0200 Subject: [PATCH 24/55] feat: convert use --- .../hashql/ast/src/lower/expander/error.rs | 308 ++++++++++++++++++ .../hashql/ast/src/lower/expander/mod.rs | 7 +- .../hashql/ast/src/lower/expander/use.rs | 84 +++-- 3 files changed, 371 insertions(+), 28 deletions(-) diff --git a/libs/@local/hashql/ast/src/lower/expander/error.rs b/libs/@local/hashql/ast/src/lower/expander/error.rs index 7030a5e9a86..e326d024ffb 100644 --- a/libs/@local/hashql/ast/src/lower/expander/error.rs +++ b/libs/@local/hashql/ast/src/lower/expander/error.rs @@ -188,6 +188,36 @@ const DUPLICATE_FN_PARAMETER: TerminalDiagnosticCategory = TerminalDiagnosticCat name: "Duplicate function parameter", }; +const INVALID_USE_IMPORTS: TerminalDiagnosticCategory = TerminalDiagnosticCategory { + id: "invalid-use-imports", + name: "Invalid use imports", +}; + +const INVALID_USE_IMPORT_BINDING: TerminalDiagnosticCategory = TerminalDiagnosticCategory { + id: "invalid-use-import-binding", + name: "Invalid use import binding", +}; + +const INVALID_USE_ALIAS: TerminalDiagnosticCategory = TerminalDiagnosticCategory { + id: "invalid-use-alias", + name: "Invalid use alias", +}; + +const DUPLICATE_USE_BINDING: TerminalDiagnosticCategory = TerminalDiagnosticCategory { + id: "duplicate-use-binding", + name: "Duplicate use binding", +}; + +const INVALID_USE_PATH: TerminalDiagnosticCategory = TerminalDiagnosticCategory { + id: "invalid-use-path", + name: "Invalid use path", +}; + +const USE_PATH_GENERIC_ARGUMENTS: TerminalDiagnosticCategory = TerminalDiagnosticCategory { + id: "use-path-generic-arguments", + name: "Generic arguments in use path", +}; + #[derive(Debug, Copy, Clone, PartialEq, Eq, Hash)] pub enum ExpanderDiagnosticCategory { EmptyPath, @@ -221,6 +251,12 @@ pub enum ExpanderDiagnosticCategory { InvalidFnParams, DuplicateFnGeneric, DuplicateFnParameter, + InvalidUseImports, + InvalidUseImportBinding, + InvalidUseAlias, + DuplicateUseBinding, + InvalidUsePath, + UsePathGenericArguments, } impl DiagnosticCategory for ExpanderDiagnosticCategory { @@ -265,6 +301,12 @@ impl DiagnosticCategory for ExpanderDiagnosticCategory { Self::InvalidFnParams => Some(&INVALID_FN_PARAMS), Self::DuplicateFnGeneric => Some(&DUPLICATE_FN_GENERIC), Self::DuplicateFnParameter => Some(&DUPLICATE_FN_PARAMETER), + Self::InvalidUseImports => Some(&INVALID_USE_IMPORTS), + Self::InvalidUseImportBinding => Some(&INVALID_USE_IMPORT_BINDING), + Self::InvalidUseAlias => Some(&INVALID_USE_ALIAS), + Self::DuplicateUseBinding => Some(&DUPLICATE_USE_BINDING), + Self::InvalidUsePath => Some(&INVALID_USE_PATH), + Self::UsePathGenericArguments => Some(&USE_PATH_GENERIC_ARGUMENTS), } } } @@ -453,6 +495,56 @@ pub(crate) fn from_resolution_error<'heap>( } } +/// Converts a `ResolutionError` from a `use` import into an expander diagnostic. +/// +/// For named imports, the resolution query extends beyond the path by one segment +/// (the binding name). When `depth` points past the path segments, `binding_name` +/// provides the span and name for the error. +pub(crate) fn from_import_resolution_error<'heap>( + path: &Path<'heap>, + binding_name: Option>>, + error: ResolutionError<'heap>, +) -> ExpanderDiagnostic { + match error { + ResolutionError::InvalidQueryLength { expected } => invalid_query_length(path, expected), + ResolutionError::ModuleRequired { depth, found } => module_required(path, depth, found), + ResolutionError::PackageNotFound { + depth, + name, + suggestions, + } => package_not_found(path, depth, name, &suggestions), + ResolutionError::ModuleNotFound { + depth, + name, + suggestions, + } => module_not_found(path, depth, name, &suggestions), + ResolutionError::ImportNotFound { + depth, + name, + suggestions, + } => import_not_found(path, depth, name, &suggestions), + ResolutionError::ItemNotFound { + depth, + name, + suggestions, + } => { + // For named imports, the item (binding name) is beyond the path segments. + // Use the binding's span if available, otherwise fall back to the path span. + if depth >= path.segments.len() { + if let Some(binding) = binding_name { + item_not_found_at(binding.span, path, name, &suggestions) + } else { + item_not_found(path, depth.min(path.segments.len() - 1), name, &suggestions) + } + } else { + item_not_found(path, depth, name, &suggestions) + } + } + ResolutionError::Ambiguous(reference) => ambiguous_name(path, reference.name()), + ResolutionError::ModuleEmpty { depth } => empty_module(path, depth), + } +} + fn invalid_query_length(path: &Path<'_>, expected: usize) -> ExpanderDiagnostic { let mut diagnostic = Diagnostic::new( ExpanderDiagnosticCategory::InvalidQueryLength, @@ -672,6 +764,50 @@ fn item_not_found<'heap>( diagnostic } +/// Like `item_not_found`, but for items that are beyond the path's segments. +/// +/// Used by import resolution when the binding name (appended to the path query) +/// is the item that was not found. The primary label points at `span` instead of +/// indexing into `path.segments`. +fn item_not_found_at<'heap>( + span: SpanId, + path: &Path<'heap>, + name: Symbol<'heap>, + suggestions: &[ResolutionSuggestion<'heap, Item<'heap>>], +) -> ExpanderDiagnostic { + let parent_path = FormatUserPath { + rooted: path.rooted, + segments: &path.segments, + up_to: path.segments.len().checked_sub(1), + }; + + let mut diagnostic = Diagnostic::new(ExpanderDiagnosticCategory::ItemNotFound, Severity::Error) + .primary(Label::new( + span, + format!("cannot find `{name}` in module `{parent_path}`"), + )); + + if let Some(last) = path.segments.last() { + diagnostic.add_label(Label::new(last.name.span, "looked in this module")); + } + + let emitted = SpellingSuggestions { + name: Spanned { span, value: name }, + candidates: suggestions.iter().map(|suggestion| suggestion.name), + context: "a similar item exists in this module", + .. + } + .emit(&mut diagnostic); + + if emitted.is_empty() { + diagnostic.add_message(Message::help( + "check the spelling and ensure the item is exported", + )); + } + + diagnostic +} + /// A single unqualified name could not be found in scope. /// /// This is the most common resolution failure. Suggestions are tiered: @@ -2018,3 +2154,175 @@ pub(crate) fn duplicate_fn_parameter( diagnostic } + +/// A `use` call was passed labeled arguments. +pub(crate) fn labeled_arguments_in_use( + labeled_arguments: &[LabeledArgument<'_>], +) -> ExpanderDiagnostic { + let (first, rest) = labeled_arguments + .split_first() + .expect("caller should check that labeled_arguments is non-empty"); + + let mut diagnostic = Diagnostic::new( + ExpanderDiagnosticCategory::LabeledArgumentsNotSupported, + Severity::Error, + ) + .primary(Label::new( + first.span, + "labeled arguments are not allowed in `use`", + )); + + for argument in rest { + diagnostic.add_label(Label::new( + argument.span, + "labeled argument not allowed here", + )); + } + + diagnostic.add_message(Message::help( + "pass the arguments positionally: `(use path imports body)`", + )); + + diagnostic +} + +/// A `use` call was passed the wrong number of arguments. +pub(crate) fn invalid_use_argument_count( + call_span: SpanId, + arguments: &[Argument<'_>], +) -> ExpanderDiagnostic { + let count = arguments.len(); + + let mut diagnostic = Diagnostic::new( + ExpanderDiagnosticCategory::InvalidArgumentCount, + Severity::Error, + ) + .primary(Label::new( + call_span, + format!("expected 3 arguments to `use`, found {count}"), + )); + + for argument in arguments.iter().skip(3) { + diagnostic.add_label(Label::new(argument.span, "unexpected argument")); + } + + diagnostic.add_message(Message::help("use `(use path imports body)`")); + + diagnostic.add_message(Message::note( + "the arguments are, in order: the module path to import from, the import specifier (`*`, \ + a tuple of names, or a struct of aliases), and the body where the imports are in scope", + )); + + diagnostic +} + +/// The imports argument to `use` is not a valid form. +pub(crate) fn invalid_use_imports(span: SpanId) -> ExpanderDiagnostic { + let mut diagnostic = Diagnostic::new( + ExpanderDiagnosticCategory::InvalidUseImports, + Severity::Error, + ) + .primary(Label::new( + span, + "expected `*`, a tuple of names, or a struct of aliases", + )); + + diagnostic.add_message(Message::help( + "use `*` to import everything, `(a, b)` to import specific names, or `(a: alias, b: _)` \ + to import with aliases", + )); + + diagnostic +} + +/// An import binding in a `use` tuple is not a simple identifier. +pub(crate) fn invalid_use_import_binding(span: SpanId) -> ExpanderDiagnostic { + let mut diagnostic = Diagnostic::new( + ExpanderDiagnosticCategory::InvalidUseImportBinding, + Severity::Error, + ) + .primary(Label::new(span, "expected a simple name to import")); + + diagnostic.add_message(Message::help( + "each import must be a plain identifier like `foo`, not a qualified path or expression", + )); + + diagnostic +} + +/// An alias in a `use` struct binding is not a valid form. +/// +/// Aliases must be either `_` (keep the original name) or a simple identifier. +pub(crate) fn invalid_use_alias(span: SpanId) -> ExpanderDiagnostic { + let mut diagnostic = + Diagnostic::new(ExpanderDiagnosticCategory::InvalidUseAlias, Severity::Error).primary( + Label::new(span, "expected `_` or a simple identifier as the alias"), + ); + + diagnostic.add_message(Message::help( + "use `_` to keep the original name or a simple identifier to rename: `(name: alias)` or \ + `(name: _)`", + )); + + diagnostic +} + +/// The same effective name was bound twice in a `use` import list. +pub(crate) fn duplicate_use_binding( + duplicate_span: SpanId, + name: Symbol<'_>, + original_span: SpanId, +) -> ExpanderDiagnostic { + let mut diagnostic = Diagnostic::new( + ExpanderDiagnosticCategory::DuplicateUseBinding, + Severity::Error, + ) + .primary(Label::new( + duplicate_span, + format!("duplicate import binding `{name}`"), + )); + + diagnostic.add_label(Label::new( + original_span, + format!("`{name}` was first imported here"), + )); + + diagnostic.add_message(Message::help( + "remove the duplicate or use an alias to import under a different name", + )); + + diagnostic +} + +/// The path argument to `use` is not a path expression. +pub(crate) fn invalid_use_path(span: SpanId) -> ExpanderDiagnostic { + let mut diagnostic = + Diagnostic::new(ExpanderDiagnosticCategory::InvalidUsePath, Severity::Error) + .primary(Label::new(span, "expected a module path")); + + diagnostic.add_message(Message::help( + "the first argument to `use` must be a path like `core::math` identifying the module to \ + import from", + )); + + diagnostic +} + +/// The path in a `use` statement contains generic arguments. +pub(crate) fn use_path_generic_arguments(path_span: SpanId) -> ExpanderDiagnostic { + let mut diagnostic = Diagnostic::new( + ExpanderDiagnosticCategory::UsePathGenericArguments, + Severity::Error, + ) + .primary(Label::new( + path_span, + "generic arguments are not allowed in `use` paths", + )); + + diagnostic.add_message(Message::help( + "remove the generic arguments; `use` imports modules and items, which do not take type \ + parameters at the import site", + )); + + diagnostic +} diff --git a/libs/@local/hashql/ast/src/lower/expander/mod.rs b/libs/@local/hashql/ast/src/lower/expander/mod.rs index d0d1e6043cd..0a3c60ebc60 100644 --- a/libs/@local/hashql/ast/src/lower/expander/mod.rs +++ b/libs/@local/hashql/ast/src/lower/expander/mod.rs @@ -23,7 +23,7 @@ use hashql_core::{ use self::{ access::lower_access, r#as::lower_as, error::ExpanderDiagnosticIssues, r#fn::lower_fn, r#if::lower_if, index::lower_index, input::lower_input, r#let::lower_let, - newtype::lower_newtype, r#type::lower_type, + newtype::lower_newtype, r#type::lower_type, r#use::lower_use, }; use crate::{ node::{self, id::NodeId}, @@ -299,7 +299,10 @@ where self.trampoline = Some(lower_newtype(self, expr)); return; } - sym::path::r#use::CONST => {} + sym::path::r#use::CONST => { + self.trampoline = Some(lower_use(self, expr)); + return; + } sym::path::r#fn::CONST => { self.trampoline = Some(lower_fn(self, expr)); return; diff --git a/libs/@local/hashql/ast/src/lower/expander/use.rs b/libs/@local/hashql/ast/src/lower/expander/use.rs index 7f3547345de..560525d7b64 100644 --- a/libs/@local/hashql/ast/src/lower/expander/use.rs +++ b/libs/@local/hashql/ast/src/lower/expander/use.rs @@ -8,15 +8,18 @@ use hashql_core::{ symbol::sym, }; -use super::{BindingKind, Expander}; -use crate::node::{ - expr::{ - CallExpr, Expr, ExprKind, - call::Argument, - r#use::{self, UseBinding, UseKind}, +use super::Expander; +use crate::{ + lower::expander::error, + node::{ + expr::{ + CallExpr, Expr, ExprKind, + call::Argument, + r#use::{self, UseBinding, UseKind}, + }, + id::NodeId, + path::Path, }, - id::NodeId, - path::Path, }; fn lower_imports<'heap, S>( @@ -42,12 +45,16 @@ where for element in tuple.elements.drain(..) { let ExprKind::Path(path) = element.value.kind else { - todo!("diagnostic"); + expander + .diagnostics + .push(error::invalid_use_import_binding(element.value.span)); continue; }; let Some(name) = path.into_ident() else { - todo!("diagnostic"); + expander + .diagnostics + .push(error::invalid_use_import_binding(element.value.span)); continue; }; @@ -69,7 +76,9 @@ where ExprKind::Underscore => None, ExprKind::Path(path) if let Some(&ident) = path.as_ident() => Some(ident), _ => { - todo!("diagnostic"); + expander + .diagnostics + .push(error::invalid_use_alias(entry.value.span)); None } }; @@ -85,20 +94,27 @@ where Some(UseKind::Named(bindings)) } _ => { - todo!("kael you know what to do"); + expander + .diagnostics + .push(error::invalid_use_imports(imports.value.span)); None } }; if let Some(UseKind::Named(bindings)) = &mut imports { + let diagnostics = &mut expander.diagnostics; expander.scratch.scoped(|scratch| { let mut seen = fast_hash_map_with_capacity_in(bindings.len(), scratch); bindings.retain(|binding| { - if let Err(error) = - seen.try_insert(binding.alias.unwrap_or(binding.name).value, binding.span) - { - todo!("diagnostic"); + let effective_name = binding.alias.unwrap_or(binding.name); + + if let Err(occupied) = seen.try_insert(effective_name.value, binding.span) { + diagnostics.push(error::duplicate_use_binding( + binding.span, + effective_name.value, + *occupied.entry.get(), + )); return false; } @@ -150,8 +166,14 @@ where ); if let Err(error) = result { - todo!("diagnostic"); - errored |= true; + expander + .diagnostics + .push(error::from_import_resolution_error( + &path, + Some(name.symbol()), + error, + )); + errored = true; continue; } } @@ -168,7 +190,7 @@ where UseKind::Glob(_) => { let result = expander.namespace.import( sym::symbol::asterisk, - query.iter().copied(), + query, ImportOptions { glob: true, mode, @@ -180,7 +202,9 @@ where expander.visit(&mut body); if let Err(error) = result { - todo!("diagnostic"); + expander + .diagnostics + .push(error::from_import_resolution_error(&path, None, error)); return Expr::dummy(); } @@ -201,13 +225,17 @@ where { let path = mem::replace(&mut path.value, Expr::dummy()); let ExprKind::Path(path) = path.kind else { - todo!("kael you know what to do!"); + expander + .diagnostics + .push(error::invalid_use_path(path.span)); return Expr::dummy(); }; if path.has_generic_arguments() { - todo!("kael you know what to do!"); - // we continue here, because it's not "fatal" + expander + .diagnostics + .push(error::use_path_generic_arguments(path.span)); + // we continue here, because it's not fatal } let Some(imports) = lower_imports(expander, imports) else { @@ -225,7 +253,7 @@ pub(super) fn lower_use<'heap, S>( expander: &mut Expander<'_, 'heap, S>, CallExpr { id: _, - span: _, + span, function: _, arguments, labeled_arguments, @@ -235,13 +263,17 @@ where S: BumpAllocator, { if !labeled_arguments.is_empty() { - todo!("kael you know what to do :3") + expander + .diagnostics + .push(error::labeled_arguments_in_use(labeled_arguments)); } if let [path, imports, body] = &mut **arguments { lower_use_impl(expander, path, imports, body) } else { - todo!("kael you know what to do :3"); + expander + .diagnostics + .push(error::invalid_use_argument_count(*span, arguments)); Expr::dummy() } From 8c40c8c08a8491275ad9a3e1e4531a1b733f7d1c Mon Sep 17 00:00:00 2001 From: Bilal Mahmoud <7252775+indietyp@users.noreply.github.com> Date: Fri, 12 Jun 2026 18:42:38 +0200 Subject: [PATCH 25/55] chore: docs --- .../hashql/ast/src/lower/expander/access.rs | 6 ++ .../hashql/ast/src/lower/expander/as.rs | 6 ++ .../hashql/ast/src/lower/expander/fn.rs | 13 +++++ .../hashql/ast/src/lower/expander/if.rs | 7 +++ .../hashql/ast/src/lower/expander/index.rs | 6 ++ .../hashql/ast/src/lower/expander/input.rs | 10 ++++ .../hashql/ast/src/lower/expander/let.rs | 9 +++ .../hashql/ast/src/lower/expander/mod.rs | 57 +++++++++++++++++-- .../hashql/ast/src/lower/expander/newtype.rs | 8 +++ .../hashql/ast/src/lower/expander/type.rs | 15 +++++ .../hashql/ast/src/lower/expander/use.rs | 13 +++++ 11 files changed, 144 insertions(+), 6 deletions(-) diff --git a/libs/@local/hashql/ast/src/lower/expander/access.rs b/libs/@local/hashql/ast/src/lower/expander/access.rs index 669cb375969..595133929ac 100644 --- a/libs/@local/hashql/ast/src/lower/expander/access.rs +++ b/libs/@local/hashql/ast/src/lower/expander/access.rs @@ -97,6 +97,12 @@ where } } +/// Lowers a `.` call into a [`FieldExpr`]. +/// +/// Form: `(. value field)`. The field must be either a named identifier +/// or a non-negative integer literal (for positional tuple access). +/// +/// [`FieldExpr`]: crate::node::expr::FieldExpr pub(super) fn lower_access<'heap, S>( expander: &mut Expander<'_, 'heap, S>, CallExpr { diff --git a/libs/@local/hashql/ast/src/lower/expander/as.rs b/libs/@local/hashql/ast/src/lower/expander/as.rs index 05fd2fc8b4c..a92f4fe6dcc 100644 --- a/libs/@local/hashql/ast/src/lower/expander/as.rs +++ b/libs/@local/hashql/ast/src/lower/expander/as.rs @@ -40,6 +40,12 @@ where } } +/// Lowers an `as` call into an [`AsExpr`]. +/// +/// Form: `(as value type)`. The type annotation is resolved in the type +/// universe. +/// +/// [`AsExpr`]: crate::node::expr::AsExpr pub(super) fn lower_as<'heap, S>( expander: &mut Expander<'_, 'heap, S>, CallExpr { diff --git a/libs/@local/hashql/ast/src/lower/expander/fn.rs b/libs/@local/hashql/ast/src/lower/expander/fn.rs index b1b1e473a7c..ed12c6e90a8 100644 --- a/libs/@local/hashql/ast/src/lower/expander/fn.rs +++ b/libs/@local/hashql/ast/src/lower/expander/fn.rs @@ -286,6 +286,19 @@ where } } +/// Lowers a `fn` call into a [`ClosureExpr`]. +/// +/// Form: `(fn generics params return-type body)` where: +/// - `generics` is a tuple `(T, U)` or struct `(T: bound, U: _)` of type parameters +/// - `params` is a struct `(x: int, y: string)` of named parameters +/// - `return-type` is a type expression +/// - `body` is the function body +/// +/// Generic names are bound in the type universe. Parameter names are +/// bound in the value universe. Both are in scope for the return type +/// and body. +/// +/// [`ClosureExpr`]: crate::node::expr::ClosureExpr pub(super) fn lower_fn<'heap, S>( expander: &mut Expander<'_, 'heap, S>, CallExpr { diff --git a/libs/@local/hashql/ast/src/lower/expander/if.rs b/libs/@local/hashql/ast/src/lower/expander/if.rs index 0799c46103b..8c91ee77255 100644 --- a/libs/@local/hashql/ast/src/lower/expander/if.rs +++ b/libs/@local/hashql/ast/src/lower/expander/if.rs @@ -45,6 +45,13 @@ where } } +/// Lowers an `if` call into an [`IfExpr`]. +/// +/// Accepts two forms: +/// - `(if condition then)` without an else branch +/// - `(if condition then else)` with an else branch +/// +/// [`IfExpr`]: crate::node::expr::IfExpr pub(super) fn lower_if<'heap, S>( expander: &mut Expander<'_, 'heap, S>, CallExpr { diff --git a/libs/@local/hashql/ast/src/lower/expander/index.rs b/libs/@local/hashql/ast/src/lower/expander/index.rs index 09f3952a7b9..d99f829f6e5 100644 --- a/libs/@local/hashql/ast/src/lower/expander/index.rs +++ b/libs/@local/hashql/ast/src/lower/expander/index.rs @@ -39,6 +39,12 @@ where } } +/// Lowers an `[]` call into an [`IndexExpr`]. +/// +/// Form: `([] collection index)`. Both arguments are resolved in the +/// current universe. +/// +/// [`IndexExpr`]: crate::node::expr::IndexExpr pub(super) fn lower_index<'heap, S>( expander: &mut Expander<'_, 'heap, S>, CallExpr { diff --git a/libs/@local/hashql/ast/src/lower/expander/input.rs b/libs/@local/hashql/ast/src/lower/expander/input.rs index 25a6f0871a0..da62130a191 100644 --- a/libs/@local/hashql/ast/src/lower/expander/input.rs +++ b/libs/@local/hashql/ast/src/lower/expander/input.rs @@ -64,6 +64,16 @@ where } } +/// Lowers an `input` call into an [`InputExpr`]. +/// +/// Accepts two forms: +/// - `(input name type)` for a required input +/// - `(input name type default)` for an input with a default value +/// +/// The type is resolved in the type universe. The default (if present) +/// is resolved in the value universe. +/// +/// [`InputExpr`]: crate::node::expr::InputExpr pub(super) fn lower_input<'heap, S>( expander: &mut Expander<'_, 'heap, S>, CallExpr { diff --git a/libs/@local/hashql/ast/src/lower/expander/let.rs b/libs/@local/hashql/ast/src/lower/expander/let.rs index fc384dad8a8..e98cd2e8396 100644 --- a/libs/@local/hashql/ast/src/lower/expander/let.rs +++ b/libs/@local/hashql/ast/src/lower/expander/let.rs @@ -83,6 +83,15 @@ where } } +/// Lowers a `let` call into a [`LetExpr`]. +/// +/// Accepts two forms: +/// - `(let name value body)` with no type annotation +/// - `(let name type value body)` with an explicit type +/// +/// The `name` is bound in scope for `body` only. +/// +/// [`LetExpr`]: crate::node::expr::LetExpr pub(super) fn lower_let<'heap, S>( expander: &mut Expander<'_, 'heap, S>, CallExpr { diff --git a/libs/@local/hashql/ast/src/lower/expander/mod.rs b/libs/@local/hashql/ast/src/lower/expander/mod.rs index 0a3c60ebc60..2e2ae739d34 100644 --- a/libs/@local/hashql/ast/src/lower/expander/mod.rs +++ b/libs/@local/hashql/ast/src/lower/expander/mod.rs @@ -1,3 +1,11 @@ +//! Combined name resolution and special form expansion pass. +//! +//! The expander walks the AST top-down, resolving every path against a +//! [`ModuleNamespace`] and rewriting it to its absolute form. When a call +//! expression targets a special form (like `let`, `fn`, or `use`), the +//! expander lowers it into the corresponding typed AST node in the same +//! traversal. + mod access; mod r#as; mod error; @@ -30,8 +38,14 @@ use crate::{ visit::{self, Visitor}, }; +/// Whether a binding introduced during expansion is a local (opaque) or +/// an alias for a resolved registry item. enum BindingKind<'heap> { + /// A binding with no identity beyond its name and universe + /// (e.g., a `let` binding or function parameter). Local(Universe), + /// An alias for a known registry item, preserving its identity through + /// rebinding (e.g., a `use` import). Remote(Item<'heap>), } @@ -47,6 +61,11 @@ impl<'heap> From for BindingKind<'heap> { } } +/// Handle for registering bindings without exposing the full namespace. +/// +/// Passed into the `register` closure of [`Expander::bind_many_with`] so +/// that the closure can declare bindings while the caller retains a +/// separate mutable reference to its own data. struct Binder<'ns, 'env, 'heap> { namespace: &'ns mut ModuleNamespace<'env, 'heap>, } @@ -60,10 +79,13 @@ impl<'heap> Binder<'_, '_, 'heap> { } } -// What does the expander do? -// The expander does the following: -// 1. it resolves imports -// 2. once resolved, it expands special forms +/// Combined name resolution and special form expansion visitor. +/// +/// Resolves every path in the AST against the module namespace, rewrites +/// paths to their absolute form, and lowers special form calls (e.g., `let`, +/// `fn`, `use`) into typed AST nodes. Errors that prevent resolution produce +/// [`Expr::dummy`] placeholders so that later diagnostics can be suppressed +/// for cascading failures. pub struct Expander<'env, 'heap, S> { heap: &'heap heap::Heap, scratch: S, @@ -89,6 +111,12 @@ impl<'env, 'heap, S> Expander<'env, 'heap, S> { } } + /// Walks `expr`, applying resolution and expansion, and returns the + /// resolved [`Item`] if the expression was a path that resolved to one. + /// + /// Returns `None` when the expression resolved to a local binding, + /// was not a path, or resolution failed (in which case the expression + /// is replaced with [`Expr::dummy`]). fn visit(&mut self, expr: &mut node::expr::Expr<'heap>) -> Option> where S: BumpAllocator, @@ -106,6 +134,8 @@ impl<'env, 'heap, S> Expander<'env, 'heap, S> { current_item } + /// Runs `closure` with the resolution universe temporarily set to + /// `universe`, restoring the previous universe afterwards. fn with_universe(&mut self, universe: Universe, closure: impl FnOnce(&mut Self) -> T) -> T { let prev_universe = self.current_universe; self.current_universe = universe; @@ -114,6 +144,8 @@ impl<'env, 'heap, S> Expander<'env, 'heap, S> { result } + /// Introduces a single binding for the duration of `closure`, then + /// rolls back the namespace. fn bind( &mut self, variable: Symbol<'heap>, @@ -123,6 +155,17 @@ impl<'env, 'heap, S> Expander<'env, 'heap, S> { self.bind_many([(variable, kind)], closure) } + /// Introduces bindings derived from `value` and then runs `closure` + /// with both `&mut Self` and `&mut U` available. + /// + /// `register` inspects `value` (shared) and pushes bindings through + /// the [`Binder`]. Once it returns, `closure` receives full mutable + /// access to both the expander and `value`. The namespace is rolled + /// back after `closure` completes. + /// + /// This two-closure design exists because Rust closures cannot return + /// iterators that borrow from their arguments. The push-style + /// `register` avoids that limitation without dynamic dispatch. fn bind_many_with( &mut self, mut value: U, @@ -143,6 +186,8 @@ impl<'env, 'heap, S> Expander<'env, 'heap, S> { (value, result) } + /// Introduces all `variables` as bindings for the duration of `closure`, + /// then rolls back the namespace. fn bind_many( &mut self, variables: impl IntoIterator, K)>, @@ -151,8 +196,8 @@ impl<'env, 'heap, S> Expander<'env, 'heap, S> { where K: Into>, { - // The inline is here, because this is a hot path, this is just desugaring of the underlying - // iterator, make it explicit so that it indeed inlines the call + // The inline is here, because this is a hot path, this is just desugaring of the + // underlying iterator, make it explicit so that it indeed inlines the call let ((), result) = self.bind_many_with( (), #[inline] diff --git a/libs/@local/hashql/ast/src/lower/expander/newtype.rs b/libs/@local/hashql/ast/src/lower/expander/newtype.rs index 02441206be9..d9e0442061b 100644 --- a/libs/@local/hashql/ast/src/lower/expander/newtype.rs +++ b/libs/@local/hashql/ast/src/lower/expander/newtype.rs @@ -64,6 +64,14 @@ where } } +/// Lowers a `newtype` call into a [`NewTypeExpr`]. +/// +/// Form: `(newtype Name type-expr body)`. Like `type`, but introduces a +/// distinct nominal type rather than an alias. The name is bound in both +/// the type and value universes for `body` (the value binding acts as a +/// constructor). +/// +/// [`NewTypeExpr`]: crate::node::expr::NewTypeExpr pub(super) fn lower_newtype<'heap, S>( expander: &mut Expander<'_, 'heap, S>, CallExpr { diff --git a/libs/@local/hashql/ast/src/lower/expander/type.rs b/libs/@local/hashql/ast/src/lower/expander/type.rs index 87d9bca058e..c8779bfa6e8 100644 --- a/libs/@local/hashql/ast/src/lower/expander/type.rs +++ b/libs/@local/hashql/ast/src/lower/expander/type.rs @@ -95,6 +95,11 @@ where } } +/// Converts a value-position [`Expr`] into a [`Type`]. +/// +/// Paths, tuples, structs, `_`, and type constructor calls (`|`, `&`) are +/// valid. Everything else produces a diagnostic and returns [`Type::dummy`]. +/// [`Expr::Dummy`] is suppressed (a resolution error was already reported). pub(super) fn lower_expr_to_type<'heap, S>( expander: &mut Expander<'_, 'heap, S>, expr: Expr<'heap>, @@ -390,6 +395,16 @@ where } } +/// Lowers a `type` call into a [`TypeExpr`]. +/// +/// Form: `(type Name type-expr body)`. The name may include generic +/// parameters like `Pair`. Constraints on generic parameters are +/// validated after all parameter names are in scope, so recursive +/// constraints like `T: Container` are supported. +/// +/// The name is bound in the type universe for `body`. +/// +/// [`TypeExpr`]: crate::node::expr::TypeExpr pub(super) fn lower_type<'heap, S>( expander: &mut Expander<'_, 'heap, S>, CallExpr { diff --git a/libs/@local/hashql/ast/src/lower/expander/use.rs b/libs/@local/hashql/ast/src/lower/expander/use.rs index 560525d7b64..4a7173ce573 100644 --- a/libs/@local/hashql/ast/src/lower/expander/use.rs +++ b/libs/@local/hashql/ast/src/lower/expander/use.rs @@ -249,6 +249,19 @@ where body } +/// Lowers a `use` call, importing names into scope for the body. +/// +/// Form: `(use path imports body)` where: +/// - `path` is a module path like `core::math` +/// - `imports` is one of: +/// - `*` for a glob import +/// - `(sin, cos)` for named imports +/// - `(sin: my_sin, cos: _)` for aliased imports (`_` keeps the original name) +/// - `body` is the expression where the imports are in scope +/// +/// Unlike other forms, `use` does not produce a dedicated AST node. +/// It resolves the imports into the namespace, visits the body with +/// those imports available, and returns the body directly. pub(super) fn lower_use<'heap, S>( expander: &mut Expander<'_, 'heap, S>, CallExpr { From 954b863883a79d5a01160fa7340f9cc424b76090 Mon Sep 17 00:00:00 2001 From: Bilal Mahmoud <7252775+indietyp@users.noreply.github.com> Date: Mon, 15 Jun 2026 12:03:54 +0200 Subject: [PATCH 26/55] feat: intrinsic --- .../hashql/ast/src/lower/expander/error.rs | 42 +++++++++++++++++++ .../hashql/ast/src/lower/expander/let.rs | 21 +++++++++- .../hashql/ast/src/lower/expander/mod.rs | 12 +++--- .../hashql/ast/src/lower/expander/type.rs | 19 ++++++++- 4 files changed, 86 insertions(+), 8 deletions(-) diff --git a/libs/@local/hashql/ast/src/lower/expander/error.rs b/libs/@local/hashql/ast/src/lower/expander/error.rs index e326d024ffb..b93b9e7ede0 100644 --- a/libs/@local/hashql/ast/src/lower/expander/error.rs +++ b/libs/@local/hashql/ast/src/lower/expander/error.rs @@ -208,6 +208,11 @@ const DUPLICATE_USE_BINDING: TerminalDiagnosticCategory = TerminalDiagnosticCate name: "Duplicate use binding", }; +const INTRINSIC_TYPE_ANNOTATION: TerminalDiagnosticCategory = TerminalDiagnosticCategory { + id: "intrinsic-type-annotation", + name: "Type annotation on intrinsic binding", +}; + const INVALID_USE_PATH: TerminalDiagnosticCategory = TerminalDiagnosticCategory { id: "invalid-use-path", name: "Invalid use path", @@ -251,6 +256,7 @@ pub enum ExpanderDiagnosticCategory { InvalidFnParams, DuplicateFnGeneric, DuplicateFnParameter, + IntrinsicTypeAnnotation, InvalidUseImports, InvalidUseImportBinding, InvalidUseAlias, @@ -301,6 +307,7 @@ impl DiagnosticCategory for ExpanderDiagnosticCategory { Self::InvalidFnParams => Some(&INVALID_FN_PARAMS), Self::DuplicateFnGeneric => Some(&DUPLICATE_FN_GENERIC), Self::DuplicateFnParameter => Some(&DUPLICATE_FN_PARAMETER), + Self::IntrinsicTypeAnnotation => Some(&INTRINSIC_TYPE_ANNOTATION), Self::InvalidUseImports => Some(&INVALID_USE_IMPORTS), Self::InvalidUseImportBinding => Some(&INVALID_USE_IMPORT_BINDING), Self::InvalidUseAlias => Some(&INVALID_USE_ALIAS), @@ -1068,6 +1075,41 @@ pub(crate) fn invalid_let_argument_count( diagnostic } +/// A `let` binding with a type annotation resolved to a compiler intrinsic. +/// +/// Intrinsics are not ordinary values and cannot be narrowed by a type +/// annotation. The binding is still valid without the annotation. +pub(crate) fn intrinsic_type_annotation( + annotation_span: SpanId, + value_span: SpanId, + name: Symbol<'_>, +) -> ExpanderDiagnostic { + let mut diagnostic = Diagnostic::new( + ExpanderDiagnosticCategory::IntrinsicTypeAnnotation, + Severity::Error, + ) + .primary(Label::new( + annotation_span, + format!("type annotation on `{name}` is not allowed here"), + )); + + diagnostic.add_label(Label::new( + value_span, + "this resolves to a compiler intrinsic", + )); + + diagnostic.add_message(Message::help(format!( + "remove the type annotation: `(let {name} value body)`", + ))); + + diagnostic.add_message(Message::note( + "compiler intrinsics cannot be given a type annotation because they are not ordinary \ + values", + )); + + diagnostic +} + /// An `as` call was passed labeled arguments. /// /// `as` only accepts positional arguments. diff --git a/libs/@local/hashql/ast/src/lower/expander/let.rs b/libs/@local/hashql/ast/src/lower/expander/let.rs index e98cd2e8396..29a1c1a1e20 100644 --- a/libs/@local/hashql/ast/src/lower/expander/let.rs +++ b/libs/@local/hashql/ast/src/lower/expander/let.rs @@ -1,6 +1,6 @@ use core::mem; -use hashql_core::{heap::BumpAllocator, span::SpanId, symbol::Ident}; +use hashql_core::{heap::BumpAllocator, module::item::Item, span::SpanId, symbol::Ident}; use super::{BindingKind, Expander, r#type::lower_expr_to_type}; use crate::{ @@ -57,6 +57,25 @@ where }, ); + if let Some(Item { + kind: hashql_core::module::item::ItemKind::Intrinsic(_), + .. + }) = item + { + if let Some(r#type) = r#type { + expander.diagnostics.push(error::intrinsic_type_annotation( + r#type.value.span, + value.value.span, + name.value, + )); + } + + // We do not replace every binding outright, only intrinsic ones for one specific reason: + // intrinsic types cannot be annotated, otherwise the binding survives, as the typechk on + // the binding could fail (or the typechk is used to narrow the type). + return mem::replace(&mut body.value, Expr::dummy()); + } + let r#type = if let Some(r#type) = r#type { let mut value = mem::replace(&mut r#type.value, Expr::dummy()); diff --git a/libs/@local/hashql/ast/src/lower/expander/mod.rs b/libs/@local/hashql/ast/src/lower/expander/mod.rs index 2e2ae739d34..df64027b0c9 100644 --- a/libs/@local/hashql/ast/src/lower/expander/mod.rs +++ b/libs/@local/hashql/ast/src/lower/expander/mod.rs @@ -22,7 +22,7 @@ use hashql_core::{ heap::{self, BumpAllocator}, module::{ self, Reference, Universe, - item::{IntrinsicItem, Item}, + item::{IntrinsicItem, IntrinsicTypeItem, Item}, namespace::{ModuleNamespace, ResolutionMode, ResolveOptions}, }, symbol::{Ident, Symbol, sym}, @@ -50,14 +50,14 @@ enum BindingKind<'heap> { } impl<'heap> From> for BindingKind<'heap> { - fn from(v: Item<'heap>) -> Self { - Self::Remote(v) + fn from(value: Item<'heap>) -> Self { + Self::Remote(value) } } -impl<'heap> From for BindingKind<'heap> { - fn from(v: Universe) -> Self { - Self::Local(v) +impl From for BindingKind<'_> { + fn from(value: Universe) -> Self { + Self::Local(value) } } diff --git a/libs/@local/hashql/ast/src/lower/expander/type.rs b/libs/@local/hashql/ast/src/lower/expander/type.rs index c8779bfa6e8..1a23ebb90ab 100644 --- a/libs/@local/hashql/ast/src/lower/expander/type.rs +++ b/libs/@local/hashql/ast/src/lower/expander/type.rs @@ -370,9 +370,26 @@ where let mut value = mem::replace(&mut value.value, Expr::dummy()); let mut body = mem::replace(&mut body.value, Expr::dummy()); - expander.with_universe(hashql_core::module::Universe::Type, |expander| { + let item = expander.with_universe(hashql_core::module::Universe::Type, |expander| { expander.visit(&mut value) }); + + if let Some( + item @ Item { + kind: hashql_core::module::item::ItemKind::Intrinsic(_), + .. + }, + ) = item + { + // We rebound an intrinsic, instead of erroring out, we use the body directly, and "show" + // the new value; + expander.bind(name.value, item, |expander| { + expander.visit(&mut body); + }); + + return body; + } + let value = lower_expr_to_type(expander, value); expander.bind( From 723f1dee39b3be096effe03c66290f5f5095ae7e Mon Sep 17 00:00:00 2001 From: Bilal Mahmoud <7252775+indietyp@users.noreply.github.com> Date: Mon, 15 Jun 2026 12:14:13 +0200 Subject: [PATCH 27/55] chore: lints --- libs/@local/hashql/ast/src/lower/error.rs | 11 +- .../hashql/ast/src/lower/expander/error.rs | 9 +- .../hashql/ast/src/lower/expander/fn.rs | 155 +++++++++-------- .../hashql/ast/src/lower/expander/mod.rs | 10 +- .../hashql/ast/src/lower/expander/use.rs | 162 +++++++++++------- libs/@local/hashql/ast/src/lower/mod.rs | 49 +++--- libs/@local/hashql/ast/src/node/type/mod.rs | 3 +- 7 files changed, 225 insertions(+), 174 deletions(-) diff --git a/libs/@local/hashql/ast/src/lower/error.rs b/libs/@local/hashql/ast/src/lower/error.rs index ca082629c8b..045120539dc 100644 --- a/libs/@local/hashql/ast/src/lower/error.rs +++ b/libs/@local/hashql/ast/src/lower/error.rs @@ -4,9 +4,7 @@ use hashql_core::span::SpanId; use hashql_diagnostics::{Diagnostic, category::DiagnosticCategory}; use super::{ - import_resolver::error::ImportResolverDiagnosticCategory, - sanitizer::SanitizerDiagnosticCategory, - // special_form_expander::error::SpecialFormExpanderDiagnosticCategory, + expander::error::ExpanderDiagnosticCategory, sanitizer::SanitizerDiagnosticCategory, type_extractor::error::TypeExtractorDiagnosticCategory, }; @@ -14,9 +12,9 @@ pub type LoweringDiagnostic = Diagnostic; #[derive(Debug, Copy, Clone, PartialEq, Eq, Hash)] pub enum LoweringDiagnosticCategory { - // Expander(SpecialFormExpanderDiagnosticCategory), + Expander(ExpanderDiagnosticCategory), Sanitizer(SanitizerDiagnosticCategory), - Resolver(ImportResolverDiagnosticCategory), + Extractor(TypeExtractorDiagnosticCategory), } @@ -31,9 +29,8 @@ impl DiagnosticCategory for LoweringDiagnosticCategory { fn subcategory(&self) -> Option<&dyn DiagnosticCategory> { match self { - // Self::Expander(special_form) => Some(special_form), + Self::Expander(expander) => Some(expander), Self::Sanitizer(sanitizer) => Some(sanitizer), - Self::Resolver(resolver) => Some(resolver), Self::Extractor(extractor) => Some(extractor), } } diff --git a/libs/@local/hashql/ast/src/lower/expander/error.rs b/libs/@local/hashql/ast/src/lower/expander/error.rs index b93b9e7ede0..4f076d48cf6 100644 --- a/libs/@local/hashql/ast/src/lower/expander/error.rs +++ b/libs/@local/hashql/ast/src/lower/expander/error.rs @@ -538,11 +538,10 @@ pub(crate) fn from_import_resolution_error<'heap>( // For named imports, the item (binding name) is beyond the path segments. // Use the binding's span if available, otherwise fall back to the path span. if depth >= path.segments.len() { - if let Some(binding) = binding_name { - item_not_found_at(binding.span, path, name, &suggestions) - } else { - item_not_found(path, depth.min(path.segments.len() - 1), name, &suggestions) - } + binding_name.map_or_else( + || item_not_found(path, depth.min(path.segments.len() - 1), name, &suggestions), + |binding| item_not_found_at(binding.span, path, name, &suggestions), + ) } else { item_not_found(path, depth, name, &suggestions) } diff --git a/libs/@local/hashql/ast/src/lower/expander/fn.rs b/libs/@local/hashql/ast/src/lower/expander/fn.rs index ed12c6e90a8..927f3eaa027 100644 --- a/libs/@local/hashql/ast/src/lower/expander/fn.rs +++ b/libs/@local/hashql/ast/src/lower/expander/fn.rs @@ -21,88 +21,101 @@ use crate::{ }, }; -fn lower_generics<'heap, S>( +fn lower_generics_tuple<'heap, S>( expander: &mut Expander<'_, 'heap, S>, + tuple: &mut crate::node::expr::TupleExpr<'heap>, +) -> Generics<'heap> { + if let Some(annotation) = tuple.r#type.as_ref() { + expander + .diagnostics + .push(error::fn_generics_type_annotation(annotation.span)); + } - generics: &mut Argument<'heap>, + let mut params = Vec::with_capacity_in(tuple.elements.len(), expander.heap); + + for element in &mut tuple.elements { + let Some(ident) = expr_to_ident(&element.value) else { + expander + .diagnostics + .push(error::invalid_fn_generic_param(element.value.span)); + + continue; + }; + + params.push(GenericParam { + id: NodeId::PLACEHOLDER, + span: element.span, + name: ident, + bound: None, + }); + } + + Generics { + id: NodeId::PLACEHOLDER, + span: tuple.span, + params, + } +} + +fn lower_generics_struct<'heap, S>( + expander: &mut Expander<'_, 'heap, S>, + r#struct: &mut crate::node::expr::StructExpr<'heap>, ) -> Generics<'heap> where S: BumpAllocator, { - let mut generics = match &mut generics.value.kind { - ExprKind::Tuple(tuple) => { - if let Some(annotation) = tuple.r#type.as_ref() { - expander - .diagnostics - .push(error::fn_generics_type_annotation(annotation.span)); - } - - let mut params = Vec::with_capacity_in(tuple.elements.len(), expander.heap); - - for element in &mut tuple.elements { - let Some(ident) = expr_to_ident(&element.value) else { - expander - .diagnostics - .push(error::invalid_fn_generic_param(element.value.span)); + if let Some(annotation) = r#struct.r#type.as_ref() { + expander + .diagnostics + .push(error::fn_generics_type_annotation(annotation.span)); + } - continue; - }; + let mut params = Vec::with_capacity_in(r#struct.entries.len(), expander.heap); - params.push(GenericParam { - id: NodeId::PLACEHOLDER, - span: element.span, - name: ident, - bound: None, - }); - } + expander.with_universe(Universe::Type, |expander| { + expander.bind_many_with( + &mut r#struct.entries, + |entries, binder| { + for entry in &**entries { + binder.bind(entry.key.value, Universe::Type); + } + }, + |expander, entries| { + for mut entry in entries.drain(..) { + expander.visit(&mut entry.value); + let bound = lower_expr_to_type(expander, entry.value); + + params.push(GenericParam { + id: NodeId::PLACEHOLDER, + span: entry.span, + name: entry.key, + bound: Some(bound).filter(|bound| { + !matches!(bound.kind, crate::node::r#type::TypeKind::Infer) + }), + }); + } + }, + ) + }); - Generics { - id: NodeId::PLACEHOLDER, - span: tuple.span, - params, - } - } - ExprKind::Struct(r#struct) => { - if let Some(annotation) = r#struct.r#type.as_ref() { - expander - .diagnostics - .push(error::fn_generics_type_annotation(annotation.span)); - } + Generics { + id: NodeId::PLACEHOLDER, + span: r#struct.span, + params, + } +} - let mut params = Vec::with_capacity_in(r#struct.entries.len(), expander.heap); - - expander.with_universe(Universe::Type, |expander| { - expander.bind_many_with( - &mut r#struct.entries, - |entries, binder| { - for entry in &**entries { - binder.bind(entry.key.value, Universe::Type); - } - }, - |expander, entries| { - for mut entry in entries.drain(..) { - expander.visit(&mut entry.value); - let bound = lower_expr_to_type(expander, entry.value); - - params.push(GenericParam { - id: NodeId::PLACEHOLDER, - span: entry.span, - name: entry.key, - bound: Some(bound).filter(|bound| { - !matches!(bound.kind, crate::node::r#type::TypeKind::Infer) - }), - }); - } - }, - ) - }); +fn lower_generics<'heap, S>( + expander: &mut Expander<'_, 'heap, S>, - Generics { - id: NodeId::PLACEHOLDER, - span: r#struct.span, - params, - } - } + generics: &mut Argument<'heap>, +) -> Generics<'heap> +where + S: BumpAllocator, +{ + let mut generics = match &mut generics.value.kind { + ExprKind::Tuple(tuple) => lower_generics_tuple(expander, tuple), + ExprKind::Struct(r#struct) => lower_generics_struct(expander, r#struct), ExprKind::Call(_) | ExprKind::Dict(_) | ExprKind::List(_) diff --git a/libs/@local/hashql/ast/src/lower/expander/mod.rs b/libs/@local/hashql/ast/src/lower/expander/mod.rs index df64027b0c9..aa3ee094e59 100644 --- a/libs/@local/hashql/ast/src/lower/expander/mod.rs +++ b/libs/@local/hashql/ast/src/lower/expander/mod.rs @@ -8,7 +8,7 @@ mod access; mod r#as; -mod error; +pub mod error; mod r#fn; mod r#if; mod index; @@ -18,11 +18,13 @@ mod newtype; mod r#type; mod r#use; +use core::mem; + use hashql_core::{ heap::{self, BumpAllocator}, module::{ self, Reference, Universe, - item::{IntrinsicItem, IntrinsicTypeItem, Item}, + item::{IntrinsicItem, Item}, namespace::{ModuleNamespace, ResolutionMode, ResolveOptions}, }, symbol::{Ident, Symbol, sym}, @@ -111,6 +113,10 @@ impl<'env, 'heap, S> Expander<'env, 'heap, S> { } } + pub fn take_diagnostics(&mut self) -> ExpanderDiagnosticIssues { + mem::take(&mut self.diagnostics) + } + /// Walks `expr`, applying resolution and expansion, and returns the /// resolved [`Item`] if the expression was a path that resolved to one. /// diff --git a/libs/@local/hashql/ast/src/lower/expander/use.rs b/libs/@local/hashql/ast/src/lower/expander/use.rs index 4a7173ce573..aea10d13afd 100644 --- a/libs/@local/hashql/ast/src/lower/expander/use.rs +++ b/libs/@local/hashql/ast/src/lower/expander/use.rs @@ -4,7 +4,6 @@ use hashql_core::{ collections::fast_hash_map_with_capacity_in, heap::BumpAllocator, module::namespace::{ImportOptions, ResolutionMode}, - span::SpanId, symbol::sym, }; @@ -22,6 +21,84 @@ use crate::{ }, }; +fn lower_imports_tuple<'heap, S>( + expander: &mut Expander<'_, 'heap, S>, + tuple: &mut crate::node::expr::TupleExpr<'heap>, +) -> UseKind<'heap> { + let mut bindings = Vec::with_capacity_in(tuple.elements.len(), expander.heap); + + for element in tuple.elements.drain(..) { + let ExprKind::Path(path) = element.value.kind else { + expander + .diagnostics + .push(error::invalid_use_import_binding(element.value.span)); + continue; + }; + + let Some(name) = path.into_ident() else { + expander + .diagnostics + .push(error::invalid_use_import_binding(element.value.span)); + continue; + }; + + bindings.push(UseBinding { + id: NodeId::PLACEHOLDER, + span: element.span, + name, + alias: None, + }); + } + + UseKind::Named(bindings) +} + +fn lower_imports_struct<'heap, S>( + expander: &mut Expander<'_, 'heap, S>, + r#struct: &mut crate::node::expr::StructExpr<'heap>, +) -> UseKind<'heap> { + let mut bindings = Vec::with_capacity_in(r#struct.entries.len(), expander.heap); + + for entry in r#struct.entries.drain(..) { + let alias = match &entry.value.kind { + ExprKind::Underscore => None, + ExprKind::Path(path) if let Some(&ident) = path.as_ident() => Some(ident), + ExprKind::Call(_) + | ExprKind::Struct(_) + | ExprKind::Dict(_) + | ExprKind::Tuple(_) + | ExprKind::List(_) + | ExprKind::Literal(_) + | ExprKind::Path(_) + | ExprKind::Let(_) + | ExprKind::Type(_) + | ExprKind::NewType(_) + | ExprKind::Use(_) + | ExprKind::Input(_) + | ExprKind::Closure(_) + | ExprKind::If(_) + | ExprKind::Field(_) + | ExprKind::Index(_) + | ExprKind::As(_) + | ExprKind::Dummy => { + expander + .diagnostics + .push(error::invalid_use_alias(entry.value.span)); + None + } + }; + + bindings.push(UseBinding { + id: NodeId::PLACEHOLDER, + span: entry.span, + name: entry.key, + alias, + }); + } + + UseKind::Named(bindings) +} + fn lower_imports<'heap, S>( expander: &mut Expander<'_, 'heap, S>, @@ -40,60 +117,25 @@ where span: ident.span, })) } - ExprKind::Tuple(tuple) => { - let mut bindings = Vec::with_capacity_in(tuple.elements.len(), expander.heap); - - for element in tuple.elements.drain(..) { - let ExprKind::Path(path) = element.value.kind else { - expander - .diagnostics - .push(error::invalid_use_import_binding(element.value.span)); - continue; - }; - - let Some(name) = path.into_ident() else { - expander - .diagnostics - .push(error::invalid_use_import_binding(element.value.span)); - continue; - }; - - bindings.push(UseBinding { - id: NodeId::PLACEHOLDER, - span: element.span, - name, - alias: None, - }); - } - - Some(UseKind::Named(bindings)) - } - ExprKind::Struct(r#struct) => { - let mut bindings = Vec::with_capacity_in(r#struct.entries.len(), expander.heap); - - for entry in r#struct.entries.drain(..) { - let alias = match &entry.value.kind { - ExprKind::Underscore => None, - ExprKind::Path(path) if let Some(&ident) = path.as_ident() => Some(ident), - _ => { - expander - .diagnostics - .push(error::invalid_use_alias(entry.value.span)); - None - } - }; - - bindings.push(UseBinding { - id: NodeId::PLACEHOLDER, - span: entry.span, - name: entry.key, - alias, - }); - } - - Some(UseKind::Named(bindings)) - } - _ => { + ExprKind::Tuple(tuple) => Some(lower_imports_tuple(expander, tuple)), + ExprKind::Struct(r#struct) => Some(lower_imports_struct(expander, r#struct)), + ExprKind::Call(_) + | ExprKind::Dict(_) + | ExprKind::List(_) + | ExprKind::Literal(_) + | ExprKind::Path(_) + | ExprKind::Let(_) + | ExprKind::Type(_) + | ExprKind::NewType(_) + | ExprKind::Use(_) + | ExprKind::Input(_) + | ExprKind::Closure(_) + | ExprKind::If(_) + | ExprKind::Field(_) + | ExprKind::Index(_) + | ExprKind::As(_) + | ExprKind::Underscore + | ExprKind::Dummy => { expander .diagnostics .push(error::invalid_use_imports(imports.value.span)); @@ -128,7 +170,7 @@ where fn lower_body<'heap, S>( expander: &mut Expander<'_, 'heap, S>, - path: Path<'heap>, + path: &Path<'heap>, imports: UseKind<'heap>, body: &mut Argument<'heap>, ) -> Expr<'heap> @@ -169,12 +211,12 @@ where expander .diagnostics .push(error::from_import_resolution_error( - &path, + path, Some(name.symbol()), error, )); + errored = true; - continue; } } @@ -204,7 +246,7 @@ where if let Err(error) = result { expander .diagnostics - .push(error::from_import_resolution_error(&path, None, error)); + .push(error::from_import_resolution_error(path, None, error)); return Expr::dummy(); } @@ -243,7 +285,7 @@ where }; let snapshot = expander.namespace.snapshot(); - let body = lower_body(expander, path, imports, body); + let body = lower_body(expander, &path, imports, body); expander.namespace.rollback_to(snapshot); body diff --git a/libs/@local/hashql/ast/src/lower/mod.rs b/libs/@local/hashql/ast/src/lower/mod.rs index 1c7c179e320..35dfb11cb6d 100644 --- a/libs/@local/hashql/ast/src/lower/mod.rs +++ b/libs/@local/hashql/ast/src/lower/mod.rs @@ -53,6 +53,7 @@ //! ``` use hashql_core::{ + heap::ResetAllocator, module::{ModuleRegistry, locals::TypeLocals, namespace::ModuleNamespace}, span::SpanId, symbol::Symbol, @@ -62,22 +63,20 @@ use hashql_diagnostics::{DiagnosticIssues, Status, StatusExt as _}; use self::{ error::LoweringDiagnosticCategory, - import_resolver::ImportResolver, + expander::Expander, name_mangler::NameMangler, node_renumberer::NodeRenumberer, - pre_expansion_name_resolver::PreExpansionNameResolver, sanitizer::Sanitizer, - // special_form_expander::SpecialFormExpander, type_extractor::{AnonymousTypes, ClosureSignatures, TypeDefinitionExtractor, TypeExtractor}, }; use crate::{node::expr::Expr, visit::Visitor as _}; pub mod error; -mod expander; -pub mod import_resolver; +pub mod expander; +// pub mod import_resolver; pub mod name_mangler; pub mod node_renumberer; -pub mod pre_expansion_name_resolver; +// pub mod pre_expansion_name_resolver; pub mod sanitizer; // pub mod special_form_expander; pub mod type_extractor; @@ -177,24 +176,29 @@ pub struct ExtractedTypes<'heap> { /// - [`LoweringDiagnosticCategory::Sanitizer`] - Errors during code sanitization /// - [`LoweringDiagnosticCategory::Resolver`] - Errors during import resolution /// - [`LoweringDiagnosticCategory::Extractor`] - Errors during type extraction -pub fn lower<'heap>( +pub fn lower<'heap, S>( module_name: Symbol<'heap>, expr: &mut Expr<'heap>, env: &Environment<'heap>, registry: &ModuleRegistry<'heap>, -) -> Status, LoweringDiagnosticCategory, SpanId> { + mut scratch: S, +) -> Status, LoweringDiagnosticCategory, SpanId> +where + S: ResetAllocator, +{ let mut diagnostics = DiagnosticIssues::new(); - let mut resolver = PreExpansionNameResolver::new(registry); - resolver.visit_expr(expr); + let mut namespace = ModuleNamespace::new(registry); + namespace.import_prelude(); - // let mut expander = SpecialFormExpander::new(env.heap); - // expander.visit_expr(expr); - // diagnostics.append( - // &mut expander - // .take_diagnostics() - // .map_category(LoweringDiagnosticCategory::Expander), - // ); + let mut expander = Expander::new(namespace, &mut scratch); + expander.visit_expr(expr); + diagnostics.append( + &mut expander + .take_diagnostics() + .map_category(LoweringDiagnosticCategory::Expander), + ); + scratch.reset(); let mut sanitizer = Sanitizer::new(); sanitizer.visit_expr(expr); @@ -204,17 +208,6 @@ pub fn lower<'heap>( .map_category(LoweringDiagnosticCategory::Sanitizer), ); - let mut namespace = ModuleNamespace::new(registry); - namespace.import_prelude(); - - let mut resolver = ImportResolver::new(env.heap, namespace); - resolver.visit_expr(expr); - diagnostics.append( - &mut resolver - .take_diagnostics() - .map_category(LoweringDiagnosticCategory::Resolver), - ); - let mut mangler = NameMangler::new(env.heap); mangler.visit_expr(expr); diff --git a/libs/@local/hashql/ast/src/node/type/mod.rs b/libs/@local/hashql/ast/src/node/type/mod.rs index 1e5f49c09a6..65f514182e5 100644 --- a/libs/@local/hashql/ast/src/node/type/mod.rs +++ b/libs/@local/hashql/ast/src/node/type/mod.rs @@ -207,7 +207,8 @@ pub struct Type<'heap> { pub kind: TypeKind<'heap>, } -impl<'heap> Type<'heap> { +impl Type<'_> { + #[must_use] pub const fn dummy() -> Self { Self { id: NodeId::PLACEHOLDER, From e1ed0e335373bd9a87170474cba4860d7e248831 Mon Sep 17 00:00:00 2001 From: Bilal Mahmoud <7252775+indietyp@users.noreply.github.com> Date: Mon, 15 Jun 2026 12:17:27 +0200 Subject: [PATCH 28/55] chore: move lowering tests to lower --- libs/@local/hashql/ast/src/node/type/mod.rs | 10 +++++----- .../ui/{lowering => lower}/import-resolver/.spec.toml | 0 .../import-resolver/basic-absolute-imports.jsonc | 0 .../import-resolver/basic-absolute-imports.stdout | 0 .../import-resolver/basic-glob-import.jsonc | 0 .../import-resolver/basic-glob-import.stdout | 0 .../import-resolver/basic-relative-import.jsonc | 0 .../import-resolver/basic-relative-import.stdout | 0 .../import-resolver/basic-renamed-import.jsonc | 0 .../import-resolver/basic-renamed-import.stdout | 0 .../import-resolver/closure-complex-return-type.jsonc | 0 .../import-resolver/closure-complex-return-type.stdout | 0 .../import-resolver/closure-generic-not-resolved.jsonc | 0 .../closure-generic-not-resolved.stdout | 0 .../import-resolver/closure-mixed-resolution.jsonc | 0 .../import-resolver/closure-mixed-resolution.stdout | 0 .../import-resolver/closure-param-not-resolved.jsonc | 0 .../import-resolver/closure-param-not-resolved.stdout | 0 .../complex-nested-type-parameters.jsonc | 0 .../complex-nested-type-parameters.stdout | 0 .../import-resolver/complex-path-resolution.jsonc | 0 .../import-resolver/complex-path-resolution.stdout | 0 .../import-resolver/continue/.spec.toml | 0 .../import-resolver/continue/unresolved-nested.jsonc | 0 .../import-resolver/continue/unresolved-nested.stderr | 0 .../import-resolver/continue/unresolved-nested.stdout | 0 .../import-resolver/continue/unresolved-type.jsonc | 0 .../import-resolver/continue/unresolved-type.stderr | 0 .../import-resolver/continue/unresolved-type.stdout | 0 .../import-resolver/continue/unresolved-value.jsonc | 0 .../import-resolver/continue/unresolved-value.stderr | 0 .../import-resolver/continue/unresolved-value.stdout | 0 .../import-resolver/continue/use-not-found.jsonc | 0 .../import-resolver/continue/use-not-found.stderr | 0 .../import-resolver/continue/use-not-found.stdout | 0 .../generic-argument-absolute-path.jsonc | 0 .../generic-argument-absolute-path.stderr | 0 .../import-resolver/generic-argument-use-path.jsonc | 0 .../import-resolver/generic-argument-use-path.stderr | 0 .../generic-arguments-in-final-segment.jsonc | 0 .../generic-arguments-in-final-segment.stdout | 0 .../import-resolver/generic-constraints-type.jsonc | 0 .../import-resolver/generic-constraints-type.stdout | 0 .../import-resolver/generic-constraints.newtype.jsonc | 0 .../import-resolver/generic-constraints.newtype.stdout | 0 .../import-resolver/glob-not-found.jsonc | 0 .../import-resolver/glob-not-found.stderr | 0 .../import-resolver/item-not-found.jsonc | 0 .../import-resolver/item-not-found.stderr | 0 .../import-resolver/local-binding-recursive-type.jsonc | 0 .../local-binding-recursive-type.stdout | 0 .../local-binding-recursive-value.jsonc | 0 .../local-binding-recursive-value.stdout | 0 .../import-resolver/local-binding-type.jsonc | 0 .../import-resolver/local-binding-type.stdout | 0 .../import-resolver/local-binding-value.jsonc | 0 .../import-resolver/local-binding-value.stdout | 0 .../import-resolver/module-not-found.jsonc | 0 .../import-resolver/module-not-found.stderr | 0 .../import-resolver/multiple-named-imports.jsonc | 0 .../import-resolver/multiple-named-imports.stdout | 0 .../import-resolver/nested-resolution.jsonc | 0 .../import-resolver/nested-resolution.stdout | 0 .../import-resolver/newtype-scope.jsonc | 0 .../import-resolver/newtype-scope.stdout | 0 .../import-resolver/path-normalization.jsonc | 0 .../import-resolver/path-normalization.stdout | 0 .../{lowering => lower}/import-resolver/prelude.jsonc | 0 .../{lowering => lower}/import-resolver/prelude.stdout | 0 .../regression-generic-arguments-identifier.jsonc | 0 .../regression-generic-arguments-identifier.stdout | 0 .../{lowering => lower}/import-resolver/rollback.jsonc | 0 .../import-resolver/rollback.stderr | 0 .../import-resolver/shadowed-imports.jsonc | 0 .../import-resolver/shadowed-imports.stdout | 0 .../import-resolver/shadowed-prelude.jsonc | 0 .../import-resolver/shadowed-prelude.stdout | 0 .../import-resolver/substitution.jsonc | 0 .../import-resolver/substitution.stdout | 0 .../universe-ambiguity-resolution.jsonc | 0 .../universe-ambiguity-resolution.stdout | 0 .../import-resolver/unresolver-variable.jsonc | 0 .../import-resolver/unresolver-variable.stderr | 0 .../import-resolver/use-shadowing-let.jsonc | 0 .../import-resolver/use-shadowing-let.stdout | 0 .../import-resolver/use-shadowing-use.jsonc | 0 .../import-resolver/use-shadowing-use.stdout | 0 .../ui/{lowering => lower}/name-mangler/.spec.toml | 0 .../name-mangler/absolute-path.jsonc | 0 .../name-mangler/absolute-path.stdout | 0 .../{lowering => lower}/name-mangler/diverging.jsonc | 0 .../{lowering => lower}/name-mangler/diverging.stdout | 0 .../ui/{lowering => lower}/name-mangler/fn-args.jsonc | 0 .../ui/{lowering => lower}/name-mangler/fn-args.stdout | 0 .../name-mangler/fn-types-of-args.jsonc | 0 .../name-mangler/fn-types-of-args.stdout | 0 .../name-mangler/fn-types-of-ret.jsonc | 0 .../name-mangler/fn-types-of-ret.stdout | 0 .../ui/{lowering => lower}/name-mangler/fn-types.jsonc | 0 .../{lowering => lower}/name-mangler/fn-types.stdout | 0 .../ui/{lowering => lower}/name-mangler/let.jsonc | 0 .../ui/{lowering => lower}/name-mangler/let.stdout | 0 .../name-mangler/newtype-generics.jsonc | 0 .../name-mangler/newtype-generics.stdout | 0 .../ui/{lowering => lower}/name-mangler/newtype.jsonc | 0 .../ui/{lowering => lower}/name-mangler/newtype.stdout | 0 .../ui/{lowering => lower}/name-mangler/onion.jsonc | 0 .../ui/{lowering => lower}/name-mangler/onion.stdout | 0 .../name-mangler/overwrite-body.jsonc | 0 .../name-mangler/overwrite-body.stdout | 0 .../{lowering => lower}/name-mangler/overwrite.jsonc | 0 .../{lowering => lower}/name-mangler/overwrite.stdout | 0 .../name-mangler/path-arguments.jsonc | 0 .../name-mangler/path-arguments.stdout | 0 .../ui/{lowering => lower}/name-mangler/path.jsonc | 0 .../ui/{lowering => lower}/name-mangler/path.stdout | 0 .../name-mangler/scopes-no-include.jsonc | 0 .../name-mangler/scopes-no-include.stdout | 0 .../ui/{lowering => lower}/name-mangler/simple.jsonc | 0 .../ui/{lowering => lower}/name-mangler/simple.stdout | 0 .../name-mangler/type-generics-constraints.jsonc | 0 .../name-mangler/type-generics-constraints.stdout | 0 .../type-generics-interdependent-generics.jsonc | 0 .../type-generics-interdependent-generics.stdout | 0 .../name-mangler/type-generics-nested.jsonc | 0 .../name-mangler/type-generics-nested.stdout | 0 .../name-mangler/type-generics-recursive.jsonc | 0 .../name-mangler/type-generics-recursive.stdout | 0 .../name-mangler/type-generics.jsonc | 0 .../name-mangler/type-generics.stdout | 0 .../ui/{lowering => lower}/name-mangler/type.jsonc | 0 .../ui/{lowering => lower}/name-mangler/type.stdout | 0 .../ui/{lowering => lower}/node-renumberer/.spec.toml | 0 .../ui/{lowering => lower}/node-renumberer/basic.jsonc | 0 .../{lowering => lower}/node-renumberer/basic.stdout | 0 .../node-renumberer/diverging.jsonc | 0 .../node-renumberer/diverging.stdout | 0 .../{lowering => lower}/node-renumberer/nested.jsonc | 0 .../{lowering => lower}/node-renumberer/nested.stdout | 0 .../pre-expansion-name-resolver/.spec.toml | 0 .../pre-expansion-name-resolver/absolute-path.jsonc | 0 .../pre-expansion-name-resolver/absolute-path.stdout | 0 .../alias-absolute-path.jsonc | 0 .../alias-absolute-path.stdout | 0 .../pre-expansion-name-resolver/alias-symbol.jsonc | 0 .../pre-expansion-name-resolver/alias-symbol.stdout | 0 .../pre-expansion-name-resolver/invalid-let-expr.jsonc | 0 .../invalid-let-expr.stdout | 0 .../pre-expansion-name-resolver/let-3-alias.jsonc | 0 .../pre-expansion-name-resolver/let-3-alias.stdout | 0 .../pre-expansion-name-resolver/let-3.jsonc | 0 .../pre-expansion-name-resolver/let-3.stdout | 0 .../pre-expansion-name-resolver/let-4-alias.jsonc | 0 .../pre-expansion-name-resolver/let-4-alias.stdout | 0 .../pre-expansion-name-resolver/let-4.jsonc | 0 .../pre-expansion-name-resolver/let-4.stdout | 0 .../pre-expansion-name-resolver/let-absolute.jsonc | 0 .../pre-expansion-name-resolver/let-absolute.stdout | 0 .../let-ident-generic.jsonc | 0 .../let-ident-generic.stdout | 0 .../multi-segment-resolution.jsonc | 0 .../multi-segment-resolution.stdout | 0 .../pre-expansion-name-resolver/nested-let.jsonc | 0 .../pre-expansion-name-resolver/nested-let.stdout | 0 .../pre-expansion-name-resolver/newtype-3-alias.jsonc | 0 .../pre-expansion-name-resolver/newtype-3-alias.stdout | 0 .../pre-expansion-name-resolver/newtype-3.jsonc | 0 .../pre-expansion-name-resolver/newtype-3.stdout | 0 .../pre-expansion-name-resolver/newtype-4.jsonc | 0 .../pre-expansion-name-resolver/newtype-4.stdout | 0 .../re-assign-prelude-diverging.jsonc | 0 .../re-assign-prelude-diverging.stdout | 0 .../re-assign-prelude.jsonc | 0 .../re-assign-prelude.stdout | 0 .../pre-expansion-name-resolver/re-assign.jsonc | 0 .../pre-expansion-name-resolver/re-assign.stdout | 0 .../pre-expansion-name-resolver/resolve-generics.jsonc | 0 .../resolve-generics.stdout | 0 .../pre-expansion-name-resolver/resolve-symbol.jsonc | 0 .../pre-expansion-name-resolver/resolve-symbol.stdout | 0 .../restoration-bindings.jsonc | 0 .../restoration-bindings.stdout | 0 .../pre-expansion-name-resolver/type-3-alias.jsonc | 0 .../pre-expansion-name-resolver/type-3-alias.stdout | 0 .../pre-expansion-name-resolver/type-3.jsonc | 0 .../pre-expansion-name-resolver/type-3.stdout | 0 .../pre-expansion-name-resolver/type-4.jsonc | 0 .../pre-expansion-name-resolver/type-4.stdout | 0 .../tests/ui/{lowering => lower}/sanitizer/.spec.toml | 0 .../ui/{lowering => lower}/sanitizer/constraint.jsonc | 0 .../ui/{lowering => lower}/sanitizer/constraint.stderr | 0 .../sanitizer/special-form-type-position.jsonc | 0 .../sanitizer/special-form-type-position.stderr | 0 .../sanitizer/special-form-value.jsonc | 0 .../sanitizer/special-form-value.stderr | 0 .../special-form-expander/.spec.toml | 0 .../special-form-expander/access-1.jsonc | 0 .../special-form-expander/access-1.stderr | 0 .../special-form-expander/access-2.jsonc | 0 .../special-form-expander/access-2.stdout | 0 .../special-form-expander/access-3.jsonc | 0 .../special-form-expander/access-3.stderr | 0 .../access-field-index-out-of-bounds.jsonc | 0 .../access-field-index-out-of-bounds.stderr | 0 .../access-field-literal-boolean.jsonc | 0 .../access-field-literal-boolean.stderr | 0 .../access-field-literal-string.jsonc | 0 .../access-field-literal-string.stderr | 0 .../access-field-literal-type-annotation.jsonc | 0 .../access-field-literal-type-annotation.stderr | 0 .../access-field-literal-valid.jsonc | 0 .../access-field-literal-valid.stdout | 0 .../special-form-expander/as-1.jsonc | 0 .../special-form-expander/as-1.stderr | 0 .../special-form-expander/as-2.jsonc | 0 .../special-form-expander/as-2.stdout | 0 .../special-form-expander/as-3.jsonc | 0 .../special-form-expander/as-3.stderr | 0 .../does-not-touch-non-kernel.jsonc | 0 .../does-not-touch-non-kernel.stdout | 0 .../special-form-expander/fn-3.jsonc | 0 .../special-form-expander/fn-3.stderr | 0 .../special-form-expander/fn-4.jsonc | 0 .../special-form-expander/fn-4.stdout | 0 .../special-form-expander/fn-5.jsonc | 0 .../special-form-expander/fn-5.stderr | 0 .../special-form-expander/fn-generics-duplicates.jsonc | 0 .../fn-generics-duplicates.stderr | 0 .../special-form-expander/fn-generics-literal.jsonc | 0 .../special-form-expander/fn-generics-literal.stderr | 0 .../fn-generics-struct-literal.jsonc | 0 .../fn-generics-struct-literal.stderr | 0 .../fn-generics-struct-type.jsonc | 0 .../fn-generics-struct-type.stderr | 0 .../fn-generics-struct-underscore.jsonc | 0 .../fn-generics-struct-underscore.stdout | 0 .../special-form-expander/fn-generics-struct.jsonc | 0 .../special-form-expander/fn-generics-struct.stdout | 0 .../fn-generics-tuple-literal.jsonc | 0 .../fn-generics-tuple-literal.stderr | 0 .../special-form-expander/fn-generics-tuple-path.jsonc | 0 .../fn-generics-tuple-path.stderr | 0 .../special-form-expander/fn-generics-tuple-type.jsonc | 0 .../fn-generics-tuple-type.stderr | 0 .../special-form-expander/fn-generics-tuple.jsonc | 0 .../special-form-expander/fn-generics-tuple.stdout | 0 .../special-form-expander/fn-params-duplicates.jsonc | 0 .../special-form-expander/fn-params-duplicates.stderr | 0 .../special-form-expander/fn-params-tuple.jsonc | 0 .../special-form-expander/fn-params-tuple.stderr | 0 .../special-form-expander/fn-params-type.jsonc | 0 .../special-form-expander/fn-params-type.stderr | 0 .../special-form-expander/generics.jsonc | 0 .../special-form-expander/generics.stderr | 0 .../special-form-expander/if-1.jsonc | 0 .../special-form-expander/if-1.stderr | 0 .../special-form-expander/if-2.jsonc | 0 .../special-form-expander/if-2.stdout | 0 .../special-form-expander/if-3.jsonc | 0 .../special-form-expander/if-3.stdout | 0 .../special-form-expander/if-4.jsonc | 0 .../special-form-expander/if-4.stderr | 0 .../special-form-expander/index-1.jsonc | 0 .../special-form-expander/index-1.stderr | 0 .../special-form-expander/index-2.jsonc | 0 .../special-form-expander/index-2.stdout | 0 .../special-form-expander/index-3.jsonc | 0 .../special-form-expander/index-3.stderr | 0 .../special-form-expander/input-1.jsonc | 0 .../special-form-expander/input-1.stderr | 0 .../special-form-expander/input-2.jsonc | 0 .../special-form-expander/input-2.stdout | 0 .../special-form-expander/input-3.jsonc | 0 .../special-form-expander/input-3.stdout | 0 .../special-form-expander/input-4.jsonc | 0 .../special-form-expander/input-4.stderr | 0 .../special-form-expander/labeled-argument.jsonc | 0 .../special-form-expander/labeled-argument.stderr | 0 .../special-form-expander/let-2.jsonc | 0 .../special-form-expander/let-2.stderr | 0 .../special-form-expander/let-3.jsonc | 0 .../special-form-expander/let-3.stdout | 0 .../special-form-expander/let-4.jsonc | 0 .../special-form-expander/let-4.stdout | 0 .../special-form-expander/let-5.jsonc | 0 .../special-form-expander/let-5.stderr | 0 .../special-form-expander/let-argument-not-ident.jsonc | 0 .../let-argument-not-ident.stderr | 0 .../special-form-expander/let-argument-not-path.jsonc | 0 .../special-form-expander/let-argument-not-path.stderr | 0 .../special-form-expander/let-collect-all-errors.jsonc | 0 .../let-collect-all-errors.stderr | 0 .../special-form-expander/newtype-2.jsonc | 0 .../special-form-expander/newtype-2.stderr | 0 .../special-form-expander/newtype-3.jsonc | 0 .../special-form-expander/newtype-3.stdout | 0 .../special-form-expander/newtype-4.jsonc | 0 .../special-form-expander/newtype-4.stderr | 0 .../newtype-collect-all-errors.jsonc | 0 .../newtype-collect-all-errors.stderr | 0 .../special-form-expander/newtype-constraints.jsonc | 0 .../special-form-expander/newtype-constraints.stdout | 0 .../special-form-expander/not-enough-segments.jsonc | 0 .../special-form-expander/not-enough-segments.stderr | 0 .../special-form-expander/too-many-segments.jsonc | 0 .../special-form-expander/too-many-segments.stderr | 0 .../special-form-expander/type-2.jsonc | 0 .../special-form-expander/type-2.stderr | 0 .../special-form-expander/type-3.jsonc | 0 .../special-form-expander/type-3.stdout | 0 .../special-form-expander/type-4.jsonc | 0 .../special-form-expander/type-4.stderr | 0 .../type-collect-all-errors.jsonc | 0 .../type-collect-all-errors.stderr | 0 .../type-expr-call-arbitrary.jsonc | 0 .../type-expr-call-arbitrary.stderr | 0 .../type-expr-call-intersection.jsonc | 0 .../type-expr-call-intersection.stdout | 0 .../type-expr-call-not-path.jsonc | 0 .../type-expr-call-not-path.stderr | 0 .../special-form-expander/type-expr-call-union.jsonc | 0 .../special-form-expander/type-expr-call-union.stdout | 0 .../special-form-expander/type-expr-invalid.jsonc | 0 .../special-form-expander/type-expr-invalid.stderr | 0 .../special-form-expander/type-expr-struct.jsonc | 0 .../special-form-expander/type-expr-struct.stdout | 0 .../special-form-expander/type-expr-tuple.jsonc | 0 .../special-form-expander/type-expr-tuple.stdout | 0 .../type-generic-absolute-path.jsonc | 0 .../type-generic-absolute-path.stderr | 0 .../type-generic-constraint.jsonc | 0 .../type-generic-constraint.stdout | 0 .../special-form-expander/type-generic-duplicate.jsonc | 0 .../type-generic-duplicate.stderr | 0 .../type-generic-generic-ident.jsonc | 0 .../type-generic-generic-ident.stderr | 0 .../type-generic-relative-path.jsonc | 0 .../type-generic-relative-path.stderr | 0 .../special-form-expander/type-generic-struct.jsonc | 0 .../special-form-expander/type-generic-struct.stderr | 0 .../special-form-expander/type-generic.jsonc | 0 .../special-form-expander/type-generic.stdout | 0 .../special-form-expander/type-infer.jsonc | 0 .../special-form-expander/type-infer.stdout | 0 .../special-form-expander/type-never.jsonc | 0 .../special-form-expander/type-never.stdout | 0 .../special-form-expander/type-struct-has-type.jsonc | 0 .../special-form-expander/type-struct-has-type.stderr | 0 .../special-form-expander/type-tuple-has-type.jsonc | 0 .../special-form-expander/type-tuple-has-type.stderr | 0 .../special-form-expander/type-unknown.jsonc | 0 .../special-form-expander/type-unknown.stdout | 0 .../unknown-special-form-typo.jsonc | 0 .../unknown-special-form-typo.stderr | 0 .../special-form-expander/unknown-special-form.jsonc | 0 .../special-form-expander/unknown-special-form.stderr | 0 .../special-form-expander/use-2.jsonc | 0 .../special-form-expander/use-2.stderr | 0 .../special-form-expander/use-3.jsonc | 0 .../special-form-expander/use-3.stdout | 0 .../special-form-expander/use-4.jsonc | 0 .../special-form-expander/use-4.stderr | 0 .../special-form-expander/use-glob-not-ident.jsonc | 0 .../special-form-expander/use-glob-not-ident.stderr | 0 .../special-form-expander/use-glob-not-star.jsonc | 0 .../special-form-expander/use-glob-not-star.stderr | 0 .../special-form-expander/use-glob.jsonc | 0 .../special-form-expander/use-glob.stdout | 0 .../special-form-expander/use-literal.jsonc | 0 .../special-form-expander/use-literal.stderr | 0 .../special-form-expander/use-struct-literal.jsonc | 0 .../special-form-expander/use-struct-literal.stderr | 0 .../special-form-expander/use-struct-path.jsonc | 0 .../special-form-expander/use-struct-path.stderr | 0 .../special-form-expander/use-struct-type.jsonc | 0 .../special-form-expander/use-struct-type.stderr | 0 .../special-form-expander/use-struct.jsonc | 0 .../special-form-expander/use-struct.stdout | 0 .../special-form-expander/use-tuple-literal.jsonc | 0 .../special-form-expander/use-tuple-literal.stderr | 0 .../special-form-expander/use-tuple-path.jsonc | 0 .../special-form-expander/use-tuple-path.stderr | 0 .../special-form-expander/use-tuple-type.jsonc | 0 .../special-form-expander/use-tuple-type.stderr | 0 .../special-form-expander/use-tuple.jsonc | 0 .../special-form-expander/use-tuple.stdout | 0 .../ui/{lowering => lower}/type-extractor/.spec.toml | 0 .../type-extractor/closure-generics.jsonc | 0 .../type-extractor/closure-generics.stdout | 0 .../type-extractor/closure-unused-generic.jsonc | 0 .../type-extractor/closure-unused-generic.stderr | 0 .../{lowering => lower}/type-extractor/closure.jsonc | 0 .../{lowering => lower}/type-extractor/closure.stdout | 0 .../type-extractor/complex-types.jsonc | 0 .../type-extractor/complex-types.stdout | 0 .../type-extractor/definition/.spec.toml | 0 .../definition/constraints-invalid-location.jsonc | 0 .../definition/constraints-invalid-location.stderr | 0 .../definition/constraints-parsing.jsonc | 0 .../definition/constraints-parsing.stdout | 0 .../definition/contractive-guarded.jsonc | 0 .../definition/contractive-guarded.stdout | 0 .../type-extractor/definition/contractive-union.jsonc | 0 .../type-extractor/definition/contractive-union.stdout | 0 .../dict-parameter-count-mismatch-too-many.jsonc | 0 .../dict-parameter-count-mismatch-too-many.stderr | 0 .../definition/dict-parameter-count-mismatch.jsonc | 0 .../definition/dict-parameter-count-mismatch.stderr | 0 .../type-extractor/definition/duplicate-fields.jsonc | 0 .../type-extractor/definition/duplicate-fields.stderr | 0 .../type-extractor/definition/env-type-interning.jsonc | 0 .../definition/env-type-interning.stdout | 0 .../definition/generics-apply-params.jsonc | 0 .../definition/generics-apply-params.stdout | 0 .../definition/generics-param-count-mismatch.jsonc | 0 .../definition/generics-param-count-mismatch.stderr | 0 .../definition/generics-with-params.jsonc | 0 .../definition/generics-with-params.stdout | 0 .../global-generic-constraint-not-enough.jsonc | 0 .../global-generic-constraint-not-enough.stderr | 0 .../global-generic-constraint-too-many.jsonc | 0 .../global-generic-constraint-too-many.stderr | 0 .../type-extractor/definition/identity-nominal.jsonc | 0 .../type-extractor/definition/identity-nominal.stdout | 0 .../definition/identity-structural.jsonc | 0 .../definition/identity-structural.stdout | 0 .../definition/infer-with-arguments.jsonc | 0 .../definition/infer-with-arguments.stderr | 0 .../definition/intrinsic-dict-translation.jsonc | 0 .../definition/intrinsic-dict-translation.stdout | 0 .../definition/intrinsic-list-translation.jsonc | 0 .../definition/intrinsic-list-translation.stdout | 0 .../list-parameter-count-mismatch-too-many.jsonc | 0 .../list-parameter-count-mismatch-too-many.stderr | 0 .../definition/list-parameter-count-mismatch.jsonc | 0 .../definition/list-parameter-count-mismatch.stderr | 0 .../definition/locals-generic-params-struct.jsonc | 0 .../definition/locals-generic-params-struct.stdout | 0 .../definition/locals-generic-params.jsonc | 0 .../definition/locals-generic-params.stdout | 0 .../definition/locals-type-extraction.jsonc | 0 .../definition/locals-type-extraction.stdout | 0 .../definition/non-contractive-self.jsonc | 0 .../definition/non-contractive-self.stderr | 0 .../definition/non-contractive-type.jsonc | 0 .../definition/non-contractive-type.stderr | 0 .../definition/path-global-resolution.jsonc | 0 .../definition/path-global-resolution.stdout | 0 .../definition/path-local-resolution.jsonc | 0 .../definition/path-local-resolution.stdout | 0 .../type-extractor/definition/result.jsonc | 0 .../type-extractor/definition/result.stdout | 0 .../type-extractor/definition/translation-infer.jsonc | 0 .../type-extractor/definition/translation-infer.stdout | 0 .../definition/translation-intersection.jsonc | 0 .../definition/translation-intersection.stdout | 0 .../type-extractor/definition/translation-struct.jsonc | 0 .../definition/translation-struct.stdout | 0 .../type-extractor/definition/translation-tuple.jsonc | 0 .../type-extractor/definition/translation-tuple.stdout | 0 .../type-extractor/definition/translation-union.jsonc | 0 .../type-extractor/definition/translation-union.stdout | 0 .../definition/unused-generic-parameter.jsonc | 0 .../definition/unused-generic-parameter.stderr | 0 .../type-extractor/generic-type-resolution.jsonc | 0 .../type-extractor/generic-type-resolution.stdout | 0 .../type-extractor/global-type-resolution.jsonc | 0 .../type-extractor/global-type-resolution.stdout | 0 .../graph-pipeline-inferred-closure.jsonc | 0 .../graph-pipeline-inferred-closure.stdout | 0 .../type-extractor/let-binding-type.jsonc | 0 .../type-extractor/let-binding-type.stdout | 0 .../type-extractor/local-type-resolution.jsonc | 0 .../type-extractor/local-type-resolution.stdout | 0 .../type-extractor/nested-type-nodes.jsonc | 0 .../type-extractor/nested-type-nodes.stdout | 0 .../type-extractor/union-type.jsonc | 0 .../type-extractor/union-type.stdout | 0 libs/@local/hashql/hir/src/reify/mod.rs | 4 ++-- .../hashql/syntax-jexpr/src/parser/object/struct.rs | 2 +- .../hashql/syntax-jexpr/src/parser/object/tuple.rs | 2 +- .../hashql/syntax-jexpr/src/parser/string/generic.rs | 6 +++--- 482 files changed, 12 insertions(+), 12 deletions(-) rename libs/@local/hashql/ast/tests/ui/{lowering => lower}/import-resolver/.spec.toml (100%) rename libs/@local/hashql/ast/tests/ui/{lowering => lower}/import-resolver/basic-absolute-imports.jsonc (100%) rename libs/@local/hashql/ast/tests/ui/{lowering => lower}/import-resolver/basic-absolute-imports.stdout (100%) rename libs/@local/hashql/ast/tests/ui/{lowering => lower}/import-resolver/basic-glob-import.jsonc (100%) rename libs/@local/hashql/ast/tests/ui/{lowering => lower}/import-resolver/basic-glob-import.stdout (100%) rename libs/@local/hashql/ast/tests/ui/{lowering => lower}/import-resolver/basic-relative-import.jsonc (100%) rename libs/@local/hashql/ast/tests/ui/{lowering => lower}/import-resolver/basic-relative-import.stdout (100%) rename libs/@local/hashql/ast/tests/ui/{lowering => lower}/import-resolver/basic-renamed-import.jsonc (100%) rename libs/@local/hashql/ast/tests/ui/{lowering => lower}/import-resolver/basic-renamed-import.stdout (100%) rename libs/@local/hashql/ast/tests/ui/{lowering => lower}/import-resolver/closure-complex-return-type.jsonc (100%) rename libs/@local/hashql/ast/tests/ui/{lowering => lower}/import-resolver/closure-complex-return-type.stdout (100%) rename libs/@local/hashql/ast/tests/ui/{lowering => lower}/import-resolver/closure-generic-not-resolved.jsonc (100%) rename libs/@local/hashql/ast/tests/ui/{lowering => lower}/import-resolver/closure-generic-not-resolved.stdout (100%) rename libs/@local/hashql/ast/tests/ui/{lowering => lower}/import-resolver/closure-mixed-resolution.jsonc (100%) rename libs/@local/hashql/ast/tests/ui/{lowering => lower}/import-resolver/closure-mixed-resolution.stdout (100%) rename libs/@local/hashql/ast/tests/ui/{lowering => lower}/import-resolver/closure-param-not-resolved.jsonc (100%) rename libs/@local/hashql/ast/tests/ui/{lowering => lower}/import-resolver/closure-param-not-resolved.stdout (100%) rename libs/@local/hashql/ast/tests/ui/{lowering => lower}/import-resolver/complex-nested-type-parameters.jsonc (100%) rename libs/@local/hashql/ast/tests/ui/{lowering => lower}/import-resolver/complex-nested-type-parameters.stdout (100%) rename libs/@local/hashql/ast/tests/ui/{lowering => lower}/import-resolver/complex-path-resolution.jsonc (100%) rename libs/@local/hashql/ast/tests/ui/{lowering => lower}/import-resolver/complex-path-resolution.stdout (100%) rename libs/@local/hashql/ast/tests/ui/{lowering => lower}/import-resolver/continue/.spec.toml (100%) rename libs/@local/hashql/ast/tests/ui/{lowering => lower}/import-resolver/continue/unresolved-nested.jsonc (100%) rename libs/@local/hashql/ast/tests/ui/{lowering => lower}/import-resolver/continue/unresolved-nested.stderr (100%) rename libs/@local/hashql/ast/tests/ui/{lowering => lower}/import-resolver/continue/unresolved-nested.stdout (100%) rename libs/@local/hashql/ast/tests/ui/{lowering => lower}/import-resolver/continue/unresolved-type.jsonc (100%) rename libs/@local/hashql/ast/tests/ui/{lowering => lower}/import-resolver/continue/unresolved-type.stderr (100%) rename libs/@local/hashql/ast/tests/ui/{lowering => lower}/import-resolver/continue/unresolved-type.stdout (100%) rename libs/@local/hashql/ast/tests/ui/{lowering => lower}/import-resolver/continue/unresolved-value.jsonc (100%) rename libs/@local/hashql/ast/tests/ui/{lowering => lower}/import-resolver/continue/unresolved-value.stderr (100%) rename libs/@local/hashql/ast/tests/ui/{lowering => lower}/import-resolver/continue/unresolved-value.stdout (100%) rename libs/@local/hashql/ast/tests/ui/{lowering => lower}/import-resolver/continue/use-not-found.jsonc (100%) rename libs/@local/hashql/ast/tests/ui/{lowering => lower}/import-resolver/continue/use-not-found.stderr (100%) rename libs/@local/hashql/ast/tests/ui/{lowering => lower}/import-resolver/continue/use-not-found.stdout (100%) rename libs/@local/hashql/ast/tests/ui/{lowering => lower}/import-resolver/generic-argument-absolute-path.jsonc (100%) rename libs/@local/hashql/ast/tests/ui/{lowering => lower}/import-resolver/generic-argument-absolute-path.stderr (100%) rename libs/@local/hashql/ast/tests/ui/{lowering => lower}/import-resolver/generic-argument-use-path.jsonc (100%) rename libs/@local/hashql/ast/tests/ui/{lowering => lower}/import-resolver/generic-argument-use-path.stderr (100%) rename libs/@local/hashql/ast/tests/ui/{lowering => lower}/import-resolver/generic-arguments-in-final-segment.jsonc (100%) rename libs/@local/hashql/ast/tests/ui/{lowering => lower}/import-resolver/generic-arguments-in-final-segment.stdout (100%) rename libs/@local/hashql/ast/tests/ui/{lowering => lower}/import-resolver/generic-constraints-type.jsonc (100%) rename libs/@local/hashql/ast/tests/ui/{lowering => lower}/import-resolver/generic-constraints-type.stdout (100%) rename libs/@local/hashql/ast/tests/ui/{lowering => lower}/import-resolver/generic-constraints.newtype.jsonc (100%) rename libs/@local/hashql/ast/tests/ui/{lowering => lower}/import-resolver/generic-constraints.newtype.stdout (100%) rename libs/@local/hashql/ast/tests/ui/{lowering => lower}/import-resolver/glob-not-found.jsonc (100%) rename libs/@local/hashql/ast/tests/ui/{lowering => lower}/import-resolver/glob-not-found.stderr (100%) rename libs/@local/hashql/ast/tests/ui/{lowering => lower}/import-resolver/item-not-found.jsonc (100%) rename libs/@local/hashql/ast/tests/ui/{lowering => lower}/import-resolver/item-not-found.stderr (100%) rename libs/@local/hashql/ast/tests/ui/{lowering => lower}/import-resolver/local-binding-recursive-type.jsonc (100%) rename libs/@local/hashql/ast/tests/ui/{lowering => lower}/import-resolver/local-binding-recursive-type.stdout (100%) rename libs/@local/hashql/ast/tests/ui/{lowering => lower}/import-resolver/local-binding-recursive-value.jsonc (100%) rename libs/@local/hashql/ast/tests/ui/{lowering => lower}/import-resolver/local-binding-recursive-value.stdout (100%) rename libs/@local/hashql/ast/tests/ui/{lowering => lower}/import-resolver/local-binding-type.jsonc (100%) rename libs/@local/hashql/ast/tests/ui/{lowering => lower}/import-resolver/local-binding-type.stdout (100%) rename libs/@local/hashql/ast/tests/ui/{lowering => lower}/import-resolver/local-binding-value.jsonc (100%) rename libs/@local/hashql/ast/tests/ui/{lowering => lower}/import-resolver/local-binding-value.stdout (100%) rename libs/@local/hashql/ast/tests/ui/{lowering => lower}/import-resolver/module-not-found.jsonc (100%) rename libs/@local/hashql/ast/tests/ui/{lowering => lower}/import-resolver/module-not-found.stderr (100%) rename libs/@local/hashql/ast/tests/ui/{lowering => lower}/import-resolver/multiple-named-imports.jsonc (100%) rename libs/@local/hashql/ast/tests/ui/{lowering => lower}/import-resolver/multiple-named-imports.stdout (100%) rename libs/@local/hashql/ast/tests/ui/{lowering => lower}/import-resolver/nested-resolution.jsonc (100%) rename libs/@local/hashql/ast/tests/ui/{lowering => lower}/import-resolver/nested-resolution.stdout (100%) rename libs/@local/hashql/ast/tests/ui/{lowering => lower}/import-resolver/newtype-scope.jsonc (100%) rename libs/@local/hashql/ast/tests/ui/{lowering => lower}/import-resolver/newtype-scope.stdout (100%) rename libs/@local/hashql/ast/tests/ui/{lowering => lower}/import-resolver/path-normalization.jsonc (100%) rename libs/@local/hashql/ast/tests/ui/{lowering => lower}/import-resolver/path-normalization.stdout (100%) rename libs/@local/hashql/ast/tests/ui/{lowering => lower}/import-resolver/prelude.jsonc (100%) rename libs/@local/hashql/ast/tests/ui/{lowering => lower}/import-resolver/prelude.stdout (100%) rename libs/@local/hashql/ast/tests/ui/{lowering => lower}/import-resolver/regression-generic-arguments-identifier.jsonc (100%) rename libs/@local/hashql/ast/tests/ui/{lowering => lower}/import-resolver/regression-generic-arguments-identifier.stdout (100%) rename libs/@local/hashql/ast/tests/ui/{lowering => lower}/import-resolver/rollback.jsonc (100%) rename libs/@local/hashql/ast/tests/ui/{lowering => lower}/import-resolver/rollback.stderr (100%) rename libs/@local/hashql/ast/tests/ui/{lowering => lower}/import-resolver/shadowed-imports.jsonc (100%) rename libs/@local/hashql/ast/tests/ui/{lowering => lower}/import-resolver/shadowed-imports.stdout (100%) rename libs/@local/hashql/ast/tests/ui/{lowering => lower}/import-resolver/shadowed-prelude.jsonc (100%) rename libs/@local/hashql/ast/tests/ui/{lowering => lower}/import-resolver/shadowed-prelude.stdout (100%) rename libs/@local/hashql/ast/tests/ui/{lowering => lower}/import-resolver/substitution.jsonc (100%) rename libs/@local/hashql/ast/tests/ui/{lowering => lower}/import-resolver/substitution.stdout (100%) rename libs/@local/hashql/ast/tests/ui/{lowering => lower}/import-resolver/universe-ambiguity-resolution.jsonc (100%) rename libs/@local/hashql/ast/tests/ui/{lowering => lower}/import-resolver/universe-ambiguity-resolution.stdout (100%) rename libs/@local/hashql/ast/tests/ui/{lowering => lower}/import-resolver/unresolver-variable.jsonc (100%) rename libs/@local/hashql/ast/tests/ui/{lowering => lower}/import-resolver/unresolver-variable.stderr (100%) rename libs/@local/hashql/ast/tests/ui/{lowering => lower}/import-resolver/use-shadowing-let.jsonc (100%) rename libs/@local/hashql/ast/tests/ui/{lowering => lower}/import-resolver/use-shadowing-let.stdout (100%) rename libs/@local/hashql/ast/tests/ui/{lowering => lower}/import-resolver/use-shadowing-use.jsonc (100%) rename libs/@local/hashql/ast/tests/ui/{lowering => lower}/import-resolver/use-shadowing-use.stdout (100%) rename libs/@local/hashql/ast/tests/ui/{lowering => lower}/name-mangler/.spec.toml (100%) rename libs/@local/hashql/ast/tests/ui/{lowering => lower}/name-mangler/absolute-path.jsonc (100%) rename libs/@local/hashql/ast/tests/ui/{lowering => lower}/name-mangler/absolute-path.stdout (100%) rename libs/@local/hashql/ast/tests/ui/{lowering => lower}/name-mangler/diverging.jsonc (100%) rename libs/@local/hashql/ast/tests/ui/{lowering => lower}/name-mangler/diverging.stdout (100%) rename libs/@local/hashql/ast/tests/ui/{lowering => lower}/name-mangler/fn-args.jsonc (100%) rename libs/@local/hashql/ast/tests/ui/{lowering => lower}/name-mangler/fn-args.stdout (100%) rename libs/@local/hashql/ast/tests/ui/{lowering => lower}/name-mangler/fn-types-of-args.jsonc (100%) rename libs/@local/hashql/ast/tests/ui/{lowering => lower}/name-mangler/fn-types-of-args.stdout (100%) rename libs/@local/hashql/ast/tests/ui/{lowering => lower}/name-mangler/fn-types-of-ret.jsonc (100%) rename libs/@local/hashql/ast/tests/ui/{lowering => lower}/name-mangler/fn-types-of-ret.stdout (100%) rename libs/@local/hashql/ast/tests/ui/{lowering => lower}/name-mangler/fn-types.jsonc (100%) rename libs/@local/hashql/ast/tests/ui/{lowering => lower}/name-mangler/fn-types.stdout (100%) rename libs/@local/hashql/ast/tests/ui/{lowering => lower}/name-mangler/let.jsonc (100%) rename libs/@local/hashql/ast/tests/ui/{lowering => lower}/name-mangler/let.stdout (100%) rename libs/@local/hashql/ast/tests/ui/{lowering => lower}/name-mangler/newtype-generics.jsonc (100%) rename libs/@local/hashql/ast/tests/ui/{lowering => lower}/name-mangler/newtype-generics.stdout (100%) rename libs/@local/hashql/ast/tests/ui/{lowering => lower}/name-mangler/newtype.jsonc (100%) rename libs/@local/hashql/ast/tests/ui/{lowering => lower}/name-mangler/newtype.stdout (100%) rename libs/@local/hashql/ast/tests/ui/{lowering => lower}/name-mangler/onion.jsonc (100%) rename libs/@local/hashql/ast/tests/ui/{lowering => lower}/name-mangler/onion.stdout (100%) rename libs/@local/hashql/ast/tests/ui/{lowering => lower}/name-mangler/overwrite-body.jsonc (100%) rename libs/@local/hashql/ast/tests/ui/{lowering => lower}/name-mangler/overwrite-body.stdout (100%) rename libs/@local/hashql/ast/tests/ui/{lowering => lower}/name-mangler/overwrite.jsonc (100%) rename libs/@local/hashql/ast/tests/ui/{lowering => lower}/name-mangler/overwrite.stdout (100%) rename libs/@local/hashql/ast/tests/ui/{lowering => lower}/name-mangler/path-arguments.jsonc (100%) rename libs/@local/hashql/ast/tests/ui/{lowering => lower}/name-mangler/path-arguments.stdout (100%) rename libs/@local/hashql/ast/tests/ui/{lowering => lower}/name-mangler/path.jsonc (100%) rename libs/@local/hashql/ast/tests/ui/{lowering => lower}/name-mangler/path.stdout (100%) rename libs/@local/hashql/ast/tests/ui/{lowering => lower}/name-mangler/scopes-no-include.jsonc (100%) rename libs/@local/hashql/ast/tests/ui/{lowering => lower}/name-mangler/scopes-no-include.stdout (100%) rename libs/@local/hashql/ast/tests/ui/{lowering => lower}/name-mangler/simple.jsonc (100%) rename libs/@local/hashql/ast/tests/ui/{lowering => lower}/name-mangler/simple.stdout (100%) rename libs/@local/hashql/ast/tests/ui/{lowering => lower}/name-mangler/type-generics-constraints.jsonc (100%) rename libs/@local/hashql/ast/tests/ui/{lowering => lower}/name-mangler/type-generics-constraints.stdout (100%) rename libs/@local/hashql/ast/tests/ui/{lowering => lower}/name-mangler/type-generics-interdependent-generics.jsonc (100%) rename libs/@local/hashql/ast/tests/ui/{lowering => lower}/name-mangler/type-generics-interdependent-generics.stdout (100%) rename libs/@local/hashql/ast/tests/ui/{lowering => lower}/name-mangler/type-generics-nested.jsonc (100%) rename libs/@local/hashql/ast/tests/ui/{lowering => lower}/name-mangler/type-generics-nested.stdout (100%) rename libs/@local/hashql/ast/tests/ui/{lowering => lower}/name-mangler/type-generics-recursive.jsonc (100%) rename libs/@local/hashql/ast/tests/ui/{lowering => lower}/name-mangler/type-generics-recursive.stdout (100%) rename libs/@local/hashql/ast/tests/ui/{lowering => lower}/name-mangler/type-generics.jsonc (100%) rename libs/@local/hashql/ast/tests/ui/{lowering => lower}/name-mangler/type-generics.stdout (100%) rename libs/@local/hashql/ast/tests/ui/{lowering => lower}/name-mangler/type.jsonc (100%) rename libs/@local/hashql/ast/tests/ui/{lowering => lower}/name-mangler/type.stdout (100%) rename libs/@local/hashql/ast/tests/ui/{lowering => lower}/node-renumberer/.spec.toml (100%) rename libs/@local/hashql/ast/tests/ui/{lowering => lower}/node-renumberer/basic.jsonc (100%) rename libs/@local/hashql/ast/tests/ui/{lowering => lower}/node-renumberer/basic.stdout (100%) rename libs/@local/hashql/ast/tests/ui/{lowering => lower}/node-renumberer/diverging.jsonc (100%) rename libs/@local/hashql/ast/tests/ui/{lowering => lower}/node-renumberer/diverging.stdout (100%) rename libs/@local/hashql/ast/tests/ui/{lowering => lower}/node-renumberer/nested.jsonc (100%) rename libs/@local/hashql/ast/tests/ui/{lowering => lower}/node-renumberer/nested.stdout (100%) rename libs/@local/hashql/ast/tests/ui/{lowering => lower}/pre-expansion-name-resolver/.spec.toml (100%) rename libs/@local/hashql/ast/tests/ui/{lowering => lower}/pre-expansion-name-resolver/absolute-path.jsonc (100%) rename libs/@local/hashql/ast/tests/ui/{lowering => lower}/pre-expansion-name-resolver/absolute-path.stdout (100%) rename libs/@local/hashql/ast/tests/ui/{lowering => lower}/pre-expansion-name-resolver/alias-absolute-path.jsonc (100%) rename libs/@local/hashql/ast/tests/ui/{lowering => lower}/pre-expansion-name-resolver/alias-absolute-path.stdout (100%) rename libs/@local/hashql/ast/tests/ui/{lowering => lower}/pre-expansion-name-resolver/alias-symbol.jsonc (100%) rename libs/@local/hashql/ast/tests/ui/{lowering => lower}/pre-expansion-name-resolver/alias-symbol.stdout (100%) rename libs/@local/hashql/ast/tests/ui/{lowering => lower}/pre-expansion-name-resolver/invalid-let-expr.jsonc (100%) rename libs/@local/hashql/ast/tests/ui/{lowering => lower}/pre-expansion-name-resolver/invalid-let-expr.stdout (100%) rename libs/@local/hashql/ast/tests/ui/{lowering => lower}/pre-expansion-name-resolver/let-3-alias.jsonc (100%) rename libs/@local/hashql/ast/tests/ui/{lowering => lower}/pre-expansion-name-resolver/let-3-alias.stdout (100%) rename libs/@local/hashql/ast/tests/ui/{lowering => lower}/pre-expansion-name-resolver/let-3.jsonc (100%) rename libs/@local/hashql/ast/tests/ui/{lowering => lower}/pre-expansion-name-resolver/let-3.stdout (100%) rename libs/@local/hashql/ast/tests/ui/{lowering => lower}/pre-expansion-name-resolver/let-4-alias.jsonc (100%) rename libs/@local/hashql/ast/tests/ui/{lowering => lower}/pre-expansion-name-resolver/let-4-alias.stdout (100%) rename libs/@local/hashql/ast/tests/ui/{lowering => lower}/pre-expansion-name-resolver/let-4.jsonc (100%) rename libs/@local/hashql/ast/tests/ui/{lowering => lower}/pre-expansion-name-resolver/let-4.stdout (100%) rename libs/@local/hashql/ast/tests/ui/{lowering => lower}/pre-expansion-name-resolver/let-absolute.jsonc (100%) rename libs/@local/hashql/ast/tests/ui/{lowering => lower}/pre-expansion-name-resolver/let-absolute.stdout (100%) rename libs/@local/hashql/ast/tests/ui/{lowering => lower}/pre-expansion-name-resolver/let-ident-generic.jsonc (100%) rename libs/@local/hashql/ast/tests/ui/{lowering => lower}/pre-expansion-name-resolver/let-ident-generic.stdout (100%) rename libs/@local/hashql/ast/tests/ui/{lowering => lower}/pre-expansion-name-resolver/multi-segment-resolution.jsonc (100%) rename libs/@local/hashql/ast/tests/ui/{lowering => lower}/pre-expansion-name-resolver/multi-segment-resolution.stdout (100%) rename libs/@local/hashql/ast/tests/ui/{lowering => lower}/pre-expansion-name-resolver/nested-let.jsonc (100%) rename libs/@local/hashql/ast/tests/ui/{lowering => lower}/pre-expansion-name-resolver/nested-let.stdout (100%) rename libs/@local/hashql/ast/tests/ui/{lowering => lower}/pre-expansion-name-resolver/newtype-3-alias.jsonc (100%) rename libs/@local/hashql/ast/tests/ui/{lowering => lower}/pre-expansion-name-resolver/newtype-3-alias.stdout (100%) rename libs/@local/hashql/ast/tests/ui/{lowering => lower}/pre-expansion-name-resolver/newtype-3.jsonc (100%) rename libs/@local/hashql/ast/tests/ui/{lowering => lower}/pre-expansion-name-resolver/newtype-3.stdout (100%) rename libs/@local/hashql/ast/tests/ui/{lowering => lower}/pre-expansion-name-resolver/newtype-4.jsonc (100%) rename libs/@local/hashql/ast/tests/ui/{lowering => lower}/pre-expansion-name-resolver/newtype-4.stdout (100%) rename libs/@local/hashql/ast/tests/ui/{lowering => lower}/pre-expansion-name-resolver/re-assign-prelude-diverging.jsonc (100%) rename libs/@local/hashql/ast/tests/ui/{lowering => lower}/pre-expansion-name-resolver/re-assign-prelude-diverging.stdout (100%) rename libs/@local/hashql/ast/tests/ui/{lowering => lower}/pre-expansion-name-resolver/re-assign-prelude.jsonc (100%) rename libs/@local/hashql/ast/tests/ui/{lowering => lower}/pre-expansion-name-resolver/re-assign-prelude.stdout (100%) rename libs/@local/hashql/ast/tests/ui/{lowering => lower}/pre-expansion-name-resolver/re-assign.jsonc (100%) rename libs/@local/hashql/ast/tests/ui/{lowering => lower}/pre-expansion-name-resolver/re-assign.stdout (100%) rename libs/@local/hashql/ast/tests/ui/{lowering => lower}/pre-expansion-name-resolver/resolve-generics.jsonc (100%) rename libs/@local/hashql/ast/tests/ui/{lowering => lower}/pre-expansion-name-resolver/resolve-generics.stdout (100%) rename libs/@local/hashql/ast/tests/ui/{lowering => lower}/pre-expansion-name-resolver/resolve-symbol.jsonc (100%) rename libs/@local/hashql/ast/tests/ui/{lowering => lower}/pre-expansion-name-resolver/resolve-symbol.stdout (100%) rename libs/@local/hashql/ast/tests/ui/{lowering => lower}/pre-expansion-name-resolver/restoration-bindings.jsonc (100%) rename libs/@local/hashql/ast/tests/ui/{lowering => lower}/pre-expansion-name-resolver/restoration-bindings.stdout (100%) rename libs/@local/hashql/ast/tests/ui/{lowering => lower}/pre-expansion-name-resolver/type-3-alias.jsonc (100%) rename libs/@local/hashql/ast/tests/ui/{lowering => lower}/pre-expansion-name-resolver/type-3-alias.stdout (100%) rename libs/@local/hashql/ast/tests/ui/{lowering => lower}/pre-expansion-name-resolver/type-3.jsonc (100%) rename libs/@local/hashql/ast/tests/ui/{lowering => lower}/pre-expansion-name-resolver/type-3.stdout (100%) rename libs/@local/hashql/ast/tests/ui/{lowering => lower}/pre-expansion-name-resolver/type-4.jsonc (100%) rename libs/@local/hashql/ast/tests/ui/{lowering => lower}/pre-expansion-name-resolver/type-4.stdout (100%) rename libs/@local/hashql/ast/tests/ui/{lowering => lower}/sanitizer/.spec.toml (100%) rename libs/@local/hashql/ast/tests/ui/{lowering => lower}/sanitizer/constraint.jsonc (100%) rename libs/@local/hashql/ast/tests/ui/{lowering => lower}/sanitizer/constraint.stderr (100%) rename libs/@local/hashql/ast/tests/ui/{lowering => lower}/sanitizer/special-form-type-position.jsonc (100%) rename libs/@local/hashql/ast/tests/ui/{lowering => lower}/sanitizer/special-form-type-position.stderr (100%) rename libs/@local/hashql/ast/tests/ui/{lowering => lower}/sanitizer/special-form-value.jsonc (100%) rename libs/@local/hashql/ast/tests/ui/{lowering => lower}/sanitizer/special-form-value.stderr (100%) rename libs/@local/hashql/ast/tests/ui/{lowering => lower}/special-form-expander/.spec.toml (100%) rename libs/@local/hashql/ast/tests/ui/{lowering => lower}/special-form-expander/access-1.jsonc (100%) rename libs/@local/hashql/ast/tests/ui/{lowering => lower}/special-form-expander/access-1.stderr (100%) rename libs/@local/hashql/ast/tests/ui/{lowering => lower}/special-form-expander/access-2.jsonc (100%) rename libs/@local/hashql/ast/tests/ui/{lowering => lower}/special-form-expander/access-2.stdout (100%) rename libs/@local/hashql/ast/tests/ui/{lowering => lower}/special-form-expander/access-3.jsonc (100%) rename libs/@local/hashql/ast/tests/ui/{lowering => lower}/special-form-expander/access-3.stderr (100%) rename libs/@local/hashql/ast/tests/ui/{lowering => lower}/special-form-expander/access-field-index-out-of-bounds.jsonc (100%) rename libs/@local/hashql/ast/tests/ui/{lowering => lower}/special-form-expander/access-field-index-out-of-bounds.stderr (100%) rename libs/@local/hashql/ast/tests/ui/{lowering => lower}/special-form-expander/access-field-literal-boolean.jsonc (100%) rename libs/@local/hashql/ast/tests/ui/{lowering => lower}/special-form-expander/access-field-literal-boolean.stderr (100%) rename libs/@local/hashql/ast/tests/ui/{lowering => lower}/special-form-expander/access-field-literal-string.jsonc (100%) rename libs/@local/hashql/ast/tests/ui/{lowering => lower}/special-form-expander/access-field-literal-string.stderr (100%) rename libs/@local/hashql/ast/tests/ui/{lowering => lower}/special-form-expander/access-field-literal-type-annotation.jsonc (100%) rename libs/@local/hashql/ast/tests/ui/{lowering => lower}/special-form-expander/access-field-literal-type-annotation.stderr (100%) rename libs/@local/hashql/ast/tests/ui/{lowering => lower}/special-form-expander/access-field-literal-valid.jsonc (100%) rename libs/@local/hashql/ast/tests/ui/{lowering => lower}/special-form-expander/access-field-literal-valid.stdout (100%) rename libs/@local/hashql/ast/tests/ui/{lowering => lower}/special-form-expander/as-1.jsonc (100%) rename libs/@local/hashql/ast/tests/ui/{lowering => lower}/special-form-expander/as-1.stderr (100%) rename libs/@local/hashql/ast/tests/ui/{lowering => lower}/special-form-expander/as-2.jsonc (100%) rename libs/@local/hashql/ast/tests/ui/{lowering => lower}/special-form-expander/as-2.stdout (100%) rename libs/@local/hashql/ast/tests/ui/{lowering => lower}/special-form-expander/as-3.jsonc (100%) rename libs/@local/hashql/ast/tests/ui/{lowering => lower}/special-form-expander/as-3.stderr (100%) rename libs/@local/hashql/ast/tests/ui/{lowering => lower}/special-form-expander/does-not-touch-non-kernel.jsonc (100%) rename libs/@local/hashql/ast/tests/ui/{lowering => lower}/special-form-expander/does-not-touch-non-kernel.stdout (100%) rename libs/@local/hashql/ast/tests/ui/{lowering => lower}/special-form-expander/fn-3.jsonc (100%) rename libs/@local/hashql/ast/tests/ui/{lowering => lower}/special-form-expander/fn-3.stderr (100%) rename libs/@local/hashql/ast/tests/ui/{lowering => lower}/special-form-expander/fn-4.jsonc (100%) rename libs/@local/hashql/ast/tests/ui/{lowering => lower}/special-form-expander/fn-4.stdout (100%) rename libs/@local/hashql/ast/tests/ui/{lowering => lower}/special-form-expander/fn-5.jsonc (100%) rename libs/@local/hashql/ast/tests/ui/{lowering => lower}/special-form-expander/fn-5.stderr (100%) rename libs/@local/hashql/ast/tests/ui/{lowering => lower}/special-form-expander/fn-generics-duplicates.jsonc (100%) rename libs/@local/hashql/ast/tests/ui/{lowering => lower}/special-form-expander/fn-generics-duplicates.stderr (100%) rename libs/@local/hashql/ast/tests/ui/{lowering => lower}/special-form-expander/fn-generics-literal.jsonc (100%) rename libs/@local/hashql/ast/tests/ui/{lowering => lower}/special-form-expander/fn-generics-literal.stderr (100%) rename libs/@local/hashql/ast/tests/ui/{lowering => lower}/special-form-expander/fn-generics-struct-literal.jsonc (100%) rename libs/@local/hashql/ast/tests/ui/{lowering => lower}/special-form-expander/fn-generics-struct-literal.stderr (100%) rename libs/@local/hashql/ast/tests/ui/{lowering => lower}/special-form-expander/fn-generics-struct-type.jsonc (100%) rename libs/@local/hashql/ast/tests/ui/{lowering => lower}/special-form-expander/fn-generics-struct-type.stderr (100%) rename libs/@local/hashql/ast/tests/ui/{lowering => lower}/special-form-expander/fn-generics-struct-underscore.jsonc (100%) rename libs/@local/hashql/ast/tests/ui/{lowering => lower}/special-form-expander/fn-generics-struct-underscore.stdout (100%) rename libs/@local/hashql/ast/tests/ui/{lowering => lower}/special-form-expander/fn-generics-struct.jsonc (100%) rename libs/@local/hashql/ast/tests/ui/{lowering => lower}/special-form-expander/fn-generics-struct.stdout (100%) rename libs/@local/hashql/ast/tests/ui/{lowering => lower}/special-form-expander/fn-generics-tuple-literal.jsonc (100%) rename libs/@local/hashql/ast/tests/ui/{lowering => lower}/special-form-expander/fn-generics-tuple-literal.stderr (100%) rename libs/@local/hashql/ast/tests/ui/{lowering => lower}/special-form-expander/fn-generics-tuple-path.jsonc (100%) rename libs/@local/hashql/ast/tests/ui/{lowering => lower}/special-form-expander/fn-generics-tuple-path.stderr (100%) rename libs/@local/hashql/ast/tests/ui/{lowering => lower}/special-form-expander/fn-generics-tuple-type.jsonc (100%) rename libs/@local/hashql/ast/tests/ui/{lowering => lower}/special-form-expander/fn-generics-tuple-type.stderr (100%) rename libs/@local/hashql/ast/tests/ui/{lowering => lower}/special-form-expander/fn-generics-tuple.jsonc (100%) rename libs/@local/hashql/ast/tests/ui/{lowering => lower}/special-form-expander/fn-generics-tuple.stdout (100%) rename libs/@local/hashql/ast/tests/ui/{lowering => lower}/special-form-expander/fn-params-duplicates.jsonc (100%) rename libs/@local/hashql/ast/tests/ui/{lowering => lower}/special-form-expander/fn-params-duplicates.stderr (100%) rename libs/@local/hashql/ast/tests/ui/{lowering => lower}/special-form-expander/fn-params-tuple.jsonc (100%) rename libs/@local/hashql/ast/tests/ui/{lowering => lower}/special-form-expander/fn-params-tuple.stderr (100%) rename libs/@local/hashql/ast/tests/ui/{lowering => lower}/special-form-expander/fn-params-type.jsonc (100%) rename libs/@local/hashql/ast/tests/ui/{lowering => lower}/special-form-expander/fn-params-type.stderr (100%) rename libs/@local/hashql/ast/tests/ui/{lowering => lower}/special-form-expander/generics.jsonc (100%) rename libs/@local/hashql/ast/tests/ui/{lowering => lower}/special-form-expander/generics.stderr (100%) rename libs/@local/hashql/ast/tests/ui/{lowering => lower}/special-form-expander/if-1.jsonc (100%) rename libs/@local/hashql/ast/tests/ui/{lowering => lower}/special-form-expander/if-1.stderr (100%) rename libs/@local/hashql/ast/tests/ui/{lowering => lower}/special-form-expander/if-2.jsonc (100%) rename libs/@local/hashql/ast/tests/ui/{lowering => lower}/special-form-expander/if-2.stdout (100%) rename libs/@local/hashql/ast/tests/ui/{lowering => lower}/special-form-expander/if-3.jsonc (100%) rename libs/@local/hashql/ast/tests/ui/{lowering => lower}/special-form-expander/if-3.stdout (100%) rename libs/@local/hashql/ast/tests/ui/{lowering => lower}/special-form-expander/if-4.jsonc (100%) rename libs/@local/hashql/ast/tests/ui/{lowering => lower}/special-form-expander/if-4.stderr (100%) rename libs/@local/hashql/ast/tests/ui/{lowering => lower}/special-form-expander/index-1.jsonc (100%) rename libs/@local/hashql/ast/tests/ui/{lowering => lower}/special-form-expander/index-1.stderr (100%) rename libs/@local/hashql/ast/tests/ui/{lowering => lower}/special-form-expander/index-2.jsonc (100%) rename libs/@local/hashql/ast/tests/ui/{lowering => lower}/special-form-expander/index-2.stdout (100%) rename libs/@local/hashql/ast/tests/ui/{lowering => lower}/special-form-expander/index-3.jsonc (100%) rename libs/@local/hashql/ast/tests/ui/{lowering => lower}/special-form-expander/index-3.stderr (100%) rename libs/@local/hashql/ast/tests/ui/{lowering => lower}/special-form-expander/input-1.jsonc (100%) rename libs/@local/hashql/ast/tests/ui/{lowering => lower}/special-form-expander/input-1.stderr (100%) rename libs/@local/hashql/ast/tests/ui/{lowering => lower}/special-form-expander/input-2.jsonc (100%) rename libs/@local/hashql/ast/tests/ui/{lowering => lower}/special-form-expander/input-2.stdout (100%) rename libs/@local/hashql/ast/tests/ui/{lowering => lower}/special-form-expander/input-3.jsonc (100%) rename libs/@local/hashql/ast/tests/ui/{lowering => lower}/special-form-expander/input-3.stdout (100%) rename libs/@local/hashql/ast/tests/ui/{lowering => lower}/special-form-expander/input-4.jsonc (100%) rename libs/@local/hashql/ast/tests/ui/{lowering => lower}/special-form-expander/input-4.stderr (100%) rename libs/@local/hashql/ast/tests/ui/{lowering => lower}/special-form-expander/labeled-argument.jsonc (100%) rename libs/@local/hashql/ast/tests/ui/{lowering => lower}/special-form-expander/labeled-argument.stderr (100%) rename libs/@local/hashql/ast/tests/ui/{lowering => lower}/special-form-expander/let-2.jsonc (100%) rename libs/@local/hashql/ast/tests/ui/{lowering => lower}/special-form-expander/let-2.stderr (100%) rename libs/@local/hashql/ast/tests/ui/{lowering => lower}/special-form-expander/let-3.jsonc (100%) rename libs/@local/hashql/ast/tests/ui/{lowering => lower}/special-form-expander/let-3.stdout (100%) rename libs/@local/hashql/ast/tests/ui/{lowering => lower}/special-form-expander/let-4.jsonc (100%) rename libs/@local/hashql/ast/tests/ui/{lowering => lower}/special-form-expander/let-4.stdout (100%) rename libs/@local/hashql/ast/tests/ui/{lowering => lower}/special-form-expander/let-5.jsonc (100%) rename libs/@local/hashql/ast/tests/ui/{lowering => lower}/special-form-expander/let-5.stderr (100%) rename libs/@local/hashql/ast/tests/ui/{lowering => lower}/special-form-expander/let-argument-not-ident.jsonc (100%) rename libs/@local/hashql/ast/tests/ui/{lowering => lower}/special-form-expander/let-argument-not-ident.stderr (100%) rename libs/@local/hashql/ast/tests/ui/{lowering => lower}/special-form-expander/let-argument-not-path.jsonc (100%) rename libs/@local/hashql/ast/tests/ui/{lowering => lower}/special-form-expander/let-argument-not-path.stderr (100%) rename libs/@local/hashql/ast/tests/ui/{lowering => lower}/special-form-expander/let-collect-all-errors.jsonc (100%) rename libs/@local/hashql/ast/tests/ui/{lowering => lower}/special-form-expander/let-collect-all-errors.stderr (100%) rename libs/@local/hashql/ast/tests/ui/{lowering => lower}/special-form-expander/newtype-2.jsonc (100%) rename libs/@local/hashql/ast/tests/ui/{lowering => lower}/special-form-expander/newtype-2.stderr (100%) rename libs/@local/hashql/ast/tests/ui/{lowering => lower}/special-form-expander/newtype-3.jsonc (100%) rename libs/@local/hashql/ast/tests/ui/{lowering => lower}/special-form-expander/newtype-3.stdout (100%) rename libs/@local/hashql/ast/tests/ui/{lowering => lower}/special-form-expander/newtype-4.jsonc (100%) rename libs/@local/hashql/ast/tests/ui/{lowering => lower}/special-form-expander/newtype-4.stderr (100%) rename libs/@local/hashql/ast/tests/ui/{lowering => lower}/special-form-expander/newtype-collect-all-errors.jsonc (100%) rename libs/@local/hashql/ast/tests/ui/{lowering => lower}/special-form-expander/newtype-collect-all-errors.stderr (100%) rename libs/@local/hashql/ast/tests/ui/{lowering => lower}/special-form-expander/newtype-constraints.jsonc (100%) rename libs/@local/hashql/ast/tests/ui/{lowering => lower}/special-form-expander/newtype-constraints.stdout (100%) rename libs/@local/hashql/ast/tests/ui/{lowering => lower}/special-form-expander/not-enough-segments.jsonc (100%) rename libs/@local/hashql/ast/tests/ui/{lowering => lower}/special-form-expander/not-enough-segments.stderr (100%) rename libs/@local/hashql/ast/tests/ui/{lowering => lower}/special-form-expander/too-many-segments.jsonc (100%) rename libs/@local/hashql/ast/tests/ui/{lowering => lower}/special-form-expander/too-many-segments.stderr (100%) rename libs/@local/hashql/ast/tests/ui/{lowering => lower}/special-form-expander/type-2.jsonc (100%) rename libs/@local/hashql/ast/tests/ui/{lowering => lower}/special-form-expander/type-2.stderr (100%) rename libs/@local/hashql/ast/tests/ui/{lowering => lower}/special-form-expander/type-3.jsonc (100%) rename libs/@local/hashql/ast/tests/ui/{lowering => lower}/special-form-expander/type-3.stdout (100%) rename libs/@local/hashql/ast/tests/ui/{lowering => lower}/special-form-expander/type-4.jsonc (100%) rename libs/@local/hashql/ast/tests/ui/{lowering => lower}/special-form-expander/type-4.stderr (100%) rename libs/@local/hashql/ast/tests/ui/{lowering => lower}/special-form-expander/type-collect-all-errors.jsonc (100%) rename libs/@local/hashql/ast/tests/ui/{lowering => lower}/special-form-expander/type-collect-all-errors.stderr (100%) rename libs/@local/hashql/ast/tests/ui/{lowering => lower}/special-form-expander/type-expr-call-arbitrary.jsonc (100%) rename libs/@local/hashql/ast/tests/ui/{lowering => lower}/special-form-expander/type-expr-call-arbitrary.stderr (100%) rename libs/@local/hashql/ast/tests/ui/{lowering => lower}/special-form-expander/type-expr-call-intersection.jsonc (100%) rename libs/@local/hashql/ast/tests/ui/{lowering => lower}/special-form-expander/type-expr-call-intersection.stdout (100%) rename libs/@local/hashql/ast/tests/ui/{lowering => lower}/special-form-expander/type-expr-call-not-path.jsonc (100%) rename libs/@local/hashql/ast/tests/ui/{lowering => lower}/special-form-expander/type-expr-call-not-path.stderr (100%) rename libs/@local/hashql/ast/tests/ui/{lowering => lower}/special-form-expander/type-expr-call-union.jsonc (100%) rename libs/@local/hashql/ast/tests/ui/{lowering => lower}/special-form-expander/type-expr-call-union.stdout (100%) rename libs/@local/hashql/ast/tests/ui/{lowering => lower}/special-form-expander/type-expr-invalid.jsonc (100%) rename libs/@local/hashql/ast/tests/ui/{lowering => lower}/special-form-expander/type-expr-invalid.stderr (100%) rename libs/@local/hashql/ast/tests/ui/{lowering => lower}/special-form-expander/type-expr-struct.jsonc (100%) rename libs/@local/hashql/ast/tests/ui/{lowering => lower}/special-form-expander/type-expr-struct.stdout (100%) rename libs/@local/hashql/ast/tests/ui/{lowering => lower}/special-form-expander/type-expr-tuple.jsonc (100%) rename libs/@local/hashql/ast/tests/ui/{lowering => lower}/special-form-expander/type-expr-tuple.stdout (100%) rename libs/@local/hashql/ast/tests/ui/{lowering => lower}/special-form-expander/type-generic-absolute-path.jsonc (100%) rename libs/@local/hashql/ast/tests/ui/{lowering => lower}/special-form-expander/type-generic-absolute-path.stderr (100%) rename libs/@local/hashql/ast/tests/ui/{lowering => lower}/special-form-expander/type-generic-constraint.jsonc (100%) rename libs/@local/hashql/ast/tests/ui/{lowering => lower}/special-form-expander/type-generic-constraint.stdout (100%) rename libs/@local/hashql/ast/tests/ui/{lowering => lower}/special-form-expander/type-generic-duplicate.jsonc (100%) rename libs/@local/hashql/ast/tests/ui/{lowering => lower}/special-form-expander/type-generic-duplicate.stderr (100%) rename libs/@local/hashql/ast/tests/ui/{lowering => lower}/special-form-expander/type-generic-generic-ident.jsonc (100%) rename libs/@local/hashql/ast/tests/ui/{lowering => lower}/special-form-expander/type-generic-generic-ident.stderr (100%) rename libs/@local/hashql/ast/tests/ui/{lowering => lower}/special-form-expander/type-generic-relative-path.jsonc (100%) rename libs/@local/hashql/ast/tests/ui/{lowering => lower}/special-form-expander/type-generic-relative-path.stderr (100%) rename libs/@local/hashql/ast/tests/ui/{lowering => lower}/special-form-expander/type-generic-struct.jsonc (100%) rename libs/@local/hashql/ast/tests/ui/{lowering => lower}/special-form-expander/type-generic-struct.stderr (100%) rename libs/@local/hashql/ast/tests/ui/{lowering => lower}/special-form-expander/type-generic.jsonc (100%) rename libs/@local/hashql/ast/tests/ui/{lowering => lower}/special-form-expander/type-generic.stdout (100%) rename libs/@local/hashql/ast/tests/ui/{lowering => lower}/special-form-expander/type-infer.jsonc (100%) rename libs/@local/hashql/ast/tests/ui/{lowering => lower}/special-form-expander/type-infer.stdout (100%) rename libs/@local/hashql/ast/tests/ui/{lowering => lower}/special-form-expander/type-never.jsonc (100%) rename libs/@local/hashql/ast/tests/ui/{lowering => lower}/special-form-expander/type-never.stdout (100%) rename libs/@local/hashql/ast/tests/ui/{lowering => lower}/special-form-expander/type-struct-has-type.jsonc (100%) rename libs/@local/hashql/ast/tests/ui/{lowering => lower}/special-form-expander/type-struct-has-type.stderr (100%) rename libs/@local/hashql/ast/tests/ui/{lowering => lower}/special-form-expander/type-tuple-has-type.jsonc (100%) rename libs/@local/hashql/ast/tests/ui/{lowering => lower}/special-form-expander/type-tuple-has-type.stderr (100%) rename libs/@local/hashql/ast/tests/ui/{lowering => lower}/special-form-expander/type-unknown.jsonc (100%) rename libs/@local/hashql/ast/tests/ui/{lowering => lower}/special-form-expander/type-unknown.stdout (100%) rename libs/@local/hashql/ast/tests/ui/{lowering => lower}/special-form-expander/unknown-special-form-typo.jsonc (100%) rename libs/@local/hashql/ast/tests/ui/{lowering => lower}/special-form-expander/unknown-special-form-typo.stderr (100%) rename libs/@local/hashql/ast/tests/ui/{lowering => lower}/special-form-expander/unknown-special-form.jsonc (100%) rename libs/@local/hashql/ast/tests/ui/{lowering => lower}/special-form-expander/unknown-special-form.stderr (100%) rename libs/@local/hashql/ast/tests/ui/{lowering => lower}/special-form-expander/use-2.jsonc (100%) rename libs/@local/hashql/ast/tests/ui/{lowering => lower}/special-form-expander/use-2.stderr (100%) rename libs/@local/hashql/ast/tests/ui/{lowering => lower}/special-form-expander/use-3.jsonc (100%) rename libs/@local/hashql/ast/tests/ui/{lowering => lower}/special-form-expander/use-3.stdout (100%) rename libs/@local/hashql/ast/tests/ui/{lowering => lower}/special-form-expander/use-4.jsonc (100%) rename libs/@local/hashql/ast/tests/ui/{lowering => lower}/special-form-expander/use-4.stderr (100%) rename libs/@local/hashql/ast/tests/ui/{lowering => lower}/special-form-expander/use-glob-not-ident.jsonc (100%) rename libs/@local/hashql/ast/tests/ui/{lowering => lower}/special-form-expander/use-glob-not-ident.stderr (100%) rename libs/@local/hashql/ast/tests/ui/{lowering => lower}/special-form-expander/use-glob-not-star.jsonc (100%) rename libs/@local/hashql/ast/tests/ui/{lowering => lower}/special-form-expander/use-glob-not-star.stderr (100%) rename libs/@local/hashql/ast/tests/ui/{lowering => lower}/special-form-expander/use-glob.jsonc (100%) rename libs/@local/hashql/ast/tests/ui/{lowering => lower}/special-form-expander/use-glob.stdout (100%) rename libs/@local/hashql/ast/tests/ui/{lowering => lower}/special-form-expander/use-literal.jsonc (100%) rename libs/@local/hashql/ast/tests/ui/{lowering => lower}/special-form-expander/use-literal.stderr (100%) rename libs/@local/hashql/ast/tests/ui/{lowering => lower}/special-form-expander/use-struct-literal.jsonc (100%) rename libs/@local/hashql/ast/tests/ui/{lowering => lower}/special-form-expander/use-struct-literal.stderr (100%) rename libs/@local/hashql/ast/tests/ui/{lowering => lower}/special-form-expander/use-struct-path.jsonc (100%) rename libs/@local/hashql/ast/tests/ui/{lowering => lower}/special-form-expander/use-struct-path.stderr (100%) rename libs/@local/hashql/ast/tests/ui/{lowering => lower}/special-form-expander/use-struct-type.jsonc (100%) rename libs/@local/hashql/ast/tests/ui/{lowering => lower}/special-form-expander/use-struct-type.stderr (100%) rename libs/@local/hashql/ast/tests/ui/{lowering => lower}/special-form-expander/use-struct.jsonc (100%) rename libs/@local/hashql/ast/tests/ui/{lowering => lower}/special-form-expander/use-struct.stdout (100%) rename libs/@local/hashql/ast/tests/ui/{lowering => lower}/special-form-expander/use-tuple-literal.jsonc (100%) rename libs/@local/hashql/ast/tests/ui/{lowering => lower}/special-form-expander/use-tuple-literal.stderr (100%) rename libs/@local/hashql/ast/tests/ui/{lowering => lower}/special-form-expander/use-tuple-path.jsonc (100%) rename libs/@local/hashql/ast/tests/ui/{lowering => lower}/special-form-expander/use-tuple-path.stderr (100%) rename libs/@local/hashql/ast/tests/ui/{lowering => lower}/special-form-expander/use-tuple-type.jsonc (100%) rename libs/@local/hashql/ast/tests/ui/{lowering => lower}/special-form-expander/use-tuple-type.stderr (100%) rename libs/@local/hashql/ast/tests/ui/{lowering => lower}/special-form-expander/use-tuple.jsonc (100%) rename libs/@local/hashql/ast/tests/ui/{lowering => lower}/special-form-expander/use-tuple.stdout (100%) rename libs/@local/hashql/ast/tests/ui/{lowering => lower}/type-extractor/.spec.toml (100%) rename libs/@local/hashql/ast/tests/ui/{lowering => lower}/type-extractor/closure-generics.jsonc (100%) rename libs/@local/hashql/ast/tests/ui/{lowering => lower}/type-extractor/closure-generics.stdout (100%) rename libs/@local/hashql/ast/tests/ui/{lowering => lower}/type-extractor/closure-unused-generic.jsonc (100%) rename libs/@local/hashql/ast/tests/ui/{lowering => lower}/type-extractor/closure-unused-generic.stderr (100%) rename libs/@local/hashql/ast/tests/ui/{lowering => lower}/type-extractor/closure.jsonc (100%) rename libs/@local/hashql/ast/tests/ui/{lowering => lower}/type-extractor/closure.stdout (100%) rename libs/@local/hashql/ast/tests/ui/{lowering => lower}/type-extractor/complex-types.jsonc (100%) rename libs/@local/hashql/ast/tests/ui/{lowering => lower}/type-extractor/complex-types.stdout (100%) rename libs/@local/hashql/ast/tests/ui/{lowering => lower}/type-extractor/definition/.spec.toml (100%) rename libs/@local/hashql/ast/tests/ui/{lowering => lower}/type-extractor/definition/constraints-invalid-location.jsonc (100%) rename libs/@local/hashql/ast/tests/ui/{lowering => lower}/type-extractor/definition/constraints-invalid-location.stderr (100%) rename libs/@local/hashql/ast/tests/ui/{lowering => lower}/type-extractor/definition/constraints-parsing.jsonc (100%) rename libs/@local/hashql/ast/tests/ui/{lowering => lower}/type-extractor/definition/constraints-parsing.stdout (100%) rename libs/@local/hashql/ast/tests/ui/{lowering => lower}/type-extractor/definition/contractive-guarded.jsonc (100%) rename libs/@local/hashql/ast/tests/ui/{lowering => lower}/type-extractor/definition/contractive-guarded.stdout (100%) rename libs/@local/hashql/ast/tests/ui/{lowering => lower}/type-extractor/definition/contractive-union.jsonc (100%) rename libs/@local/hashql/ast/tests/ui/{lowering => lower}/type-extractor/definition/contractive-union.stdout (100%) rename libs/@local/hashql/ast/tests/ui/{lowering => lower}/type-extractor/definition/dict-parameter-count-mismatch-too-many.jsonc (100%) rename libs/@local/hashql/ast/tests/ui/{lowering => lower}/type-extractor/definition/dict-parameter-count-mismatch-too-many.stderr (100%) rename libs/@local/hashql/ast/tests/ui/{lowering => lower}/type-extractor/definition/dict-parameter-count-mismatch.jsonc (100%) rename libs/@local/hashql/ast/tests/ui/{lowering => lower}/type-extractor/definition/dict-parameter-count-mismatch.stderr (100%) rename libs/@local/hashql/ast/tests/ui/{lowering => lower}/type-extractor/definition/duplicate-fields.jsonc (100%) rename libs/@local/hashql/ast/tests/ui/{lowering => lower}/type-extractor/definition/duplicate-fields.stderr (100%) rename libs/@local/hashql/ast/tests/ui/{lowering => lower}/type-extractor/definition/env-type-interning.jsonc (100%) rename libs/@local/hashql/ast/tests/ui/{lowering => lower}/type-extractor/definition/env-type-interning.stdout (100%) rename libs/@local/hashql/ast/tests/ui/{lowering => lower}/type-extractor/definition/generics-apply-params.jsonc (100%) rename libs/@local/hashql/ast/tests/ui/{lowering => lower}/type-extractor/definition/generics-apply-params.stdout (100%) rename libs/@local/hashql/ast/tests/ui/{lowering => lower}/type-extractor/definition/generics-param-count-mismatch.jsonc (100%) rename libs/@local/hashql/ast/tests/ui/{lowering => lower}/type-extractor/definition/generics-param-count-mismatch.stderr (100%) rename libs/@local/hashql/ast/tests/ui/{lowering => lower}/type-extractor/definition/generics-with-params.jsonc (100%) rename libs/@local/hashql/ast/tests/ui/{lowering => lower}/type-extractor/definition/generics-with-params.stdout (100%) rename libs/@local/hashql/ast/tests/ui/{lowering => lower}/type-extractor/definition/global-generic-constraint-not-enough.jsonc (100%) rename libs/@local/hashql/ast/tests/ui/{lowering => lower}/type-extractor/definition/global-generic-constraint-not-enough.stderr (100%) rename libs/@local/hashql/ast/tests/ui/{lowering => lower}/type-extractor/definition/global-generic-constraint-too-many.jsonc (100%) rename libs/@local/hashql/ast/tests/ui/{lowering => lower}/type-extractor/definition/global-generic-constraint-too-many.stderr (100%) rename libs/@local/hashql/ast/tests/ui/{lowering => lower}/type-extractor/definition/identity-nominal.jsonc (100%) rename libs/@local/hashql/ast/tests/ui/{lowering => lower}/type-extractor/definition/identity-nominal.stdout (100%) rename libs/@local/hashql/ast/tests/ui/{lowering => lower}/type-extractor/definition/identity-structural.jsonc (100%) rename libs/@local/hashql/ast/tests/ui/{lowering => lower}/type-extractor/definition/identity-structural.stdout (100%) rename libs/@local/hashql/ast/tests/ui/{lowering => lower}/type-extractor/definition/infer-with-arguments.jsonc (100%) rename libs/@local/hashql/ast/tests/ui/{lowering => lower}/type-extractor/definition/infer-with-arguments.stderr (100%) rename libs/@local/hashql/ast/tests/ui/{lowering => lower}/type-extractor/definition/intrinsic-dict-translation.jsonc (100%) rename libs/@local/hashql/ast/tests/ui/{lowering => lower}/type-extractor/definition/intrinsic-dict-translation.stdout (100%) rename libs/@local/hashql/ast/tests/ui/{lowering => lower}/type-extractor/definition/intrinsic-list-translation.jsonc (100%) rename libs/@local/hashql/ast/tests/ui/{lowering => lower}/type-extractor/definition/intrinsic-list-translation.stdout (100%) rename libs/@local/hashql/ast/tests/ui/{lowering => lower}/type-extractor/definition/list-parameter-count-mismatch-too-many.jsonc (100%) rename libs/@local/hashql/ast/tests/ui/{lowering => lower}/type-extractor/definition/list-parameter-count-mismatch-too-many.stderr (100%) rename libs/@local/hashql/ast/tests/ui/{lowering => lower}/type-extractor/definition/list-parameter-count-mismatch.jsonc (100%) rename libs/@local/hashql/ast/tests/ui/{lowering => lower}/type-extractor/definition/list-parameter-count-mismatch.stderr (100%) rename libs/@local/hashql/ast/tests/ui/{lowering => lower}/type-extractor/definition/locals-generic-params-struct.jsonc (100%) rename libs/@local/hashql/ast/tests/ui/{lowering => lower}/type-extractor/definition/locals-generic-params-struct.stdout (100%) rename libs/@local/hashql/ast/tests/ui/{lowering => lower}/type-extractor/definition/locals-generic-params.jsonc (100%) rename libs/@local/hashql/ast/tests/ui/{lowering => lower}/type-extractor/definition/locals-generic-params.stdout (100%) rename libs/@local/hashql/ast/tests/ui/{lowering => lower}/type-extractor/definition/locals-type-extraction.jsonc (100%) rename libs/@local/hashql/ast/tests/ui/{lowering => lower}/type-extractor/definition/locals-type-extraction.stdout (100%) rename libs/@local/hashql/ast/tests/ui/{lowering => lower}/type-extractor/definition/non-contractive-self.jsonc (100%) rename libs/@local/hashql/ast/tests/ui/{lowering => lower}/type-extractor/definition/non-contractive-self.stderr (100%) rename libs/@local/hashql/ast/tests/ui/{lowering => lower}/type-extractor/definition/non-contractive-type.jsonc (100%) rename libs/@local/hashql/ast/tests/ui/{lowering => lower}/type-extractor/definition/non-contractive-type.stderr (100%) rename libs/@local/hashql/ast/tests/ui/{lowering => lower}/type-extractor/definition/path-global-resolution.jsonc (100%) rename libs/@local/hashql/ast/tests/ui/{lowering => lower}/type-extractor/definition/path-global-resolution.stdout (100%) rename libs/@local/hashql/ast/tests/ui/{lowering => lower}/type-extractor/definition/path-local-resolution.jsonc (100%) rename libs/@local/hashql/ast/tests/ui/{lowering => lower}/type-extractor/definition/path-local-resolution.stdout (100%) rename libs/@local/hashql/ast/tests/ui/{lowering => lower}/type-extractor/definition/result.jsonc (100%) rename libs/@local/hashql/ast/tests/ui/{lowering => lower}/type-extractor/definition/result.stdout (100%) rename libs/@local/hashql/ast/tests/ui/{lowering => lower}/type-extractor/definition/translation-infer.jsonc (100%) rename libs/@local/hashql/ast/tests/ui/{lowering => lower}/type-extractor/definition/translation-infer.stdout (100%) rename libs/@local/hashql/ast/tests/ui/{lowering => lower}/type-extractor/definition/translation-intersection.jsonc (100%) rename libs/@local/hashql/ast/tests/ui/{lowering => lower}/type-extractor/definition/translation-intersection.stdout (100%) rename libs/@local/hashql/ast/tests/ui/{lowering => lower}/type-extractor/definition/translation-struct.jsonc (100%) rename libs/@local/hashql/ast/tests/ui/{lowering => lower}/type-extractor/definition/translation-struct.stdout (100%) rename libs/@local/hashql/ast/tests/ui/{lowering => lower}/type-extractor/definition/translation-tuple.jsonc (100%) rename libs/@local/hashql/ast/tests/ui/{lowering => lower}/type-extractor/definition/translation-tuple.stdout (100%) rename libs/@local/hashql/ast/tests/ui/{lowering => lower}/type-extractor/definition/translation-union.jsonc (100%) rename libs/@local/hashql/ast/tests/ui/{lowering => lower}/type-extractor/definition/translation-union.stdout (100%) rename libs/@local/hashql/ast/tests/ui/{lowering => lower}/type-extractor/definition/unused-generic-parameter.jsonc (100%) rename libs/@local/hashql/ast/tests/ui/{lowering => lower}/type-extractor/definition/unused-generic-parameter.stderr (100%) rename libs/@local/hashql/ast/tests/ui/{lowering => lower}/type-extractor/generic-type-resolution.jsonc (100%) rename libs/@local/hashql/ast/tests/ui/{lowering => lower}/type-extractor/generic-type-resolution.stdout (100%) rename libs/@local/hashql/ast/tests/ui/{lowering => lower}/type-extractor/global-type-resolution.jsonc (100%) rename libs/@local/hashql/ast/tests/ui/{lowering => lower}/type-extractor/global-type-resolution.stdout (100%) rename libs/@local/hashql/ast/tests/ui/{lowering => lower}/type-extractor/graph-pipeline-inferred-closure.jsonc (100%) rename libs/@local/hashql/ast/tests/ui/{lowering => lower}/type-extractor/graph-pipeline-inferred-closure.stdout (100%) rename libs/@local/hashql/ast/tests/ui/{lowering => lower}/type-extractor/let-binding-type.jsonc (100%) rename libs/@local/hashql/ast/tests/ui/{lowering => lower}/type-extractor/let-binding-type.stdout (100%) rename libs/@local/hashql/ast/tests/ui/{lowering => lower}/type-extractor/local-type-resolution.jsonc (100%) rename libs/@local/hashql/ast/tests/ui/{lowering => lower}/type-extractor/local-type-resolution.stdout (100%) rename libs/@local/hashql/ast/tests/ui/{lowering => lower}/type-extractor/nested-type-nodes.jsonc (100%) rename libs/@local/hashql/ast/tests/ui/{lowering => lower}/type-extractor/nested-type-nodes.stdout (100%) rename libs/@local/hashql/ast/tests/ui/{lowering => lower}/type-extractor/union-type.jsonc (100%) rename libs/@local/hashql/ast/tests/ui/{lowering => lower}/type-extractor/union-type.stdout (100%) diff --git a/libs/@local/hashql/ast/src/node/type/mod.rs b/libs/@local/hashql/ast/src/node/type/mod.rs index 65f514182e5..4a1efef2d91 100644 --- a/libs/@local/hashql/ast/src/node/type/mod.rs +++ b/libs/@local/hashql/ast/src/node/type/mod.rs @@ -80,7 +80,7 @@ pub struct TupleField<'heap> { /// (Float, Float, Float) /// (User, List) /// ``` -#[derive(Clone, Debug, PartialEq, Eq, Hash)] +#[derive(Debug, Clone, PartialEq, Eq, Hash)] pub struct TupleType<'heap> { pub id: NodeId, pub span: SpanId, @@ -110,7 +110,7 @@ pub struct TupleType<'heap> { /// String | Int | Boolean /// Error | Result /// ``` -#[derive(Clone, Debug, PartialEq, Eq, Hash)] +#[derive(Debug, Clone, PartialEq, Eq, Hash)] pub struct UnionType<'heap> { pub id: NodeId, pub span: SpanId, @@ -130,7 +130,7 @@ pub struct UnionType<'heap> { /// Named & Serializable /// Printable & Comparable & Hashable /// ``` -#[derive(Clone, Debug, PartialEq, Eq, Hash)] +#[derive(Debug, Clone, PartialEq, Eq, Hash)] pub struct IntersectionType<'heap> { pub id: NodeId, pub span: SpanId, @@ -142,7 +142,7 @@ pub struct IntersectionType<'heap> { /// /// This enum represents all possible type constructs in the HashQL language, /// from simple path references to complex composite types. -#[derive(Clone, Debug, PartialEq, Eq, Hash)] +#[derive(Debug, Clone, PartialEq, Eq, Hash)] pub enum TypeKind<'heap> { /// The infer type (`_`). /// @@ -199,7 +199,7 @@ pub enum TypeKind<'heap> { /// Represents any type expression in the language, from simple type references /// to complex composite types. Types are used in variable declarations, function /// signatures, generic constraints, and other contexts where type information is needed. -#[derive(Clone, Debug, PartialEq, Eq, Hash)] +#[derive(Debug, Clone, PartialEq, Eq, Hash)] pub struct Type<'heap> { pub id: NodeId, pub span: SpanId, diff --git a/libs/@local/hashql/ast/tests/ui/lowering/import-resolver/.spec.toml b/libs/@local/hashql/ast/tests/ui/lower/import-resolver/.spec.toml similarity index 100% rename from libs/@local/hashql/ast/tests/ui/lowering/import-resolver/.spec.toml rename to libs/@local/hashql/ast/tests/ui/lower/import-resolver/.spec.toml diff --git a/libs/@local/hashql/ast/tests/ui/lowering/import-resolver/basic-absolute-imports.jsonc b/libs/@local/hashql/ast/tests/ui/lower/import-resolver/basic-absolute-imports.jsonc similarity index 100% rename from libs/@local/hashql/ast/tests/ui/lowering/import-resolver/basic-absolute-imports.jsonc rename to libs/@local/hashql/ast/tests/ui/lower/import-resolver/basic-absolute-imports.jsonc diff --git a/libs/@local/hashql/ast/tests/ui/lowering/import-resolver/basic-absolute-imports.stdout b/libs/@local/hashql/ast/tests/ui/lower/import-resolver/basic-absolute-imports.stdout similarity index 100% rename from libs/@local/hashql/ast/tests/ui/lowering/import-resolver/basic-absolute-imports.stdout rename to libs/@local/hashql/ast/tests/ui/lower/import-resolver/basic-absolute-imports.stdout diff --git a/libs/@local/hashql/ast/tests/ui/lowering/import-resolver/basic-glob-import.jsonc b/libs/@local/hashql/ast/tests/ui/lower/import-resolver/basic-glob-import.jsonc similarity index 100% rename from libs/@local/hashql/ast/tests/ui/lowering/import-resolver/basic-glob-import.jsonc rename to libs/@local/hashql/ast/tests/ui/lower/import-resolver/basic-glob-import.jsonc diff --git a/libs/@local/hashql/ast/tests/ui/lowering/import-resolver/basic-glob-import.stdout b/libs/@local/hashql/ast/tests/ui/lower/import-resolver/basic-glob-import.stdout similarity index 100% rename from libs/@local/hashql/ast/tests/ui/lowering/import-resolver/basic-glob-import.stdout rename to libs/@local/hashql/ast/tests/ui/lower/import-resolver/basic-glob-import.stdout diff --git a/libs/@local/hashql/ast/tests/ui/lowering/import-resolver/basic-relative-import.jsonc b/libs/@local/hashql/ast/tests/ui/lower/import-resolver/basic-relative-import.jsonc similarity index 100% rename from libs/@local/hashql/ast/tests/ui/lowering/import-resolver/basic-relative-import.jsonc rename to libs/@local/hashql/ast/tests/ui/lower/import-resolver/basic-relative-import.jsonc diff --git a/libs/@local/hashql/ast/tests/ui/lowering/import-resolver/basic-relative-import.stdout b/libs/@local/hashql/ast/tests/ui/lower/import-resolver/basic-relative-import.stdout similarity index 100% rename from libs/@local/hashql/ast/tests/ui/lowering/import-resolver/basic-relative-import.stdout rename to libs/@local/hashql/ast/tests/ui/lower/import-resolver/basic-relative-import.stdout diff --git a/libs/@local/hashql/ast/tests/ui/lowering/import-resolver/basic-renamed-import.jsonc b/libs/@local/hashql/ast/tests/ui/lower/import-resolver/basic-renamed-import.jsonc similarity index 100% rename from libs/@local/hashql/ast/tests/ui/lowering/import-resolver/basic-renamed-import.jsonc rename to libs/@local/hashql/ast/tests/ui/lower/import-resolver/basic-renamed-import.jsonc diff --git a/libs/@local/hashql/ast/tests/ui/lowering/import-resolver/basic-renamed-import.stdout b/libs/@local/hashql/ast/tests/ui/lower/import-resolver/basic-renamed-import.stdout similarity index 100% rename from libs/@local/hashql/ast/tests/ui/lowering/import-resolver/basic-renamed-import.stdout rename to libs/@local/hashql/ast/tests/ui/lower/import-resolver/basic-renamed-import.stdout diff --git a/libs/@local/hashql/ast/tests/ui/lowering/import-resolver/closure-complex-return-type.jsonc b/libs/@local/hashql/ast/tests/ui/lower/import-resolver/closure-complex-return-type.jsonc similarity index 100% rename from libs/@local/hashql/ast/tests/ui/lowering/import-resolver/closure-complex-return-type.jsonc rename to libs/@local/hashql/ast/tests/ui/lower/import-resolver/closure-complex-return-type.jsonc diff --git a/libs/@local/hashql/ast/tests/ui/lowering/import-resolver/closure-complex-return-type.stdout b/libs/@local/hashql/ast/tests/ui/lower/import-resolver/closure-complex-return-type.stdout similarity index 100% rename from libs/@local/hashql/ast/tests/ui/lowering/import-resolver/closure-complex-return-type.stdout rename to libs/@local/hashql/ast/tests/ui/lower/import-resolver/closure-complex-return-type.stdout diff --git a/libs/@local/hashql/ast/tests/ui/lowering/import-resolver/closure-generic-not-resolved.jsonc b/libs/@local/hashql/ast/tests/ui/lower/import-resolver/closure-generic-not-resolved.jsonc similarity index 100% rename from libs/@local/hashql/ast/tests/ui/lowering/import-resolver/closure-generic-not-resolved.jsonc rename to libs/@local/hashql/ast/tests/ui/lower/import-resolver/closure-generic-not-resolved.jsonc diff --git a/libs/@local/hashql/ast/tests/ui/lowering/import-resolver/closure-generic-not-resolved.stdout b/libs/@local/hashql/ast/tests/ui/lower/import-resolver/closure-generic-not-resolved.stdout similarity index 100% rename from libs/@local/hashql/ast/tests/ui/lowering/import-resolver/closure-generic-not-resolved.stdout rename to libs/@local/hashql/ast/tests/ui/lower/import-resolver/closure-generic-not-resolved.stdout diff --git a/libs/@local/hashql/ast/tests/ui/lowering/import-resolver/closure-mixed-resolution.jsonc b/libs/@local/hashql/ast/tests/ui/lower/import-resolver/closure-mixed-resolution.jsonc similarity index 100% rename from libs/@local/hashql/ast/tests/ui/lowering/import-resolver/closure-mixed-resolution.jsonc rename to libs/@local/hashql/ast/tests/ui/lower/import-resolver/closure-mixed-resolution.jsonc diff --git a/libs/@local/hashql/ast/tests/ui/lowering/import-resolver/closure-mixed-resolution.stdout b/libs/@local/hashql/ast/tests/ui/lower/import-resolver/closure-mixed-resolution.stdout similarity index 100% rename from libs/@local/hashql/ast/tests/ui/lowering/import-resolver/closure-mixed-resolution.stdout rename to libs/@local/hashql/ast/tests/ui/lower/import-resolver/closure-mixed-resolution.stdout diff --git a/libs/@local/hashql/ast/tests/ui/lowering/import-resolver/closure-param-not-resolved.jsonc b/libs/@local/hashql/ast/tests/ui/lower/import-resolver/closure-param-not-resolved.jsonc similarity index 100% rename from libs/@local/hashql/ast/tests/ui/lowering/import-resolver/closure-param-not-resolved.jsonc rename to libs/@local/hashql/ast/tests/ui/lower/import-resolver/closure-param-not-resolved.jsonc diff --git a/libs/@local/hashql/ast/tests/ui/lowering/import-resolver/closure-param-not-resolved.stdout b/libs/@local/hashql/ast/tests/ui/lower/import-resolver/closure-param-not-resolved.stdout similarity index 100% rename from libs/@local/hashql/ast/tests/ui/lowering/import-resolver/closure-param-not-resolved.stdout rename to libs/@local/hashql/ast/tests/ui/lower/import-resolver/closure-param-not-resolved.stdout diff --git a/libs/@local/hashql/ast/tests/ui/lowering/import-resolver/complex-nested-type-parameters.jsonc b/libs/@local/hashql/ast/tests/ui/lower/import-resolver/complex-nested-type-parameters.jsonc similarity index 100% rename from libs/@local/hashql/ast/tests/ui/lowering/import-resolver/complex-nested-type-parameters.jsonc rename to libs/@local/hashql/ast/tests/ui/lower/import-resolver/complex-nested-type-parameters.jsonc diff --git a/libs/@local/hashql/ast/tests/ui/lowering/import-resolver/complex-nested-type-parameters.stdout b/libs/@local/hashql/ast/tests/ui/lower/import-resolver/complex-nested-type-parameters.stdout similarity index 100% rename from libs/@local/hashql/ast/tests/ui/lowering/import-resolver/complex-nested-type-parameters.stdout rename to libs/@local/hashql/ast/tests/ui/lower/import-resolver/complex-nested-type-parameters.stdout diff --git a/libs/@local/hashql/ast/tests/ui/lowering/import-resolver/complex-path-resolution.jsonc b/libs/@local/hashql/ast/tests/ui/lower/import-resolver/complex-path-resolution.jsonc similarity index 100% rename from libs/@local/hashql/ast/tests/ui/lowering/import-resolver/complex-path-resolution.jsonc rename to libs/@local/hashql/ast/tests/ui/lower/import-resolver/complex-path-resolution.jsonc diff --git a/libs/@local/hashql/ast/tests/ui/lowering/import-resolver/complex-path-resolution.stdout b/libs/@local/hashql/ast/tests/ui/lower/import-resolver/complex-path-resolution.stdout similarity index 100% rename from libs/@local/hashql/ast/tests/ui/lowering/import-resolver/complex-path-resolution.stdout rename to libs/@local/hashql/ast/tests/ui/lower/import-resolver/complex-path-resolution.stdout diff --git a/libs/@local/hashql/ast/tests/ui/lowering/import-resolver/continue/.spec.toml b/libs/@local/hashql/ast/tests/ui/lower/import-resolver/continue/.spec.toml similarity index 100% rename from libs/@local/hashql/ast/tests/ui/lowering/import-resolver/continue/.spec.toml rename to libs/@local/hashql/ast/tests/ui/lower/import-resolver/continue/.spec.toml diff --git a/libs/@local/hashql/ast/tests/ui/lowering/import-resolver/continue/unresolved-nested.jsonc b/libs/@local/hashql/ast/tests/ui/lower/import-resolver/continue/unresolved-nested.jsonc similarity index 100% rename from libs/@local/hashql/ast/tests/ui/lowering/import-resolver/continue/unresolved-nested.jsonc rename to libs/@local/hashql/ast/tests/ui/lower/import-resolver/continue/unresolved-nested.jsonc diff --git a/libs/@local/hashql/ast/tests/ui/lowering/import-resolver/continue/unresolved-nested.stderr b/libs/@local/hashql/ast/tests/ui/lower/import-resolver/continue/unresolved-nested.stderr similarity index 100% rename from libs/@local/hashql/ast/tests/ui/lowering/import-resolver/continue/unresolved-nested.stderr rename to libs/@local/hashql/ast/tests/ui/lower/import-resolver/continue/unresolved-nested.stderr diff --git a/libs/@local/hashql/ast/tests/ui/lowering/import-resolver/continue/unresolved-nested.stdout b/libs/@local/hashql/ast/tests/ui/lower/import-resolver/continue/unresolved-nested.stdout similarity index 100% rename from libs/@local/hashql/ast/tests/ui/lowering/import-resolver/continue/unresolved-nested.stdout rename to libs/@local/hashql/ast/tests/ui/lower/import-resolver/continue/unresolved-nested.stdout diff --git a/libs/@local/hashql/ast/tests/ui/lowering/import-resolver/continue/unresolved-type.jsonc b/libs/@local/hashql/ast/tests/ui/lower/import-resolver/continue/unresolved-type.jsonc similarity index 100% rename from libs/@local/hashql/ast/tests/ui/lowering/import-resolver/continue/unresolved-type.jsonc rename to libs/@local/hashql/ast/tests/ui/lower/import-resolver/continue/unresolved-type.jsonc diff --git a/libs/@local/hashql/ast/tests/ui/lowering/import-resolver/continue/unresolved-type.stderr b/libs/@local/hashql/ast/tests/ui/lower/import-resolver/continue/unresolved-type.stderr similarity index 100% rename from libs/@local/hashql/ast/tests/ui/lowering/import-resolver/continue/unresolved-type.stderr rename to libs/@local/hashql/ast/tests/ui/lower/import-resolver/continue/unresolved-type.stderr diff --git a/libs/@local/hashql/ast/tests/ui/lowering/import-resolver/continue/unresolved-type.stdout b/libs/@local/hashql/ast/tests/ui/lower/import-resolver/continue/unresolved-type.stdout similarity index 100% rename from libs/@local/hashql/ast/tests/ui/lowering/import-resolver/continue/unresolved-type.stdout rename to libs/@local/hashql/ast/tests/ui/lower/import-resolver/continue/unresolved-type.stdout diff --git a/libs/@local/hashql/ast/tests/ui/lowering/import-resolver/continue/unresolved-value.jsonc b/libs/@local/hashql/ast/tests/ui/lower/import-resolver/continue/unresolved-value.jsonc similarity index 100% rename from libs/@local/hashql/ast/tests/ui/lowering/import-resolver/continue/unresolved-value.jsonc rename to libs/@local/hashql/ast/tests/ui/lower/import-resolver/continue/unresolved-value.jsonc diff --git a/libs/@local/hashql/ast/tests/ui/lowering/import-resolver/continue/unresolved-value.stderr b/libs/@local/hashql/ast/tests/ui/lower/import-resolver/continue/unresolved-value.stderr similarity index 100% rename from libs/@local/hashql/ast/tests/ui/lowering/import-resolver/continue/unresolved-value.stderr rename to libs/@local/hashql/ast/tests/ui/lower/import-resolver/continue/unresolved-value.stderr diff --git a/libs/@local/hashql/ast/tests/ui/lowering/import-resolver/continue/unresolved-value.stdout b/libs/@local/hashql/ast/tests/ui/lower/import-resolver/continue/unresolved-value.stdout similarity index 100% rename from libs/@local/hashql/ast/tests/ui/lowering/import-resolver/continue/unresolved-value.stdout rename to libs/@local/hashql/ast/tests/ui/lower/import-resolver/continue/unresolved-value.stdout diff --git a/libs/@local/hashql/ast/tests/ui/lowering/import-resolver/continue/use-not-found.jsonc b/libs/@local/hashql/ast/tests/ui/lower/import-resolver/continue/use-not-found.jsonc similarity index 100% rename from libs/@local/hashql/ast/tests/ui/lowering/import-resolver/continue/use-not-found.jsonc rename to libs/@local/hashql/ast/tests/ui/lower/import-resolver/continue/use-not-found.jsonc diff --git a/libs/@local/hashql/ast/tests/ui/lowering/import-resolver/continue/use-not-found.stderr b/libs/@local/hashql/ast/tests/ui/lower/import-resolver/continue/use-not-found.stderr similarity index 100% rename from libs/@local/hashql/ast/tests/ui/lowering/import-resolver/continue/use-not-found.stderr rename to libs/@local/hashql/ast/tests/ui/lower/import-resolver/continue/use-not-found.stderr diff --git a/libs/@local/hashql/ast/tests/ui/lowering/import-resolver/continue/use-not-found.stdout b/libs/@local/hashql/ast/tests/ui/lower/import-resolver/continue/use-not-found.stdout similarity index 100% rename from libs/@local/hashql/ast/tests/ui/lowering/import-resolver/continue/use-not-found.stdout rename to libs/@local/hashql/ast/tests/ui/lower/import-resolver/continue/use-not-found.stdout diff --git a/libs/@local/hashql/ast/tests/ui/lowering/import-resolver/generic-argument-absolute-path.jsonc b/libs/@local/hashql/ast/tests/ui/lower/import-resolver/generic-argument-absolute-path.jsonc similarity index 100% rename from libs/@local/hashql/ast/tests/ui/lowering/import-resolver/generic-argument-absolute-path.jsonc rename to libs/@local/hashql/ast/tests/ui/lower/import-resolver/generic-argument-absolute-path.jsonc diff --git a/libs/@local/hashql/ast/tests/ui/lowering/import-resolver/generic-argument-absolute-path.stderr b/libs/@local/hashql/ast/tests/ui/lower/import-resolver/generic-argument-absolute-path.stderr similarity index 100% rename from libs/@local/hashql/ast/tests/ui/lowering/import-resolver/generic-argument-absolute-path.stderr rename to libs/@local/hashql/ast/tests/ui/lower/import-resolver/generic-argument-absolute-path.stderr diff --git a/libs/@local/hashql/ast/tests/ui/lowering/import-resolver/generic-argument-use-path.jsonc b/libs/@local/hashql/ast/tests/ui/lower/import-resolver/generic-argument-use-path.jsonc similarity index 100% rename from libs/@local/hashql/ast/tests/ui/lowering/import-resolver/generic-argument-use-path.jsonc rename to libs/@local/hashql/ast/tests/ui/lower/import-resolver/generic-argument-use-path.jsonc diff --git a/libs/@local/hashql/ast/tests/ui/lowering/import-resolver/generic-argument-use-path.stderr b/libs/@local/hashql/ast/tests/ui/lower/import-resolver/generic-argument-use-path.stderr similarity index 100% rename from libs/@local/hashql/ast/tests/ui/lowering/import-resolver/generic-argument-use-path.stderr rename to libs/@local/hashql/ast/tests/ui/lower/import-resolver/generic-argument-use-path.stderr diff --git a/libs/@local/hashql/ast/tests/ui/lowering/import-resolver/generic-arguments-in-final-segment.jsonc b/libs/@local/hashql/ast/tests/ui/lower/import-resolver/generic-arguments-in-final-segment.jsonc similarity index 100% rename from libs/@local/hashql/ast/tests/ui/lowering/import-resolver/generic-arguments-in-final-segment.jsonc rename to libs/@local/hashql/ast/tests/ui/lower/import-resolver/generic-arguments-in-final-segment.jsonc diff --git a/libs/@local/hashql/ast/tests/ui/lowering/import-resolver/generic-arguments-in-final-segment.stdout b/libs/@local/hashql/ast/tests/ui/lower/import-resolver/generic-arguments-in-final-segment.stdout similarity index 100% rename from libs/@local/hashql/ast/tests/ui/lowering/import-resolver/generic-arguments-in-final-segment.stdout rename to libs/@local/hashql/ast/tests/ui/lower/import-resolver/generic-arguments-in-final-segment.stdout diff --git a/libs/@local/hashql/ast/tests/ui/lowering/import-resolver/generic-constraints-type.jsonc b/libs/@local/hashql/ast/tests/ui/lower/import-resolver/generic-constraints-type.jsonc similarity index 100% rename from libs/@local/hashql/ast/tests/ui/lowering/import-resolver/generic-constraints-type.jsonc rename to libs/@local/hashql/ast/tests/ui/lower/import-resolver/generic-constraints-type.jsonc diff --git a/libs/@local/hashql/ast/tests/ui/lowering/import-resolver/generic-constraints-type.stdout b/libs/@local/hashql/ast/tests/ui/lower/import-resolver/generic-constraints-type.stdout similarity index 100% rename from libs/@local/hashql/ast/tests/ui/lowering/import-resolver/generic-constraints-type.stdout rename to libs/@local/hashql/ast/tests/ui/lower/import-resolver/generic-constraints-type.stdout diff --git a/libs/@local/hashql/ast/tests/ui/lowering/import-resolver/generic-constraints.newtype.jsonc b/libs/@local/hashql/ast/tests/ui/lower/import-resolver/generic-constraints.newtype.jsonc similarity index 100% rename from libs/@local/hashql/ast/tests/ui/lowering/import-resolver/generic-constraints.newtype.jsonc rename to libs/@local/hashql/ast/tests/ui/lower/import-resolver/generic-constraints.newtype.jsonc diff --git a/libs/@local/hashql/ast/tests/ui/lowering/import-resolver/generic-constraints.newtype.stdout b/libs/@local/hashql/ast/tests/ui/lower/import-resolver/generic-constraints.newtype.stdout similarity index 100% rename from libs/@local/hashql/ast/tests/ui/lowering/import-resolver/generic-constraints.newtype.stdout rename to libs/@local/hashql/ast/tests/ui/lower/import-resolver/generic-constraints.newtype.stdout diff --git a/libs/@local/hashql/ast/tests/ui/lowering/import-resolver/glob-not-found.jsonc b/libs/@local/hashql/ast/tests/ui/lower/import-resolver/glob-not-found.jsonc similarity index 100% rename from libs/@local/hashql/ast/tests/ui/lowering/import-resolver/glob-not-found.jsonc rename to libs/@local/hashql/ast/tests/ui/lower/import-resolver/glob-not-found.jsonc diff --git a/libs/@local/hashql/ast/tests/ui/lowering/import-resolver/glob-not-found.stderr b/libs/@local/hashql/ast/tests/ui/lower/import-resolver/glob-not-found.stderr similarity index 100% rename from libs/@local/hashql/ast/tests/ui/lowering/import-resolver/glob-not-found.stderr rename to libs/@local/hashql/ast/tests/ui/lower/import-resolver/glob-not-found.stderr diff --git a/libs/@local/hashql/ast/tests/ui/lowering/import-resolver/item-not-found.jsonc b/libs/@local/hashql/ast/tests/ui/lower/import-resolver/item-not-found.jsonc similarity index 100% rename from libs/@local/hashql/ast/tests/ui/lowering/import-resolver/item-not-found.jsonc rename to libs/@local/hashql/ast/tests/ui/lower/import-resolver/item-not-found.jsonc diff --git a/libs/@local/hashql/ast/tests/ui/lowering/import-resolver/item-not-found.stderr b/libs/@local/hashql/ast/tests/ui/lower/import-resolver/item-not-found.stderr similarity index 100% rename from libs/@local/hashql/ast/tests/ui/lowering/import-resolver/item-not-found.stderr rename to libs/@local/hashql/ast/tests/ui/lower/import-resolver/item-not-found.stderr diff --git a/libs/@local/hashql/ast/tests/ui/lowering/import-resolver/local-binding-recursive-type.jsonc b/libs/@local/hashql/ast/tests/ui/lower/import-resolver/local-binding-recursive-type.jsonc similarity index 100% rename from libs/@local/hashql/ast/tests/ui/lowering/import-resolver/local-binding-recursive-type.jsonc rename to libs/@local/hashql/ast/tests/ui/lower/import-resolver/local-binding-recursive-type.jsonc diff --git a/libs/@local/hashql/ast/tests/ui/lowering/import-resolver/local-binding-recursive-type.stdout b/libs/@local/hashql/ast/tests/ui/lower/import-resolver/local-binding-recursive-type.stdout similarity index 100% rename from libs/@local/hashql/ast/tests/ui/lowering/import-resolver/local-binding-recursive-type.stdout rename to libs/@local/hashql/ast/tests/ui/lower/import-resolver/local-binding-recursive-type.stdout diff --git a/libs/@local/hashql/ast/tests/ui/lowering/import-resolver/local-binding-recursive-value.jsonc b/libs/@local/hashql/ast/tests/ui/lower/import-resolver/local-binding-recursive-value.jsonc similarity index 100% rename from libs/@local/hashql/ast/tests/ui/lowering/import-resolver/local-binding-recursive-value.jsonc rename to libs/@local/hashql/ast/tests/ui/lower/import-resolver/local-binding-recursive-value.jsonc diff --git a/libs/@local/hashql/ast/tests/ui/lowering/import-resolver/local-binding-recursive-value.stdout b/libs/@local/hashql/ast/tests/ui/lower/import-resolver/local-binding-recursive-value.stdout similarity index 100% rename from libs/@local/hashql/ast/tests/ui/lowering/import-resolver/local-binding-recursive-value.stdout rename to libs/@local/hashql/ast/tests/ui/lower/import-resolver/local-binding-recursive-value.stdout diff --git a/libs/@local/hashql/ast/tests/ui/lowering/import-resolver/local-binding-type.jsonc b/libs/@local/hashql/ast/tests/ui/lower/import-resolver/local-binding-type.jsonc similarity index 100% rename from libs/@local/hashql/ast/tests/ui/lowering/import-resolver/local-binding-type.jsonc rename to libs/@local/hashql/ast/tests/ui/lower/import-resolver/local-binding-type.jsonc diff --git a/libs/@local/hashql/ast/tests/ui/lowering/import-resolver/local-binding-type.stdout b/libs/@local/hashql/ast/tests/ui/lower/import-resolver/local-binding-type.stdout similarity index 100% rename from libs/@local/hashql/ast/tests/ui/lowering/import-resolver/local-binding-type.stdout rename to libs/@local/hashql/ast/tests/ui/lower/import-resolver/local-binding-type.stdout diff --git a/libs/@local/hashql/ast/tests/ui/lowering/import-resolver/local-binding-value.jsonc b/libs/@local/hashql/ast/tests/ui/lower/import-resolver/local-binding-value.jsonc similarity index 100% rename from libs/@local/hashql/ast/tests/ui/lowering/import-resolver/local-binding-value.jsonc rename to libs/@local/hashql/ast/tests/ui/lower/import-resolver/local-binding-value.jsonc diff --git a/libs/@local/hashql/ast/tests/ui/lowering/import-resolver/local-binding-value.stdout b/libs/@local/hashql/ast/tests/ui/lower/import-resolver/local-binding-value.stdout similarity index 100% rename from libs/@local/hashql/ast/tests/ui/lowering/import-resolver/local-binding-value.stdout rename to libs/@local/hashql/ast/tests/ui/lower/import-resolver/local-binding-value.stdout diff --git a/libs/@local/hashql/ast/tests/ui/lowering/import-resolver/module-not-found.jsonc b/libs/@local/hashql/ast/tests/ui/lower/import-resolver/module-not-found.jsonc similarity index 100% rename from libs/@local/hashql/ast/tests/ui/lowering/import-resolver/module-not-found.jsonc rename to libs/@local/hashql/ast/tests/ui/lower/import-resolver/module-not-found.jsonc diff --git a/libs/@local/hashql/ast/tests/ui/lowering/import-resolver/module-not-found.stderr b/libs/@local/hashql/ast/tests/ui/lower/import-resolver/module-not-found.stderr similarity index 100% rename from libs/@local/hashql/ast/tests/ui/lowering/import-resolver/module-not-found.stderr rename to libs/@local/hashql/ast/tests/ui/lower/import-resolver/module-not-found.stderr diff --git a/libs/@local/hashql/ast/tests/ui/lowering/import-resolver/multiple-named-imports.jsonc b/libs/@local/hashql/ast/tests/ui/lower/import-resolver/multiple-named-imports.jsonc similarity index 100% rename from libs/@local/hashql/ast/tests/ui/lowering/import-resolver/multiple-named-imports.jsonc rename to libs/@local/hashql/ast/tests/ui/lower/import-resolver/multiple-named-imports.jsonc diff --git a/libs/@local/hashql/ast/tests/ui/lowering/import-resolver/multiple-named-imports.stdout b/libs/@local/hashql/ast/tests/ui/lower/import-resolver/multiple-named-imports.stdout similarity index 100% rename from libs/@local/hashql/ast/tests/ui/lowering/import-resolver/multiple-named-imports.stdout rename to libs/@local/hashql/ast/tests/ui/lower/import-resolver/multiple-named-imports.stdout diff --git a/libs/@local/hashql/ast/tests/ui/lowering/import-resolver/nested-resolution.jsonc b/libs/@local/hashql/ast/tests/ui/lower/import-resolver/nested-resolution.jsonc similarity index 100% rename from libs/@local/hashql/ast/tests/ui/lowering/import-resolver/nested-resolution.jsonc rename to libs/@local/hashql/ast/tests/ui/lower/import-resolver/nested-resolution.jsonc diff --git a/libs/@local/hashql/ast/tests/ui/lowering/import-resolver/nested-resolution.stdout b/libs/@local/hashql/ast/tests/ui/lower/import-resolver/nested-resolution.stdout similarity index 100% rename from libs/@local/hashql/ast/tests/ui/lowering/import-resolver/nested-resolution.stdout rename to libs/@local/hashql/ast/tests/ui/lower/import-resolver/nested-resolution.stdout diff --git a/libs/@local/hashql/ast/tests/ui/lowering/import-resolver/newtype-scope.jsonc b/libs/@local/hashql/ast/tests/ui/lower/import-resolver/newtype-scope.jsonc similarity index 100% rename from libs/@local/hashql/ast/tests/ui/lowering/import-resolver/newtype-scope.jsonc rename to libs/@local/hashql/ast/tests/ui/lower/import-resolver/newtype-scope.jsonc diff --git a/libs/@local/hashql/ast/tests/ui/lowering/import-resolver/newtype-scope.stdout b/libs/@local/hashql/ast/tests/ui/lower/import-resolver/newtype-scope.stdout similarity index 100% rename from libs/@local/hashql/ast/tests/ui/lowering/import-resolver/newtype-scope.stdout rename to libs/@local/hashql/ast/tests/ui/lower/import-resolver/newtype-scope.stdout diff --git a/libs/@local/hashql/ast/tests/ui/lowering/import-resolver/path-normalization.jsonc b/libs/@local/hashql/ast/tests/ui/lower/import-resolver/path-normalization.jsonc similarity index 100% rename from libs/@local/hashql/ast/tests/ui/lowering/import-resolver/path-normalization.jsonc rename to libs/@local/hashql/ast/tests/ui/lower/import-resolver/path-normalization.jsonc diff --git a/libs/@local/hashql/ast/tests/ui/lowering/import-resolver/path-normalization.stdout b/libs/@local/hashql/ast/tests/ui/lower/import-resolver/path-normalization.stdout similarity index 100% rename from libs/@local/hashql/ast/tests/ui/lowering/import-resolver/path-normalization.stdout rename to libs/@local/hashql/ast/tests/ui/lower/import-resolver/path-normalization.stdout diff --git a/libs/@local/hashql/ast/tests/ui/lowering/import-resolver/prelude.jsonc b/libs/@local/hashql/ast/tests/ui/lower/import-resolver/prelude.jsonc similarity index 100% rename from libs/@local/hashql/ast/tests/ui/lowering/import-resolver/prelude.jsonc rename to libs/@local/hashql/ast/tests/ui/lower/import-resolver/prelude.jsonc diff --git a/libs/@local/hashql/ast/tests/ui/lowering/import-resolver/prelude.stdout b/libs/@local/hashql/ast/tests/ui/lower/import-resolver/prelude.stdout similarity index 100% rename from libs/@local/hashql/ast/tests/ui/lowering/import-resolver/prelude.stdout rename to libs/@local/hashql/ast/tests/ui/lower/import-resolver/prelude.stdout diff --git a/libs/@local/hashql/ast/tests/ui/lowering/import-resolver/regression-generic-arguments-identifier.jsonc b/libs/@local/hashql/ast/tests/ui/lower/import-resolver/regression-generic-arguments-identifier.jsonc similarity index 100% rename from libs/@local/hashql/ast/tests/ui/lowering/import-resolver/regression-generic-arguments-identifier.jsonc rename to libs/@local/hashql/ast/tests/ui/lower/import-resolver/regression-generic-arguments-identifier.jsonc diff --git a/libs/@local/hashql/ast/tests/ui/lowering/import-resolver/regression-generic-arguments-identifier.stdout b/libs/@local/hashql/ast/tests/ui/lower/import-resolver/regression-generic-arguments-identifier.stdout similarity index 100% rename from libs/@local/hashql/ast/tests/ui/lowering/import-resolver/regression-generic-arguments-identifier.stdout rename to libs/@local/hashql/ast/tests/ui/lower/import-resolver/regression-generic-arguments-identifier.stdout diff --git a/libs/@local/hashql/ast/tests/ui/lowering/import-resolver/rollback.jsonc b/libs/@local/hashql/ast/tests/ui/lower/import-resolver/rollback.jsonc similarity index 100% rename from libs/@local/hashql/ast/tests/ui/lowering/import-resolver/rollback.jsonc rename to libs/@local/hashql/ast/tests/ui/lower/import-resolver/rollback.jsonc diff --git a/libs/@local/hashql/ast/tests/ui/lowering/import-resolver/rollback.stderr b/libs/@local/hashql/ast/tests/ui/lower/import-resolver/rollback.stderr similarity index 100% rename from libs/@local/hashql/ast/tests/ui/lowering/import-resolver/rollback.stderr rename to libs/@local/hashql/ast/tests/ui/lower/import-resolver/rollback.stderr diff --git a/libs/@local/hashql/ast/tests/ui/lowering/import-resolver/shadowed-imports.jsonc b/libs/@local/hashql/ast/tests/ui/lower/import-resolver/shadowed-imports.jsonc similarity index 100% rename from libs/@local/hashql/ast/tests/ui/lowering/import-resolver/shadowed-imports.jsonc rename to libs/@local/hashql/ast/tests/ui/lower/import-resolver/shadowed-imports.jsonc diff --git a/libs/@local/hashql/ast/tests/ui/lowering/import-resolver/shadowed-imports.stdout b/libs/@local/hashql/ast/tests/ui/lower/import-resolver/shadowed-imports.stdout similarity index 100% rename from libs/@local/hashql/ast/tests/ui/lowering/import-resolver/shadowed-imports.stdout rename to libs/@local/hashql/ast/tests/ui/lower/import-resolver/shadowed-imports.stdout diff --git a/libs/@local/hashql/ast/tests/ui/lowering/import-resolver/shadowed-prelude.jsonc b/libs/@local/hashql/ast/tests/ui/lower/import-resolver/shadowed-prelude.jsonc similarity index 100% rename from libs/@local/hashql/ast/tests/ui/lowering/import-resolver/shadowed-prelude.jsonc rename to libs/@local/hashql/ast/tests/ui/lower/import-resolver/shadowed-prelude.jsonc diff --git a/libs/@local/hashql/ast/tests/ui/lowering/import-resolver/shadowed-prelude.stdout b/libs/@local/hashql/ast/tests/ui/lower/import-resolver/shadowed-prelude.stdout similarity index 100% rename from libs/@local/hashql/ast/tests/ui/lowering/import-resolver/shadowed-prelude.stdout rename to libs/@local/hashql/ast/tests/ui/lower/import-resolver/shadowed-prelude.stdout diff --git a/libs/@local/hashql/ast/tests/ui/lowering/import-resolver/substitution.jsonc b/libs/@local/hashql/ast/tests/ui/lower/import-resolver/substitution.jsonc similarity index 100% rename from libs/@local/hashql/ast/tests/ui/lowering/import-resolver/substitution.jsonc rename to libs/@local/hashql/ast/tests/ui/lower/import-resolver/substitution.jsonc diff --git a/libs/@local/hashql/ast/tests/ui/lowering/import-resolver/substitution.stdout b/libs/@local/hashql/ast/tests/ui/lower/import-resolver/substitution.stdout similarity index 100% rename from libs/@local/hashql/ast/tests/ui/lowering/import-resolver/substitution.stdout rename to libs/@local/hashql/ast/tests/ui/lower/import-resolver/substitution.stdout diff --git a/libs/@local/hashql/ast/tests/ui/lowering/import-resolver/universe-ambiguity-resolution.jsonc b/libs/@local/hashql/ast/tests/ui/lower/import-resolver/universe-ambiguity-resolution.jsonc similarity index 100% rename from libs/@local/hashql/ast/tests/ui/lowering/import-resolver/universe-ambiguity-resolution.jsonc rename to libs/@local/hashql/ast/tests/ui/lower/import-resolver/universe-ambiguity-resolution.jsonc diff --git a/libs/@local/hashql/ast/tests/ui/lowering/import-resolver/universe-ambiguity-resolution.stdout b/libs/@local/hashql/ast/tests/ui/lower/import-resolver/universe-ambiguity-resolution.stdout similarity index 100% rename from libs/@local/hashql/ast/tests/ui/lowering/import-resolver/universe-ambiguity-resolution.stdout rename to libs/@local/hashql/ast/tests/ui/lower/import-resolver/universe-ambiguity-resolution.stdout diff --git a/libs/@local/hashql/ast/tests/ui/lowering/import-resolver/unresolver-variable.jsonc b/libs/@local/hashql/ast/tests/ui/lower/import-resolver/unresolver-variable.jsonc similarity index 100% rename from libs/@local/hashql/ast/tests/ui/lowering/import-resolver/unresolver-variable.jsonc rename to libs/@local/hashql/ast/tests/ui/lower/import-resolver/unresolver-variable.jsonc diff --git a/libs/@local/hashql/ast/tests/ui/lowering/import-resolver/unresolver-variable.stderr b/libs/@local/hashql/ast/tests/ui/lower/import-resolver/unresolver-variable.stderr similarity index 100% rename from libs/@local/hashql/ast/tests/ui/lowering/import-resolver/unresolver-variable.stderr rename to libs/@local/hashql/ast/tests/ui/lower/import-resolver/unresolver-variable.stderr diff --git a/libs/@local/hashql/ast/tests/ui/lowering/import-resolver/use-shadowing-let.jsonc b/libs/@local/hashql/ast/tests/ui/lower/import-resolver/use-shadowing-let.jsonc similarity index 100% rename from libs/@local/hashql/ast/tests/ui/lowering/import-resolver/use-shadowing-let.jsonc rename to libs/@local/hashql/ast/tests/ui/lower/import-resolver/use-shadowing-let.jsonc diff --git a/libs/@local/hashql/ast/tests/ui/lowering/import-resolver/use-shadowing-let.stdout b/libs/@local/hashql/ast/tests/ui/lower/import-resolver/use-shadowing-let.stdout similarity index 100% rename from libs/@local/hashql/ast/tests/ui/lowering/import-resolver/use-shadowing-let.stdout rename to libs/@local/hashql/ast/tests/ui/lower/import-resolver/use-shadowing-let.stdout diff --git a/libs/@local/hashql/ast/tests/ui/lowering/import-resolver/use-shadowing-use.jsonc b/libs/@local/hashql/ast/tests/ui/lower/import-resolver/use-shadowing-use.jsonc similarity index 100% rename from libs/@local/hashql/ast/tests/ui/lowering/import-resolver/use-shadowing-use.jsonc rename to libs/@local/hashql/ast/tests/ui/lower/import-resolver/use-shadowing-use.jsonc diff --git a/libs/@local/hashql/ast/tests/ui/lowering/import-resolver/use-shadowing-use.stdout b/libs/@local/hashql/ast/tests/ui/lower/import-resolver/use-shadowing-use.stdout similarity index 100% rename from libs/@local/hashql/ast/tests/ui/lowering/import-resolver/use-shadowing-use.stdout rename to libs/@local/hashql/ast/tests/ui/lower/import-resolver/use-shadowing-use.stdout diff --git a/libs/@local/hashql/ast/tests/ui/lowering/name-mangler/.spec.toml b/libs/@local/hashql/ast/tests/ui/lower/name-mangler/.spec.toml similarity index 100% rename from libs/@local/hashql/ast/tests/ui/lowering/name-mangler/.spec.toml rename to libs/@local/hashql/ast/tests/ui/lower/name-mangler/.spec.toml diff --git a/libs/@local/hashql/ast/tests/ui/lowering/name-mangler/absolute-path.jsonc b/libs/@local/hashql/ast/tests/ui/lower/name-mangler/absolute-path.jsonc similarity index 100% rename from libs/@local/hashql/ast/tests/ui/lowering/name-mangler/absolute-path.jsonc rename to libs/@local/hashql/ast/tests/ui/lower/name-mangler/absolute-path.jsonc diff --git a/libs/@local/hashql/ast/tests/ui/lowering/name-mangler/absolute-path.stdout b/libs/@local/hashql/ast/tests/ui/lower/name-mangler/absolute-path.stdout similarity index 100% rename from libs/@local/hashql/ast/tests/ui/lowering/name-mangler/absolute-path.stdout rename to libs/@local/hashql/ast/tests/ui/lower/name-mangler/absolute-path.stdout diff --git a/libs/@local/hashql/ast/tests/ui/lowering/name-mangler/diverging.jsonc b/libs/@local/hashql/ast/tests/ui/lower/name-mangler/diverging.jsonc similarity index 100% rename from libs/@local/hashql/ast/tests/ui/lowering/name-mangler/diverging.jsonc rename to libs/@local/hashql/ast/tests/ui/lower/name-mangler/diverging.jsonc diff --git a/libs/@local/hashql/ast/tests/ui/lowering/name-mangler/diverging.stdout b/libs/@local/hashql/ast/tests/ui/lower/name-mangler/diverging.stdout similarity index 100% rename from libs/@local/hashql/ast/tests/ui/lowering/name-mangler/diverging.stdout rename to libs/@local/hashql/ast/tests/ui/lower/name-mangler/diverging.stdout diff --git a/libs/@local/hashql/ast/tests/ui/lowering/name-mangler/fn-args.jsonc b/libs/@local/hashql/ast/tests/ui/lower/name-mangler/fn-args.jsonc similarity index 100% rename from libs/@local/hashql/ast/tests/ui/lowering/name-mangler/fn-args.jsonc rename to libs/@local/hashql/ast/tests/ui/lower/name-mangler/fn-args.jsonc diff --git a/libs/@local/hashql/ast/tests/ui/lowering/name-mangler/fn-args.stdout b/libs/@local/hashql/ast/tests/ui/lower/name-mangler/fn-args.stdout similarity index 100% rename from libs/@local/hashql/ast/tests/ui/lowering/name-mangler/fn-args.stdout rename to libs/@local/hashql/ast/tests/ui/lower/name-mangler/fn-args.stdout diff --git a/libs/@local/hashql/ast/tests/ui/lowering/name-mangler/fn-types-of-args.jsonc b/libs/@local/hashql/ast/tests/ui/lower/name-mangler/fn-types-of-args.jsonc similarity index 100% rename from libs/@local/hashql/ast/tests/ui/lowering/name-mangler/fn-types-of-args.jsonc rename to libs/@local/hashql/ast/tests/ui/lower/name-mangler/fn-types-of-args.jsonc diff --git a/libs/@local/hashql/ast/tests/ui/lowering/name-mangler/fn-types-of-args.stdout b/libs/@local/hashql/ast/tests/ui/lower/name-mangler/fn-types-of-args.stdout similarity index 100% rename from libs/@local/hashql/ast/tests/ui/lowering/name-mangler/fn-types-of-args.stdout rename to libs/@local/hashql/ast/tests/ui/lower/name-mangler/fn-types-of-args.stdout diff --git a/libs/@local/hashql/ast/tests/ui/lowering/name-mangler/fn-types-of-ret.jsonc b/libs/@local/hashql/ast/tests/ui/lower/name-mangler/fn-types-of-ret.jsonc similarity index 100% rename from libs/@local/hashql/ast/tests/ui/lowering/name-mangler/fn-types-of-ret.jsonc rename to libs/@local/hashql/ast/tests/ui/lower/name-mangler/fn-types-of-ret.jsonc diff --git a/libs/@local/hashql/ast/tests/ui/lowering/name-mangler/fn-types-of-ret.stdout b/libs/@local/hashql/ast/tests/ui/lower/name-mangler/fn-types-of-ret.stdout similarity index 100% rename from libs/@local/hashql/ast/tests/ui/lowering/name-mangler/fn-types-of-ret.stdout rename to libs/@local/hashql/ast/tests/ui/lower/name-mangler/fn-types-of-ret.stdout diff --git a/libs/@local/hashql/ast/tests/ui/lowering/name-mangler/fn-types.jsonc b/libs/@local/hashql/ast/tests/ui/lower/name-mangler/fn-types.jsonc similarity index 100% rename from libs/@local/hashql/ast/tests/ui/lowering/name-mangler/fn-types.jsonc rename to libs/@local/hashql/ast/tests/ui/lower/name-mangler/fn-types.jsonc diff --git a/libs/@local/hashql/ast/tests/ui/lowering/name-mangler/fn-types.stdout b/libs/@local/hashql/ast/tests/ui/lower/name-mangler/fn-types.stdout similarity index 100% rename from libs/@local/hashql/ast/tests/ui/lowering/name-mangler/fn-types.stdout rename to libs/@local/hashql/ast/tests/ui/lower/name-mangler/fn-types.stdout diff --git a/libs/@local/hashql/ast/tests/ui/lowering/name-mangler/let.jsonc b/libs/@local/hashql/ast/tests/ui/lower/name-mangler/let.jsonc similarity index 100% rename from libs/@local/hashql/ast/tests/ui/lowering/name-mangler/let.jsonc rename to libs/@local/hashql/ast/tests/ui/lower/name-mangler/let.jsonc diff --git a/libs/@local/hashql/ast/tests/ui/lowering/name-mangler/let.stdout b/libs/@local/hashql/ast/tests/ui/lower/name-mangler/let.stdout similarity index 100% rename from libs/@local/hashql/ast/tests/ui/lowering/name-mangler/let.stdout rename to libs/@local/hashql/ast/tests/ui/lower/name-mangler/let.stdout diff --git a/libs/@local/hashql/ast/tests/ui/lowering/name-mangler/newtype-generics.jsonc b/libs/@local/hashql/ast/tests/ui/lower/name-mangler/newtype-generics.jsonc similarity index 100% rename from libs/@local/hashql/ast/tests/ui/lowering/name-mangler/newtype-generics.jsonc rename to libs/@local/hashql/ast/tests/ui/lower/name-mangler/newtype-generics.jsonc diff --git a/libs/@local/hashql/ast/tests/ui/lowering/name-mangler/newtype-generics.stdout b/libs/@local/hashql/ast/tests/ui/lower/name-mangler/newtype-generics.stdout similarity index 100% rename from libs/@local/hashql/ast/tests/ui/lowering/name-mangler/newtype-generics.stdout rename to libs/@local/hashql/ast/tests/ui/lower/name-mangler/newtype-generics.stdout diff --git a/libs/@local/hashql/ast/tests/ui/lowering/name-mangler/newtype.jsonc b/libs/@local/hashql/ast/tests/ui/lower/name-mangler/newtype.jsonc similarity index 100% rename from libs/@local/hashql/ast/tests/ui/lowering/name-mangler/newtype.jsonc rename to libs/@local/hashql/ast/tests/ui/lower/name-mangler/newtype.jsonc diff --git a/libs/@local/hashql/ast/tests/ui/lowering/name-mangler/newtype.stdout b/libs/@local/hashql/ast/tests/ui/lower/name-mangler/newtype.stdout similarity index 100% rename from libs/@local/hashql/ast/tests/ui/lowering/name-mangler/newtype.stdout rename to libs/@local/hashql/ast/tests/ui/lower/name-mangler/newtype.stdout diff --git a/libs/@local/hashql/ast/tests/ui/lowering/name-mangler/onion.jsonc b/libs/@local/hashql/ast/tests/ui/lower/name-mangler/onion.jsonc similarity index 100% rename from libs/@local/hashql/ast/tests/ui/lowering/name-mangler/onion.jsonc rename to libs/@local/hashql/ast/tests/ui/lower/name-mangler/onion.jsonc diff --git a/libs/@local/hashql/ast/tests/ui/lowering/name-mangler/onion.stdout b/libs/@local/hashql/ast/tests/ui/lower/name-mangler/onion.stdout similarity index 100% rename from libs/@local/hashql/ast/tests/ui/lowering/name-mangler/onion.stdout rename to libs/@local/hashql/ast/tests/ui/lower/name-mangler/onion.stdout diff --git a/libs/@local/hashql/ast/tests/ui/lowering/name-mangler/overwrite-body.jsonc b/libs/@local/hashql/ast/tests/ui/lower/name-mangler/overwrite-body.jsonc similarity index 100% rename from libs/@local/hashql/ast/tests/ui/lowering/name-mangler/overwrite-body.jsonc rename to libs/@local/hashql/ast/tests/ui/lower/name-mangler/overwrite-body.jsonc diff --git a/libs/@local/hashql/ast/tests/ui/lowering/name-mangler/overwrite-body.stdout b/libs/@local/hashql/ast/tests/ui/lower/name-mangler/overwrite-body.stdout similarity index 100% rename from libs/@local/hashql/ast/tests/ui/lowering/name-mangler/overwrite-body.stdout rename to libs/@local/hashql/ast/tests/ui/lower/name-mangler/overwrite-body.stdout diff --git a/libs/@local/hashql/ast/tests/ui/lowering/name-mangler/overwrite.jsonc b/libs/@local/hashql/ast/tests/ui/lower/name-mangler/overwrite.jsonc similarity index 100% rename from libs/@local/hashql/ast/tests/ui/lowering/name-mangler/overwrite.jsonc rename to libs/@local/hashql/ast/tests/ui/lower/name-mangler/overwrite.jsonc diff --git a/libs/@local/hashql/ast/tests/ui/lowering/name-mangler/overwrite.stdout b/libs/@local/hashql/ast/tests/ui/lower/name-mangler/overwrite.stdout similarity index 100% rename from libs/@local/hashql/ast/tests/ui/lowering/name-mangler/overwrite.stdout rename to libs/@local/hashql/ast/tests/ui/lower/name-mangler/overwrite.stdout diff --git a/libs/@local/hashql/ast/tests/ui/lowering/name-mangler/path-arguments.jsonc b/libs/@local/hashql/ast/tests/ui/lower/name-mangler/path-arguments.jsonc similarity index 100% rename from libs/@local/hashql/ast/tests/ui/lowering/name-mangler/path-arguments.jsonc rename to libs/@local/hashql/ast/tests/ui/lower/name-mangler/path-arguments.jsonc diff --git a/libs/@local/hashql/ast/tests/ui/lowering/name-mangler/path-arguments.stdout b/libs/@local/hashql/ast/tests/ui/lower/name-mangler/path-arguments.stdout similarity index 100% rename from libs/@local/hashql/ast/tests/ui/lowering/name-mangler/path-arguments.stdout rename to libs/@local/hashql/ast/tests/ui/lower/name-mangler/path-arguments.stdout diff --git a/libs/@local/hashql/ast/tests/ui/lowering/name-mangler/path.jsonc b/libs/@local/hashql/ast/tests/ui/lower/name-mangler/path.jsonc similarity index 100% rename from libs/@local/hashql/ast/tests/ui/lowering/name-mangler/path.jsonc rename to libs/@local/hashql/ast/tests/ui/lower/name-mangler/path.jsonc diff --git a/libs/@local/hashql/ast/tests/ui/lowering/name-mangler/path.stdout b/libs/@local/hashql/ast/tests/ui/lower/name-mangler/path.stdout similarity index 100% rename from libs/@local/hashql/ast/tests/ui/lowering/name-mangler/path.stdout rename to libs/@local/hashql/ast/tests/ui/lower/name-mangler/path.stdout diff --git a/libs/@local/hashql/ast/tests/ui/lowering/name-mangler/scopes-no-include.jsonc b/libs/@local/hashql/ast/tests/ui/lower/name-mangler/scopes-no-include.jsonc similarity index 100% rename from libs/@local/hashql/ast/tests/ui/lowering/name-mangler/scopes-no-include.jsonc rename to libs/@local/hashql/ast/tests/ui/lower/name-mangler/scopes-no-include.jsonc diff --git a/libs/@local/hashql/ast/tests/ui/lowering/name-mangler/scopes-no-include.stdout b/libs/@local/hashql/ast/tests/ui/lower/name-mangler/scopes-no-include.stdout similarity index 100% rename from libs/@local/hashql/ast/tests/ui/lowering/name-mangler/scopes-no-include.stdout rename to libs/@local/hashql/ast/tests/ui/lower/name-mangler/scopes-no-include.stdout diff --git a/libs/@local/hashql/ast/tests/ui/lowering/name-mangler/simple.jsonc b/libs/@local/hashql/ast/tests/ui/lower/name-mangler/simple.jsonc similarity index 100% rename from libs/@local/hashql/ast/tests/ui/lowering/name-mangler/simple.jsonc rename to libs/@local/hashql/ast/tests/ui/lower/name-mangler/simple.jsonc diff --git a/libs/@local/hashql/ast/tests/ui/lowering/name-mangler/simple.stdout b/libs/@local/hashql/ast/tests/ui/lower/name-mangler/simple.stdout similarity index 100% rename from libs/@local/hashql/ast/tests/ui/lowering/name-mangler/simple.stdout rename to libs/@local/hashql/ast/tests/ui/lower/name-mangler/simple.stdout diff --git a/libs/@local/hashql/ast/tests/ui/lowering/name-mangler/type-generics-constraints.jsonc b/libs/@local/hashql/ast/tests/ui/lower/name-mangler/type-generics-constraints.jsonc similarity index 100% rename from libs/@local/hashql/ast/tests/ui/lowering/name-mangler/type-generics-constraints.jsonc rename to libs/@local/hashql/ast/tests/ui/lower/name-mangler/type-generics-constraints.jsonc diff --git a/libs/@local/hashql/ast/tests/ui/lowering/name-mangler/type-generics-constraints.stdout b/libs/@local/hashql/ast/tests/ui/lower/name-mangler/type-generics-constraints.stdout similarity index 100% rename from libs/@local/hashql/ast/tests/ui/lowering/name-mangler/type-generics-constraints.stdout rename to libs/@local/hashql/ast/tests/ui/lower/name-mangler/type-generics-constraints.stdout diff --git a/libs/@local/hashql/ast/tests/ui/lowering/name-mangler/type-generics-interdependent-generics.jsonc b/libs/@local/hashql/ast/tests/ui/lower/name-mangler/type-generics-interdependent-generics.jsonc similarity index 100% rename from libs/@local/hashql/ast/tests/ui/lowering/name-mangler/type-generics-interdependent-generics.jsonc rename to libs/@local/hashql/ast/tests/ui/lower/name-mangler/type-generics-interdependent-generics.jsonc diff --git a/libs/@local/hashql/ast/tests/ui/lowering/name-mangler/type-generics-interdependent-generics.stdout b/libs/@local/hashql/ast/tests/ui/lower/name-mangler/type-generics-interdependent-generics.stdout similarity index 100% rename from libs/@local/hashql/ast/tests/ui/lowering/name-mangler/type-generics-interdependent-generics.stdout rename to libs/@local/hashql/ast/tests/ui/lower/name-mangler/type-generics-interdependent-generics.stdout diff --git a/libs/@local/hashql/ast/tests/ui/lowering/name-mangler/type-generics-nested.jsonc b/libs/@local/hashql/ast/tests/ui/lower/name-mangler/type-generics-nested.jsonc similarity index 100% rename from libs/@local/hashql/ast/tests/ui/lowering/name-mangler/type-generics-nested.jsonc rename to libs/@local/hashql/ast/tests/ui/lower/name-mangler/type-generics-nested.jsonc diff --git a/libs/@local/hashql/ast/tests/ui/lowering/name-mangler/type-generics-nested.stdout b/libs/@local/hashql/ast/tests/ui/lower/name-mangler/type-generics-nested.stdout similarity index 100% rename from libs/@local/hashql/ast/tests/ui/lowering/name-mangler/type-generics-nested.stdout rename to libs/@local/hashql/ast/tests/ui/lower/name-mangler/type-generics-nested.stdout diff --git a/libs/@local/hashql/ast/tests/ui/lowering/name-mangler/type-generics-recursive.jsonc b/libs/@local/hashql/ast/tests/ui/lower/name-mangler/type-generics-recursive.jsonc similarity index 100% rename from libs/@local/hashql/ast/tests/ui/lowering/name-mangler/type-generics-recursive.jsonc rename to libs/@local/hashql/ast/tests/ui/lower/name-mangler/type-generics-recursive.jsonc diff --git a/libs/@local/hashql/ast/tests/ui/lowering/name-mangler/type-generics-recursive.stdout b/libs/@local/hashql/ast/tests/ui/lower/name-mangler/type-generics-recursive.stdout similarity index 100% rename from libs/@local/hashql/ast/tests/ui/lowering/name-mangler/type-generics-recursive.stdout rename to libs/@local/hashql/ast/tests/ui/lower/name-mangler/type-generics-recursive.stdout diff --git a/libs/@local/hashql/ast/tests/ui/lowering/name-mangler/type-generics.jsonc b/libs/@local/hashql/ast/tests/ui/lower/name-mangler/type-generics.jsonc similarity index 100% rename from libs/@local/hashql/ast/tests/ui/lowering/name-mangler/type-generics.jsonc rename to libs/@local/hashql/ast/tests/ui/lower/name-mangler/type-generics.jsonc diff --git a/libs/@local/hashql/ast/tests/ui/lowering/name-mangler/type-generics.stdout b/libs/@local/hashql/ast/tests/ui/lower/name-mangler/type-generics.stdout similarity index 100% rename from libs/@local/hashql/ast/tests/ui/lowering/name-mangler/type-generics.stdout rename to libs/@local/hashql/ast/tests/ui/lower/name-mangler/type-generics.stdout diff --git a/libs/@local/hashql/ast/tests/ui/lowering/name-mangler/type.jsonc b/libs/@local/hashql/ast/tests/ui/lower/name-mangler/type.jsonc similarity index 100% rename from libs/@local/hashql/ast/tests/ui/lowering/name-mangler/type.jsonc rename to libs/@local/hashql/ast/tests/ui/lower/name-mangler/type.jsonc diff --git a/libs/@local/hashql/ast/tests/ui/lowering/name-mangler/type.stdout b/libs/@local/hashql/ast/tests/ui/lower/name-mangler/type.stdout similarity index 100% rename from libs/@local/hashql/ast/tests/ui/lowering/name-mangler/type.stdout rename to libs/@local/hashql/ast/tests/ui/lower/name-mangler/type.stdout diff --git a/libs/@local/hashql/ast/tests/ui/lowering/node-renumberer/.spec.toml b/libs/@local/hashql/ast/tests/ui/lower/node-renumberer/.spec.toml similarity index 100% rename from libs/@local/hashql/ast/tests/ui/lowering/node-renumberer/.spec.toml rename to libs/@local/hashql/ast/tests/ui/lower/node-renumberer/.spec.toml diff --git a/libs/@local/hashql/ast/tests/ui/lowering/node-renumberer/basic.jsonc b/libs/@local/hashql/ast/tests/ui/lower/node-renumberer/basic.jsonc similarity index 100% rename from libs/@local/hashql/ast/tests/ui/lowering/node-renumberer/basic.jsonc rename to libs/@local/hashql/ast/tests/ui/lower/node-renumberer/basic.jsonc diff --git a/libs/@local/hashql/ast/tests/ui/lowering/node-renumberer/basic.stdout b/libs/@local/hashql/ast/tests/ui/lower/node-renumberer/basic.stdout similarity index 100% rename from libs/@local/hashql/ast/tests/ui/lowering/node-renumberer/basic.stdout rename to libs/@local/hashql/ast/tests/ui/lower/node-renumberer/basic.stdout diff --git a/libs/@local/hashql/ast/tests/ui/lowering/node-renumberer/diverging.jsonc b/libs/@local/hashql/ast/tests/ui/lower/node-renumberer/diverging.jsonc similarity index 100% rename from libs/@local/hashql/ast/tests/ui/lowering/node-renumberer/diverging.jsonc rename to libs/@local/hashql/ast/tests/ui/lower/node-renumberer/diverging.jsonc diff --git a/libs/@local/hashql/ast/tests/ui/lowering/node-renumberer/diverging.stdout b/libs/@local/hashql/ast/tests/ui/lower/node-renumberer/diverging.stdout similarity index 100% rename from libs/@local/hashql/ast/tests/ui/lowering/node-renumberer/diverging.stdout rename to libs/@local/hashql/ast/tests/ui/lower/node-renumberer/diverging.stdout diff --git a/libs/@local/hashql/ast/tests/ui/lowering/node-renumberer/nested.jsonc b/libs/@local/hashql/ast/tests/ui/lower/node-renumberer/nested.jsonc similarity index 100% rename from libs/@local/hashql/ast/tests/ui/lowering/node-renumberer/nested.jsonc rename to libs/@local/hashql/ast/tests/ui/lower/node-renumberer/nested.jsonc diff --git a/libs/@local/hashql/ast/tests/ui/lowering/node-renumberer/nested.stdout b/libs/@local/hashql/ast/tests/ui/lower/node-renumberer/nested.stdout similarity index 100% rename from libs/@local/hashql/ast/tests/ui/lowering/node-renumberer/nested.stdout rename to libs/@local/hashql/ast/tests/ui/lower/node-renumberer/nested.stdout diff --git a/libs/@local/hashql/ast/tests/ui/lowering/pre-expansion-name-resolver/.spec.toml b/libs/@local/hashql/ast/tests/ui/lower/pre-expansion-name-resolver/.spec.toml similarity index 100% rename from libs/@local/hashql/ast/tests/ui/lowering/pre-expansion-name-resolver/.spec.toml rename to libs/@local/hashql/ast/tests/ui/lower/pre-expansion-name-resolver/.spec.toml diff --git a/libs/@local/hashql/ast/tests/ui/lowering/pre-expansion-name-resolver/absolute-path.jsonc b/libs/@local/hashql/ast/tests/ui/lower/pre-expansion-name-resolver/absolute-path.jsonc similarity index 100% rename from libs/@local/hashql/ast/tests/ui/lowering/pre-expansion-name-resolver/absolute-path.jsonc rename to libs/@local/hashql/ast/tests/ui/lower/pre-expansion-name-resolver/absolute-path.jsonc diff --git a/libs/@local/hashql/ast/tests/ui/lowering/pre-expansion-name-resolver/absolute-path.stdout b/libs/@local/hashql/ast/tests/ui/lower/pre-expansion-name-resolver/absolute-path.stdout similarity index 100% rename from libs/@local/hashql/ast/tests/ui/lowering/pre-expansion-name-resolver/absolute-path.stdout rename to libs/@local/hashql/ast/tests/ui/lower/pre-expansion-name-resolver/absolute-path.stdout diff --git a/libs/@local/hashql/ast/tests/ui/lowering/pre-expansion-name-resolver/alias-absolute-path.jsonc b/libs/@local/hashql/ast/tests/ui/lower/pre-expansion-name-resolver/alias-absolute-path.jsonc similarity index 100% rename from libs/@local/hashql/ast/tests/ui/lowering/pre-expansion-name-resolver/alias-absolute-path.jsonc rename to libs/@local/hashql/ast/tests/ui/lower/pre-expansion-name-resolver/alias-absolute-path.jsonc diff --git a/libs/@local/hashql/ast/tests/ui/lowering/pre-expansion-name-resolver/alias-absolute-path.stdout b/libs/@local/hashql/ast/tests/ui/lower/pre-expansion-name-resolver/alias-absolute-path.stdout similarity index 100% rename from libs/@local/hashql/ast/tests/ui/lowering/pre-expansion-name-resolver/alias-absolute-path.stdout rename to libs/@local/hashql/ast/tests/ui/lower/pre-expansion-name-resolver/alias-absolute-path.stdout diff --git a/libs/@local/hashql/ast/tests/ui/lowering/pre-expansion-name-resolver/alias-symbol.jsonc b/libs/@local/hashql/ast/tests/ui/lower/pre-expansion-name-resolver/alias-symbol.jsonc similarity index 100% rename from libs/@local/hashql/ast/tests/ui/lowering/pre-expansion-name-resolver/alias-symbol.jsonc rename to libs/@local/hashql/ast/tests/ui/lower/pre-expansion-name-resolver/alias-symbol.jsonc diff --git a/libs/@local/hashql/ast/tests/ui/lowering/pre-expansion-name-resolver/alias-symbol.stdout b/libs/@local/hashql/ast/tests/ui/lower/pre-expansion-name-resolver/alias-symbol.stdout similarity index 100% rename from libs/@local/hashql/ast/tests/ui/lowering/pre-expansion-name-resolver/alias-symbol.stdout rename to libs/@local/hashql/ast/tests/ui/lower/pre-expansion-name-resolver/alias-symbol.stdout diff --git a/libs/@local/hashql/ast/tests/ui/lowering/pre-expansion-name-resolver/invalid-let-expr.jsonc b/libs/@local/hashql/ast/tests/ui/lower/pre-expansion-name-resolver/invalid-let-expr.jsonc similarity index 100% rename from libs/@local/hashql/ast/tests/ui/lowering/pre-expansion-name-resolver/invalid-let-expr.jsonc rename to libs/@local/hashql/ast/tests/ui/lower/pre-expansion-name-resolver/invalid-let-expr.jsonc diff --git a/libs/@local/hashql/ast/tests/ui/lowering/pre-expansion-name-resolver/invalid-let-expr.stdout b/libs/@local/hashql/ast/tests/ui/lower/pre-expansion-name-resolver/invalid-let-expr.stdout similarity index 100% rename from libs/@local/hashql/ast/tests/ui/lowering/pre-expansion-name-resolver/invalid-let-expr.stdout rename to libs/@local/hashql/ast/tests/ui/lower/pre-expansion-name-resolver/invalid-let-expr.stdout diff --git a/libs/@local/hashql/ast/tests/ui/lowering/pre-expansion-name-resolver/let-3-alias.jsonc b/libs/@local/hashql/ast/tests/ui/lower/pre-expansion-name-resolver/let-3-alias.jsonc similarity index 100% rename from libs/@local/hashql/ast/tests/ui/lowering/pre-expansion-name-resolver/let-3-alias.jsonc rename to libs/@local/hashql/ast/tests/ui/lower/pre-expansion-name-resolver/let-3-alias.jsonc diff --git a/libs/@local/hashql/ast/tests/ui/lowering/pre-expansion-name-resolver/let-3-alias.stdout b/libs/@local/hashql/ast/tests/ui/lower/pre-expansion-name-resolver/let-3-alias.stdout similarity index 100% rename from libs/@local/hashql/ast/tests/ui/lowering/pre-expansion-name-resolver/let-3-alias.stdout rename to libs/@local/hashql/ast/tests/ui/lower/pre-expansion-name-resolver/let-3-alias.stdout diff --git a/libs/@local/hashql/ast/tests/ui/lowering/pre-expansion-name-resolver/let-3.jsonc b/libs/@local/hashql/ast/tests/ui/lower/pre-expansion-name-resolver/let-3.jsonc similarity index 100% rename from libs/@local/hashql/ast/tests/ui/lowering/pre-expansion-name-resolver/let-3.jsonc rename to libs/@local/hashql/ast/tests/ui/lower/pre-expansion-name-resolver/let-3.jsonc diff --git a/libs/@local/hashql/ast/tests/ui/lowering/pre-expansion-name-resolver/let-3.stdout b/libs/@local/hashql/ast/tests/ui/lower/pre-expansion-name-resolver/let-3.stdout similarity index 100% rename from libs/@local/hashql/ast/tests/ui/lowering/pre-expansion-name-resolver/let-3.stdout rename to libs/@local/hashql/ast/tests/ui/lower/pre-expansion-name-resolver/let-3.stdout diff --git a/libs/@local/hashql/ast/tests/ui/lowering/pre-expansion-name-resolver/let-4-alias.jsonc b/libs/@local/hashql/ast/tests/ui/lower/pre-expansion-name-resolver/let-4-alias.jsonc similarity index 100% rename from libs/@local/hashql/ast/tests/ui/lowering/pre-expansion-name-resolver/let-4-alias.jsonc rename to libs/@local/hashql/ast/tests/ui/lower/pre-expansion-name-resolver/let-4-alias.jsonc diff --git a/libs/@local/hashql/ast/tests/ui/lowering/pre-expansion-name-resolver/let-4-alias.stdout b/libs/@local/hashql/ast/tests/ui/lower/pre-expansion-name-resolver/let-4-alias.stdout similarity index 100% rename from libs/@local/hashql/ast/tests/ui/lowering/pre-expansion-name-resolver/let-4-alias.stdout rename to libs/@local/hashql/ast/tests/ui/lower/pre-expansion-name-resolver/let-4-alias.stdout diff --git a/libs/@local/hashql/ast/tests/ui/lowering/pre-expansion-name-resolver/let-4.jsonc b/libs/@local/hashql/ast/tests/ui/lower/pre-expansion-name-resolver/let-4.jsonc similarity index 100% rename from libs/@local/hashql/ast/tests/ui/lowering/pre-expansion-name-resolver/let-4.jsonc rename to libs/@local/hashql/ast/tests/ui/lower/pre-expansion-name-resolver/let-4.jsonc diff --git a/libs/@local/hashql/ast/tests/ui/lowering/pre-expansion-name-resolver/let-4.stdout b/libs/@local/hashql/ast/tests/ui/lower/pre-expansion-name-resolver/let-4.stdout similarity index 100% rename from libs/@local/hashql/ast/tests/ui/lowering/pre-expansion-name-resolver/let-4.stdout rename to libs/@local/hashql/ast/tests/ui/lower/pre-expansion-name-resolver/let-4.stdout diff --git a/libs/@local/hashql/ast/tests/ui/lowering/pre-expansion-name-resolver/let-absolute.jsonc b/libs/@local/hashql/ast/tests/ui/lower/pre-expansion-name-resolver/let-absolute.jsonc similarity index 100% rename from libs/@local/hashql/ast/tests/ui/lowering/pre-expansion-name-resolver/let-absolute.jsonc rename to libs/@local/hashql/ast/tests/ui/lower/pre-expansion-name-resolver/let-absolute.jsonc diff --git a/libs/@local/hashql/ast/tests/ui/lowering/pre-expansion-name-resolver/let-absolute.stdout b/libs/@local/hashql/ast/tests/ui/lower/pre-expansion-name-resolver/let-absolute.stdout similarity index 100% rename from libs/@local/hashql/ast/tests/ui/lowering/pre-expansion-name-resolver/let-absolute.stdout rename to libs/@local/hashql/ast/tests/ui/lower/pre-expansion-name-resolver/let-absolute.stdout diff --git a/libs/@local/hashql/ast/tests/ui/lowering/pre-expansion-name-resolver/let-ident-generic.jsonc b/libs/@local/hashql/ast/tests/ui/lower/pre-expansion-name-resolver/let-ident-generic.jsonc similarity index 100% rename from libs/@local/hashql/ast/tests/ui/lowering/pre-expansion-name-resolver/let-ident-generic.jsonc rename to libs/@local/hashql/ast/tests/ui/lower/pre-expansion-name-resolver/let-ident-generic.jsonc diff --git a/libs/@local/hashql/ast/tests/ui/lowering/pre-expansion-name-resolver/let-ident-generic.stdout b/libs/@local/hashql/ast/tests/ui/lower/pre-expansion-name-resolver/let-ident-generic.stdout similarity index 100% rename from libs/@local/hashql/ast/tests/ui/lowering/pre-expansion-name-resolver/let-ident-generic.stdout rename to libs/@local/hashql/ast/tests/ui/lower/pre-expansion-name-resolver/let-ident-generic.stdout diff --git a/libs/@local/hashql/ast/tests/ui/lowering/pre-expansion-name-resolver/multi-segment-resolution.jsonc b/libs/@local/hashql/ast/tests/ui/lower/pre-expansion-name-resolver/multi-segment-resolution.jsonc similarity index 100% rename from libs/@local/hashql/ast/tests/ui/lowering/pre-expansion-name-resolver/multi-segment-resolution.jsonc rename to libs/@local/hashql/ast/tests/ui/lower/pre-expansion-name-resolver/multi-segment-resolution.jsonc diff --git a/libs/@local/hashql/ast/tests/ui/lowering/pre-expansion-name-resolver/multi-segment-resolution.stdout b/libs/@local/hashql/ast/tests/ui/lower/pre-expansion-name-resolver/multi-segment-resolution.stdout similarity index 100% rename from libs/@local/hashql/ast/tests/ui/lowering/pre-expansion-name-resolver/multi-segment-resolution.stdout rename to libs/@local/hashql/ast/tests/ui/lower/pre-expansion-name-resolver/multi-segment-resolution.stdout diff --git a/libs/@local/hashql/ast/tests/ui/lowering/pre-expansion-name-resolver/nested-let.jsonc b/libs/@local/hashql/ast/tests/ui/lower/pre-expansion-name-resolver/nested-let.jsonc similarity index 100% rename from libs/@local/hashql/ast/tests/ui/lowering/pre-expansion-name-resolver/nested-let.jsonc rename to libs/@local/hashql/ast/tests/ui/lower/pre-expansion-name-resolver/nested-let.jsonc diff --git a/libs/@local/hashql/ast/tests/ui/lowering/pre-expansion-name-resolver/nested-let.stdout b/libs/@local/hashql/ast/tests/ui/lower/pre-expansion-name-resolver/nested-let.stdout similarity index 100% rename from libs/@local/hashql/ast/tests/ui/lowering/pre-expansion-name-resolver/nested-let.stdout rename to libs/@local/hashql/ast/tests/ui/lower/pre-expansion-name-resolver/nested-let.stdout diff --git a/libs/@local/hashql/ast/tests/ui/lowering/pre-expansion-name-resolver/newtype-3-alias.jsonc b/libs/@local/hashql/ast/tests/ui/lower/pre-expansion-name-resolver/newtype-3-alias.jsonc similarity index 100% rename from libs/@local/hashql/ast/tests/ui/lowering/pre-expansion-name-resolver/newtype-3-alias.jsonc rename to libs/@local/hashql/ast/tests/ui/lower/pre-expansion-name-resolver/newtype-3-alias.jsonc diff --git a/libs/@local/hashql/ast/tests/ui/lowering/pre-expansion-name-resolver/newtype-3-alias.stdout b/libs/@local/hashql/ast/tests/ui/lower/pre-expansion-name-resolver/newtype-3-alias.stdout similarity index 100% rename from libs/@local/hashql/ast/tests/ui/lowering/pre-expansion-name-resolver/newtype-3-alias.stdout rename to libs/@local/hashql/ast/tests/ui/lower/pre-expansion-name-resolver/newtype-3-alias.stdout diff --git a/libs/@local/hashql/ast/tests/ui/lowering/pre-expansion-name-resolver/newtype-3.jsonc b/libs/@local/hashql/ast/tests/ui/lower/pre-expansion-name-resolver/newtype-3.jsonc similarity index 100% rename from libs/@local/hashql/ast/tests/ui/lowering/pre-expansion-name-resolver/newtype-3.jsonc rename to libs/@local/hashql/ast/tests/ui/lower/pre-expansion-name-resolver/newtype-3.jsonc diff --git a/libs/@local/hashql/ast/tests/ui/lowering/pre-expansion-name-resolver/newtype-3.stdout b/libs/@local/hashql/ast/tests/ui/lower/pre-expansion-name-resolver/newtype-3.stdout similarity index 100% rename from libs/@local/hashql/ast/tests/ui/lowering/pre-expansion-name-resolver/newtype-3.stdout rename to libs/@local/hashql/ast/tests/ui/lower/pre-expansion-name-resolver/newtype-3.stdout diff --git a/libs/@local/hashql/ast/tests/ui/lowering/pre-expansion-name-resolver/newtype-4.jsonc b/libs/@local/hashql/ast/tests/ui/lower/pre-expansion-name-resolver/newtype-4.jsonc similarity index 100% rename from libs/@local/hashql/ast/tests/ui/lowering/pre-expansion-name-resolver/newtype-4.jsonc rename to libs/@local/hashql/ast/tests/ui/lower/pre-expansion-name-resolver/newtype-4.jsonc diff --git a/libs/@local/hashql/ast/tests/ui/lowering/pre-expansion-name-resolver/newtype-4.stdout b/libs/@local/hashql/ast/tests/ui/lower/pre-expansion-name-resolver/newtype-4.stdout similarity index 100% rename from libs/@local/hashql/ast/tests/ui/lowering/pre-expansion-name-resolver/newtype-4.stdout rename to libs/@local/hashql/ast/tests/ui/lower/pre-expansion-name-resolver/newtype-4.stdout diff --git a/libs/@local/hashql/ast/tests/ui/lowering/pre-expansion-name-resolver/re-assign-prelude-diverging.jsonc b/libs/@local/hashql/ast/tests/ui/lower/pre-expansion-name-resolver/re-assign-prelude-diverging.jsonc similarity index 100% rename from libs/@local/hashql/ast/tests/ui/lowering/pre-expansion-name-resolver/re-assign-prelude-diverging.jsonc rename to libs/@local/hashql/ast/tests/ui/lower/pre-expansion-name-resolver/re-assign-prelude-diverging.jsonc diff --git a/libs/@local/hashql/ast/tests/ui/lowering/pre-expansion-name-resolver/re-assign-prelude-diverging.stdout b/libs/@local/hashql/ast/tests/ui/lower/pre-expansion-name-resolver/re-assign-prelude-diverging.stdout similarity index 100% rename from libs/@local/hashql/ast/tests/ui/lowering/pre-expansion-name-resolver/re-assign-prelude-diverging.stdout rename to libs/@local/hashql/ast/tests/ui/lower/pre-expansion-name-resolver/re-assign-prelude-diverging.stdout diff --git a/libs/@local/hashql/ast/tests/ui/lowering/pre-expansion-name-resolver/re-assign-prelude.jsonc b/libs/@local/hashql/ast/tests/ui/lower/pre-expansion-name-resolver/re-assign-prelude.jsonc similarity index 100% rename from libs/@local/hashql/ast/tests/ui/lowering/pre-expansion-name-resolver/re-assign-prelude.jsonc rename to libs/@local/hashql/ast/tests/ui/lower/pre-expansion-name-resolver/re-assign-prelude.jsonc diff --git a/libs/@local/hashql/ast/tests/ui/lowering/pre-expansion-name-resolver/re-assign-prelude.stdout b/libs/@local/hashql/ast/tests/ui/lower/pre-expansion-name-resolver/re-assign-prelude.stdout similarity index 100% rename from libs/@local/hashql/ast/tests/ui/lowering/pre-expansion-name-resolver/re-assign-prelude.stdout rename to libs/@local/hashql/ast/tests/ui/lower/pre-expansion-name-resolver/re-assign-prelude.stdout diff --git a/libs/@local/hashql/ast/tests/ui/lowering/pre-expansion-name-resolver/re-assign.jsonc b/libs/@local/hashql/ast/tests/ui/lower/pre-expansion-name-resolver/re-assign.jsonc similarity index 100% rename from libs/@local/hashql/ast/tests/ui/lowering/pre-expansion-name-resolver/re-assign.jsonc rename to libs/@local/hashql/ast/tests/ui/lower/pre-expansion-name-resolver/re-assign.jsonc diff --git a/libs/@local/hashql/ast/tests/ui/lowering/pre-expansion-name-resolver/re-assign.stdout b/libs/@local/hashql/ast/tests/ui/lower/pre-expansion-name-resolver/re-assign.stdout similarity index 100% rename from libs/@local/hashql/ast/tests/ui/lowering/pre-expansion-name-resolver/re-assign.stdout rename to libs/@local/hashql/ast/tests/ui/lower/pre-expansion-name-resolver/re-assign.stdout diff --git a/libs/@local/hashql/ast/tests/ui/lowering/pre-expansion-name-resolver/resolve-generics.jsonc b/libs/@local/hashql/ast/tests/ui/lower/pre-expansion-name-resolver/resolve-generics.jsonc similarity index 100% rename from libs/@local/hashql/ast/tests/ui/lowering/pre-expansion-name-resolver/resolve-generics.jsonc rename to libs/@local/hashql/ast/tests/ui/lower/pre-expansion-name-resolver/resolve-generics.jsonc diff --git a/libs/@local/hashql/ast/tests/ui/lowering/pre-expansion-name-resolver/resolve-generics.stdout b/libs/@local/hashql/ast/tests/ui/lower/pre-expansion-name-resolver/resolve-generics.stdout similarity index 100% rename from libs/@local/hashql/ast/tests/ui/lowering/pre-expansion-name-resolver/resolve-generics.stdout rename to libs/@local/hashql/ast/tests/ui/lower/pre-expansion-name-resolver/resolve-generics.stdout diff --git a/libs/@local/hashql/ast/tests/ui/lowering/pre-expansion-name-resolver/resolve-symbol.jsonc b/libs/@local/hashql/ast/tests/ui/lower/pre-expansion-name-resolver/resolve-symbol.jsonc similarity index 100% rename from libs/@local/hashql/ast/tests/ui/lowering/pre-expansion-name-resolver/resolve-symbol.jsonc rename to libs/@local/hashql/ast/tests/ui/lower/pre-expansion-name-resolver/resolve-symbol.jsonc diff --git a/libs/@local/hashql/ast/tests/ui/lowering/pre-expansion-name-resolver/resolve-symbol.stdout b/libs/@local/hashql/ast/tests/ui/lower/pre-expansion-name-resolver/resolve-symbol.stdout similarity index 100% rename from libs/@local/hashql/ast/tests/ui/lowering/pre-expansion-name-resolver/resolve-symbol.stdout rename to libs/@local/hashql/ast/tests/ui/lower/pre-expansion-name-resolver/resolve-symbol.stdout diff --git a/libs/@local/hashql/ast/tests/ui/lowering/pre-expansion-name-resolver/restoration-bindings.jsonc b/libs/@local/hashql/ast/tests/ui/lower/pre-expansion-name-resolver/restoration-bindings.jsonc similarity index 100% rename from libs/@local/hashql/ast/tests/ui/lowering/pre-expansion-name-resolver/restoration-bindings.jsonc rename to libs/@local/hashql/ast/tests/ui/lower/pre-expansion-name-resolver/restoration-bindings.jsonc diff --git a/libs/@local/hashql/ast/tests/ui/lowering/pre-expansion-name-resolver/restoration-bindings.stdout b/libs/@local/hashql/ast/tests/ui/lower/pre-expansion-name-resolver/restoration-bindings.stdout similarity index 100% rename from libs/@local/hashql/ast/tests/ui/lowering/pre-expansion-name-resolver/restoration-bindings.stdout rename to libs/@local/hashql/ast/tests/ui/lower/pre-expansion-name-resolver/restoration-bindings.stdout diff --git a/libs/@local/hashql/ast/tests/ui/lowering/pre-expansion-name-resolver/type-3-alias.jsonc b/libs/@local/hashql/ast/tests/ui/lower/pre-expansion-name-resolver/type-3-alias.jsonc similarity index 100% rename from libs/@local/hashql/ast/tests/ui/lowering/pre-expansion-name-resolver/type-3-alias.jsonc rename to libs/@local/hashql/ast/tests/ui/lower/pre-expansion-name-resolver/type-3-alias.jsonc diff --git a/libs/@local/hashql/ast/tests/ui/lowering/pre-expansion-name-resolver/type-3-alias.stdout b/libs/@local/hashql/ast/tests/ui/lower/pre-expansion-name-resolver/type-3-alias.stdout similarity index 100% rename from libs/@local/hashql/ast/tests/ui/lowering/pre-expansion-name-resolver/type-3-alias.stdout rename to libs/@local/hashql/ast/tests/ui/lower/pre-expansion-name-resolver/type-3-alias.stdout diff --git a/libs/@local/hashql/ast/tests/ui/lowering/pre-expansion-name-resolver/type-3.jsonc b/libs/@local/hashql/ast/tests/ui/lower/pre-expansion-name-resolver/type-3.jsonc similarity index 100% rename from libs/@local/hashql/ast/tests/ui/lowering/pre-expansion-name-resolver/type-3.jsonc rename to libs/@local/hashql/ast/tests/ui/lower/pre-expansion-name-resolver/type-3.jsonc diff --git a/libs/@local/hashql/ast/tests/ui/lowering/pre-expansion-name-resolver/type-3.stdout b/libs/@local/hashql/ast/tests/ui/lower/pre-expansion-name-resolver/type-3.stdout similarity index 100% rename from libs/@local/hashql/ast/tests/ui/lowering/pre-expansion-name-resolver/type-3.stdout rename to libs/@local/hashql/ast/tests/ui/lower/pre-expansion-name-resolver/type-3.stdout diff --git a/libs/@local/hashql/ast/tests/ui/lowering/pre-expansion-name-resolver/type-4.jsonc b/libs/@local/hashql/ast/tests/ui/lower/pre-expansion-name-resolver/type-4.jsonc similarity index 100% rename from libs/@local/hashql/ast/tests/ui/lowering/pre-expansion-name-resolver/type-4.jsonc rename to libs/@local/hashql/ast/tests/ui/lower/pre-expansion-name-resolver/type-4.jsonc diff --git a/libs/@local/hashql/ast/tests/ui/lowering/pre-expansion-name-resolver/type-4.stdout b/libs/@local/hashql/ast/tests/ui/lower/pre-expansion-name-resolver/type-4.stdout similarity index 100% rename from libs/@local/hashql/ast/tests/ui/lowering/pre-expansion-name-resolver/type-4.stdout rename to libs/@local/hashql/ast/tests/ui/lower/pre-expansion-name-resolver/type-4.stdout diff --git a/libs/@local/hashql/ast/tests/ui/lowering/sanitizer/.spec.toml b/libs/@local/hashql/ast/tests/ui/lower/sanitizer/.spec.toml similarity index 100% rename from libs/@local/hashql/ast/tests/ui/lowering/sanitizer/.spec.toml rename to libs/@local/hashql/ast/tests/ui/lower/sanitizer/.spec.toml diff --git a/libs/@local/hashql/ast/tests/ui/lowering/sanitizer/constraint.jsonc b/libs/@local/hashql/ast/tests/ui/lower/sanitizer/constraint.jsonc similarity index 100% rename from libs/@local/hashql/ast/tests/ui/lowering/sanitizer/constraint.jsonc rename to libs/@local/hashql/ast/tests/ui/lower/sanitizer/constraint.jsonc diff --git a/libs/@local/hashql/ast/tests/ui/lowering/sanitizer/constraint.stderr b/libs/@local/hashql/ast/tests/ui/lower/sanitizer/constraint.stderr similarity index 100% rename from libs/@local/hashql/ast/tests/ui/lowering/sanitizer/constraint.stderr rename to libs/@local/hashql/ast/tests/ui/lower/sanitizer/constraint.stderr diff --git a/libs/@local/hashql/ast/tests/ui/lowering/sanitizer/special-form-type-position.jsonc b/libs/@local/hashql/ast/tests/ui/lower/sanitizer/special-form-type-position.jsonc similarity index 100% rename from libs/@local/hashql/ast/tests/ui/lowering/sanitizer/special-form-type-position.jsonc rename to libs/@local/hashql/ast/tests/ui/lower/sanitizer/special-form-type-position.jsonc diff --git a/libs/@local/hashql/ast/tests/ui/lowering/sanitizer/special-form-type-position.stderr b/libs/@local/hashql/ast/tests/ui/lower/sanitizer/special-form-type-position.stderr similarity index 100% rename from libs/@local/hashql/ast/tests/ui/lowering/sanitizer/special-form-type-position.stderr rename to libs/@local/hashql/ast/tests/ui/lower/sanitizer/special-form-type-position.stderr diff --git a/libs/@local/hashql/ast/tests/ui/lowering/sanitizer/special-form-value.jsonc b/libs/@local/hashql/ast/tests/ui/lower/sanitizer/special-form-value.jsonc similarity index 100% rename from libs/@local/hashql/ast/tests/ui/lowering/sanitizer/special-form-value.jsonc rename to libs/@local/hashql/ast/tests/ui/lower/sanitizer/special-form-value.jsonc diff --git a/libs/@local/hashql/ast/tests/ui/lowering/sanitizer/special-form-value.stderr b/libs/@local/hashql/ast/tests/ui/lower/sanitizer/special-form-value.stderr similarity index 100% rename from libs/@local/hashql/ast/tests/ui/lowering/sanitizer/special-form-value.stderr rename to libs/@local/hashql/ast/tests/ui/lower/sanitizer/special-form-value.stderr diff --git a/libs/@local/hashql/ast/tests/ui/lowering/special-form-expander/.spec.toml b/libs/@local/hashql/ast/tests/ui/lower/special-form-expander/.spec.toml similarity index 100% rename from libs/@local/hashql/ast/tests/ui/lowering/special-form-expander/.spec.toml rename to libs/@local/hashql/ast/tests/ui/lower/special-form-expander/.spec.toml diff --git a/libs/@local/hashql/ast/tests/ui/lowering/special-form-expander/access-1.jsonc b/libs/@local/hashql/ast/tests/ui/lower/special-form-expander/access-1.jsonc similarity index 100% rename from libs/@local/hashql/ast/tests/ui/lowering/special-form-expander/access-1.jsonc rename to libs/@local/hashql/ast/tests/ui/lower/special-form-expander/access-1.jsonc diff --git a/libs/@local/hashql/ast/tests/ui/lowering/special-form-expander/access-1.stderr b/libs/@local/hashql/ast/tests/ui/lower/special-form-expander/access-1.stderr similarity index 100% rename from libs/@local/hashql/ast/tests/ui/lowering/special-form-expander/access-1.stderr rename to libs/@local/hashql/ast/tests/ui/lower/special-form-expander/access-1.stderr diff --git a/libs/@local/hashql/ast/tests/ui/lowering/special-form-expander/access-2.jsonc b/libs/@local/hashql/ast/tests/ui/lower/special-form-expander/access-2.jsonc similarity index 100% rename from libs/@local/hashql/ast/tests/ui/lowering/special-form-expander/access-2.jsonc rename to libs/@local/hashql/ast/tests/ui/lower/special-form-expander/access-2.jsonc diff --git a/libs/@local/hashql/ast/tests/ui/lowering/special-form-expander/access-2.stdout b/libs/@local/hashql/ast/tests/ui/lower/special-form-expander/access-2.stdout similarity index 100% rename from libs/@local/hashql/ast/tests/ui/lowering/special-form-expander/access-2.stdout rename to libs/@local/hashql/ast/tests/ui/lower/special-form-expander/access-2.stdout diff --git a/libs/@local/hashql/ast/tests/ui/lowering/special-form-expander/access-3.jsonc b/libs/@local/hashql/ast/tests/ui/lower/special-form-expander/access-3.jsonc similarity index 100% rename from libs/@local/hashql/ast/tests/ui/lowering/special-form-expander/access-3.jsonc rename to libs/@local/hashql/ast/tests/ui/lower/special-form-expander/access-3.jsonc diff --git a/libs/@local/hashql/ast/tests/ui/lowering/special-form-expander/access-3.stderr b/libs/@local/hashql/ast/tests/ui/lower/special-form-expander/access-3.stderr similarity index 100% rename from libs/@local/hashql/ast/tests/ui/lowering/special-form-expander/access-3.stderr rename to libs/@local/hashql/ast/tests/ui/lower/special-form-expander/access-3.stderr diff --git a/libs/@local/hashql/ast/tests/ui/lowering/special-form-expander/access-field-index-out-of-bounds.jsonc b/libs/@local/hashql/ast/tests/ui/lower/special-form-expander/access-field-index-out-of-bounds.jsonc similarity index 100% rename from libs/@local/hashql/ast/tests/ui/lowering/special-form-expander/access-field-index-out-of-bounds.jsonc rename to libs/@local/hashql/ast/tests/ui/lower/special-form-expander/access-field-index-out-of-bounds.jsonc diff --git a/libs/@local/hashql/ast/tests/ui/lowering/special-form-expander/access-field-index-out-of-bounds.stderr b/libs/@local/hashql/ast/tests/ui/lower/special-form-expander/access-field-index-out-of-bounds.stderr similarity index 100% rename from libs/@local/hashql/ast/tests/ui/lowering/special-form-expander/access-field-index-out-of-bounds.stderr rename to libs/@local/hashql/ast/tests/ui/lower/special-form-expander/access-field-index-out-of-bounds.stderr diff --git a/libs/@local/hashql/ast/tests/ui/lowering/special-form-expander/access-field-literal-boolean.jsonc b/libs/@local/hashql/ast/tests/ui/lower/special-form-expander/access-field-literal-boolean.jsonc similarity index 100% rename from libs/@local/hashql/ast/tests/ui/lowering/special-form-expander/access-field-literal-boolean.jsonc rename to libs/@local/hashql/ast/tests/ui/lower/special-form-expander/access-field-literal-boolean.jsonc diff --git a/libs/@local/hashql/ast/tests/ui/lowering/special-form-expander/access-field-literal-boolean.stderr b/libs/@local/hashql/ast/tests/ui/lower/special-form-expander/access-field-literal-boolean.stderr similarity index 100% rename from libs/@local/hashql/ast/tests/ui/lowering/special-form-expander/access-field-literal-boolean.stderr rename to libs/@local/hashql/ast/tests/ui/lower/special-form-expander/access-field-literal-boolean.stderr diff --git a/libs/@local/hashql/ast/tests/ui/lowering/special-form-expander/access-field-literal-string.jsonc b/libs/@local/hashql/ast/tests/ui/lower/special-form-expander/access-field-literal-string.jsonc similarity index 100% rename from libs/@local/hashql/ast/tests/ui/lowering/special-form-expander/access-field-literal-string.jsonc rename to libs/@local/hashql/ast/tests/ui/lower/special-form-expander/access-field-literal-string.jsonc diff --git a/libs/@local/hashql/ast/tests/ui/lowering/special-form-expander/access-field-literal-string.stderr b/libs/@local/hashql/ast/tests/ui/lower/special-form-expander/access-field-literal-string.stderr similarity index 100% rename from libs/@local/hashql/ast/tests/ui/lowering/special-form-expander/access-field-literal-string.stderr rename to libs/@local/hashql/ast/tests/ui/lower/special-form-expander/access-field-literal-string.stderr diff --git a/libs/@local/hashql/ast/tests/ui/lowering/special-form-expander/access-field-literal-type-annotation.jsonc b/libs/@local/hashql/ast/tests/ui/lower/special-form-expander/access-field-literal-type-annotation.jsonc similarity index 100% rename from libs/@local/hashql/ast/tests/ui/lowering/special-form-expander/access-field-literal-type-annotation.jsonc rename to libs/@local/hashql/ast/tests/ui/lower/special-form-expander/access-field-literal-type-annotation.jsonc diff --git a/libs/@local/hashql/ast/tests/ui/lowering/special-form-expander/access-field-literal-type-annotation.stderr b/libs/@local/hashql/ast/tests/ui/lower/special-form-expander/access-field-literal-type-annotation.stderr similarity index 100% rename from libs/@local/hashql/ast/tests/ui/lowering/special-form-expander/access-field-literal-type-annotation.stderr rename to libs/@local/hashql/ast/tests/ui/lower/special-form-expander/access-field-literal-type-annotation.stderr diff --git a/libs/@local/hashql/ast/tests/ui/lowering/special-form-expander/access-field-literal-valid.jsonc b/libs/@local/hashql/ast/tests/ui/lower/special-form-expander/access-field-literal-valid.jsonc similarity index 100% rename from libs/@local/hashql/ast/tests/ui/lowering/special-form-expander/access-field-literal-valid.jsonc rename to libs/@local/hashql/ast/tests/ui/lower/special-form-expander/access-field-literal-valid.jsonc diff --git a/libs/@local/hashql/ast/tests/ui/lowering/special-form-expander/access-field-literal-valid.stdout b/libs/@local/hashql/ast/tests/ui/lower/special-form-expander/access-field-literal-valid.stdout similarity index 100% rename from libs/@local/hashql/ast/tests/ui/lowering/special-form-expander/access-field-literal-valid.stdout rename to libs/@local/hashql/ast/tests/ui/lower/special-form-expander/access-field-literal-valid.stdout diff --git a/libs/@local/hashql/ast/tests/ui/lowering/special-form-expander/as-1.jsonc b/libs/@local/hashql/ast/tests/ui/lower/special-form-expander/as-1.jsonc similarity index 100% rename from libs/@local/hashql/ast/tests/ui/lowering/special-form-expander/as-1.jsonc rename to libs/@local/hashql/ast/tests/ui/lower/special-form-expander/as-1.jsonc diff --git a/libs/@local/hashql/ast/tests/ui/lowering/special-form-expander/as-1.stderr b/libs/@local/hashql/ast/tests/ui/lower/special-form-expander/as-1.stderr similarity index 100% rename from libs/@local/hashql/ast/tests/ui/lowering/special-form-expander/as-1.stderr rename to libs/@local/hashql/ast/tests/ui/lower/special-form-expander/as-1.stderr diff --git a/libs/@local/hashql/ast/tests/ui/lowering/special-form-expander/as-2.jsonc b/libs/@local/hashql/ast/tests/ui/lower/special-form-expander/as-2.jsonc similarity index 100% rename from libs/@local/hashql/ast/tests/ui/lowering/special-form-expander/as-2.jsonc rename to libs/@local/hashql/ast/tests/ui/lower/special-form-expander/as-2.jsonc diff --git a/libs/@local/hashql/ast/tests/ui/lowering/special-form-expander/as-2.stdout b/libs/@local/hashql/ast/tests/ui/lower/special-form-expander/as-2.stdout similarity index 100% rename from libs/@local/hashql/ast/tests/ui/lowering/special-form-expander/as-2.stdout rename to libs/@local/hashql/ast/tests/ui/lower/special-form-expander/as-2.stdout diff --git a/libs/@local/hashql/ast/tests/ui/lowering/special-form-expander/as-3.jsonc b/libs/@local/hashql/ast/tests/ui/lower/special-form-expander/as-3.jsonc similarity index 100% rename from libs/@local/hashql/ast/tests/ui/lowering/special-form-expander/as-3.jsonc rename to libs/@local/hashql/ast/tests/ui/lower/special-form-expander/as-3.jsonc diff --git a/libs/@local/hashql/ast/tests/ui/lowering/special-form-expander/as-3.stderr b/libs/@local/hashql/ast/tests/ui/lower/special-form-expander/as-3.stderr similarity index 100% rename from libs/@local/hashql/ast/tests/ui/lowering/special-form-expander/as-3.stderr rename to libs/@local/hashql/ast/tests/ui/lower/special-form-expander/as-3.stderr diff --git a/libs/@local/hashql/ast/tests/ui/lowering/special-form-expander/does-not-touch-non-kernel.jsonc b/libs/@local/hashql/ast/tests/ui/lower/special-form-expander/does-not-touch-non-kernel.jsonc similarity index 100% rename from libs/@local/hashql/ast/tests/ui/lowering/special-form-expander/does-not-touch-non-kernel.jsonc rename to libs/@local/hashql/ast/tests/ui/lower/special-form-expander/does-not-touch-non-kernel.jsonc diff --git a/libs/@local/hashql/ast/tests/ui/lowering/special-form-expander/does-not-touch-non-kernel.stdout b/libs/@local/hashql/ast/tests/ui/lower/special-form-expander/does-not-touch-non-kernel.stdout similarity index 100% rename from libs/@local/hashql/ast/tests/ui/lowering/special-form-expander/does-not-touch-non-kernel.stdout rename to libs/@local/hashql/ast/tests/ui/lower/special-form-expander/does-not-touch-non-kernel.stdout diff --git a/libs/@local/hashql/ast/tests/ui/lowering/special-form-expander/fn-3.jsonc b/libs/@local/hashql/ast/tests/ui/lower/special-form-expander/fn-3.jsonc similarity index 100% rename from libs/@local/hashql/ast/tests/ui/lowering/special-form-expander/fn-3.jsonc rename to libs/@local/hashql/ast/tests/ui/lower/special-form-expander/fn-3.jsonc diff --git a/libs/@local/hashql/ast/tests/ui/lowering/special-form-expander/fn-3.stderr b/libs/@local/hashql/ast/tests/ui/lower/special-form-expander/fn-3.stderr similarity index 100% rename from libs/@local/hashql/ast/tests/ui/lowering/special-form-expander/fn-3.stderr rename to libs/@local/hashql/ast/tests/ui/lower/special-form-expander/fn-3.stderr diff --git a/libs/@local/hashql/ast/tests/ui/lowering/special-form-expander/fn-4.jsonc b/libs/@local/hashql/ast/tests/ui/lower/special-form-expander/fn-4.jsonc similarity index 100% rename from libs/@local/hashql/ast/tests/ui/lowering/special-form-expander/fn-4.jsonc rename to libs/@local/hashql/ast/tests/ui/lower/special-form-expander/fn-4.jsonc diff --git a/libs/@local/hashql/ast/tests/ui/lowering/special-form-expander/fn-4.stdout b/libs/@local/hashql/ast/tests/ui/lower/special-form-expander/fn-4.stdout similarity index 100% rename from libs/@local/hashql/ast/tests/ui/lowering/special-form-expander/fn-4.stdout rename to libs/@local/hashql/ast/tests/ui/lower/special-form-expander/fn-4.stdout diff --git a/libs/@local/hashql/ast/tests/ui/lowering/special-form-expander/fn-5.jsonc b/libs/@local/hashql/ast/tests/ui/lower/special-form-expander/fn-5.jsonc similarity index 100% rename from libs/@local/hashql/ast/tests/ui/lowering/special-form-expander/fn-5.jsonc rename to libs/@local/hashql/ast/tests/ui/lower/special-form-expander/fn-5.jsonc diff --git a/libs/@local/hashql/ast/tests/ui/lowering/special-form-expander/fn-5.stderr b/libs/@local/hashql/ast/tests/ui/lower/special-form-expander/fn-5.stderr similarity index 100% rename from libs/@local/hashql/ast/tests/ui/lowering/special-form-expander/fn-5.stderr rename to libs/@local/hashql/ast/tests/ui/lower/special-form-expander/fn-5.stderr diff --git a/libs/@local/hashql/ast/tests/ui/lowering/special-form-expander/fn-generics-duplicates.jsonc b/libs/@local/hashql/ast/tests/ui/lower/special-form-expander/fn-generics-duplicates.jsonc similarity index 100% rename from libs/@local/hashql/ast/tests/ui/lowering/special-form-expander/fn-generics-duplicates.jsonc rename to libs/@local/hashql/ast/tests/ui/lower/special-form-expander/fn-generics-duplicates.jsonc diff --git a/libs/@local/hashql/ast/tests/ui/lowering/special-form-expander/fn-generics-duplicates.stderr b/libs/@local/hashql/ast/tests/ui/lower/special-form-expander/fn-generics-duplicates.stderr similarity index 100% rename from libs/@local/hashql/ast/tests/ui/lowering/special-form-expander/fn-generics-duplicates.stderr rename to libs/@local/hashql/ast/tests/ui/lower/special-form-expander/fn-generics-duplicates.stderr diff --git a/libs/@local/hashql/ast/tests/ui/lowering/special-form-expander/fn-generics-literal.jsonc b/libs/@local/hashql/ast/tests/ui/lower/special-form-expander/fn-generics-literal.jsonc similarity index 100% rename from libs/@local/hashql/ast/tests/ui/lowering/special-form-expander/fn-generics-literal.jsonc rename to libs/@local/hashql/ast/tests/ui/lower/special-form-expander/fn-generics-literal.jsonc diff --git a/libs/@local/hashql/ast/tests/ui/lowering/special-form-expander/fn-generics-literal.stderr b/libs/@local/hashql/ast/tests/ui/lower/special-form-expander/fn-generics-literal.stderr similarity index 100% rename from libs/@local/hashql/ast/tests/ui/lowering/special-form-expander/fn-generics-literal.stderr rename to libs/@local/hashql/ast/tests/ui/lower/special-form-expander/fn-generics-literal.stderr diff --git a/libs/@local/hashql/ast/tests/ui/lowering/special-form-expander/fn-generics-struct-literal.jsonc b/libs/@local/hashql/ast/tests/ui/lower/special-form-expander/fn-generics-struct-literal.jsonc similarity index 100% rename from libs/@local/hashql/ast/tests/ui/lowering/special-form-expander/fn-generics-struct-literal.jsonc rename to libs/@local/hashql/ast/tests/ui/lower/special-form-expander/fn-generics-struct-literal.jsonc diff --git a/libs/@local/hashql/ast/tests/ui/lowering/special-form-expander/fn-generics-struct-literal.stderr b/libs/@local/hashql/ast/tests/ui/lower/special-form-expander/fn-generics-struct-literal.stderr similarity index 100% rename from libs/@local/hashql/ast/tests/ui/lowering/special-form-expander/fn-generics-struct-literal.stderr rename to libs/@local/hashql/ast/tests/ui/lower/special-form-expander/fn-generics-struct-literal.stderr diff --git a/libs/@local/hashql/ast/tests/ui/lowering/special-form-expander/fn-generics-struct-type.jsonc b/libs/@local/hashql/ast/tests/ui/lower/special-form-expander/fn-generics-struct-type.jsonc similarity index 100% rename from libs/@local/hashql/ast/tests/ui/lowering/special-form-expander/fn-generics-struct-type.jsonc rename to libs/@local/hashql/ast/tests/ui/lower/special-form-expander/fn-generics-struct-type.jsonc diff --git a/libs/@local/hashql/ast/tests/ui/lowering/special-form-expander/fn-generics-struct-type.stderr b/libs/@local/hashql/ast/tests/ui/lower/special-form-expander/fn-generics-struct-type.stderr similarity index 100% rename from libs/@local/hashql/ast/tests/ui/lowering/special-form-expander/fn-generics-struct-type.stderr rename to libs/@local/hashql/ast/tests/ui/lower/special-form-expander/fn-generics-struct-type.stderr diff --git a/libs/@local/hashql/ast/tests/ui/lowering/special-form-expander/fn-generics-struct-underscore.jsonc b/libs/@local/hashql/ast/tests/ui/lower/special-form-expander/fn-generics-struct-underscore.jsonc similarity index 100% rename from libs/@local/hashql/ast/tests/ui/lowering/special-form-expander/fn-generics-struct-underscore.jsonc rename to libs/@local/hashql/ast/tests/ui/lower/special-form-expander/fn-generics-struct-underscore.jsonc diff --git a/libs/@local/hashql/ast/tests/ui/lowering/special-form-expander/fn-generics-struct-underscore.stdout b/libs/@local/hashql/ast/tests/ui/lower/special-form-expander/fn-generics-struct-underscore.stdout similarity index 100% rename from libs/@local/hashql/ast/tests/ui/lowering/special-form-expander/fn-generics-struct-underscore.stdout rename to libs/@local/hashql/ast/tests/ui/lower/special-form-expander/fn-generics-struct-underscore.stdout diff --git a/libs/@local/hashql/ast/tests/ui/lowering/special-form-expander/fn-generics-struct.jsonc b/libs/@local/hashql/ast/tests/ui/lower/special-form-expander/fn-generics-struct.jsonc similarity index 100% rename from libs/@local/hashql/ast/tests/ui/lowering/special-form-expander/fn-generics-struct.jsonc rename to libs/@local/hashql/ast/tests/ui/lower/special-form-expander/fn-generics-struct.jsonc diff --git a/libs/@local/hashql/ast/tests/ui/lowering/special-form-expander/fn-generics-struct.stdout b/libs/@local/hashql/ast/tests/ui/lower/special-form-expander/fn-generics-struct.stdout similarity index 100% rename from libs/@local/hashql/ast/tests/ui/lowering/special-form-expander/fn-generics-struct.stdout rename to libs/@local/hashql/ast/tests/ui/lower/special-form-expander/fn-generics-struct.stdout diff --git a/libs/@local/hashql/ast/tests/ui/lowering/special-form-expander/fn-generics-tuple-literal.jsonc b/libs/@local/hashql/ast/tests/ui/lower/special-form-expander/fn-generics-tuple-literal.jsonc similarity index 100% rename from libs/@local/hashql/ast/tests/ui/lowering/special-form-expander/fn-generics-tuple-literal.jsonc rename to libs/@local/hashql/ast/tests/ui/lower/special-form-expander/fn-generics-tuple-literal.jsonc diff --git a/libs/@local/hashql/ast/tests/ui/lowering/special-form-expander/fn-generics-tuple-literal.stderr b/libs/@local/hashql/ast/tests/ui/lower/special-form-expander/fn-generics-tuple-literal.stderr similarity index 100% rename from libs/@local/hashql/ast/tests/ui/lowering/special-form-expander/fn-generics-tuple-literal.stderr rename to libs/@local/hashql/ast/tests/ui/lower/special-form-expander/fn-generics-tuple-literal.stderr diff --git a/libs/@local/hashql/ast/tests/ui/lowering/special-form-expander/fn-generics-tuple-path.jsonc b/libs/@local/hashql/ast/tests/ui/lower/special-form-expander/fn-generics-tuple-path.jsonc similarity index 100% rename from libs/@local/hashql/ast/tests/ui/lowering/special-form-expander/fn-generics-tuple-path.jsonc rename to libs/@local/hashql/ast/tests/ui/lower/special-form-expander/fn-generics-tuple-path.jsonc diff --git a/libs/@local/hashql/ast/tests/ui/lowering/special-form-expander/fn-generics-tuple-path.stderr b/libs/@local/hashql/ast/tests/ui/lower/special-form-expander/fn-generics-tuple-path.stderr similarity index 100% rename from libs/@local/hashql/ast/tests/ui/lowering/special-form-expander/fn-generics-tuple-path.stderr rename to libs/@local/hashql/ast/tests/ui/lower/special-form-expander/fn-generics-tuple-path.stderr diff --git a/libs/@local/hashql/ast/tests/ui/lowering/special-form-expander/fn-generics-tuple-type.jsonc b/libs/@local/hashql/ast/tests/ui/lower/special-form-expander/fn-generics-tuple-type.jsonc similarity index 100% rename from libs/@local/hashql/ast/tests/ui/lowering/special-form-expander/fn-generics-tuple-type.jsonc rename to libs/@local/hashql/ast/tests/ui/lower/special-form-expander/fn-generics-tuple-type.jsonc diff --git a/libs/@local/hashql/ast/tests/ui/lowering/special-form-expander/fn-generics-tuple-type.stderr b/libs/@local/hashql/ast/tests/ui/lower/special-form-expander/fn-generics-tuple-type.stderr similarity index 100% rename from libs/@local/hashql/ast/tests/ui/lowering/special-form-expander/fn-generics-tuple-type.stderr rename to libs/@local/hashql/ast/tests/ui/lower/special-form-expander/fn-generics-tuple-type.stderr diff --git a/libs/@local/hashql/ast/tests/ui/lowering/special-form-expander/fn-generics-tuple.jsonc b/libs/@local/hashql/ast/tests/ui/lower/special-form-expander/fn-generics-tuple.jsonc similarity index 100% rename from libs/@local/hashql/ast/tests/ui/lowering/special-form-expander/fn-generics-tuple.jsonc rename to libs/@local/hashql/ast/tests/ui/lower/special-form-expander/fn-generics-tuple.jsonc diff --git a/libs/@local/hashql/ast/tests/ui/lowering/special-form-expander/fn-generics-tuple.stdout b/libs/@local/hashql/ast/tests/ui/lower/special-form-expander/fn-generics-tuple.stdout similarity index 100% rename from libs/@local/hashql/ast/tests/ui/lowering/special-form-expander/fn-generics-tuple.stdout rename to libs/@local/hashql/ast/tests/ui/lower/special-form-expander/fn-generics-tuple.stdout diff --git a/libs/@local/hashql/ast/tests/ui/lowering/special-form-expander/fn-params-duplicates.jsonc b/libs/@local/hashql/ast/tests/ui/lower/special-form-expander/fn-params-duplicates.jsonc similarity index 100% rename from libs/@local/hashql/ast/tests/ui/lowering/special-form-expander/fn-params-duplicates.jsonc rename to libs/@local/hashql/ast/tests/ui/lower/special-form-expander/fn-params-duplicates.jsonc diff --git a/libs/@local/hashql/ast/tests/ui/lowering/special-form-expander/fn-params-duplicates.stderr b/libs/@local/hashql/ast/tests/ui/lower/special-form-expander/fn-params-duplicates.stderr similarity index 100% rename from libs/@local/hashql/ast/tests/ui/lowering/special-form-expander/fn-params-duplicates.stderr rename to libs/@local/hashql/ast/tests/ui/lower/special-form-expander/fn-params-duplicates.stderr diff --git a/libs/@local/hashql/ast/tests/ui/lowering/special-form-expander/fn-params-tuple.jsonc b/libs/@local/hashql/ast/tests/ui/lower/special-form-expander/fn-params-tuple.jsonc similarity index 100% rename from libs/@local/hashql/ast/tests/ui/lowering/special-form-expander/fn-params-tuple.jsonc rename to libs/@local/hashql/ast/tests/ui/lower/special-form-expander/fn-params-tuple.jsonc diff --git a/libs/@local/hashql/ast/tests/ui/lowering/special-form-expander/fn-params-tuple.stderr b/libs/@local/hashql/ast/tests/ui/lower/special-form-expander/fn-params-tuple.stderr similarity index 100% rename from libs/@local/hashql/ast/tests/ui/lowering/special-form-expander/fn-params-tuple.stderr rename to libs/@local/hashql/ast/tests/ui/lower/special-form-expander/fn-params-tuple.stderr diff --git a/libs/@local/hashql/ast/tests/ui/lowering/special-form-expander/fn-params-type.jsonc b/libs/@local/hashql/ast/tests/ui/lower/special-form-expander/fn-params-type.jsonc similarity index 100% rename from libs/@local/hashql/ast/tests/ui/lowering/special-form-expander/fn-params-type.jsonc rename to libs/@local/hashql/ast/tests/ui/lower/special-form-expander/fn-params-type.jsonc diff --git a/libs/@local/hashql/ast/tests/ui/lowering/special-form-expander/fn-params-type.stderr b/libs/@local/hashql/ast/tests/ui/lower/special-form-expander/fn-params-type.stderr similarity index 100% rename from libs/@local/hashql/ast/tests/ui/lowering/special-form-expander/fn-params-type.stderr rename to libs/@local/hashql/ast/tests/ui/lower/special-form-expander/fn-params-type.stderr diff --git a/libs/@local/hashql/ast/tests/ui/lowering/special-form-expander/generics.jsonc b/libs/@local/hashql/ast/tests/ui/lower/special-form-expander/generics.jsonc similarity index 100% rename from libs/@local/hashql/ast/tests/ui/lowering/special-form-expander/generics.jsonc rename to libs/@local/hashql/ast/tests/ui/lower/special-form-expander/generics.jsonc diff --git a/libs/@local/hashql/ast/tests/ui/lowering/special-form-expander/generics.stderr b/libs/@local/hashql/ast/tests/ui/lower/special-form-expander/generics.stderr similarity index 100% rename from libs/@local/hashql/ast/tests/ui/lowering/special-form-expander/generics.stderr rename to libs/@local/hashql/ast/tests/ui/lower/special-form-expander/generics.stderr diff --git a/libs/@local/hashql/ast/tests/ui/lowering/special-form-expander/if-1.jsonc b/libs/@local/hashql/ast/tests/ui/lower/special-form-expander/if-1.jsonc similarity index 100% rename from libs/@local/hashql/ast/tests/ui/lowering/special-form-expander/if-1.jsonc rename to libs/@local/hashql/ast/tests/ui/lower/special-form-expander/if-1.jsonc diff --git a/libs/@local/hashql/ast/tests/ui/lowering/special-form-expander/if-1.stderr b/libs/@local/hashql/ast/tests/ui/lower/special-form-expander/if-1.stderr similarity index 100% rename from libs/@local/hashql/ast/tests/ui/lowering/special-form-expander/if-1.stderr rename to libs/@local/hashql/ast/tests/ui/lower/special-form-expander/if-1.stderr diff --git a/libs/@local/hashql/ast/tests/ui/lowering/special-form-expander/if-2.jsonc b/libs/@local/hashql/ast/tests/ui/lower/special-form-expander/if-2.jsonc similarity index 100% rename from libs/@local/hashql/ast/tests/ui/lowering/special-form-expander/if-2.jsonc rename to libs/@local/hashql/ast/tests/ui/lower/special-form-expander/if-2.jsonc diff --git a/libs/@local/hashql/ast/tests/ui/lowering/special-form-expander/if-2.stdout b/libs/@local/hashql/ast/tests/ui/lower/special-form-expander/if-2.stdout similarity index 100% rename from libs/@local/hashql/ast/tests/ui/lowering/special-form-expander/if-2.stdout rename to libs/@local/hashql/ast/tests/ui/lower/special-form-expander/if-2.stdout diff --git a/libs/@local/hashql/ast/tests/ui/lowering/special-form-expander/if-3.jsonc b/libs/@local/hashql/ast/tests/ui/lower/special-form-expander/if-3.jsonc similarity index 100% rename from libs/@local/hashql/ast/tests/ui/lowering/special-form-expander/if-3.jsonc rename to libs/@local/hashql/ast/tests/ui/lower/special-form-expander/if-3.jsonc diff --git a/libs/@local/hashql/ast/tests/ui/lowering/special-form-expander/if-3.stdout b/libs/@local/hashql/ast/tests/ui/lower/special-form-expander/if-3.stdout similarity index 100% rename from libs/@local/hashql/ast/tests/ui/lowering/special-form-expander/if-3.stdout rename to libs/@local/hashql/ast/tests/ui/lower/special-form-expander/if-3.stdout diff --git a/libs/@local/hashql/ast/tests/ui/lowering/special-form-expander/if-4.jsonc b/libs/@local/hashql/ast/tests/ui/lower/special-form-expander/if-4.jsonc similarity index 100% rename from libs/@local/hashql/ast/tests/ui/lowering/special-form-expander/if-4.jsonc rename to libs/@local/hashql/ast/tests/ui/lower/special-form-expander/if-4.jsonc diff --git a/libs/@local/hashql/ast/tests/ui/lowering/special-form-expander/if-4.stderr b/libs/@local/hashql/ast/tests/ui/lower/special-form-expander/if-4.stderr similarity index 100% rename from libs/@local/hashql/ast/tests/ui/lowering/special-form-expander/if-4.stderr rename to libs/@local/hashql/ast/tests/ui/lower/special-form-expander/if-4.stderr diff --git a/libs/@local/hashql/ast/tests/ui/lowering/special-form-expander/index-1.jsonc b/libs/@local/hashql/ast/tests/ui/lower/special-form-expander/index-1.jsonc similarity index 100% rename from libs/@local/hashql/ast/tests/ui/lowering/special-form-expander/index-1.jsonc rename to libs/@local/hashql/ast/tests/ui/lower/special-form-expander/index-1.jsonc diff --git a/libs/@local/hashql/ast/tests/ui/lowering/special-form-expander/index-1.stderr b/libs/@local/hashql/ast/tests/ui/lower/special-form-expander/index-1.stderr similarity index 100% rename from libs/@local/hashql/ast/tests/ui/lowering/special-form-expander/index-1.stderr rename to libs/@local/hashql/ast/tests/ui/lower/special-form-expander/index-1.stderr diff --git a/libs/@local/hashql/ast/tests/ui/lowering/special-form-expander/index-2.jsonc b/libs/@local/hashql/ast/tests/ui/lower/special-form-expander/index-2.jsonc similarity index 100% rename from libs/@local/hashql/ast/tests/ui/lowering/special-form-expander/index-2.jsonc rename to libs/@local/hashql/ast/tests/ui/lower/special-form-expander/index-2.jsonc diff --git a/libs/@local/hashql/ast/tests/ui/lowering/special-form-expander/index-2.stdout b/libs/@local/hashql/ast/tests/ui/lower/special-form-expander/index-2.stdout similarity index 100% rename from libs/@local/hashql/ast/tests/ui/lowering/special-form-expander/index-2.stdout rename to libs/@local/hashql/ast/tests/ui/lower/special-form-expander/index-2.stdout diff --git a/libs/@local/hashql/ast/tests/ui/lowering/special-form-expander/index-3.jsonc b/libs/@local/hashql/ast/tests/ui/lower/special-form-expander/index-3.jsonc similarity index 100% rename from libs/@local/hashql/ast/tests/ui/lowering/special-form-expander/index-3.jsonc rename to libs/@local/hashql/ast/tests/ui/lower/special-form-expander/index-3.jsonc diff --git a/libs/@local/hashql/ast/tests/ui/lowering/special-form-expander/index-3.stderr b/libs/@local/hashql/ast/tests/ui/lower/special-form-expander/index-3.stderr similarity index 100% rename from libs/@local/hashql/ast/tests/ui/lowering/special-form-expander/index-3.stderr rename to libs/@local/hashql/ast/tests/ui/lower/special-form-expander/index-3.stderr diff --git a/libs/@local/hashql/ast/tests/ui/lowering/special-form-expander/input-1.jsonc b/libs/@local/hashql/ast/tests/ui/lower/special-form-expander/input-1.jsonc similarity index 100% rename from libs/@local/hashql/ast/tests/ui/lowering/special-form-expander/input-1.jsonc rename to libs/@local/hashql/ast/tests/ui/lower/special-form-expander/input-1.jsonc diff --git a/libs/@local/hashql/ast/tests/ui/lowering/special-form-expander/input-1.stderr b/libs/@local/hashql/ast/tests/ui/lower/special-form-expander/input-1.stderr similarity index 100% rename from libs/@local/hashql/ast/tests/ui/lowering/special-form-expander/input-1.stderr rename to libs/@local/hashql/ast/tests/ui/lower/special-form-expander/input-1.stderr diff --git a/libs/@local/hashql/ast/tests/ui/lowering/special-form-expander/input-2.jsonc b/libs/@local/hashql/ast/tests/ui/lower/special-form-expander/input-2.jsonc similarity index 100% rename from libs/@local/hashql/ast/tests/ui/lowering/special-form-expander/input-2.jsonc rename to libs/@local/hashql/ast/tests/ui/lower/special-form-expander/input-2.jsonc diff --git a/libs/@local/hashql/ast/tests/ui/lowering/special-form-expander/input-2.stdout b/libs/@local/hashql/ast/tests/ui/lower/special-form-expander/input-2.stdout similarity index 100% rename from libs/@local/hashql/ast/tests/ui/lowering/special-form-expander/input-2.stdout rename to libs/@local/hashql/ast/tests/ui/lower/special-form-expander/input-2.stdout diff --git a/libs/@local/hashql/ast/tests/ui/lowering/special-form-expander/input-3.jsonc b/libs/@local/hashql/ast/tests/ui/lower/special-form-expander/input-3.jsonc similarity index 100% rename from libs/@local/hashql/ast/tests/ui/lowering/special-form-expander/input-3.jsonc rename to libs/@local/hashql/ast/tests/ui/lower/special-form-expander/input-3.jsonc diff --git a/libs/@local/hashql/ast/tests/ui/lowering/special-form-expander/input-3.stdout b/libs/@local/hashql/ast/tests/ui/lower/special-form-expander/input-3.stdout similarity index 100% rename from libs/@local/hashql/ast/tests/ui/lowering/special-form-expander/input-3.stdout rename to libs/@local/hashql/ast/tests/ui/lower/special-form-expander/input-3.stdout diff --git a/libs/@local/hashql/ast/tests/ui/lowering/special-form-expander/input-4.jsonc b/libs/@local/hashql/ast/tests/ui/lower/special-form-expander/input-4.jsonc similarity index 100% rename from libs/@local/hashql/ast/tests/ui/lowering/special-form-expander/input-4.jsonc rename to libs/@local/hashql/ast/tests/ui/lower/special-form-expander/input-4.jsonc diff --git a/libs/@local/hashql/ast/tests/ui/lowering/special-form-expander/input-4.stderr b/libs/@local/hashql/ast/tests/ui/lower/special-form-expander/input-4.stderr similarity index 100% rename from libs/@local/hashql/ast/tests/ui/lowering/special-form-expander/input-4.stderr rename to libs/@local/hashql/ast/tests/ui/lower/special-form-expander/input-4.stderr diff --git a/libs/@local/hashql/ast/tests/ui/lowering/special-form-expander/labeled-argument.jsonc b/libs/@local/hashql/ast/tests/ui/lower/special-form-expander/labeled-argument.jsonc similarity index 100% rename from libs/@local/hashql/ast/tests/ui/lowering/special-form-expander/labeled-argument.jsonc rename to libs/@local/hashql/ast/tests/ui/lower/special-form-expander/labeled-argument.jsonc diff --git a/libs/@local/hashql/ast/tests/ui/lowering/special-form-expander/labeled-argument.stderr b/libs/@local/hashql/ast/tests/ui/lower/special-form-expander/labeled-argument.stderr similarity index 100% rename from libs/@local/hashql/ast/tests/ui/lowering/special-form-expander/labeled-argument.stderr rename to libs/@local/hashql/ast/tests/ui/lower/special-form-expander/labeled-argument.stderr diff --git a/libs/@local/hashql/ast/tests/ui/lowering/special-form-expander/let-2.jsonc b/libs/@local/hashql/ast/tests/ui/lower/special-form-expander/let-2.jsonc similarity index 100% rename from libs/@local/hashql/ast/tests/ui/lowering/special-form-expander/let-2.jsonc rename to libs/@local/hashql/ast/tests/ui/lower/special-form-expander/let-2.jsonc diff --git a/libs/@local/hashql/ast/tests/ui/lowering/special-form-expander/let-2.stderr b/libs/@local/hashql/ast/tests/ui/lower/special-form-expander/let-2.stderr similarity index 100% rename from libs/@local/hashql/ast/tests/ui/lowering/special-form-expander/let-2.stderr rename to libs/@local/hashql/ast/tests/ui/lower/special-form-expander/let-2.stderr diff --git a/libs/@local/hashql/ast/tests/ui/lowering/special-form-expander/let-3.jsonc b/libs/@local/hashql/ast/tests/ui/lower/special-form-expander/let-3.jsonc similarity index 100% rename from libs/@local/hashql/ast/tests/ui/lowering/special-form-expander/let-3.jsonc rename to libs/@local/hashql/ast/tests/ui/lower/special-form-expander/let-3.jsonc diff --git a/libs/@local/hashql/ast/tests/ui/lowering/special-form-expander/let-3.stdout b/libs/@local/hashql/ast/tests/ui/lower/special-form-expander/let-3.stdout similarity index 100% rename from libs/@local/hashql/ast/tests/ui/lowering/special-form-expander/let-3.stdout rename to libs/@local/hashql/ast/tests/ui/lower/special-form-expander/let-3.stdout diff --git a/libs/@local/hashql/ast/tests/ui/lowering/special-form-expander/let-4.jsonc b/libs/@local/hashql/ast/tests/ui/lower/special-form-expander/let-4.jsonc similarity index 100% rename from libs/@local/hashql/ast/tests/ui/lowering/special-form-expander/let-4.jsonc rename to libs/@local/hashql/ast/tests/ui/lower/special-form-expander/let-4.jsonc diff --git a/libs/@local/hashql/ast/tests/ui/lowering/special-form-expander/let-4.stdout b/libs/@local/hashql/ast/tests/ui/lower/special-form-expander/let-4.stdout similarity index 100% rename from libs/@local/hashql/ast/tests/ui/lowering/special-form-expander/let-4.stdout rename to libs/@local/hashql/ast/tests/ui/lower/special-form-expander/let-4.stdout diff --git a/libs/@local/hashql/ast/tests/ui/lowering/special-form-expander/let-5.jsonc b/libs/@local/hashql/ast/tests/ui/lower/special-form-expander/let-5.jsonc similarity index 100% rename from libs/@local/hashql/ast/tests/ui/lowering/special-form-expander/let-5.jsonc rename to libs/@local/hashql/ast/tests/ui/lower/special-form-expander/let-5.jsonc diff --git a/libs/@local/hashql/ast/tests/ui/lowering/special-form-expander/let-5.stderr b/libs/@local/hashql/ast/tests/ui/lower/special-form-expander/let-5.stderr similarity index 100% rename from libs/@local/hashql/ast/tests/ui/lowering/special-form-expander/let-5.stderr rename to libs/@local/hashql/ast/tests/ui/lower/special-form-expander/let-5.stderr diff --git a/libs/@local/hashql/ast/tests/ui/lowering/special-form-expander/let-argument-not-ident.jsonc b/libs/@local/hashql/ast/tests/ui/lower/special-form-expander/let-argument-not-ident.jsonc similarity index 100% rename from libs/@local/hashql/ast/tests/ui/lowering/special-form-expander/let-argument-not-ident.jsonc rename to libs/@local/hashql/ast/tests/ui/lower/special-form-expander/let-argument-not-ident.jsonc diff --git a/libs/@local/hashql/ast/tests/ui/lowering/special-form-expander/let-argument-not-ident.stderr b/libs/@local/hashql/ast/tests/ui/lower/special-form-expander/let-argument-not-ident.stderr similarity index 100% rename from libs/@local/hashql/ast/tests/ui/lowering/special-form-expander/let-argument-not-ident.stderr rename to libs/@local/hashql/ast/tests/ui/lower/special-form-expander/let-argument-not-ident.stderr diff --git a/libs/@local/hashql/ast/tests/ui/lowering/special-form-expander/let-argument-not-path.jsonc b/libs/@local/hashql/ast/tests/ui/lower/special-form-expander/let-argument-not-path.jsonc similarity index 100% rename from libs/@local/hashql/ast/tests/ui/lowering/special-form-expander/let-argument-not-path.jsonc rename to libs/@local/hashql/ast/tests/ui/lower/special-form-expander/let-argument-not-path.jsonc diff --git a/libs/@local/hashql/ast/tests/ui/lowering/special-form-expander/let-argument-not-path.stderr b/libs/@local/hashql/ast/tests/ui/lower/special-form-expander/let-argument-not-path.stderr similarity index 100% rename from libs/@local/hashql/ast/tests/ui/lowering/special-form-expander/let-argument-not-path.stderr rename to libs/@local/hashql/ast/tests/ui/lower/special-form-expander/let-argument-not-path.stderr diff --git a/libs/@local/hashql/ast/tests/ui/lowering/special-form-expander/let-collect-all-errors.jsonc b/libs/@local/hashql/ast/tests/ui/lower/special-form-expander/let-collect-all-errors.jsonc similarity index 100% rename from libs/@local/hashql/ast/tests/ui/lowering/special-form-expander/let-collect-all-errors.jsonc rename to libs/@local/hashql/ast/tests/ui/lower/special-form-expander/let-collect-all-errors.jsonc diff --git a/libs/@local/hashql/ast/tests/ui/lowering/special-form-expander/let-collect-all-errors.stderr b/libs/@local/hashql/ast/tests/ui/lower/special-form-expander/let-collect-all-errors.stderr similarity index 100% rename from libs/@local/hashql/ast/tests/ui/lowering/special-form-expander/let-collect-all-errors.stderr rename to libs/@local/hashql/ast/tests/ui/lower/special-form-expander/let-collect-all-errors.stderr diff --git a/libs/@local/hashql/ast/tests/ui/lowering/special-form-expander/newtype-2.jsonc b/libs/@local/hashql/ast/tests/ui/lower/special-form-expander/newtype-2.jsonc similarity index 100% rename from libs/@local/hashql/ast/tests/ui/lowering/special-form-expander/newtype-2.jsonc rename to libs/@local/hashql/ast/tests/ui/lower/special-form-expander/newtype-2.jsonc diff --git a/libs/@local/hashql/ast/tests/ui/lowering/special-form-expander/newtype-2.stderr b/libs/@local/hashql/ast/tests/ui/lower/special-form-expander/newtype-2.stderr similarity index 100% rename from libs/@local/hashql/ast/tests/ui/lowering/special-form-expander/newtype-2.stderr rename to libs/@local/hashql/ast/tests/ui/lower/special-form-expander/newtype-2.stderr diff --git a/libs/@local/hashql/ast/tests/ui/lowering/special-form-expander/newtype-3.jsonc b/libs/@local/hashql/ast/tests/ui/lower/special-form-expander/newtype-3.jsonc similarity index 100% rename from libs/@local/hashql/ast/tests/ui/lowering/special-form-expander/newtype-3.jsonc rename to libs/@local/hashql/ast/tests/ui/lower/special-form-expander/newtype-3.jsonc diff --git a/libs/@local/hashql/ast/tests/ui/lowering/special-form-expander/newtype-3.stdout b/libs/@local/hashql/ast/tests/ui/lower/special-form-expander/newtype-3.stdout similarity index 100% rename from libs/@local/hashql/ast/tests/ui/lowering/special-form-expander/newtype-3.stdout rename to libs/@local/hashql/ast/tests/ui/lower/special-form-expander/newtype-3.stdout diff --git a/libs/@local/hashql/ast/tests/ui/lowering/special-form-expander/newtype-4.jsonc b/libs/@local/hashql/ast/tests/ui/lower/special-form-expander/newtype-4.jsonc similarity index 100% rename from libs/@local/hashql/ast/tests/ui/lowering/special-form-expander/newtype-4.jsonc rename to libs/@local/hashql/ast/tests/ui/lower/special-form-expander/newtype-4.jsonc diff --git a/libs/@local/hashql/ast/tests/ui/lowering/special-form-expander/newtype-4.stderr b/libs/@local/hashql/ast/tests/ui/lower/special-form-expander/newtype-4.stderr similarity index 100% rename from libs/@local/hashql/ast/tests/ui/lowering/special-form-expander/newtype-4.stderr rename to libs/@local/hashql/ast/tests/ui/lower/special-form-expander/newtype-4.stderr diff --git a/libs/@local/hashql/ast/tests/ui/lowering/special-form-expander/newtype-collect-all-errors.jsonc b/libs/@local/hashql/ast/tests/ui/lower/special-form-expander/newtype-collect-all-errors.jsonc similarity index 100% rename from libs/@local/hashql/ast/tests/ui/lowering/special-form-expander/newtype-collect-all-errors.jsonc rename to libs/@local/hashql/ast/tests/ui/lower/special-form-expander/newtype-collect-all-errors.jsonc diff --git a/libs/@local/hashql/ast/tests/ui/lowering/special-form-expander/newtype-collect-all-errors.stderr b/libs/@local/hashql/ast/tests/ui/lower/special-form-expander/newtype-collect-all-errors.stderr similarity index 100% rename from libs/@local/hashql/ast/tests/ui/lowering/special-form-expander/newtype-collect-all-errors.stderr rename to libs/@local/hashql/ast/tests/ui/lower/special-form-expander/newtype-collect-all-errors.stderr diff --git a/libs/@local/hashql/ast/tests/ui/lowering/special-form-expander/newtype-constraints.jsonc b/libs/@local/hashql/ast/tests/ui/lower/special-form-expander/newtype-constraints.jsonc similarity index 100% rename from libs/@local/hashql/ast/tests/ui/lowering/special-form-expander/newtype-constraints.jsonc rename to libs/@local/hashql/ast/tests/ui/lower/special-form-expander/newtype-constraints.jsonc diff --git a/libs/@local/hashql/ast/tests/ui/lowering/special-form-expander/newtype-constraints.stdout b/libs/@local/hashql/ast/tests/ui/lower/special-form-expander/newtype-constraints.stdout similarity index 100% rename from libs/@local/hashql/ast/tests/ui/lowering/special-form-expander/newtype-constraints.stdout rename to libs/@local/hashql/ast/tests/ui/lower/special-form-expander/newtype-constraints.stdout diff --git a/libs/@local/hashql/ast/tests/ui/lowering/special-form-expander/not-enough-segments.jsonc b/libs/@local/hashql/ast/tests/ui/lower/special-form-expander/not-enough-segments.jsonc similarity index 100% rename from libs/@local/hashql/ast/tests/ui/lowering/special-form-expander/not-enough-segments.jsonc rename to libs/@local/hashql/ast/tests/ui/lower/special-form-expander/not-enough-segments.jsonc diff --git a/libs/@local/hashql/ast/tests/ui/lowering/special-form-expander/not-enough-segments.stderr b/libs/@local/hashql/ast/tests/ui/lower/special-form-expander/not-enough-segments.stderr similarity index 100% rename from libs/@local/hashql/ast/tests/ui/lowering/special-form-expander/not-enough-segments.stderr rename to libs/@local/hashql/ast/tests/ui/lower/special-form-expander/not-enough-segments.stderr diff --git a/libs/@local/hashql/ast/tests/ui/lowering/special-form-expander/too-many-segments.jsonc b/libs/@local/hashql/ast/tests/ui/lower/special-form-expander/too-many-segments.jsonc similarity index 100% rename from libs/@local/hashql/ast/tests/ui/lowering/special-form-expander/too-many-segments.jsonc rename to libs/@local/hashql/ast/tests/ui/lower/special-form-expander/too-many-segments.jsonc diff --git a/libs/@local/hashql/ast/tests/ui/lowering/special-form-expander/too-many-segments.stderr b/libs/@local/hashql/ast/tests/ui/lower/special-form-expander/too-many-segments.stderr similarity index 100% rename from libs/@local/hashql/ast/tests/ui/lowering/special-form-expander/too-many-segments.stderr rename to libs/@local/hashql/ast/tests/ui/lower/special-form-expander/too-many-segments.stderr diff --git a/libs/@local/hashql/ast/tests/ui/lowering/special-form-expander/type-2.jsonc b/libs/@local/hashql/ast/tests/ui/lower/special-form-expander/type-2.jsonc similarity index 100% rename from libs/@local/hashql/ast/tests/ui/lowering/special-form-expander/type-2.jsonc rename to libs/@local/hashql/ast/tests/ui/lower/special-form-expander/type-2.jsonc diff --git a/libs/@local/hashql/ast/tests/ui/lowering/special-form-expander/type-2.stderr b/libs/@local/hashql/ast/tests/ui/lower/special-form-expander/type-2.stderr similarity index 100% rename from libs/@local/hashql/ast/tests/ui/lowering/special-form-expander/type-2.stderr rename to libs/@local/hashql/ast/tests/ui/lower/special-form-expander/type-2.stderr diff --git a/libs/@local/hashql/ast/tests/ui/lowering/special-form-expander/type-3.jsonc b/libs/@local/hashql/ast/tests/ui/lower/special-form-expander/type-3.jsonc similarity index 100% rename from libs/@local/hashql/ast/tests/ui/lowering/special-form-expander/type-3.jsonc rename to libs/@local/hashql/ast/tests/ui/lower/special-form-expander/type-3.jsonc diff --git a/libs/@local/hashql/ast/tests/ui/lowering/special-form-expander/type-3.stdout b/libs/@local/hashql/ast/tests/ui/lower/special-form-expander/type-3.stdout similarity index 100% rename from libs/@local/hashql/ast/tests/ui/lowering/special-form-expander/type-3.stdout rename to libs/@local/hashql/ast/tests/ui/lower/special-form-expander/type-3.stdout diff --git a/libs/@local/hashql/ast/tests/ui/lowering/special-form-expander/type-4.jsonc b/libs/@local/hashql/ast/tests/ui/lower/special-form-expander/type-4.jsonc similarity index 100% rename from libs/@local/hashql/ast/tests/ui/lowering/special-form-expander/type-4.jsonc rename to libs/@local/hashql/ast/tests/ui/lower/special-form-expander/type-4.jsonc diff --git a/libs/@local/hashql/ast/tests/ui/lowering/special-form-expander/type-4.stderr b/libs/@local/hashql/ast/tests/ui/lower/special-form-expander/type-4.stderr similarity index 100% rename from libs/@local/hashql/ast/tests/ui/lowering/special-form-expander/type-4.stderr rename to libs/@local/hashql/ast/tests/ui/lower/special-form-expander/type-4.stderr diff --git a/libs/@local/hashql/ast/tests/ui/lowering/special-form-expander/type-collect-all-errors.jsonc b/libs/@local/hashql/ast/tests/ui/lower/special-form-expander/type-collect-all-errors.jsonc similarity index 100% rename from libs/@local/hashql/ast/tests/ui/lowering/special-form-expander/type-collect-all-errors.jsonc rename to libs/@local/hashql/ast/tests/ui/lower/special-form-expander/type-collect-all-errors.jsonc diff --git a/libs/@local/hashql/ast/tests/ui/lowering/special-form-expander/type-collect-all-errors.stderr b/libs/@local/hashql/ast/tests/ui/lower/special-form-expander/type-collect-all-errors.stderr similarity index 100% rename from libs/@local/hashql/ast/tests/ui/lowering/special-form-expander/type-collect-all-errors.stderr rename to libs/@local/hashql/ast/tests/ui/lower/special-form-expander/type-collect-all-errors.stderr diff --git a/libs/@local/hashql/ast/tests/ui/lowering/special-form-expander/type-expr-call-arbitrary.jsonc b/libs/@local/hashql/ast/tests/ui/lower/special-form-expander/type-expr-call-arbitrary.jsonc similarity index 100% rename from libs/@local/hashql/ast/tests/ui/lowering/special-form-expander/type-expr-call-arbitrary.jsonc rename to libs/@local/hashql/ast/tests/ui/lower/special-form-expander/type-expr-call-arbitrary.jsonc diff --git a/libs/@local/hashql/ast/tests/ui/lowering/special-form-expander/type-expr-call-arbitrary.stderr b/libs/@local/hashql/ast/tests/ui/lower/special-form-expander/type-expr-call-arbitrary.stderr similarity index 100% rename from libs/@local/hashql/ast/tests/ui/lowering/special-form-expander/type-expr-call-arbitrary.stderr rename to libs/@local/hashql/ast/tests/ui/lower/special-form-expander/type-expr-call-arbitrary.stderr diff --git a/libs/@local/hashql/ast/tests/ui/lowering/special-form-expander/type-expr-call-intersection.jsonc b/libs/@local/hashql/ast/tests/ui/lower/special-form-expander/type-expr-call-intersection.jsonc similarity index 100% rename from libs/@local/hashql/ast/tests/ui/lowering/special-form-expander/type-expr-call-intersection.jsonc rename to libs/@local/hashql/ast/tests/ui/lower/special-form-expander/type-expr-call-intersection.jsonc diff --git a/libs/@local/hashql/ast/tests/ui/lowering/special-form-expander/type-expr-call-intersection.stdout b/libs/@local/hashql/ast/tests/ui/lower/special-form-expander/type-expr-call-intersection.stdout similarity index 100% rename from libs/@local/hashql/ast/tests/ui/lowering/special-form-expander/type-expr-call-intersection.stdout rename to libs/@local/hashql/ast/tests/ui/lower/special-form-expander/type-expr-call-intersection.stdout diff --git a/libs/@local/hashql/ast/tests/ui/lowering/special-form-expander/type-expr-call-not-path.jsonc b/libs/@local/hashql/ast/tests/ui/lower/special-form-expander/type-expr-call-not-path.jsonc similarity index 100% rename from libs/@local/hashql/ast/tests/ui/lowering/special-form-expander/type-expr-call-not-path.jsonc rename to libs/@local/hashql/ast/tests/ui/lower/special-form-expander/type-expr-call-not-path.jsonc diff --git a/libs/@local/hashql/ast/tests/ui/lowering/special-form-expander/type-expr-call-not-path.stderr b/libs/@local/hashql/ast/tests/ui/lower/special-form-expander/type-expr-call-not-path.stderr similarity index 100% rename from libs/@local/hashql/ast/tests/ui/lowering/special-form-expander/type-expr-call-not-path.stderr rename to libs/@local/hashql/ast/tests/ui/lower/special-form-expander/type-expr-call-not-path.stderr diff --git a/libs/@local/hashql/ast/tests/ui/lowering/special-form-expander/type-expr-call-union.jsonc b/libs/@local/hashql/ast/tests/ui/lower/special-form-expander/type-expr-call-union.jsonc similarity index 100% rename from libs/@local/hashql/ast/tests/ui/lowering/special-form-expander/type-expr-call-union.jsonc rename to libs/@local/hashql/ast/tests/ui/lower/special-form-expander/type-expr-call-union.jsonc diff --git a/libs/@local/hashql/ast/tests/ui/lowering/special-form-expander/type-expr-call-union.stdout b/libs/@local/hashql/ast/tests/ui/lower/special-form-expander/type-expr-call-union.stdout similarity index 100% rename from libs/@local/hashql/ast/tests/ui/lowering/special-form-expander/type-expr-call-union.stdout rename to libs/@local/hashql/ast/tests/ui/lower/special-form-expander/type-expr-call-union.stdout diff --git a/libs/@local/hashql/ast/tests/ui/lowering/special-form-expander/type-expr-invalid.jsonc b/libs/@local/hashql/ast/tests/ui/lower/special-form-expander/type-expr-invalid.jsonc similarity index 100% rename from libs/@local/hashql/ast/tests/ui/lowering/special-form-expander/type-expr-invalid.jsonc rename to libs/@local/hashql/ast/tests/ui/lower/special-form-expander/type-expr-invalid.jsonc diff --git a/libs/@local/hashql/ast/tests/ui/lowering/special-form-expander/type-expr-invalid.stderr b/libs/@local/hashql/ast/tests/ui/lower/special-form-expander/type-expr-invalid.stderr similarity index 100% rename from libs/@local/hashql/ast/tests/ui/lowering/special-form-expander/type-expr-invalid.stderr rename to libs/@local/hashql/ast/tests/ui/lower/special-form-expander/type-expr-invalid.stderr diff --git a/libs/@local/hashql/ast/tests/ui/lowering/special-form-expander/type-expr-struct.jsonc b/libs/@local/hashql/ast/tests/ui/lower/special-form-expander/type-expr-struct.jsonc similarity index 100% rename from libs/@local/hashql/ast/tests/ui/lowering/special-form-expander/type-expr-struct.jsonc rename to libs/@local/hashql/ast/tests/ui/lower/special-form-expander/type-expr-struct.jsonc diff --git a/libs/@local/hashql/ast/tests/ui/lowering/special-form-expander/type-expr-struct.stdout b/libs/@local/hashql/ast/tests/ui/lower/special-form-expander/type-expr-struct.stdout similarity index 100% rename from libs/@local/hashql/ast/tests/ui/lowering/special-form-expander/type-expr-struct.stdout rename to libs/@local/hashql/ast/tests/ui/lower/special-form-expander/type-expr-struct.stdout diff --git a/libs/@local/hashql/ast/tests/ui/lowering/special-form-expander/type-expr-tuple.jsonc b/libs/@local/hashql/ast/tests/ui/lower/special-form-expander/type-expr-tuple.jsonc similarity index 100% rename from libs/@local/hashql/ast/tests/ui/lowering/special-form-expander/type-expr-tuple.jsonc rename to libs/@local/hashql/ast/tests/ui/lower/special-form-expander/type-expr-tuple.jsonc diff --git a/libs/@local/hashql/ast/tests/ui/lowering/special-form-expander/type-expr-tuple.stdout b/libs/@local/hashql/ast/tests/ui/lower/special-form-expander/type-expr-tuple.stdout similarity index 100% rename from libs/@local/hashql/ast/tests/ui/lowering/special-form-expander/type-expr-tuple.stdout rename to libs/@local/hashql/ast/tests/ui/lower/special-form-expander/type-expr-tuple.stdout diff --git a/libs/@local/hashql/ast/tests/ui/lowering/special-form-expander/type-generic-absolute-path.jsonc b/libs/@local/hashql/ast/tests/ui/lower/special-form-expander/type-generic-absolute-path.jsonc similarity index 100% rename from libs/@local/hashql/ast/tests/ui/lowering/special-form-expander/type-generic-absolute-path.jsonc rename to libs/@local/hashql/ast/tests/ui/lower/special-form-expander/type-generic-absolute-path.jsonc diff --git a/libs/@local/hashql/ast/tests/ui/lowering/special-form-expander/type-generic-absolute-path.stderr b/libs/@local/hashql/ast/tests/ui/lower/special-form-expander/type-generic-absolute-path.stderr similarity index 100% rename from libs/@local/hashql/ast/tests/ui/lowering/special-form-expander/type-generic-absolute-path.stderr rename to libs/@local/hashql/ast/tests/ui/lower/special-form-expander/type-generic-absolute-path.stderr diff --git a/libs/@local/hashql/ast/tests/ui/lowering/special-form-expander/type-generic-constraint.jsonc b/libs/@local/hashql/ast/tests/ui/lower/special-form-expander/type-generic-constraint.jsonc similarity index 100% rename from libs/@local/hashql/ast/tests/ui/lowering/special-form-expander/type-generic-constraint.jsonc rename to libs/@local/hashql/ast/tests/ui/lower/special-form-expander/type-generic-constraint.jsonc diff --git a/libs/@local/hashql/ast/tests/ui/lowering/special-form-expander/type-generic-constraint.stdout b/libs/@local/hashql/ast/tests/ui/lower/special-form-expander/type-generic-constraint.stdout similarity index 100% rename from libs/@local/hashql/ast/tests/ui/lowering/special-form-expander/type-generic-constraint.stdout rename to libs/@local/hashql/ast/tests/ui/lower/special-form-expander/type-generic-constraint.stdout diff --git a/libs/@local/hashql/ast/tests/ui/lowering/special-form-expander/type-generic-duplicate.jsonc b/libs/@local/hashql/ast/tests/ui/lower/special-form-expander/type-generic-duplicate.jsonc similarity index 100% rename from libs/@local/hashql/ast/tests/ui/lowering/special-form-expander/type-generic-duplicate.jsonc rename to libs/@local/hashql/ast/tests/ui/lower/special-form-expander/type-generic-duplicate.jsonc diff --git a/libs/@local/hashql/ast/tests/ui/lowering/special-form-expander/type-generic-duplicate.stderr b/libs/@local/hashql/ast/tests/ui/lower/special-form-expander/type-generic-duplicate.stderr similarity index 100% rename from libs/@local/hashql/ast/tests/ui/lowering/special-form-expander/type-generic-duplicate.stderr rename to libs/@local/hashql/ast/tests/ui/lower/special-form-expander/type-generic-duplicate.stderr diff --git a/libs/@local/hashql/ast/tests/ui/lowering/special-form-expander/type-generic-generic-ident.jsonc b/libs/@local/hashql/ast/tests/ui/lower/special-form-expander/type-generic-generic-ident.jsonc similarity index 100% rename from libs/@local/hashql/ast/tests/ui/lowering/special-form-expander/type-generic-generic-ident.jsonc rename to libs/@local/hashql/ast/tests/ui/lower/special-form-expander/type-generic-generic-ident.jsonc diff --git a/libs/@local/hashql/ast/tests/ui/lowering/special-form-expander/type-generic-generic-ident.stderr b/libs/@local/hashql/ast/tests/ui/lower/special-form-expander/type-generic-generic-ident.stderr similarity index 100% rename from libs/@local/hashql/ast/tests/ui/lowering/special-form-expander/type-generic-generic-ident.stderr rename to libs/@local/hashql/ast/tests/ui/lower/special-form-expander/type-generic-generic-ident.stderr diff --git a/libs/@local/hashql/ast/tests/ui/lowering/special-form-expander/type-generic-relative-path.jsonc b/libs/@local/hashql/ast/tests/ui/lower/special-form-expander/type-generic-relative-path.jsonc similarity index 100% rename from libs/@local/hashql/ast/tests/ui/lowering/special-form-expander/type-generic-relative-path.jsonc rename to libs/@local/hashql/ast/tests/ui/lower/special-form-expander/type-generic-relative-path.jsonc diff --git a/libs/@local/hashql/ast/tests/ui/lowering/special-form-expander/type-generic-relative-path.stderr b/libs/@local/hashql/ast/tests/ui/lower/special-form-expander/type-generic-relative-path.stderr similarity index 100% rename from libs/@local/hashql/ast/tests/ui/lowering/special-form-expander/type-generic-relative-path.stderr rename to libs/@local/hashql/ast/tests/ui/lower/special-form-expander/type-generic-relative-path.stderr diff --git a/libs/@local/hashql/ast/tests/ui/lowering/special-form-expander/type-generic-struct.jsonc b/libs/@local/hashql/ast/tests/ui/lower/special-form-expander/type-generic-struct.jsonc similarity index 100% rename from libs/@local/hashql/ast/tests/ui/lowering/special-form-expander/type-generic-struct.jsonc rename to libs/@local/hashql/ast/tests/ui/lower/special-form-expander/type-generic-struct.jsonc diff --git a/libs/@local/hashql/ast/tests/ui/lowering/special-form-expander/type-generic-struct.stderr b/libs/@local/hashql/ast/tests/ui/lower/special-form-expander/type-generic-struct.stderr similarity index 100% rename from libs/@local/hashql/ast/tests/ui/lowering/special-form-expander/type-generic-struct.stderr rename to libs/@local/hashql/ast/tests/ui/lower/special-form-expander/type-generic-struct.stderr diff --git a/libs/@local/hashql/ast/tests/ui/lowering/special-form-expander/type-generic.jsonc b/libs/@local/hashql/ast/tests/ui/lower/special-form-expander/type-generic.jsonc similarity index 100% rename from libs/@local/hashql/ast/tests/ui/lowering/special-form-expander/type-generic.jsonc rename to libs/@local/hashql/ast/tests/ui/lower/special-form-expander/type-generic.jsonc diff --git a/libs/@local/hashql/ast/tests/ui/lowering/special-form-expander/type-generic.stdout b/libs/@local/hashql/ast/tests/ui/lower/special-form-expander/type-generic.stdout similarity index 100% rename from libs/@local/hashql/ast/tests/ui/lowering/special-form-expander/type-generic.stdout rename to libs/@local/hashql/ast/tests/ui/lower/special-form-expander/type-generic.stdout diff --git a/libs/@local/hashql/ast/tests/ui/lowering/special-form-expander/type-infer.jsonc b/libs/@local/hashql/ast/tests/ui/lower/special-form-expander/type-infer.jsonc similarity index 100% rename from libs/@local/hashql/ast/tests/ui/lowering/special-form-expander/type-infer.jsonc rename to libs/@local/hashql/ast/tests/ui/lower/special-form-expander/type-infer.jsonc diff --git a/libs/@local/hashql/ast/tests/ui/lowering/special-form-expander/type-infer.stdout b/libs/@local/hashql/ast/tests/ui/lower/special-form-expander/type-infer.stdout similarity index 100% rename from libs/@local/hashql/ast/tests/ui/lowering/special-form-expander/type-infer.stdout rename to libs/@local/hashql/ast/tests/ui/lower/special-form-expander/type-infer.stdout diff --git a/libs/@local/hashql/ast/tests/ui/lowering/special-form-expander/type-never.jsonc b/libs/@local/hashql/ast/tests/ui/lower/special-form-expander/type-never.jsonc similarity index 100% rename from libs/@local/hashql/ast/tests/ui/lowering/special-form-expander/type-never.jsonc rename to libs/@local/hashql/ast/tests/ui/lower/special-form-expander/type-never.jsonc diff --git a/libs/@local/hashql/ast/tests/ui/lowering/special-form-expander/type-never.stdout b/libs/@local/hashql/ast/tests/ui/lower/special-form-expander/type-never.stdout similarity index 100% rename from libs/@local/hashql/ast/tests/ui/lowering/special-form-expander/type-never.stdout rename to libs/@local/hashql/ast/tests/ui/lower/special-form-expander/type-never.stdout diff --git a/libs/@local/hashql/ast/tests/ui/lowering/special-form-expander/type-struct-has-type.jsonc b/libs/@local/hashql/ast/tests/ui/lower/special-form-expander/type-struct-has-type.jsonc similarity index 100% rename from libs/@local/hashql/ast/tests/ui/lowering/special-form-expander/type-struct-has-type.jsonc rename to libs/@local/hashql/ast/tests/ui/lower/special-form-expander/type-struct-has-type.jsonc diff --git a/libs/@local/hashql/ast/tests/ui/lowering/special-form-expander/type-struct-has-type.stderr b/libs/@local/hashql/ast/tests/ui/lower/special-form-expander/type-struct-has-type.stderr similarity index 100% rename from libs/@local/hashql/ast/tests/ui/lowering/special-form-expander/type-struct-has-type.stderr rename to libs/@local/hashql/ast/tests/ui/lower/special-form-expander/type-struct-has-type.stderr diff --git a/libs/@local/hashql/ast/tests/ui/lowering/special-form-expander/type-tuple-has-type.jsonc b/libs/@local/hashql/ast/tests/ui/lower/special-form-expander/type-tuple-has-type.jsonc similarity index 100% rename from libs/@local/hashql/ast/tests/ui/lowering/special-form-expander/type-tuple-has-type.jsonc rename to libs/@local/hashql/ast/tests/ui/lower/special-form-expander/type-tuple-has-type.jsonc diff --git a/libs/@local/hashql/ast/tests/ui/lowering/special-form-expander/type-tuple-has-type.stderr b/libs/@local/hashql/ast/tests/ui/lower/special-form-expander/type-tuple-has-type.stderr similarity index 100% rename from libs/@local/hashql/ast/tests/ui/lowering/special-form-expander/type-tuple-has-type.stderr rename to libs/@local/hashql/ast/tests/ui/lower/special-form-expander/type-tuple-has-type.stderr diff --git a/libs/@local/hashql/ast/tests/ui/lowering/special-form-expander/type-unknown.jsonc b/libs/@local/hashql/ast/tests/ui/lower/special-form-expander/type-unknown.jsonc similarity index 100% rename from libs/@local/hashql/ast/tests/ui/lowering/special-form-expander/type-unknown.jsonc rename to libs/@local/hashql/ast/tests/ui/lower/special-form-expander/type-unknown.jsonc diff --git a/libs/@local/hashql/ast/tests/ui/lowering/special-form-expander/type-unknown.stdout b/libs/@local/hashql/ast/tests/ui/lower/special-form-expander/type-unknown.stdout similarity index 100% rename from libs/@local/hashql/ast/tests/ui/lowering/special-form-expander/type-unknown.stdout rename to libs/@local/hashql/ast/tests/ui/lower/special-form-expander/type-unknown.stdout diff --git a/libs/@local/hashql/ast/tests/ui/lowering/special-form-expander/unknown-special-form-typo.jsonc b/libs/@local/hashql/ast/tests/ui/lower/special-form-expander/unknown-special-form-typo.jsonc similarity index 100% rename from libs/@local/hashql/ast/tests/ui/lowering/special-form-expander/unknown-special-form-typo.jsonc rename to libs/@local/hashql/ast/tests/ui/lower/special-form-expander/unknown-special-form-typo.jsonc diff --git a/libs/@local/hashql/ast/tests/ui/lowering/special-form-expander/unknown-special-form-typo.stderr b/libs/@local/hashql/ast/tests/ui/lower/special-form-expander/unknown-special-form-typo.stderr similarity index 100% rename from libs/@local/hashql/ast/tests/ui/lowering/special-form-expander/unknown-special-form-typo.stderr rename to libs/@local/hashql/ast/tests/ui/lower/special-form-expander/unknown-special-form-typo.stderr diff --git a/libs/@local/hashql/ast/tests/ui/lowering/special-form-expander/unknown-special-form.jsonc b/libs/@local/hashql/ast/tests/ui/lower/special-form-expander/unknown-special-form.jsonc similarity index 100% rename from libs/@local/hashql/ast/tests/ui/lowering/special-form-expander/unknown-special-form.jsonc rename to libs/@local/hashql/ast/tests/ui/lower/special-form-expander/unknown-special-form.jsonc diff --git a/libs/@local/hashql/ast/tests/ui/lowering/special-form-expander/unknown-special-form.stderr b/libs/@local/hashql/ast/tests/ui/lower/special-form-expander/unknown-special-form.stderr similarity index 100% rename from libs/@local/hashql/ast/tests/ui/lowering/special-form-expander/unknown-special-form.stderr rename to libs/@local/hashql/ast/tests/ui/lower/special-form-expander/unknown-special-form.stderr diff --git a/libs/@local/hashql/ast/tests/ui/lowering/special-form-expander/use-2.jsonc b/libs/@local/hashql/ast/tests/ui/lower/special-form-expander/use-2.jsonc similarity index 100% rename from libs/@local/hashql/ast/tests/ui/lowering/special-form-expander/use-2.jsonc rename to libs/@local/hashql/ast/tests/ui/lower/special-form-expander/use-2.jsonc diff --git a/libs/@local/hashql/ast/tests/ui/lowering/special-form-expander/use-2.stderr b/libs/@local/hashql/ast/tests/ui/lower/special-form-expander/use-2.stderr similarity index 100% rename from libs/@local/hashql/ast/tests/ui/lowering/special-form-expander/use-2.stderr rename to libs/@local/hashql/ast/tests/ui/lower/special-form-expander/use-2.stderr diff --git a/libs/@local/hashql/ast/tests/ui/lowering/special-form-expander/use-3.jsonc b/libs/@local/hashql/ast/tests/ui/lower/special-form-expander/use-3.jsonc similarity index 100% rename from libs/@local/hashql/ast/tests/ui/lowering/special-form-expander/use-3.jsonc rename to libs/@local/hashql/ast/tests/ui/lower/special-form-expander/use-3.jsonc diff --git a/libs/@local/hashql/ast/tests/ui/lowering/special-form-expander/use-3.stdout b/libs/@local/hashql/ast/tests/ui/lower/special-form-expander/use-3.stdout similarity index 100% rename from libs/@local/hashql/ast/tests/ui/lowering/special-form-expander/use-3.stdout rename to libs/@local/hashql/ast/tests/ui/lower/special-form-expander/use-3.stdout diff --git a/libs/@local/hashql/ast/tests/ui/lowering/special-form-expander/use-4.jsonc b/libs/@local/hashql/ast/tests/ui/lower/special-form-expander/use-4.jsonc similarity index 100% rename from libs/@local/hashql/ast/tests/ui/lowering/special-form-expander/use-4.jsonc rename to libs/@local/hashql/ast/tests/ui/lower/special-form-expander/use-4.jsonc diff --git a/libs/@local/hashql/ast/tests/ui/lowering/special-form-expander/use-4.stderr b/libs/@local/hashql/ast/tests/ui/lower/special-form-expander/use-4.stderr similarity index 100% rename from libs/@local/hashql/ast/tests/ui/lowering/special-form-expander/use-4.stderr rename to libs/@local/hashql/ast/tests/ui/lower/special-form-expander/use-4.stderr diff --git a/libs/@local/hashql/ast/tests/ui/lowering/special-form-expander/use-glob-not-ident.jsonc b/libs/@local/hashql/ast/tests/ui/lower/special-form-expander/use-glob-not-ident.jsonc similarity index 100% rename from libs/@local/hashql/ast/tests/ui/lowering/special-form-expander/use-glob-not-ident.jsonc rename to libs/@local/hashql/ast/tests/ui/lower/special-form-expander/use-glob-not-ident.jsonc diff --git a/libs/@local/hashql/ast/tests/ui/lowering/special-form-expander/use-glob-not-ident.stderr b/libs/@local/hashql/ast/tests/ui/lower/special-form-expander/use-glob-not-ident.stderr similarity index 100% rename from libs/@local/hashql/ast/tests/ui/lowering/special-form-expander/use-glob-not-ident.stderr rename to libs/@local/hashql/ast/tests/ui/lower/special-form-expander/use-glob-not-ident.stderr diff --git a/libs/@local/hashql/ast/tests/ui/lowering/special-form-expander/use-glob-not-star.jsonc b/libs/@local/hashql/ast/tests/ui/lower/special-form-expander/use-glob-not-star.jsonc similarity index 100% rename from libs/@local/hashql/ast/tests/ui/lowering/special-form-expander/use-glob-not-star.jsonc rename to libs/@local/hashql/ast/tests/ui/lower/special-form-expander/use-glob-not-star.jsonc diff --git a/libs/@local/hashql/ast/tests/ui/lowering/special-form-expander/use-glob-not-star.stderr b/libs/@local/hashql/ast/tests/ui/lower/special-form-expander/use-glob-not-star.stderr similarity index 100% rename from libs/@local/hashql/ast/tests/ui/lowering/special-form-expander/use-glob-not-star.stderr rename to libs/@local/hashql/ast/tests/ui/lower/special-form-expander/use-glob-not-star.stderr diff --git a/libs/@local/hashql/ast/tests/ui/lowering/special-form-expander/use-glob.jsonc b/libs/@local/hashql/ast/tests/ui/lower/special-form-expander/use-glob.jsonc similarity index 100% rename from libs/@local/hashql/ast/tests/ui/lowering/special-form-expander/use-glob.jsonc rename to libs/@local/hashql/ast/tests/ui/lower/special-form-expander/use-glob.jsonc diff --git a/libs/@local/hashql/ast/tests/ui/lowering/special-form-expander/use-glob.stdout b/libs/@local/hashql/ast/tests/ui/lower/special-form-expander/use-glob.stdout similarity index 100% rename from libs/@local/hashql/ast/tests/ui/lowering/special-form-expander/use-glob.stdout rename to libs/@local/hashql/ast/tests/ui/lower/special-form-expander/use-glob.stdout diff --git a/libs/@local/hashql/ast/tests/ui/lowering/special-form-expander/use-literal.jsonc b/libs/@local/hashql/ast/tests/ui/lower/special-form-expander/use-literal.jsonc similarity index 100% rename from libs/@local/hashql/ast/tests/ui/lowering/special-form-expander/use-literal.jsonc rename to libs/@local/hashql/ast/tests/ui/lower/special-form-expander/use-literal.jsonc diff --git a/libs/@local/hashql/ast/tests/ui/lowering/special-form-expander/use-literal.stderr b/libs/@local/hashql/ast/tests/ui/lower/special-form-expander/use-literal.stderr similarity index 100% rename from libs/@local/hashql/ast/tests/ui/lowering/special-form-expander/use-literal.stderr rename to libs/@local/hashql/ast/tests/ui/lower/special-form-expander/use-literal.stderr diff --git a/libs/@local/hashql/ast/tests/ui/lowering/special-form-expander/use-struct-literal.jsonc b/libs/@local/hashql/ast/tests/ui/lower/special-form-expander/use-struct-literal.jsonc similarity index 100% rename from libs/@local/hashql/ast/tests/ui/lowering/special-form-expander/use-struct-literal.jsonc rename to libs/@local/hashql/ast/tests/ui/lower/special-form-expander/use-struct-literal.jsonc diff --git a/libs/@local/hashql/ast/tests/ui/lowering/special-form-expander/use-struct-literal.stderr b/libs/@local/hashql/ast/tests/ui/lower/special-form-expander/use-struct-literal.stderr similarity index 100% rename from libs/@local/hashql/ast/tests/ui/lowering/special-form-expander/use-struct-literal.stderr rename to libs/@local/hashql/ast/tests/ui/lower/special-form-expander/use-struct-literal.stderr diff --git a/libs/@local/hashql/ast/tests/ui/lowering/special-form-expander/use-struct-path.jsonc b/libs/@local/hashql/ast/tests/ui/lower/special-form-expander/use-struct-path.jsonc similarity index 100% rename from libs/@local/hashql/ast/tests/ui/lowering/special-form-expander/use-struct-path.jsonc rename to libs/@local/hashql/ast/tests/ui/lower/special-form-expander/use-struct-path.jsonc diff --git a/libs/@local/hashql/ast/tests/ui/lowering/special-form-expander/use-struct-path.stderr b/libs/@local/hashql/ast/tests/ui/lower/special-form-expander/use-struct-path.stderr similarity index 100% rename from libs/@local/hashql/ast/tests/ui/lowering/special-form-expander/use-struct-path.stderr rename to libs/@local/hashql/ast/tests/ui/lower/special-form-expander/use-struct-path.stderr diff --git a/libs/@local/hashql/ast/tests/ui/lowering/special-form-expander/use-struct-type.jsonc b/libs/@local/hashql/ast/tests/ui/lower/special-form-expander/use-struct-type.jsonc similarity index 100% rename from libs/@local/hashql/ast/tests/ui/lowering/special-form-expander/use-struct-type.jsonc rename to libs/@local/hashql/ast/tests/ui/lower/special-form-expander/use-struct-type.jsonc diff --git a/libs/@local/hashql/ast/tests/ui/lowering/special-form-expander/use-struct-type.stderr b/libs/@local/hashql/ast/tests/ui/lower/special-form-expander/use-struct-type.stderr similarity index 100% rename from libs/@local/hashql/ast/tests/ui/lowering/special-form-expander/use-struct-type.stderr rename to libs/@local/hashql/ast/tests/ui/lower/special-form-expander/use-struct-type.stderr diff --git a/libs/@local/hashql/ast/tests/ui/lowering/special-form-expander/use-struct.jsonc b/libs/@local/hashql/ast/tests/ui/lower/special-form-expander/use-struct.jsonc similarity index 100% rename from libs/@local/hashql/ast/tests/ui/lowering/special-form-expander/use-struct.jsonc rename to libs/@local/hashql/ast/tests/ui/lower/special-form-expander/use-struct.jsonc diff --git a/libs/@local/hashql/ast/tests/ui/lowering/special-form-expander/use-struct.stdout b/libs/@local/hashql/ast/tests/ui/lower/special-form-expander/use-struct.stdout similarity index 100% rename from libs/@local/hashql/ast/tests/ui/lowering/special-form-expander/use-struct.stdout rename to libs/@local/hashql/ast/tests/ui/lower/special-form-expander/use-struct.stdout diff --git a/libs/@local/hashql/ast/tests/ui/lowering/special-form-expander/use-tuple-literal.jsonc b/libs/@local/hashql/ast/tests/ui/lower/special-form-expander/use-tuple-literal.jsonc similarity index 100% rename from libs/@local/hashql/ast/tests/ui/lowering/special-form-expander/use-tuple-literal.jsonc rename to libs/@local/hashql/ast/tests/ui/lower/special-form-expander/use-tuple-literal.jsonc diff --git a/libs/@local/hashql/ast/tests/ui/lowering/special-form-expander/use-tuple-literal.stderr b/libs/@local/hashql/ast/tests/ui/lower/special-form-expander/use-tuple-literal.stderr similarity index 100% rename from libs/@local/hashql/ast/tests/ui/lowering/special-form-expander/use-tuple-literal.stderr rename to libs/@local/hashql/ast/tests/ui/lower/special-form-expander/use-tuple-literal.stderr diff --git a/libs/@local/hashql/ast/tests/ui/lowering/special-form-expander/use-tuple-path.jsonc b/libs/@local/hashql/ast/tests/ui/lower/special-form-expander/use-tuple-path.jsonc similarity index 100% rename from libs/@local/hashql/ast/tests/ui/lowering/special-form-expander/use-tuple-path.jsonc rename to libs/@local/hashql/ast/tests/ui/lower/special-form-expander/use-tuple-path.jsonc diff --git a/libs/@local/hashql/ast/tests/ui/lowering/special-form-expander/use-tuple-path.stderr b/libs/@local/hashql/ast/tests/ui/lower/special-form-expander/use-tuple-path.stderr similarity index 100% rename from libs/@local/hashql/ast/tests/ui/lowering/special-form-expander/use-tuple-path.stderr rename to libs/@local/hashql/ast/tests/ui/lower/special-form-expander/use-tuple-path.stderr diff --git a/libs/@local/hashql/ast/tests/ui/lowering/special-form-expander/use-tuple-type.jsonc b/libs/@local/hashql/ast/tests/ui/lower/special-form-expander/use-tuple-type.jsonc similarity index 100% rename from libs/@local/hashql/ast/tests/ui/lowering/special-form-expander/use-tuple-type.jsonc rename to libs/@local/hashql/ast/tests/ui/lower/special-form-expander/use-tuple-type.jsonc diff --git a/libs/@local/hashql/ast/tests/ui/lowering/special-form-expander/use-tuple-type.stderr b/libs/@local/hashql/ast/tests/ui/lower/special-form-expander/use-tuple-type.stderr similarity index 100% rename from libs/@local/hashql/ast/tests/ui/lowering/special-form-expander/use-tuple-type.stderr rename to libs/@local/hashql/ast/tests/ui/lower/special-form-expander/use-tuple-type.stderr diff --git a/libs/@local/hashql/ast/tests/ui/lowering/special-form-expander/use-tuple.jsonc b/libs/@local/hashql/ast/tests/ui/lower/special-form-expander/use-tuple.jsonc similarity index 100% rename from libs/@local/hashql/ast/tests/ui/lowering/special-form-expander/use-tuple.jsonc rename to libs/@local/hashql/ast/tests/ui/lower/special-form-expander/use-tuple.jsonc diff --git a/libs/@local/hashql/ast/tests/ui/lowering/special-form-expander/use-tuple.stdout b/libs/@local/hashql/ast/tests/ui/lower/special-form-expander/use-tuple.stdout similarity index 100% rename from libs/@local/hashql/ast/tests/ui/lowering/special-form-expander/use-tuple.stdout rename to libs/@local/hashql/ast/tests/ui/lower/special-form-expander/use-tuple.stdout diff --git a/libs/@local/hashql/ast/tests/ui/lowering/type-extractor/.spec.toml b/libs/@local/hashql/ast/tests/ui/lower/type-extractor/.spec.toml similarity index 100% rename from libs/@local/hashql/ast/tests/ui/lowering/type-extractor/.spec.toml rename to libs/@local/hashql/ast/tests/ui/lower/type-extractor/.spec.toml diff --git a/libs/@local/hashql/ast/tests/ui/lowering/type-extractor/closure-generics.jsonc b/libs/@local/hashql/ast/tests/ui/lower/type-extractor/closure-generics.jsonc similarity index 100% rename from libs/@local/hashql/ast/tests/ui/lowering/type-extractor/closure-generics.jsonc rename to libs/@local/hashql/ast/tests/ui/lower/type-extractor/closure-generics.jsonc diff --git a/libs/@local/hashql/ast/tests/ui/lowering/type-extractor/closure-generics.stdout b/libs/@local/hashql/ast/tests/ui/lower/type-extractor/closure-generics.stdout similarity index 100% rename from libs/@local/hashql/ast/tests/ui/lowering/type-extractor/closure-generics.stdout rename to libs/@local/hashql/ast/tests/ui/lower/type-extractor/closure-generics.stdout diff --git a/libs/@local/hashql/ast/tests/ui/lowering/type-extractor/closure-unused-generic.jsonc b/libs/@local/hashql/ast/tests/ui/lower/type-extractor/closure-unused-generic.jsonc similarity index 100% rename from libs/@local/hashql/ast/tests/ui/lowering/type-extractor/closure-unused-generic.jsonc rename to libs/@local/hashql/ast/tests/ui/lower/type-extractor/closure-unused-generic.jsonc diff --git a/libs/@local/hashql/ast/tests/ui/lowering/type-extractor/closure-unused-generic.stderr b/libs/@local/hashql/ast/tests/ui/lower/type-extractor/closure-unused-generic.stderr similarity index 100% rename from libs/@local/hashql/ast/tests/ui/lowering/type-extractor/closure-unused-generic.stderr rename to libs/@local/hashql/ast/tests/ui/lower/type-extractor/closure-unused-generic.stderr diff --git a/libs/@local/hashql/ast/tests/ui/lowering/type-extractor/closure.jsonc b/libs/@local/hashql/ast/tests/ui/lower/type-extractor/closure.jsonc similarity index 100% rename from libs/@local/hashql/ast/tests/ui/lowering/type-extractor/closure.jsonc rename to libs/@local/hashql/ast/tests/ui/lower/type-extractor/closure.jsonc diff --git a/libs/@local/hashql/ast/tests/ui/lowering/type-extractor/closure.stdout b/libs/@local/hashql/ast/tests/ui/lower/type-extractor/closure.stdout similarity index 100% rename from libs/@local/hashql/ast/tests/ui/lowering/type-extractor/closure.stdout rename to libs/@local/hashql/ast/tests/ui/lower/type-extractor/closure.stdout diff --git a/libs/@local/hashql/ast/tests/ui/lowering/type-extractor/complex-types.jsonc b/libs/@local/hashql/ast/tests/ui/lower/type-extractor/complex-types.jsonc similarity index 100% rename from libs/@local/hashql/ast/tests/ui/lowering/type-extractor/complex-types.jsonc rename to libs/@local/hashql/ast/tests/ui/lower/type-extractor/complex-types.jsonc diff --git a/libs/@local/hashql/ast/tests/ui/lowering/type-extractor/complex-types.stdout b/libs/@local/hashql/ast/tests/ui/lower/type-extractor/complex-types.stdout similarity index 100% rename from libs/@local/hashql/ast/tests/ui/lowering/type-extractor/complex-types.stdout rename to libs/@local/hashql/ast/tests/ui/lower/type-extractor/complex-types.stdout diff --git a/libs/@local/hashql/ast/tests/ui/lowering/type-extractor/definition/.spec.toml b/libs/@local/hashql/ast/tests/ui/lower/type-extractor/definition/.spec.toml similarity index 100% rename from libs/@local/hashql/ast/tests/ui/lowering/type-extractor/definition/.spec.toml rename to libs/@local/hashql/ast/tests/ui/lower/type-extractor/definition/.spec.toml diff --git a/libs/@local/hashql/ast/tests/ui/lowering/type-extractor/definition/constraints-invalid-location.jsonc b/libs/@local/hashql/ast/tests/ui/lower/type-extractor/definition/constraints-invalid-location.jsonc similarity index 100% rename from libs/@local/hashql/ast/tests/ui/lowering/type-extractor/definition/constraints-invalid-location.jsonc rename to libs/@local/hashql/ast/tests/ui/lower/type-extractor/definition/constraints-invalid-location.jsonc diff --git a/libs/@local/hashql/ast/tests/ui/lowering/type-extractor/definition/constraints-invalid-location.stderr b/libs/@local/hashql/ast/tests/ui/lower/type-extractor/definition/constraints-invalid-location.stderr similarity index 100% rename from libs/@local/hashql/ast/tests/ui/lowering/type-extractor/definition/constraints-invalid-location.stderr rename to libs/@local/hashql/ast/tests/ui/lower/type-extractor/definition/constraints-invalid-location.stderr diff --git a/libs/@local/hashql/ast/tests/ui/lowering/type-extractor/definition/constraints-parsing.jsonc b/libs/@local/hashql/ast/tests/ui/lower/type-extractor/definition/constraints-parsing.jsonc similarity index 100% rename from libs/@local/hashql/ast/tests/ui/lowering/type-extractor/definition/constraints-parsing.jsonc rename to libs/@local/hashql/ast/tests/ui/lower/type-extractor/definition/constraints-parsing.jsonc diff --git a/libs/@local/hashql/ast/tests/ui/lowering/type-extractor/definition/constraints-parsing.stdout b/libs/@local/hashql/ast/tests/ui/lower/type-extractor/definition/constraints-parsing.stdout similarity index 100% rename from libs/@local/hashql/ast/tests/ui/lowering/type-extractor/definition/constraints-parsing.stdout rename to libs/@local/hashql/ast/tests/ui/lower/type-extractor/definition/constraints-parsing.stdout diff --git a/libs/@local/hashql/ast/tests/ui/lowering/type-extractor/definition/contractive-guarded.jsonc b/libs/@local/hashql/ast/tests/ui/lower/type-extractor/definition/contractive-guarded.jsonc similarity index 100% rename from libs/@local/hashql/ast/tests/ui/lowering/type-extractor/definition/contractive-guarded.jsonc rename to libs/@local/hashql/ast/tests/ui/lower/type-extractor/definition/contractive-guarded.jsonc diff --git a/libs/@local/hashql/ast/tests/ui/lowering/type-extractor/definition/contractive-guarded.stdout b/libs/@local/hashql/ast/tests/ui/lower/type-extractor/definition/contractive-guarded.stdout similarity index 100% rename from libs/@local/hashql/ast/tests/ui/lowering/type-extractor/definition/contractive-guarded.stdout rename to libs/@local/hashql/ast/tests/ui/lower/type-extractor/definition/contractive-guarded.stdout diff --git a/libs/@local/hashql/ast/tests/ui/lowering/type-extractor/definition/contractive-union.jsonc b/libs/@local/hashql/ast/tests/ui/lower/type-extractor/definition/contractive-union.jsonc similarity index 100% rename from libs/@local/hashql/ast/tests/ui/lowering/type-extractor/definition/contractive-union.jsonc rename to libs/@local/hashql/ast/tests/ui/lower/type-extractor/definition/contractive-union.jsonc diff --git a/libs/@local/hashql/ast/tests/ui/lowering/type-extractor/definition/contractive-union.stdout b/libs/@local/hashql/ast/tests/ui/lower/type-extractor/definition/contractive-union.stdout similarity index 100% rename from libs/@local/hashql/ast/tests/ui/lowering/type-extractor/definition/contractive-union.stdout rename to libs/@local/hashql/ast/tests/ui/lower/type-extractor/definition/contractive-union.stdout diff --git a/libs/@local/hashql/ast/tests/ui/lowering/type-extractor/definition/dict-parameter-count-mismatch-too-many.jsonc b/libs/@local/hashql/ast/tests/ui/lower/type-extractor/definition/dict-parameter-count-mismatch-too-many.jsonc similarity index 100% rename from libs/@local/hashql/ast/tests/ui/lowering/type-extractor/definition/dict-parameter-count-mismatch-too-many.jsonc rename to libs/@local/hashql/ast/tests/ui/lower/type-extractor/definition/dict-parameter-count-mismatch-too-many.jsonc diff --git a/libs/@local/hashql/ast/tests/ui/lowering/type-extractor/definition/dict-parameter-count-mismatch-too-many.stderr b/libs/@local/hashql/ast/tests/ui/lower/type-extractor/definition/dict-parameter-count-mismatch-too-many.stderr similarity index 100% rename from libs/@local/hashql/ast/tests/ui/lowering/type-extractor/definition/dict-parameter-count-mismatch-too-many.stderr rename to libs/@local/hashql/ast/tests/ui/lower/type-extractor/definition/dict-parameter-count-mismatch-too-many.stderr diff --git a/libs/@local/hashql/ast/tests/ui/lowering/type-extractor/definition/dict-parameter-count-mismatch.jsonc b/libs/@local/hashql/ast/tests/ui/lower/type-extractor/definition/dict-parameter-count-mismatch.jsonc similarity index 100% rename from libs/@local/hashql/ast/tests/ui/lowering/type-extractor/definition/dict-parameter-count-mismatch.jsonc rename to libs/@local/hashql/ast/tests/ui/lower/type-extractor/definition/dict-parameter-count-mismatch.jsonc diff --git a/libs/@local/hashql/ast/tests/ui/lowering/type-extractor/definition/dict-parameter-count-mismatch.stderr b/libs/@local/hashql/ast/tests/ui/lower/type-extractor/definition/dict-parameter-count-mismatch.stderr similarity index 100% rename from libs/@local/hashql/ast/tests/ui/lowering/type-extractor/definition/dict-parameter-count-mismatch.stderr rename to libs/@local/hashql/ast/tests/ui/lower/type-extractor/definition/dict-parameter-count-mismatch.stderr diff --git a/libs/@local/hashql/ast/tests/ui/lowering/type-extractor/definition/duplicate-fields.jsonc b/libs/@local/hashql/ast/tests/ui/lower/type-extractor/definition/duplicate-fields.jsonc similarity index 100% rename from libs/@local/hashql/ast/tests/ui/lowering/type-extractor/definition/duplicate-fields.jsonc rename to libs/@local/hashql/ast/tests/ui/lower/type-extractor/definition/duplicate-fields.jsonc diff --git a/libs/@local/hashql/ast/tests/ui/lowering/type-extractor/definition/duplicate-fields.stderr b/libs/@local/hashql/ast/tests/ui/lower/type-extractor/definition/duplicate-fields.stderr similarity index 100% rename from libs/@local/hashql/ast/tests/ui/lowering/type-extractor/definition/duplicate-fields.stderr rename to libs/@local/hashql/ast/tests/ui/lower/type-extractor/definition/duplicate-fields.stderr diff --git a/libs/@local/hashql/ast/tests/ui/lowering/type-extractor/definition/env-type-interning.jsonc b/libs/@local/hashql/ast/tests/ui/lower/type-extractor/definition/env-type-interning.jsonc similarity index 100% rename from libs/@local/hashql/ast/tests/ui/lowering/type-extractor/definition/env-type-interning.jsonc rename to libs/@local/hashql/ast/tests/ui/lower/type-extractor/definition/env-type-interning.jsonc diff --git a/libs/@local/hashql/ast/tests/ui/lowering/type-extractor/definition/env-type-interning.stdout b/libs/@local/hashql/ast/tests/ui/lower/type-extractor/definition/env-type-interning.stdout similarity index 100% rename from libs/@local/hashql/ast/tests/ui/lowering/type-extractor/definition/env-type-interning.stdout rename to libs/@local/hashql/ast/tests/ui/lower/type-extractor/definition/env-type-interning.stdout diff --git a/libs/@local/hashql/ast/tests/ui/lowering/type-extractor/definition/generics-apply-params.jsonc b/libs/@local/hashql/ast/tests/ui/lower/type-extractor/definition/generics-apply-params.jsonc similarity index 100% rename from libs/@local/hashql/ast/tests/ui/lowering/type-extractor/definition/generics-apply-params.jsonc rename to libs/@local/hashql/ast/tests/ui/lower/type-extractor/definition/generics-apply-params.jsonc diff --git a/libs/@local/hashql/ast/tests/ui/lowering/type-extractor/definition/generics-apply-params.stdout b/libs/@local/hashql/ast/tests/ui/lower/type-extractor/definition/generics-apply-params.stdout similarity index 100% rename from libs/@local/hashql/ast/tests/ui/lowering/type-extractor/definition/generics-apply-params.stdout rename to libs/@local/hashql/ast/tests/ui/lower/type-extractor/definition/generics-apply-params.stdout diff --git a/libs/@local/hashql/ast/tests/ui/lowering/type-extractor/definition/generics-param-count-mismatch.jsonc b/libs/@local/hashql/ast/tests/ui/lower/type-extractor/definition/generics-param-count-mismatch.jsonc similarity index 100% rename from libs/@local/hashql/ast/tests/ui/lowering/type-extractor/definition/generics-param-count-mismatch.jsonc rename to libs/@local/hashql/ast/tests/ui/lower/type-extractor/definition/generics-param-count-mismatch.jsonc diff --git a/libs/@local/hashql/ast/tests/ui/lowering/type-extractor/definition/generics-param-count-mismatch.stderr b/libs/@local/hashql/ast/tests/ui/lower/type-extractor/definition/generics-param-count-mismatch.stderr similarity index 100% rename from libs/@local/hashql/ast/tests/ui/lowering/type-extractor/definition/generics-param-count-mismatch.stderr rename to libs/@local/hashql/ast/tests/ui/lower/type-extractor/definition/generics-param-count-mismatch.stderr diff --git a/libs/@local/hashql/ast/tests/ui/lowering/type-extractor/definition/generics-with-params.jsonc b/libs/@local/hashql/ast/tests/ui/lower/type-extractor/definition/generics-with-params.jsonc similarity index 100% rename from libs/@local/hashql/ast/tests/ui/lowering/type-extractor/definition/generics-with-params.jsonc rename to libs/@local/hashql/ast/tests/ui/lower/type-extractor/definition/generics-with-params.jsonc diff --git a/libs/@local/hashql/ast/tests/ui/lowering/type-extractor/definition/generics-with-params.stdout b/libs/@local/hashql/ast/tests/ui/lower/type-extractor/definition/generics-with-params.stdout similarity index 100% rename from libs/@local/hashql/ast/tests/ui/lowering/type-extractor/definition/generics-with-params.stdout rename to libs/@local/hashql/ast/tests/ui/lower/type-extractor/definition/generics-with-params.stdout diff --git a/libs/@local/hashql/ast/tests/ui/lowering/type-extractor/definition/global-generic-constraint-not-enough.jsonc b/libs/@local/hashql/ast/tests/ui/lower/type-extractor/definition/global-generic-constraint-not-enough.jsonc similarity index 100% rename from libs/@local/hashql/ast/tests/ui/lowering/type-extractor/definition/global-generic-constraint-not-enough.jsonc rename to libs/@local/hashql/ast/tests/ui/lower/type-extractor/definition/global-generic-constraint-not-enough.jsonc diff --git a/libs/@local/hashql/ast/tests/ui/lowering/type-extractor/definition/global-generic-constraint-not-enough.stderr b/libs/@local/hashql/ast/tests/ui/lower/type-extractor/definition/global-generic-constraint-not-enough.stderr similarity index 100% rename from libs/@local/hashql/ast/tests/ui/lowering/type-extractor/definition/global-generic-constraint-not-enough.stderr rename to libs/@local/hashql/ast/tests/ui/lower/type-extractor/definition/global-generic-constraint-not-enough.stderr diff --git a/libs/@local/hashql/ast/tests/ui/lowering/type-extractor/definition/global-generic-constraint-too-many.jsonc b/libs/@local/hashql/ast/tests/ui/lower/type-extractor/definition/global-generic-constraint-too-many.jsonc similarity index 100% rename from libs/@local/hashql/ast/tests/ui/lowering/type-extractor/definition/global-generic-constraint-too-many.jsonc rename to libs/@local/hashql/ast/tests/ui/lower/type-extractor/definition/global-generic-constraint-too-many.jsonc diff --git a/libs/@local/hashql/ast/tests/ui/lowering/type-extractor/definition/global-generic-constraint-too-many.stderr b/libs/@local/hashql/ast/tests/ui/lower/type-extractor/definition/global-generic-constraint-too-many.stderr similarity index 100% rename from libs/@local/hashql/ast/tests/ui/lowering/type-extractor/definition/global-generic-constraint-too-many.stderr rename to libs/@local/hashql/ast/tests/ui/lower/type-extractor/definition/global-generic-constraint-too-many.stderr diff --git a/libs/@local/hashql/ast/tests/ui/lowering/type-extractor/definition/identity-nominal.jsonc b/libs/@local/hashql/ast/tests/ui/lower/type-extractor/definition/identity-nominal.jsonc similarity index 100% rename from libs/@local/hashql/ast/tests/ui/lowering/type-extractor/definition/identity-nominal.jsonc rename to libs/@local/hashql/ast/tests/ui/lower/type-extractor/definition/identity-nominal.jsonc diff --git a/libs/@local/hashql/ast/tests/ui/lowering/type-extractor/definition/identity-nominal.stdout b/libs/@local/hashql/ast/tests/ui/lower/type-extractor/definition/identity-nominal.stdout similarity index 100% rename from libs/@local/hashql/ast/tests/ui/lowering/type-extractor/definition/identity-nominal.stdout rename to libs/@local/hashql/ast/tests/ui/lower/type-extractor/definition/identity-nominal.stdout diff --git a/libs/@local/hashql/ast/tests/ui/lowering/type-extractor/definition/identity-structural.jsonc b/libs/@local/hashql/ast/tests/ui/lower/type-extractor/definition/identity-structural.jsonc similarity index 100% rename from libs/@local/hashql/ast/tests/ui/lowering/type-extractor/definition/identity-structural.jsonc rename to libs/@local/hashql/ast/tests/ui/lower/type-extractor/definition/identity-structural.jsonc diff --git a/libs/@local/hashql/ast/tests/ui/lowering/type-extractor/definition/identity-structural.stdout b/libs/@local/hashql/ast/tests/ui/lower/type-extractor/definition/identity-structural.stdout similarity index 100% rename from libs/@local/hashql/ast/tests/ui/lowering/type-extractor/definition/identity-structural.stdout rename to libs/@local/hashql/ast/tests/ui/lower/type-extractor/definition/identity-structural.stdout diff --git a/libs/@local/hashql/ast/tests/ui/lowering/type-extractor/definition/infer-with-arguments.jsonc b/libs/@local/hashql/ast/tests/ui/lower/type-extractor/definition/infer-with-arguments.jsonc similarity index 100% rename from libs/@local/hashql/ast/tests/ui/lowering/type-extractor/definition/infer-with-arguments.jsonc rename to libs/@local/hashql/ast/tests/ui/lower/type-extractor/definition/infer-with-arguments.jsonc diff --git a/libs/@local/hashql/ast/tests/ui/lowering/type-extractor/definition/infer-with-arguments.stderr b/libs/@local/hashql/ast/tests/ui/lower/type-extractor/definition/infer-with-arguments.stderr similarity index 100% rename from libs/@local/hashql/ast/tests/ui/lowering/type-extractor/definition/infer-with-arguments.stderr rename to libs/@local/hashql/ast/tests/ui/lower/type-extractor/definition/infer-with-arguments.stderr diff --git a/libs/@local/hashql/ast/tests/ui/lowering/type-extractor/definition/intrinsic-dict-translation.jsonc b/libs/@local/hashql/ast/tests/ui/lower/type-extractor/definition/intrinsic-dict-translation.jsonc similarity index 100% rename from libs/@local/hashql/ast/tests/ui/lowering/type-extractor/definition/intrinsic-dict-translation.jsonc rename to libs/@local/hashql/ast/tests/ui/lower/type-extractor/definition/intrinsic-dict-translation.jsonc diff --git a/libs/@local/hashql/ast/tests/ui/lowering/type-extractor/definition/intrinsic-dict-translation.stdout b/libs/@local/hashql/ast/tests/ui/lower/type-extractor/definition/intrinsic-dict-translation.stdout similarity index 100% rename from libs/@local/hashql/ast/tests/ui/lowering/type-extractor/definition/intrinsic-dict-translation.stdout rename to libs/@local/hashql/ast/tests/ui/lower/type-extractor/definition/intrinsic-dict-translation.stdout diff --git a/libs/@local/hashql/ast/tests/ui/lowering/type-extractor/definition/intrinsic-list-translation.jsonc b/libs/@local/hashql/ast/tests/ui/lower/type-extractor/definition/intrinsic-list-translation.jsonc similarity index 100% rename from libs/@local/hashql/ast/tests/ui/lowering/type-extractor/definition/intrinsic-list-translation.jsonc rename to libs/@local/hashql/ast/tests/ui/lower/type-extractor/definition/intrinsic-list-translation.jsonc diff --git a/libs/@local/hashql/ast/tests/ui/lowering/type-extractor/definition/intrinsic-list-translation.stdout b/libs/@local/hashql/ast/tests/ui/lower/type-extractor/definition/intrinsic-list-translation.stdout similarity index 100% rename from libs/@local/hashql/ast/tests/ui/lowering/type-extractor/definition/intrinsic-list-translation.stdout rename to libs/@local/hashql/ast/tests/ui/lower/type-extractor/definition/intrinsic-list-translation.stdout diff --git a/libs/@local/hashql/ast/tests/ui/lowering/type-extractor/definition/list-parameter-count-mismatch-too-many.jsonc b/libs/@local/hashql/ast/tests/ui/lower/type-extractor/definition/list-parameter-count-mismatch-too-many.jsonc similarity index 100% rename from libs/@local/hashql/ast/tests/ui/lowering/type-extractor/definition/list-parameter-count-mismatch-too-many.jsonc rename to libs/@local/hashql/ast/tests/ui/lower/type-extractor/definition/list-parameter-count-mismatch-too-many.jsonc diff --git a/libs/@local/hashql/ast/tests/ui/lowering/type-extractor/definition/list-parameter-count-mismatch-too-many.stderr b/libs/@local/hashql/ast/tests/ui/lower/type-extractor/definition/list-parameter-count-mismatch-too-many.stderr similarity index 100% rename from libs/@local/hashql/ast/tests/ui/lowering/type-extractor/definition/list-parameter-count-mismatch-too-many.stderr rename to libs/@local/hashql/ast/tests/ui/lower/type-extractor/definition/list-parameter-count-mismatch-too-many.stderr diff --git a/libs/@local/hashql/ast/tests/ui/lowering/type-extractor/definition/list-parameter-count-mismatch.jsonc b/libs/@local/hashql/ast/tests/ui/lower/type-extractor/definition/list-parameter-count-mismatch.jsonc similarity index 100% rename from libs/@local/hashql/ast/tests/ui/lowering/type-extractor/definition/list-parameter-count-mismatch.jsonc rename to libs/@local/hashql/ast/tests/ui/lower/type-extractor/definition/list-parameter-count-mismatch.jsonc diff --git a/libs/@local/hashql/ast/tests/ui/lowering/type-extractor/definition/list-parameter-count-mismatch.stderr b/libs/@local/hashql/ast/tests/ui/lower/type-extractor/definition/list-parameter-count-mismatch.stderr similarity index 100% rename from libs/@local/hashql/ast/tests/ui/lowering/type-extractor/definition/list-parameter-count-mismatch.stderr rename to libs/@local/hashql/ast/tests/ui/lower/type-extractor/definition/list-parameter-count-mismatch.stderr diff --git a/libs/@local/hashql/ast/tests/ui/lowering/type-extractor/definition/locals-generic-params-struct.jsonc b/libs/@local/hashql/ast/tests/ui/lower/type-extractor/definition/locals-generic-params-struct.jsonc similarity index 100% rename from libs/@local/hashql/ast/tests/ui/lowering/type-extractor/definition/locals-generic-params-struct.jsonc rename to libs/@local/hashql/ast/tests/ui/lower/type-extractor/definition/locals-generic-params-struct.jsonc diff --git a/libs/@local/hashql/ast/tests/ui/lowering/type-extractor/definition/locals-generic-params-struct.stdout b/libs/@local/hashql/ast/tests/ui/lower/type-extractor/definition/locals-generic-params-struct.stdout similarity index 100% rename from libs/@local/hashql/ast/tests/ui/lowering/type-extractor/definition/locals-generic-params-struct.stdout rename to libs/@local/hashql/ast/tests/ui/lower/type-extractor/definition/locals-generic-params-struct.stdout diff --git a/libs/@local/hashql/ast/tests/ui/lowering/type-extractor/definition/locals-generic-params.jsonc b/libs/@local/hashql/ast/tests/ui/lower/type-extractor/definition/locals-generic-params.jsonc similarity index 100% rename from libs/@local/hashql/ast/tests/ui/lowering/type-extractor/definition/locals-generic-params.jsonc rename to libs/@local/hashql/ast/tests/ui/lower/type-extractor/definition/locals-generic-params.jsonc diff --git a/libs/@local/hashql/ast/tests/ui/lowering/type-extractor/definition/locals-generic-params.stdout b/libs/@local/hashql/ast/tests/ui/lower/type-extractor/definition/locals-generic-params.stdout similarity index 100% rename from libs/@local/hashql/ast/tests/ui/lowering/type-extractor/definition/locals-generic-params.stdout rename to libs/@local/hashql/ast/tests/ui/lower/type-extractor/definition/locals-generic-params.stdout diff --git a/libs/@local/hashql/ast/tests/ui/lowering/type-extractor/definition/locals-type-extraction.jsonc b/libs/@local/hashql/ast/tests/ui/lower/type-extractor/definition/locals-type-extraction.jsonc similarity index 100% rename from libs/@local/hashql/ast/tests/ui/lowering/type-extractor/definition/locals-type-extraction.jsonc rename to libs/@local/hashql/ast/tests/ui/lower/type-extractor/definition/locals-type-extraction.jsonc diff --git a/libs/@local/hashql/ast/tests/ui/lowering/type-extractor/definition/locals-type-extraction.stdout b/libs/@local/hashql/ast/tests/ui/lower/type-extractor/definition/locals-type-extraction.stdout similarity index 100% rename from libs/@local/hashql/ast/tests/ui/lowering/type-extractor/definition/locals-type-extraction.stdout rename to libs/@local/hashql/ast/tests/ui/lower/type-extractor/definition/locals-type-extraction.stdout diff --git a/libs/@local/hashql/ast/tests/ui/lowering/type-extractor/definition/non-contractive-self.jsonc b/libs/@local/hashql/ast/tests/ui/lower/type-extractor/definition/non-contractive-self.jsonc similarity index 100% rename from libs/@local/hashql/ast/tests/ui/lowering/type-extractor/definition/non-contractive-self.jsonc rename to libs/@local/hashql/ast/tests/ui/lower/type-extractor/definition/non-contractive-self.jsonc diff --git a/libs/@local/hashql/ast/tests/ui/lowering/type-extractor/definition/non-contractive-self.stderr b/libs/@local/hashql/ast/tests/ui/lower/type-extractor/definition/non-contractive-self.stderr similarity index 100% rename from libs/@local/hashql/ast/tests/ui/lowering/type-extractor/definition/non-contractive-self.stderr rename to libs/@local/hashql/ast/tests/ui/lower/type-extractor/definition/non-contractive-self.stderr diff --git a/libs/@local/hashql/ast/tests/ui/lowering/type-extractor/definition/non-contractive-type.jsonc b/libs/@local/hashql/ast/tests/ui/lower/type-extractor/definition/non-contractive-type.jsonc similarity index 100% rename from libs/@local/hashql/ast/tests/ui/lowering/type-extractor/definition/non-contractive-type.jsonc rename to libs/@local/hashql/ast/tests/ui/lower/type-extractor/definition/non-contractive-type.jsonc diff --git a/libs/@local/hashql/ast/tests/ui/lowering/type-extractor/definition/non-contractive-type.stderr b/libs/@local/hashql/ast/tests/ui/lower/type-extractor/definition/non-contractive-type.stderr similarity index 100% rename from libs/@local/hashql/ast/tests/ui/lowering/type-extractor/definition/non-contractive-type.stderr rename to libs/@local/hashql/ast/tests/ui/lower/type-extractor/definition/non-contractive-type.stderr diff --git a/libs/@local/hashql/ast/tests/ui/lowering/type-extractor/definition/path-global-resolution.jsonc b/libs/@local/hashql/ast/tests/ui/lower/type-extractor/definition/path-global-resolution.jsonc similarity index 100% rename from libs/@local/hashql/ast/tests/ui/lowering/type-extractor/definition/path-global-resolution.jsonc rename to libs/@local/hashql/ast/tests/ui/lower/type-extractor/definition/path-global-resolution.jsonc diff --git a/libs/@local/hashql/ast/tests/ui/lowering/type-extractor/definition/path-global-resolution.stdout b/libs/@local/hashql/ast/tests/ui/lower/type-extractor/definition/path-global-resolution.stdout similarity index 100% rename from libs/@local/hashql/ast/tests/ui/lowering/type-extractor/definition/path-global-resolution.stdout rename to libs/@local/hashql/ast/tests/ui/lower/type-extractor/definition/path-global-resolution.stdout diff --git a/libs/@local/hashql/ast/tests/ui/lowering/type-extractor/definition/path-local-resolution.jsonc b/libs/@local/hashql/ast/tests/ui/lower/type-extractor/definition/path-local-resolution.jsonc similarity index 100% rename from libs/@local/hashql/ast/tests/ui/lowering/type-extractor/definition/path-local-resolution.jsonc rename to libs/@local/hashql/ast/tests/ui/lower/type-extractor/definition/path-local-resolution.jsonc diff --git a/libs/@local/hashql/ast/tests/ui/lowering/type-extractor/definition/path-local-resolution.stdout b/libs/@local/hashql/ast/tests/ui/lower/type-extractor/definition/path-local-resolution.stdout similarity index 100% rename from libs/@local/hashql/ast/tests/ui/lowering/type-extractor/definition/path-local-resolution.stdout rename to libs/@local/hashql/ast/tests/ui/lower/type-extractor/definition/path-local-resolution.stdout diff --git a/libs/@local/hashql/ast/tests/ui/lowering/type-extractor/definition/result.jsonc b/libs/@local/hashql/ast/tests/ui/lower/type-extractor/definition/result.jsonc similarity index 100% rename from libs/@local/hashql/ast/tests/ui/lowering/type-extractor/definition/result.jsonc rename to libs/@local/hashql/ast/tests/ui/lower/type-extractor/definition/result.jsonc diff --git a/libs/@local/hashql/ast/tests/ui/lowering/type-extractor/definition/result.stdout b/libs/@local/hashql/ast/tests/ui/lower/type-extractor/definition/result.stdout similarity index 100% rename from libs/@local/hashql/ast/tests/ui/lowering/type-extractor/definition/result.stdout rename to libs/@local/hashql/ast/tests/ui/lower/type-extractor/definition/result.stdout diff --git a/libs/@local/hashql/ast/tests/ui/lowering/type-extractor/definition/translation-infer.jsonc b/libs/@local/hashql/ast/tests/ui/lower/type-extractor/definition/translation-infer.jsonc similarity index 100% rename from libs/@local/hashql/ast/tests/ui/lowering/type-extractor/definition/translation-infer.jsonc rename to libs/@local/hashql/ast/tests/ui/lower/type-extractor/definition/translation-infer.jsonc diff --git a/libs/@local/hashql/ast/tests/ui/lowering/type-extractor/definition/translation-infer.stdout b/libs/@local/hashql/ast/tests/ui/lower/type-extractor/definition/translation-infer.stdout similarity index 100% rename from libs/@local/hashql/ast/tests/ui/lowering/type-extractor/definition/translation-infer.stdout rename to libs/@local/hashql/ast/tests/ui/lower/type-extractor/definition/translation-infer.stdout diff --git a/libs/@local/hashql/ast/tests/ui/lowering/type-extractor/definition/translation-intersection.jsonc b/libs/@local/hashql/ast/tests/ui/lower/type-extractor/definition/translation-intersection.jsonc similarity index 100% rename from libs/@local/hashql/ast/tests/ui/lowering/type-extractor/definition/translation-intersection.jsonc rename to libs/@local/hashql/ast/tests/ui/lower/type-extractor/definition/translation-intersection.jsonc diff --git a/libs/@local/hashql/ast/tests/ui/lowering/type-extractor/definition/translation-intersection.stdout b/libs/@local/hashql/ast/tests/ui/lower/type-extractor/definition/translation-intersection.stdout similarity index 100% rename from libs/@local/hashql/ast/tests/ui/lowering/type-extractor/definition/translation-intersection.stdout rename to libs/@local/hashql/ast/tests/ui/lower/type-extractor/definition/translation-intersection.stdout diff --git a/libs/@local/hashql/ast/tests/ui/lowering/type-extractor/definition/translation-struct.jsonc b/libs/@local/hashql/ast/tests/ui/lower/type-extractor/definition/translation-struct.jsonc similarity index 100% rename from libs/@local/hashql/ast/tests/ui/lowering/type-extractor/definition/translation-struct.jsonc rename to libs/@local/hashql/ast/tests/ui/lower/type-extractor/definition/translation-struct.jsonc diff --git a/libs/@local/hashql/ast/tests/ui/lowering/type-extractor/definition/translation-struct.stdout b/libs/@local/hashql/ast/tests/ui/lower/type-extractor/definition/translation-struct.stdout similarity index 100% rename from libs/@local/hashql/ast/tests/ui/lowering/type-extractor/definition/translation-struct.stdout rename to libs/@local/hashql/ast/tests/ui/lower/type-extractor/definition/translation-struct.stdout diff --git a/libs/@local/hashql/ast/tests/ui/lowering/type-extractor/definition/translation-tuple.jsonc b/libs/@local/hashql/ast/tests/ui/lower/type-extractor/definition/translation-tuple.jsonc similarity index 100% rename from libs/@local/hashql/ast/tests/ui/lowering/type-extractor/definition/translation-tuple.jsonc rename to libs/@local/hashql/ast/tests/ui/lower/type-extractor/definition/translation-tuple.jsonc diff --git a/libs/@local/hashql/ast/tests/ui/lowering/type-extractor/definition/translation-tuple.stdout b/libs/@local/hashql/ast/tests/ui/lower/type-extractor/definition/translation-tuple.stdout similarity index 100% rename from libs/@local/hashql/ast/tests/ui/lowering/type-extractor/definition/translation-tuple.stdout rename to libs/@local/hashql/ast/tests/ui/lower/type-extractor/definition/translation-tuple.stdout diff --git a/libs/@local/hashql/ast/tests/ui/lowering/type-extractor/definition/translation-union.jsonc b/libs/@local/hashql/ast/tests/ui/lower/type-extractor/definition/translation-union.jsonc similarity index 100% rename from libs/@local/hashql/ast/tests/ui/lowering/type-extractor/definition/translation-union.jsonc rename to libs/@local/hashql/ast/tests/ui/lower/type-extractor/definition/translation-union.jsonc diff --git a/libs/@local/hashql/ast/tests/ui/lowering/type-extractor/definition/translation-union.stdout b/libs/@local/hashql/ast/tests/ui/lower/type-extractor/definition/translation-union.stdout similarity index 100% rename from libs/@local/hashql/ast/tests/ui/lowering/type-extractor/definition/translation-union.stdout rename to libs/@local/hashql/ast/tests/ui/lower/type-extractor/definition/translation-union.stdout diff --git a/libs/@local/hashql/ast/tests/ui/lowering/type-extractor/definition/unused-generic-parameter.jsonc b/libs/@local/hashql/ast/tests/ui/lower/type-extractor/definition/unused-generic-parameter.jsonc similarity index 100% rename from libs/@local/hashql/ast/tests/ui/lowering/type-extractor/definition/unused-generic-parameter.jsonc rename to libs/@local/hashql/ast/tests/ui/lower/type-extractor/definition/unused-generic-parameter.jsonc diff --git a/libs/@local/hashql/ast/tests/ui/lowering/type-extractor/definition/unused-generic-parameter.stderr b/libs/@local/hashql/ast/tests/ui/lower/type-extractor/definition/unused-generic-parameter.stderr similarity index 100% rename from libs/@local/hashql/ast/tests/ui/lowering/type-extractor/definition/unused-generic-parameter.stderr rename to libs/@local/hashql/ast/tests/ui/lower/type-extractor/definition/unused-generic-parameter.stderr diff --git a/libs/@local/hashql/ast/tests/ui/lowering/type-extractor/generic-type-resolution.jsonc b/libs/@local/hashql/ast/tests/ui/lower/type-extractor/generic-type-resolution.jsonc similarity index 100% rename from libs/@local/hashql/ast/tests/ui/lowering/type-extractor/generic-type-resolution.jsonc rename to libs/@local/hashql/ast/tests/ui/lower/type-extractor/generic-type-resolution.jsonc diff --git a/libs/@local/hashql/ast/tests/ui/lowering/type-extractor/generic-type-resolution.stdout b/libs/@local/hashql/ast/tests/ui/lower/type-extractor/generic-type-resolution.stdout similarity index 100% rename from libs/@local/hashql/ast/tests/ui/lowering/type-extractor/generic-type-resolution.stdout rename to libs/@local/hashql/ast/tests/ui/lower/type-extractor/generic-type-resolution.stdout diff --git a/libs/@local/hashql/ast/tests/ui/lowering/type-extractor/global-type-resolution.jsonc b/libs/@local/hashql/ast/tests/ui/lower/type-extractor/global-type-resolution.jsonc similarity index 100% rename from libs/@local/hashql/ast/tests/ui/lowering/type-extractor/global-type-resolution.jsonc rename to libs/@local/hashql/ast/tests/ui/lower/type-extractor/global-type-resolution.jsonc diff --git a/libs/@local/hashql/ast/tests/ui/lowering/type-extractor/global-type-resolution.stdout b/libs/@local/hashql/ast/tests/ui/lower/type-extractor/global-type-resolution.stdout similarity index 100% rename from libs/@local/hashql/ast/tests/ui/lowering/type-extractor/global-type-resolution.stdout rename to libs/@local/hashql/ast/tests/ui/lower/type-extractor/global-type-resolution.stdout diff --git a/libs/@local/hashql/ast/tests/ui/lowering/type-extractor/graph-pipeline-inferred-closure.jsonc b/libs/@local/hashql/ast/tests/ui/lower/type-extractor/graph-pipeline-inferred-closure.jsonc similarity index 100% rename from libs/@local/hashql/ast/tests/ui/lowering/type-extractor/graph-pipeline-inferred-closure.jsonc rename to libs/@local/hashql/ast/tests/ui/lower/type-extractor/graph-pipeline-inferred-closure.jsonc diff --git a/libs/@local/hashql/ast/tests/ui/lowering/type-extractor/graph-pipeline-inferred-closure.stdout b/libs/@local/hashql/ast/tests/ui/lower/type-extractor/graph-pipeline-inferred-closure.stdout similarity index 100% rename from libs/@local/hashql/ast/tests/ui/lowering/type-extractor/graph-pipeline-inferred-closure.stdout rename to libs/@local/hashql/ast/tests/ui/lower/type-extractor/graph-pipeline-inferred-closure.stdout diff --git a/libs/@local/hashql/ast/tests/ui/lowering/type-extractor/let-binding-type.jsonc b/libs/@local/hashql/ast/tests/ui/lower/type-extractor/let-binding-type.jsonc similarity index 100% rename from libs/@local/hashql/ast/tests/ui/lowering/type-extractor/let-binding-type.jsonc rename to libs/@local/hashql/ast/tests/ui/lower/type-extractor/let-binding-type.jsonc diff --git a/libs/@local/hashql/ast/tests/ui/lowering/type-extractor/let-binding-type.stdout b/libs/@local/hashql/ast/tests/ui/lower/type-extractor/let-binding-type.stdout similarity index 100% rename from libs/@local/hashql/ast/tests/ui/lowering/type-extractor/let-binding-type.stdout rename to libs/@local/hashql/ast/tests/ui/lower/type-extractor/let-binding-type.stdout diff --git a/libs/@local/hashql/ast/tests/ui/lowering/type-extractor/local-type-resolution.jsonc b/libs/@local/hashql/ast/tests/ui/lower/type-extractor/local-type-resolution.jsonc similarity index 100% rename from libs/@local/hashql/ast/tests/ui/lowering/type-extractor/local-type-resolution.jsonc rename to libs/@local/hashql/ast/tests/ui/lower/type-extractor/local-type-resolution.jsonc diff --git a/libs/@local/hashql/ast/tests/ui/lowering/type-extractor/local-type-resolution.stdout b/libs/@local/hashql/ast/tests/ui/lower/type-extractor/local-type-resolution.stdout similarity index 100% rename from libs/@local/hashql/ast/tests/ui/lowering/type-extractor/local-type-resolution.stdout rename to libs/@local/hashql/ast/tests/ui/lower/type-extractor/local-type-resolution.stdout diff --git a/libs/@local/hashql/ast/tests/ui/lowering/type-extractor/nested-type-nodes.jsonc b/libs/@local/hashql/ast/tests/ui/lower/type-extractor/nested-type-nodes.jsonc similarity index 100% rename from libs/@local/hashql/ast/tests/ui/lowering/type-extractor/nested-type-nodes.jsonc rename to libs/@local/hashql/ast/tests/ui/lower/type-extractor/nested-type-nodes.jsonc diff --git a/libs/@local/hashql/ast/tests/ui/lowering/type-extractor/nested-type-nodes.stdout b/libs/@local/hashql/ast/tests/ui/lower/type-extractor/nested-type-nodes.stdout similarity index 100% rename from libs/@local/hashql/ast/tests/ui/lowering/type-extractor/nested-type-nodes.stdout rename to libs/@local/hashql/ast/tests/ui/lower/type-extractor/nested-type-nodes.stdout diff --git a/libs/@local/hashql/ast/tests/ui/lowering/type-extractor/union-type.jsonc b/libs/@local/hashql/ast/tests/ui/lower/type-extractor/union-type.jsonc similarity index 100% rename from libs/@local/hashql/ast/tests/ui/lowering/type-extractor/union-type.jsonc rename to libs/@local/hashql/ast/tests/ui/lower/type-extractor/union-type.jsonc diff --git a/libs/@local/hashql/ast/tests/ui/lowering/type-extractor/union-type.stdout b/libs/@local/hashql/ast/tests/ui/lower/type-extractor/union-type.stdout similarity index 100% rename from libs/@local/hashql/ast/tests/ui/lowering/type-extractor/union-type.stdout rename to libs/@local/hashql/ast/tests/ui/lower/type-extractor/union-type.stdout diff --git a/libs/@local/hashql/hir/src/reify/mod.rs b/libs/@local/hashql/hir/src/reify/mod.rs index 47035a69c5f..3b1890f1c1e 100644 --- a/libs/@local/hashql/hir/src/reify/mod.rs +++ b/libs/@local/hashql/hir/src/reify/mod.rs @@ -170,7 +170,7 @@ impl<'heap> ReificationContext<'_, '_, '_, 'heap> { let mut fields = SmallVec::with_capacity(len); for (index, element) in elements.into_iter().enumerate() { - let Some(field) = self.expr(*element.value) else { + let Some(field) = self.expr(element.value) else { continue; }; @@ -244,7 +244,7 @@ impl<'heap> ReificationContext<'_, '_, '_, 'heap> { let mut fields = SmallVec::with_capacity(len); for (index, entry) in entries.into_iter().enumerate() { - let Some(value) = self.expr(*entry.value) else { + let Some(value) = self.expr(entry.value) else { continue; }; diff --git a/libs/@local/hashql/syntax-jexpr/src/parser/object/struct.rs b/libs/@local/hashql/syntax-jexpr/src/parser/object/struct.rs index b2386cc31a2..224ba0724dd 100644 --- a/libs/@local/hashql/syntax-jexpr/src/parser/object/struct.rs +++ b/libs/@local/hashql/syntax-jexpr/src/parser/object/struct.rs @@ -115,7 +115,7 @@ fn parse_struct<'heap>( id: NodeId::PLACEHOLDER, span: state.insert_range(key.span.cover(value_span)), key: ident, - value: Box::new_in(value, state.heap()), + value, }); Ok(()) diff --git a/libs/@local/hashql/syntax-jexpr/src/parser/object/tuple.rs b/libs/@local/hashql/syntax-jexpr/src/parser/object/tuple.rs index ff1ac458976..d7701dbd064 100644 --- a/libs/@local/hashql/syntax-jexpr/src/parser/object/tuple.rs +++ b/libs/@local/hashql/syntax-jexpr/src/parser/object/tuple.rs @@ -96,7 +96,7 @@ fn parse_tuple<'heap>( let element = TupleElement { id: NodeId::PLACEHOLDER, span: expr.span, - value: Box::new_in(expr, state.heap()), + value: expr, }; elements.push(element); diff --git a/libs/@local/hashql/syntax-jexpr/src/parser/string/generic.rs b/libs/@local/hashql/syntax-jexpr/src/parser/string/generic.rs index 8ca09096184..46982974264 100644 --- a/libs/@local/hashql/syntax-jexpr/src/parser/string/generic.rs +++ b/libs/@local/hashql/syntax-jexpr/src/parser/string/generic.rs @@ -30,7 +30,7 @@ where Ok(GenericArgument { id: NodeId::PLACEHOLDER, span: input.state.span(span), - r#type: Box::new_in(r#type, input.state.heap), + r#type, }) } @@ -50,7 +50,7 @@ where id: NodeId::PLACEHOLDER, span: input.state.span(span), name, - bound: Some(Box::new_in(bound, input.state.heap)), + bound: Some(bound), }) } @@ -70,7 +70,7 @@ where id: NodeId::PLACEHOLDER, span: input.state.span(span), name, - bound: bound.map(|bound| Box::new_in(bound, input.state.heap)), + bound, }) } From 445bd4833577e7fa6dfc9c2ec43ea50fc9dfa7ec Mon Sep 17 00:00:00 2001 From: Bilal Mahmoud <7252775+indietyp@users.noreply.github.com> Date: Mon, 15 Jun 2026 12:31:53 +0200 Subject: [PATCH 29/55] fix: compiletest --- .../graph/api/src/rest/hashql/compile.rs | 2 +- .../ast/tests/ui/lower/expander/.spec.toml | 1 + .../basic-absolute-imports.jsonc | 0 .../basic-absolute-imports.stdout | 0 .../import-resolver/basic-glob-import.jsonc | 0 .../import-resolver/basic-glob-import.stdout | 0 .../basic-relative-import.jsonc | 0 .../basic-relative-import.stdout | 0 .../basic-renamed-import.jsonc | 0 .../basic-renamed-import.stdout | 0 .../closure-complex-return-type.jsonc | 0 .../closure-complex-return-type.stdout | 0 .../closure-generic-not-resolved.jsonc | 0 .../closure-generic-not-resolved.stdout | 0 .../closure-mixed-resolution.jsonc | 0 .../closure-mixed-resolution.stdout | 0 .../closure-param-not-resolved.jsonc | 0 .../closure-param-not-resolved.stdout | 0 .../complex-nested-type-parameters.jsonc | 0 .../complex-nested-type-parameters.stdout | 0 .../complex-path-resolution.jsonc | 0 .../complex-path-resolution.stdout | 0 .../continue/unresolved-nested.jsonc | 1 + .../continue/unresolved-nested.stderr | 0 .../continue/unresolved-nested.stdout | 0 .../continue/unresolved-type.jsonc | 1 + .../continue/unresolved-type.stderr | 0 .../continue/unresolved-type.stdout | 0 .../continue/unresolved-value.jsonc | 1 + .../continue/unresolved-value.stderr | 0 .../continue/unresolved-value.stdout | 0 .../continue/use-not-found.jsonc | 1 + .../continue/use-not-found.stderr | 0 .../continue/use-not-found.stdout | 0 .../generic-argument-absolute-path.jsonc | 0 .../generic-argument-absolute-path.stderr | 0 .../generic-argument-use-path.jsonc | 0 .../generic-argument-use-path.stderr | 0 .../generic-arguments-in-final-segment.jsonc | 0 .../generic-arguments-in-final-segment.stdout | 0 .../generic-constraints-type.jsonc | 0 .../generic-constraints-type.stdout | 0 .../generic-constraints.newtype.jsonc | 0 .../generic-constraints.newtype.stdout | 0 .../import-resolver/glob-not-found.jsonc | 0 .../import-resolver/glob-not-found.stderr | 0 .../import-resolver/item-not-found.jsonc | 0 .../import-resolver/item-not-found.stderr | 0 .../local-binding-recursive-type.jsonc | 0 .../local-binding-recursive-type.stdout | 0 .../local-binding-recursive-value.jsonc | 0 .../local-binding-recursive-value.stdout | 0 .../import-resolver/local-binding-type.jsonc | 0 .../import-resolver/local-binding-type.stdout | 0 .../import-resolver/local-binding-value.jsonc | 0 .../local-binding-value.stdout | 0 .../import-resolver/module-not-found.jsonc | 0 .../import-resolver/module-not-found.stderr | 0 .../multiple-named-imports.jsonc | 0 .../multiple-named-imports.stdout | 0 .../import-resolver/nested-resolution.jsonc | 0 .../import-resolver/nested-resolution.stdout | 0 .../import-resolver/newtype-scope.jsonc | 0 .../import-resolver/newtype-scope.stdout | 0 .../import-resolver/path-normalization.jsonc | 0 .../import-resolver/path-normalization.stdout | 0 .../import-resolver/prelude.jsonc | 0 .../import-resolver/prelude.stdout | 0 ...ression-generic-arguments-identifier.jsonc | 0 ...ession-generic-arguments-identifier.stdout | 0 .../import-resolver/rollback.jsonc | 0 .../import-resolver/rollback.stderr | 0 .../import-resolver/shadowed-imports.jsonc | 0 .../import-resolver/shadowed-imports.stdout | 0 .../import-resolver/shadowed-prelude.jsonc | 0 .../import-resolver/shadowed-prelude.stdout | 0 .../import-resolver/substitution.jsonc | 0 .../import-resolver/substitution.stdout | 0 .../universe-ambiguity-resolution.jsonc | 0 .../universe-ambiguity-resolution.stdout | 0 .../import-resolver/unresolver-variable.jsonc | 0 .../unresolver-variable.stderr | 0 .../import-resolver/use-shadowing-let.jsonc | 0 .../import-resolver/use-shadowing-let.stdout | 0 .../import-resolver/use-shadowing-use.jsonc | 0 .../import-resolver/use-shadowing-use.stdout | 0 .../absolute-path.jsonc | 0 .../absolute-path.stdout | 0 .../alias-absolute-path.jsonc | 0 .../alias-absolute-path.stdout | 0 .../alias-symbol.jsonc | 0 .../alias-symbol.stdout | 0 .../invalid-let-expr.jsonc | 0 .../invalid-let-expr.stdout | 0 .../let-3-alias.jsonc | 0 .../let-3-alias.stdout | 0 .../pre-expansion-name-resolver/let-3.jsonc | 0 .../pre-expansion-name-resolver/let-3.stdout | 0 .../let-4-alias.jsonc | 0 .../let-4-alias.stdout | 0 .../pre-expansion-name-resolver/let-4.jsonc | 0 .../pre-expansion-name-resolver/let-4.stdout | 0 .../let-absolute.jsonc | 0 .../let-absolute.stdout | 0 .../let-ident-generic.jsonc | 0 .../let-ident-generic.stdout | 0 .../multi-segment-resolution.jsonc | 0 .../multi-segment-resolution.stdout | 0 .../nested-let.jsonc | 0 .../nested-let.stdout | 0 .../newtype-3-alias.jsonc | 0 .../newtype-3-alias.stdout | 0 .../newtype-3.jsonc | 0 .../newtype-3.stdout | 0 .../newtype-4.jsonc | 0 .../newtype-4.stdout | 0 .../re-assign-prelude-diverging.jsonc | 0 .../re-assign-prelude-diverging.stdout | 0 .../re-assign-prelude.jsonc | 0 .../re-assign-prelude.stdout | 0 .../re-assign.jsonc | 0 .../re-assign.stdout | 0 .../resolve-generics.jsonc | 0 .../resolve-generics.stdout | 0 .../resolve-symbol.jsonc | 0 .../resolve-symbol.stdout | 0 .../restoration-bindings.jsonc | 0 .../restoration-bindings.stdout | 0 .../type-3-alias.jsonc | 0 .../type-3-alias.stdout | 0 .../pre-expansion-name-resolver/type-3.jsonc | 0 .../pre-expansion-name-resolver/type-3.stdout | 0 .../pre-expansion-name-resolver/type-4.jsonc | 0 .../pre-expansion-name-resolver/type-4.stdout | 0 .../special-form-expander/access-1.jsonc | 0 .../special-form-expander/access-1.stderr | 0 .../special-form-expander/access-2.jsonc | 0 .../special-form-expander/access-2.stdout | 0 .../special-form-expander/access-3.jsonc | 0 .../special-form-expander/access-3.stderr | 0 .../access-field-index-out-of-bounds.jsonc | 0 .../access-field-index-out-of-bounds.stderr | 0 .../access-field-literal-boolean.jsonc | 0 .../access-field-literal-boolean.stderr | 0 .../access-field-literal-string.jsonc | 0 .../access-field-literal-string.stderr | 0 ...access-field-literal-type-annotation.jsonc | 0 ...ccess-field-literal-type-annotation.stderr | 0 .../access-field-literal-valid.jsonc | 0 .../access-field-literal-valid.stdout | 0 .../special-form-expander/as-1.jsonc | 0 .../special-form-expander/as-1.stderr | 0 .../special-form-expander/as-2.jsonc | 0 .../special-form-expander/as-2.stdout | 0 .../special-form-expander/as-3.jsonc | 0 .../special-form-expander/as-3.stderr | 0 .../does-not-touch-non-kernel.jsonc | 0 .../does-not-touch-non-kernel.stdout | 0 .../special-form-expander/fn-3.jsonc | 0 .../special-form-expander/fn-3.stderr | 0 .../special-form-expander/fn-4.jsonc | 0 .../special-form-expander/fn-4.stdout | 0 .../special-form-expander/fn-5.jsonc | 0 .../special-form-expander/fn-5.stderr | 0 .../fn-generics-duplicates.jsonc | 0 .../fn-generics-duplicates.stderr | 0 .../fn-generics-literal.jsonc | 0 .../fn-generics-literal.stderr | 0 .../fn-generics-struct-literal.jsonc | 0 .../fn-generics-struct-literal.stderr | 0 .../fn-generics-struct-type.jsonc | 0 .../fn-generics-struct-type.stderr | 0 .../fn-generics-struct-underscore.jsonc | 0 .../fn-generics-struct-underscore.stdout | 0 .../fn-generics-struct.jsonc | 0 .../fn-generics-struct.stdout | 0 .../fn-generics-tuple-literal.jsonc | 0 .../fn-generics-tuple-literal.stderr | 0 .../fn-generics-tuple-path.jsonc | 0 .../fn-generics-tuple-path.stderr | 0 .../fn-generics-tuple-type.jsonc | 0 .../fn-generics-tuple-type.stderr | 0 .../fn-generics-tuple.jsonc | 0 .../fn-generics-tuple.stdout | 0 .../fn-params-duplicates.jsonc | 0 .../fn-params-duplicates.stderr | 0 .../fn-params-tuple.jsonc | 0 .../fn-params-tuple.stderr | 0 .../fn-params-type.jsonc | 0 .../fn-params-type.stderr | 0 .../special-form-expander/generics.jsonc | 0 .../special-form-expander/generics.stderr | 0 .../special-form-expander/if-1.jsonc | 0 .../special-form-expander/if-1.stderr | 0 .../special-form-expander/if-2.jsonc | 0 .../special-form-expander/if-2.stdout | 0 .../special-form-expander/if-3.jsonc | 0 .../special-form-expander/if-3.stdout | 0 .../special-form-expander/if-4.jsonc | 0 .../special-form-expander/if-4.stderr | 0 .../special-form-expander/index-1.jsonc | 0 .../special-form-expander/index-1.stderr | 0 .../special-form-expander/index-2.jsonc | 0 .../special-form-expander/index-2.stdout | 0 .../special-form-expander/index-3.jsonc | 0 .../special-form-expander/index-3.stderr | 0 .../special-form-expander/input-1.jsonc | 0 .../special-form-expander/input-1.stderr | 0 .../special-form-expander/input-2.jsonc | 0 .../special-form-expander/input-2.stdout | 0 .../special-form-expander/input-3.jsonc | 0 .../special-form-expander/input-3.stdout | 0 .../special-form-expander/input-4.jsonc | 0 .../special-form-expander/input-4.stderr | 0 .../labeled-argument.jsonc | 0 .../labeled-argument.stderr | 0 .../special-form-expander/let-2.jsonc | 0 .../special-form-expander/let-2.stderr | 0 .../special-form-expander/let-3.jsonc | 0 .../special-form-expander/let-3.stdout | 0 .../special-form-expander/let-4.jsonc | 0 .../special-form-expander/let-4.stdout | 0 .../special-form-expander/let-5.jsonc | 0 .../special-form-expander/let-5.stderr | 0 .../let-argument-not-ident.jsonc | 0 .../let-argument-not-ident.stderr | 0 .../let-argument-not-path.jsonc | 0 .../let-argument-not-path.stderr | 0 .../let-collect-all-errors.jsonc | 0 .../let-collect-all-errors.stderr | 0 .../special-form-expander/newtype-2.jsonc | 0 .../special-form-expander/newtype-2.stderr | 0 .../special-form-expander/newtype-3.jsonc | 0 .../special-form-expander/newtype-3.stdout | 0 .../special-form-expander/newtype-4.jsonc | 0 .../special-form-expander/newtype-4.stderr | 0 .../newtype-collect-all-errors.jsonc | 0 .../newtype-collect-all-errors.stderr | 0 .../newtype-constraints.jsonc | 0 .../newtype-constraints.stdout | 0 .../not-enough-segments.jsonc | 0 .../not-enough-segments.stderr | 0 .../too-many-segments.jsonc | 0 .../too-many-segments.stderr | 0 .../special-form-expander/type-2.jsonc | 0 .../special-form-expander/type-2.stderr | 0 .../special-form-expander/type-3.jsonc | 0 .../special-form-expander/type-3.stdout | 0 .../special-form-expander/type-4.jsonc | 0 .../special-form-expander/type-4.stderr | 0 .../type-collect-all-errors.jsonc | 0 .../type-collect-all-errors.stderr | 0 .../type-expr-call-arbitrary.jsonc | 0 .../type-expr-call-arbitrary.stderr | 0 .../type-expr-call-intersection.jsonc | 0 .../type-expr-call-intersection.stdout | 0 .../type-expr-call-not-path.jsonc | 0 .../type-expr-call-not-path.stderr | 0 .../type-expr-call-union.jsonc | 0 .../type-expr-call-union.stdout | 0 .../type-expr-invalid.jsonc | 0 .../type-expr-invalid.stderr | 0 .../type-expr-struct.jsonc | 0 .../type-expr-struct.stdout | 0 .../type-expr-tuple.jsonc | 0 .../type-expr-tuple.stdout | 0 .../type-generic-absolute-path.jsonc | 0 .../type-generic-absolute-path.stderr | 0 .../type-generic-constraint.jsonc | 0 .../type-generic-constraint.stdout | 0 .../type-generic-duplicate.jsonc | 0 .../type-generic-duplicate.stderr | 0 .../type-generic-generic-ident.jsonc | 0 .../type-generic-generic-ident.stderr | 0 .../type-generic-relative-path.jsonc | 0 .../type-generic-relative-path.stderr | 0 .../type-generic-struct.jsonc | 0 .../type-generic-struct.stderr | 0 .../special-form-expander/type-generic.jsonc | 0 .../special-form-expander/type-generic.stdout | 0 .../special-form-expander/type-infer.jsonc | 0 .../special-form-expander/type-infer.stdout | 0 .../special-form-expander/type-never.jsonc | 0 .../special-form-expander/type-never.stdout | 0 .../type-struct-has-type.jsonc | 0 .../type-struct-has-type.stderr | 0 .../type-tuple-has-type.jsonc | 0 .../type-tuple-has-type.stderr | 0 .../special-form-expander/type-unknown.jsonc | 0 .../special-form-expander/type-unknown.stdout | 0 .../unknown-special-form-typo.jsonc | 0 .../unknown-special-form-typo.stderr | 0 .../unknown-special-form.jsonc | 0 .../unknown-special-form.stderr | 0 .../special-form-expander/use-2.jsonc | 0 .../special-form-expander/use-2.stderr | 0 .../special-form-expander/use-3.jsonc | 0 .../special-form-expander/use-3.stdout | 0 .../special-form-expander/use-4.jsonc | 0 .../special-form-expander/use-4.stderr | 0 .../use-glob-not-ident.jsonc | 0 .../use-glob-not-ident.stderr | 0 .../use-glob-not-star.jsonc | 0 .../use-glob-not-star.stderr | 0 .../special-form-expander/use-glob.jsonc | 0 .../special-form-expander/use-glob.stdout | 0 .../special-form-expander/use-literal.jsonc | 0 .../special-form-expander/use-literal.stderr | 0 .../use-struct-literal.jsonc | 0 .../use-struct-literal.stderr | 0 .../use-struct-path.jsonc | 0 .../use-struct-path.stderr | 0 .../use-struct-type.jsonc | 0 .../use-struct-type.stderr | 0 .../special-form-expander/use-struct.jsonc | 0 .../special-form-expander/use-struct.stdout | 0 .../use-tuple-literal.jsonc | 0 .../use-tuple-literal.stderr | 0 .../use-tuple-path.jsonc | 0 .../use-tuple-path.stderr | 0 .../use-tuple-type.jsonc | 0 .../use-tuple-type.stderr | 0 .../special-form-expander/use-tuple.jsonc | 0 .../special-form-expander/use-tuple.stdout | 0 .../tests/ui/lower/import-resolver/.spec.toml | 1 - .../lower/import-resolver/continue/.spec.toml | 1 - .../pre-expansion-name-resolver/.spec.toml | 1 - .../ui/lower/special-form-expander/.spec.toml | 1 - .../@local/hashql/compiletest/src/pipeline.rs | 1 + .../src/suite/ast_lower_expander.rs | 76 +++++++++++++++++++ ...e_mangler.rs => ast_lower_node_mangler.rs} | 26 +++---- ...mberer.rs => ast_lower_node_renumberer.rs} | 26 +++---- ...ng_sanitizer.rs => ast_lower_sanitizer.rs} | 26 +++---- ...=> ast_lower_type_definition_extractor.rs} | 28 +++---- ...tractor.rs => ast_lower_type_extractor.rs} | 27 +++---- .../src/suite/ast_lowering_import_resolver.rs | 57 -------------- .../ast_lowering_import_resolver_continue.rs | 68 ----------------- ...st_lowering_pre_expansion_name_resolver.rs | 34 --------- .../ast_lowering_special_form_expander.rs | 34 --------- .../hashql/compiletest/src/suite/hir_reify.rs | 4 +- .../hashql/compiletest/src/suite/mir_reify.rs | 2 + .../hashql/compiletest/src/suite/mod.rs | 44 +++++------ 342 files changed, 162 insertions(+), 302 deletions(-) create mode 100644 libs/@local/hashql/ast/tests/ui/lower/expander/.spec.toml rename libs/@local/hashql/ast/tests/ui/lower/{ => expander}/import-resolver/basic-absolute-imports.jsonc (100%) rename libs/@local/hashql/ast/tests/ui/lower/{ => expander}/import-resolver/basic-absolute-imports.stdout (100%) rename libs/@local/hashql/ast/tests/ui/lower/{ => expander}/import-resolver/basic-glob-import.jsonc (100%) rename libs/@local/hashql/ast/tests/ui/lower/{ => expander}/import-resolver/basic-glob-import.stdout (100%) rename libs/@local/hashql/ast/tests/ui/lower/{ => expander}/import-resolver/basic-relative-import.jsonc (100%) rename libs/@local/hashql/ast/tests/ui/lower/{ => expander}/import-resolver/basic-relative-import.stdout (100%) rename libs/@local/hashql/ast/tests/ui/lower/{ => expander}/import-resolver/basic-renamed-import.jsonc (100%) rename libs/@local/hashql/ast/tests/ui/lower/{ => expander}/import-resolver/basic-renamed-import.stdout (100%) rename libs/@local/hashql/ast/tests/ui/lower/{ => expander}/import-resolver/closure-complex-return-type.jsonc (100%) rename libs/@local/hashql/ast/tests/ui/lower/{ => expander}/import-resolver/closure-complex-return-type.stdout (100%) rename libs/@local/hashql/ast/tests/ui/lower/{ => expander}/import-resolver/closure-generic-not-resolved.jsonc (100%) rename libs/@local/hashql/ast/tests/ui/lower/{ => expander}/import-resolver/closure-generic-not-resolved.stdout (100%) rename libs/@local/hashql/ast/tests/ui/lower/{ => expander}/import-resolver/closure-mixed-resolution.jsonc (100%) rename libs/@local/hashql/ast/tests/ui/lower/{ => expander}/import-resolver/closure-mixed-resolution.stdout (100%) rename libs/@local/hashql/ast/tests/ui/lower/{ => expander}/import-resolver/closure-param-not-resolved.jsonc (100%) rename libs/@local/hashql/ast/tests/ui/lower/{ => expander}/import-resolver/closure-param-not-resolved.stdout (100%) rename libs/@local/hashql/ast/tests/ui/lower/{ => expander}/import-resolver/complex-nested-type-parameters.jsonc (100%) rename libs/@local/hashql/ast/tests/ui/lower/{ => expander}/import-resolver/complex-nested-type-parameters.stdout (100%) rename libs/@local/hashql/ast/tests/ui/lower/{ => expander}/import-resolver/complex-path-resolution.jsonc (100%) rename libs/@local/hashql/ast/tests/ui/lower/{ => expander}/import-resolver/complex-path-resolution.stdout (100%) rename libs/@local/hashql/ast/tests/ui/lower/{ => expander}/import-resolver/continue/unresolved-nested.jsonc (90%) rename libs/@local/hashql/ast/tests/ui/lower/{ => expander}/import-resolver/continue/unresolved-nested.stderr (100%) rename libs/@local/hashql/ast/tests/ui/lower/{ => expander}/import-resolver/continue/unresolved-nested.stdout (100%) rename libs/@local/hashql/ast/tests/ui/lower/{ => expander}/import-resolver/continue/unresolved-type.jsonc (88%) rename libs/@local/hashql/ast/tests/ui/lower/{ => expander}/import-resolver/continue/unresolved-type.stderr (100%) rename libs/@local/hashql/ast/tests/ui/lower/{ => expander}/import-resolver/continue/unresolved-type.stdout (100%) rename libs/@local/hashql/ast/tests/ui/lower/{ => expander}/import-resolver/continue/unresolved-value.jsonc (90%) rename libs/@local/hashql/ast/tests/ui/lower/{ => expander}/import-resolver/continue/unresolved-value.stderr (100%) rename libs/@local/hashql/ast/tests/ui/lower/{ => expander}/import-resolver/continue/unresolved-value.stdout (100%) rename libs/@local/hashql/ast/tests/ui/lower/{ => expander}/import-resolver/continue/use-not-found.jsonc (91%) rename libs/@local/hashql/ast/tests/ui/lower/{ => expander}/import-resolver/continue/use-not-found.stderr (100%) rename libs/@local/hashql/ast/tests/ui/lower/{ => expander}/import-resolver/continue/use-not-found.stdout (100%) rename libs/@local/hashql/ast/tests/ui/lower/{ => expander}/import-resolver/generic-argument-absolute-path.jsonc (100%) rename libs/@local/hashql/ast/tests/ui/lower/{ => expander}/import-resolver/generic-argument-absolute-path.stderr (100%) rename libs/@local/hashql/ast/tests/ui/lower/{ => expander}/import-resolver/generic-argument-use-path.jsonc (100%) rename libs/@local/hashql/ast/tests/ui/lower/{ => expander}/import-resolver/generic-argument-use-path.stderr (100%) rename libs/@local/hashql/ast/tests/ui/lower/{ => expander}/import-resolver/generic-arguments-in-final-segment.jsonc (100%) rename libs/@local/hashql/ast/tests/ui/lower/{ => expander}/import-resolver/generic-arguments-in-final-segment.stdout (100%) rename libs/@local/hashql/ast/tests/ui/lower/{ => expander}/import-resolver/generic-constraints-type.jsonc (100%) rename libs/@local/hashql/ast/tests/ui/lower/{ => expander}/import-resolver/generic-constraints-type.stdout (100%) rename libs/@local/hashql/ast/tests/ui/lower/{ => expander}/import-resolver/generic-constraints.newtype.jsonc (100%) rename libs/@local/hashql/ast/tests/ui/lower/{ => expander}/import-resolver/generic-constraints.newtype.stdout (100%) rename libs/@local/hashql/ast/tests/ui/lower/{ => expander}/import-resolver/glob-not-found.jsonc (100%) rename libs/@local/hashql/ast/tests/ui/lower/{ => expander}/import-resolver/glob-not-found.stderr (100%) rename libs/@local/hashql/ast/tests/ui/lower/{ => expander}/import-resolver/item-not-found.jsonc (100%) rename libs/@local/hashql/ast/tests/ui/lower/{ => expander}/import-resolver/item-not-found.stderr (100%) rename libs/@local/hashql/ast/tests/ui/lower/{ => expander}/import-resolver/local-binding-recursive-type.jsonc (100%) rename libs/@local/hashql/ast/tests/ui/lower/{ => expander}/import-resolver/local-binding-recursive-type.stdout (100%) rename libs/@local/hashql/ast/tests/ui/lower/{ => expander}/import-resolver/local-binding-recursive-value.jsonc (100%) rename libs/@local/hashql/ast/tests/ui/lower/{ => expander}/import-resolver/local-binding-recursive-value.stdout (100%) rename libs/@local/hashql/ast/tests/ui/lower/{ => expander}/import-resolver/local-binding-type.jsonc (100%) rename libs/@local/hashql/ast/tests/ui/lower/{ => expander}/import-resolver/local-binding-type.stdout (100%) rename libs/@local/hashql/ast/tests/ui/lower/{ => expander}/import-resolver/local-binding-value.jsonc (100%) rename libs/@local/hashql/ast/tests/ui/lower/{ => expander}/import-resolver/local-binding-value.stdout (100%) rename libs/@local/hashql/ast/tests/ui/lower/{ => expander}/import-resolver/module-not-found.jsonc (100%) rename libs/@local/hashql/ast/tests/ui/lower/{ => expander}/import-resolver/module-not-found.stderr (100%) rename libs/@local/hashql/ast/tests/ui/lower/{ => expander}/import-resolver/multiple-named-imports.jsonc (100%) rename libs/@local/hashql/ast/tests/ui/lower/{ => expander}/import-resolver/multiple-named-imports.stdout (100%) rename libs/@local/hashql/ast/tests/ui/lower/{ => expander}/import-resolver/nested-resolution.jsonc (100%) rename libs/@local/hashql/ast/tests/ui/lower/{ => expander}/import-resolver/nested-resolution.stdout (100%) rename libs/@local/hashql/ast/tests/ui/lower/{ => expander}/import-resolver/newtype-scope.jsonc (100%) rename libs/@local/hashql/ast/tests/ui/lower/{ => expander}/import-resolver/newtype-scope.stdout (100%) rename libs/@local/hashql/ast/tests/ui/lower/{ => expander}/import-resolver/path-normalization.jsonc (100%) rename libs/@local/hashql/ast/tests/ui/lower/{ => expander}/import-resolver/path-normalization.stdout (100%) rename libs/@local/hashql/ast/tests/ui/lower/{ => expander}/import-resolver/prelude.jsonc (100%) rename libs/@local/hashql/ast/tests/ui/lower/{ => expander}/import-resolver/prelude.stdout (100%) rename libs/@local/hashql/ast/tests/ui/lower/{ => expander}/import-resolver/regression-generic-arguments-identifier.jsonc (100%) rename libs/@local/hashql/ast/tests/ui/lower/{ => expander}/import-resolver/regression-generic-arguments-identifier.stdout (100%) rename libs/@local/hashql/ast/tests/ui/lower/{ => expander}/import-resolver/rollback.jsonc (100%) rename libs/@local/hashql/ast/tests/ui/lower/{ => expander}/import-resolver/rollback.stderr (100%) rename libs/@local/hashql/ast/tests/ui/lower/{ => expander}/import-resolver/shadowed-imports.jsonc (100%) rename libs/@local/hashql/ast/tests/ui/lower/{ => expander}/import-resolver/shadowed-imports.stdout (100%) rename libs/@local/hashql/ast/tests/ui/lower/{ => expander}/import-resolver/shadowed-prelude.jsonc (100%) rename libs/@local/hashql/ast/tests/ui/lower/{ => expander}/import-resolver/shadowed-prelude.stdout (100%) rename libs/@local/hashql/ast/tests/ui/lower/{ => expander}/import-resolver/substitution.jsonc (100%) rename libs/@local/hashql/ast/tests/ui/lower/{ => expander}/import-resolver/substitution.stdout (100%) rename libs/@local/hashql/ast/tests/ui/lower/{ => expander}/import-resolver/universe-ambiguity-resolution.jsonc (100%) rename libs/@local/hashql/ast/tests/ui/lower/{ => expander}/import-resolver/universe-ambiguity-resolution.stdout (100%) rename libs/@local/hashql/ast/tests/ui/lower/{ => expander}/import-resolver/unresolver-variable.jsonc (100%) rename libs/@local/hashql/ast/tests/ui/lower/{ => expander}/import-resolver/unresolver-variable.stderr (100%) rename libs/@local/hashql/ast/tests/ui/lower/{ => expander}/import-resolver/use-shadowing-let.jsonc (100%) rename libs/@local/hashql/ast/tests/ui/lower/{ => expander}/import-resolver/use-shadowing-let.stdout (100%) rename libs/@local/hashql/ast/tests/ui/lower/{ => expander}/import-resolver/use-shadowing-use.jsonc (100%) rename libs/@local/hashql/ast/tests/ui/lower/{ => expander}/import-resolver/use-shadowing-use.stdout (100%) rename libs/@local/hashql/ast/tests/ui/lower/{ => expander}/pre-expansion-name-resolver/absolute-path.jsonc (100%) rename libs/@local/hashql/ast/tests/ui/lower/{ => expander}/pre-expansion-name-resolver/absolute-path.stdout (100%) rename libs/@local/hashql/ast/tests/ui/lower/{ => expander}/pre-expansion-name-resolver/alias-absolute-path.jsonc (100%) rename libs/@local/hashql/ast/tests/ui/lower/{ => expander}/pre-expansion-name-resolver/alias-absolute-path.stdout (100%) rename libs/@local/hashql/ast/tests/ui/lower/{ => expander}/pre-expansion-name-resolver/alias-symbol.jsonc (100%) rename libs/@local/hashql/ast/tests/ui/lower/{ => expander}/pre-expansion-name-resolver/alias-symbol.stdout (100%) rename libs/@local/hashql/ast/tests/ui/lower/{ => expander}/pre-expansion-name-resolver/invalid-let-expr.jsonc (100%) rename libs/@local/hashql/ast/tests/ui/lower/{ => expander}/pre-expansion-name-resolver/invalid-let-expr.stdout (100%) rename libs/@local/hashql/ast/tests/ui/lower/{ => expander}/pre-expansion-name-resolver/let-3-alias.jsonc (100%) rename libs/@local/hashql/ast/tests/ui/lower/{ => expander}/pre-expansion-name-resolver/let-3-alias.stdout (100%) rename libs/@local/hashql/ast/tests/ui/lower/{ => expander}/pre-expansion-name-resolver/let-3.jsonc (100%) rename libs/@local/hashql/ast/tests/ui/lower/{ => expander}/pre-expansion-name-resolver/let-3.stdout (100%) rename libs/@local/hashql/ast/tests/ui/lower/{ => expander}/pre-expansion-name-resolver/let-4-alias.jsonc (100%) rename libs/@local/hashql/ast/tests/ui/lower/{ => expander}/pre-expansion-name-resolver/let-4-alias.stdout (100%) rename libs/@local/hashql/ast/tests/ui/lower/{ => expander}/pre-expansion-name-resolver/let-4.jsonc (100%) rename libs/@local/hashql/ast/tests/ui/lower/{ => expander}/pre-expansion-name-resolver/let-4.stdout (100%) rename libs/@local/hashql/ast/tests/ui/lower/{ => expander}/pre-expansion-name-resolver/let-absolute.jsonc (100%) rename libs/@local/hashql/ast/tests/ui/lower/{ => expander}/pre-expansion-name-resolver/let-absolute.stdout (100%) rename libs/@local/hashql/ast/tests/ui/lower/{ => expander}/pre-expansion-name-resolver/let-ident-generic.jsonc (100%) rename libs/@local/hashql/ast/tests/ui/lower/{ => expander}/pre-expansion-name-resolver/let-ident-generic.stdout (100%) rename libs/@local/hashql/ast/tests/ui/lower/{ => expander}/pre-expansion-name-resolver/multi-segment-resolution.jsonc (100%) rename libs/@local/hashql/ast/tests/ui/lower/{ => expander}/pre-expansion-name-resolver/multi-segment-resolution.stdout (100%) rename libs/@local/hashql/ast/tests/ui/lower/{ => expander}/pre-expansion-name-resolver/nested-let.jsonc (100%) rename libs/@local/hashql/ast/tests/ui/lower/{ => expander}/pre-expansion-name-resolver/nested-let.stdout (100%) rename libs/@local/hashql/ast/tests/ui/lower/{ => expander}/pre-expansion-name-resolver/newtype-3-alias.jsonc (100%) rename libs/@local/hashql/ast/tests/ui/lower/{ => expander}/pre-expansion-name-resolver/newtype-3-alias.stdout (100%) rename libs/@local/hashql/ast/tests/ui/lower/{ => expander}/pre-expansion-name-resolver/newtype-3.jsonc (100%) rename libs/@local/hashql/ast/tests/ui/lower/{ => expander}/pre-expansion-name-resolver/newtype-3.stdout (100%) rename libs/@local/hashql/ast/tests/ui/lower/{ => expander}/pre-expansion-name-resolver/newtype-4.jsonc (100%) rename libs/@local/hashql/ast/tests/ui/lower/{ => expander}/pre-expansion-name-resolver/newtype-4.stdout (100%) rename libs/@local/hashql/ast/tests/ui/lower/{ => expander}/pre-expansion-name-resolver/re-assign-prelude-diverging.jsonc (100%) rename libs/@local/hashql/ast/tests/ui/lower/{ => expander}/pre-expansion-name-resolver/re-assign-prelude-diverging.stdout (100%) rename libs/@local/hashql/ast/tests/ui/lower/{ => expander}/pre-expansion-name-resolver/re-assign-prelude.jsonc (100%) rename libs/@local/hashql/ast/tests/ui/lower/{ => expander}/pre-expansion-name-resolver/re-assign-prelude.stdout (100%) rename libs/@local/hashql/ast/tests/ui/lower/{ => expander}/pre-expansion-name-resolver/re-assign.jsonc (100%) rename libs/@local/hashql/ast/tests/ui/lower/{ => expander}/pre-expansion-name-resolver/re-assign.stdout (100%) rename libs/@local/hashql/ast/tests/ui/lower/{ => expander}/pre-expansion-name-resolver/resolve-generics.jsonc (100%) rename libs/@local/hashql/ast/tests/ui/lower/{ => expander}/pre-expansion-name-resolver/resolve-generics.stdout (100%) rename libs/@local/hashql/ast/tests/ui/lower/{ => expander}/pre-expansion-name-resolver/resolve-symbol.jsonc (100%) rename libs/@local/hashql/ast/tests/ui/lower/{ => expander}/pre-expansion-name-resolver/resolve-symbol.stdout (100%) rename libs/@local/hashql/ast/tests/ui/lower/{ => expander}/pre-expansion-name-resolver/restoration-bindings.jsonc (100%) rename libs/@local/hashql/ast/tests/ui/lower/{ => expander}/pre-expansion-name-resolver/restoration-bindings.stdout (100%) rename libs/@local/hashql/ast/tests/ui/lower/{ => expander}/pre-expansion-name-resolver/type-3-alias.jsonc (100%) rename libs/@local/hashql/ast/tests/ui/lower/{ => expander}/pre-expansion-name-resolver/type-3-alias.stdout (100%) rename libs/@local/hashql/ast/tests/ui/lower/{ => expander}/pre-expansion-name-resolver/type-3.jsonc (100%) rename libs/@local/hashql/ast/tests/ui/lower/{ => expander}/pre-expansion-name-resolver/type-3.stdout (100%) rename libs/@local/hashql/ast/tests/ui/lower/{ => expander}/pre-expansion-name-resolver/type-4.jsonc (100%) rename libs/@local/hashql/ast/tests/ui/lower/{ => expander}/pre-expansion-name-resolver/type-4.stdout (100%) rename libs/@local/hashql/ast/tests/ui/lower/{ => expander}/special-form-expander/access-1.jsonc (100%) rename libs/@local/hashql/ast/tests/ui/lower/{ => expander}/special-form-expander/access-1.stderr (100%) rename libs/@local/hashql/ast/tests/ui/lower/{ => expander}/special-form-expander/access-2.jsonc (100%) rename libs/@local/hashql/ast/tests/ui/lower/{ => expander}/special-form-expander/access-2.stdout (100%) rename libs/@local/hashql/ast/tests/ui/lower/{ => expander}/special-form-expander/access-3.jsonc (100%) rename libs/@local/hashql/ast/tests/ui/lower/{ => expander}/special-form-expander/access-3.stderr (100%) rename libs/@local/hashql/ast/tests/ui/lower/{ => expander}/special-form-expander/access-field-index-out-of-bounds.jsonc (100%) rename libs/@local/hashql/ast/tests/ui/lower/{ => expander}/special-form-expander/access-field-index-out-of-bounds.stderr (100%) rename libs/@local/hashql/ast/tests/ui/lower/{ => expander}/special-form-expander/access-field-literal-boolean.jsonc (100%) rename libs/@local/hashql/ast/tests/ui/lower/{ => expander}/special-form-expander/access-field-literal-boolean.stderr (100%) rename libs/@local/hashql/ast/tests/ui/lower/{ => expander}/special-form-expander/access-field-literal-string.jsonc (100%) rename libs/@local/hashql/ast/tests/ui/lower/{ => expander}/special-form-expander/access-field-literal-string.stderr (100%) rename libs/@local/hashql/ast/tests/ui/lower/{ => expander}/special-form-expander/access-field-literal-type-annotation.jsonc (100%) rename libs/@local/hashql/ast/tests/ui/lower/{ => expander}/special-form-expander/access-field-literal-type-annotation.stderr (100%) rename libs/@local/hashql/ast/tests/ui/lower/{ => expander}/special-form-expander/access-field-literal-valid.jsonc (100%) rename libs/@local/hashql/ast/tests/ui/lower/{ => expander}/special-form-expander/access-field-literal-valid.stdout (100%) rename libs/@local/hashql/ast/tests/ui/lower/{ => expander}/special-form-expander/as-1.jsonc (100%) rename libs/@local/hashql/ast/tests/ui/lower/{ => expander}/special-form-expander/as-1.stderr (100%) rename libs/@local/hashql/ast/tests/ui/lower/{ => expander}/special-form-expander/as-2.jsonc (100%) rename libs/@local/hashql/ast/tests/ui/lower/{ => expander}/special-form-expander/as-2.stdout (100%) rename libs/@local/hashql/ast/tests/ui/lower/{ => expander}/special-form-expander/as-3.jsonc (100%) rename libs/@local/hashql/ast/tests/ui/lower/{ => expander}/special-form-expander/as-3.stderr (100%) rename libs/@local/hashql/ast/tests/ui/lower/{ => expander}/special-form-expander/does-not-touch-non-kernel.jsonc (100%) rename libs/@local/hashql/ast/tests/ui/lower/{ => expander}/special-form-expander/does-not-touch-non-kernel.stdout (100%) rename libs/@local/hashql/ast/tests/ui/lower/{ => expander}/special-form-expander/fn-3.jsonc (100%) rename libs/@local/hashql/ast/tests/ui/lower/{ => expander}/special-form-expander/fn-3.stderr (100%) rename libs/@local/hashql/ast/tests/ui/lower/{ => expander}/special-form-expander/fn-4.jsonc (100%) rename libs/@local/hashql/ast/tests/ui/lower/{ => expander}/special-form-expander/fn-4.stdout (100%) rename libs/@local/hashql/ast/tests/ui/lower/{ => expander}/special-form-expander/fn-5.jsonc (100%) rename libs/@local/hashql/ast/tests/ui/lower/{ => expander}/special-form-expander/fn-5.stderr (100%) rename libs/@local/hashql/ast/tests/ui/lower/{ => expander}/special-form-expander/fn-generics-duplicates.jsonc (100%) rename libs/@local/hashql/ast/tests/ui/lower/{ => expander}/special-form-expander/fn-generics-duplicates.stderr (100%) rename libs/@local/hashql/ast/tests/ui/lower/{ => expander}/special-form-expander/fn-generics-literal.jsonc (100%) rename libs/@local/hashql/ast/tests/ui/lower/{ => expander}/special-form-expander/fn-generics-literal.stderr (100%) rename libs/@local/hashql/ast/tests/ui/lower/{ => expander}/special-form-expander/fn-generics-struct-literal.jsonc (100%) rename libs/@local/hashql/ast/tests/ui/lower/{ => expander}/special-form-expander/fn-generics-struct-literal.stderr (100%) rename libs/@local/hashql/ast/tests/ui/lower/{ => expander}/special-form-expander/fn-generics-struct-type.jsonc (100%) rename libs/@local/hashql/ast/tests/ui/lower/{ => expander}/special-form-expander/fn-generics-struct-type.stderr (100%) rename libs/@local/hashql/ast/tests/ui/lower/{ => expander}/special-form-expander/fn-generics-struct-underscore.jsonc (100%) rename libs/@local/hashql/ast/tests/ui/lower/{ => expander}/special-form-expander/fn-generics-struct-underscore.stdout (100%) rename libs/@local/hashql/ast/tests/ui/lower/{ => expander}/special-form-expander/fn-generics-struct.jsonc (100%) rename libs/@local/hashql/ast/tests/ui/lower/{ => expander}/special-form-expander/fn-generics-struct.stdout (100%) rename libs/@local/hashql/ast/tests/ui/lower/{ => expander}/special-form-expander/fn-generics-tuple-literal.jsonc (100%) rename libs/@local/hashql/ast/tests/ui/lower/{ => expander}/special-form-expander/fn-generics-tuple-literal.stderr (100%) rename libs/@local/hashql/ast/tests/ui/lower/{ => expander}/special-form-expander/fn-generics-tuple-path.jsonc (100%) rename libs/@local/hashql/ast/tests/ui/lower/{ => expander}/special-form-expander/fn-generics-tuple-path.stderr (100%) rename libs/@local/hashql/ast/tests/ui/lower/{ => expander}/special-form-expander/fn-generics-tuple-type.jsonc (100%) rename libs/@local/hashql/ast/tests/ui/lower/{ => expander}/special-form-expander/fn-generics-tuple-type.stderr (100%) rename libs/@local/hashql/ast/tests/ui/lower/{ => expander}/special-form-expander/fn-generics-tuple.jsonc (100%) rename libs/@local/hashql/ast/tests/ui/lower/{ => expander}/special-form-expander/fn-generics-tuple.stdout (100%) rename libs/@local/hashql/ast/tests/ui/lower/{ => expander}/special-form-expander/fn-params-duplicates.jsonc (100%) rename libs/@local/hashql/ast/tests/ui/lower/{ => expander}/special-form-expander/fn-params-duplicates.stderr (100%) rename libs/@local/hashql/ast/tests/ui/lower/{ => expander}/special-form-expander/fn-params-tuple.jsonc (100%) rename libs/@local/hashql/ast/tests/ui/lower/{ => expander}/special-form-expander/fn-params-tuple.stderr (100%) rename libs/@local/hashql/ast/tests/ui/lower/{ => expander}/special-form-expander/fn-params-type.jsonc (100%) rename libs/@local/hashql/ast/tests/ui/lower/{ => expander}/special-form-expander/fn-params-type.stderr (100%) rename libs/@local/hashql/ast/tests/ui/lower/{ => expander}/special-form-expander/generics.jsonc (100%) rename libs/@local/hashql/ast/tests/ui/lower/{ => expander}/special-form-expander/generics.stderr (100%) rename libs/@local/hashql/ast/tests/ui/lower/{ => expander}/special-form-expander/if-1.jsonc (100%) rename libs/@local/hashql/ast/tests/ui/lower/{ => expander}/special-form-expander/if-1.stderr (100%) rename libs/@local/hashql/ast/tests/ui/lower/{ => expander}/special-form-expander/if-2.jsonc (100%) rename libs/@local/hashql/ast/tests/ui/lower/{ => expander}/special-form-expander/if-2.stdout (100%) rename libs/@local/hashql/ast/tests/ui/lower/{ => expander}/special-form-expander/if-3.jsonc (100%) rename libs/@local/hashql/ast/tests/ui/lower/{ => expander}/special-form-expander/if-3.stdout (100%) rename libs/@local/hashql/ast/tests/ui/lower/{ => expander}/special-form-expander/if-4.jsonc (100%) rename libs/@local/hashql/ast/tests/ui/lower/{ => expander}/special-form-expander/if-4.stderr (100%) rename libs/@local/hashql/ast/tests/ui/lower/{ => expander}/special-form-expander/index-1.jsonc (100%) rename libs/@local/hashql/ast/tests/ui/lower/{ => expander}/special-form-expander/index-1.stderr (100%) rename libs/@local/hashql/ast/tests/ui/lower/{ => expander}/special-form-expander/index-2.jsonc (100%) rename libs/@local/hashql/ast/tests/ui/lower/{ => expander}/special-form-expander/index-2.stdout (100%) rename libs/@local/hashql/ast/tests/ui/lower/{ => expander}/special-form-expander/index-3.jsonc (100%) rename libs/@local/hashql/ast/tests/ui/lower/{ => expander}/special-form-expander/index-3.stderr (100%) rename libs/@local/hashql/ast/tests/ui/lower/{ => expander}/special-form-expander/input-1.jsonc (100%) rename libs/@local/hashql/ast/tests/ui/lower/{ => expander}/special-form-expander/input-1.stderr (100%) rename libs/@local/hashql/ast/tests/ui/lower/{ => expander}/special-form-expander/input-2.jsonc (100%) rename libs/@local/hashql/ast/tests/ui/lower/{ => expander}/special-form-expander/input-2.stdout (100%) rename libs/@local/hashql/ast/tests/ui/lower/{ => expander}/special-form-expander/input-3.jsonc (100%) rename libs/@local/hashql/ast/tests/ui/lower/{ => expander}/special-form-expander/input-3.stdout (100%) rename libs/@local/hashql/ast/tests/ui/lower/{ => expander}/special-form-expander/input-4.jsonc (100%) rename libs/@local/hashql/ast/tests/ui/lower/{ => expander}/special-form-expander/input-4.stderr (100%) rename libs/@local/hashql/ast/tests/ui/lower/{ => expander}/special-form-expander/labeled-argument.jsonc (100%) rename libs/@local/hashql/ast/tests/ui/lower/{ => expander}/special-form-expander/labeled-argument.stderr (100%) rename libs/@local/hashql/ast/tests/ui/lower/{ => expander}/special-form-expander/let-2.jsonc (100%) rename libs/@local/hashql/ast/tests/ui/lower/{ => expander}/special-form-expander/let-2.stderr (100%) rename libs/@local/hashql/ast/tests/ui/lower/{ => expander}/special-form-expander/let-3.jsonc (100%) rename libs/@local/hashql/ast/tests/ui/lower/{ => expander}/special-form-expander/let-3.stdout (100%) rename libs/@local/hashql/ast/tests/ui/lower/{ => expander}/special-form-expander/let-4.jsonc (100%) rename libs/@local/hashql/ast/tests/ui/lower/{ => expander}/special-form-expander/let-4.stdout (100%) rename libs/@local/hashql/ast/tests/ui/lower/{ => expander}/special-form-expander/let-5.jsonc (100%) rename libs/@local/hashql/ast/tests/ui/lower/{ => expander}/special-form-expander/let-5.stderr (100%) rename libs/@local/hashql/ast/tests/ui/lower/{ => expander}/special-form-expander/let-argument-not-ident.jsonc (100%) rename libs/@local/hashql/ast/tests/ui/lower/{ => expander}/special-form-expander/let-argument-not-ident.stderr (100%) rename libs/@local/hashql/ast/tests/ui/lower/{ => expander}/special-form-expander/let-argument-not-path.jsonc (100%) rename libs/@local/hashql/ast/tests/ui/lower/{ => expander}/special-form-expander/let-argument-not-path.stderr (100%) rename libs/@local/hashql/ast/tests/ui/lower/{ => expander}/special-form-expander/let-collect-all-errors.jsonc (100%) rename libs/@local/hashql/ast/tests/ui/lower/{ => expander}/special-form-expander/let-collect-all-errors.stderr (100%) rename libs/@local/hashql/ast/tests/ui/lower/{ => expander}/special-form-expander/newtype-2.jsonc (100%) rename libs/@local/hashql/ast/tests/ui/lower/{ => expander}/special-form-expander/newtype-2.stderr (100%) rename libs/@local/hashql/ast/tests/ui/lower/{ => expander}/special-form-expander/newtype-3.jsonc (100%) rename libs/@local/hashql/ast/tests/ui/lower/{ => expander}/special-form-expander/newtype-3.stdout (100%) rename libs/@local/hashql/ast/tests/ui/lower/{ => expander}/special-form-expander/newtype-4.jsonc (100%) rename libs/@local/hashql/ast/tests/ui/lower/{ => expander}/special-form-expander/newtype-4.stderr (100%) rename libs/@local/hashql/ast/tests/ui/lower/{ => expander}/special-form-expander/newtype-collect-all-errors.jsonc (100%) rename libs/@local/hashql/ast/tests/ui/lower/{ => expander}/special-form-expander/newtype-collect-all-errors.stderr (100%) rename libs/@local/hashql/ast/tests/ui/lower/{ => expander}/special-form-expander/newtype-constraints.jsonc (100%) rename libs/@local/hashql/ast/tests/ui/lower/{ => expander}/special-form-expander/newtype-constraints.stdout (100%) rename libs/@local/hashql/ast/tests/ui/lower/{ => expander}/special-form-expander/not-enough-segments.jsonc (100%) rename libs/@local/hashql/ast/tests/ui/lower/{ => expander}/special-form-expander/not-enough-segments.stderr (100%) rename libs/@local/hashql/ast/tests/ui/lower/{ => expander}/special-form-expander/too-many-segments.jsonc (100%) rename libs/@local/hashql/ast/tests/ui/lower/{ => expander}/special-form-expander/too-many-segments.stderr (100%) rename libs/@local/hashql/ast/tests/ui/lower/{ => expander}/special-form-expander/type-2.jsonc (100%) rename libs/@local/hashql/ast/tests/ui/lower/{ => expander}/special-form-expander/type-2.stderr (100%) rename libs/@local/hashql/ast/tests/ui/lower/{ => expander}/special-form-expander/type-3.jsonc (100%) rename libs/@local/hashql/ast/tests/ui/lower/{ => expander}/special-form-expander/type-3.stdout (100%) rename libs/@local/hashql/ast/tests/ui/lower/{ => expander}/special-form-expander/type-4.jsonc (100%) rename libs/@local/hashql/ast/tests/ui/lower/{ => expander}/special-form-expander/type-4.stderr (100%) rename libs/@local/hashql/ast/tests/ui/lower/{ => expander}/special-form-expander/type-collect-all-errors.jsonc (100%) rename libs/@local/hashql/ast/tests/ui/lower/{ => expander}/special-form-expander/type-collect-all-errors.stderr (100%) rename libs/@local/hashql/ast/tests/ui/lower/{ => expander}/special-form-expander/type-expr-call-arbitrary.jsonc (100%) rename libs/@local/hashql/ast/tests/ui/lower/{ => expander}/special-form-expander/type-expr-call-arbitrary.stderr (100%) rename libs/@local/hashql/ast/tests/ui/lower/{ => expander}/special-form-expander/type-expr-call-intersection.jsonc (100%) rename libs/@local/hashql/ast/tests/ui/lower/{ => expander}/special-form-expander/type-expr-call-intersection.stdout (100%) rename libs/@local/hashql/ast/tests/ui/lower/{ => expander}/special-form-expander/type-expr-call-not-path.jsonc (100%) rename libs/@local/hashql/ast/tests/ui/lower/{ => expander}/special-form-expander/type-expr-call-not-path.stderr (100%) rename libs/@local/hashql/ast/tests/ui/lower/{ => expander}/special-form-expander/type-expr-call-union.jsonc (100%) rename libs/@local/hashql/ast/tests/ui/lower/{ => expander}/special-form-expander/type-expr-call-union.stdout (100%) rename libs/@local/hashql/ast/tests/ui/lower/{ => expander}/special-form-expander/type-expr-invalid.jsonc (100%) rename libs/@local/hashql/ast/tests/ui/lower/{ => expander}/special-form-expander/type-expr-invalid.stderr (100%) rename libs/@local/hashql/ast/tests/ui/lower/{ => expander}/special-form-expander/type-expr-struct.jsonc (100%) rename libs/@local/hashql/ast/tests/ui/lower/{ => expander}/special-form-expander/type-expr-struct.stdout (100%) rename libs/@local/hashql/ast/tests/ui/lower/{ => expander}/special-form-expander/type-expr-tuple.jsonc (100%) rename libs/@local/hashql/ast/tests/ui/lower/{ => expander}/special-form-expander/type-expr-tuple.stdout (100%) rename libs/@local/hashql/ast/tests/ui/lower/{ => expander}/special-form-expander/type-generic-absolute-path.jsonc (100%) rename libs/@local/hashql/ast/tests/ui/lower/{ => expander}/special-form-expander/type-generic-absolute-path.stderr (100%) rename libs/@local/hashql/ast/tests/ui/lower/{ => expander}/special-form-expander/type-generic-constraint.jsonc (100%) rename libs/@local/hashql/ast/tests/ui/lower/{ => expander}/special-form-expander/type-generic-constraint.stdout (100%) rename libs/@local/hashql/ast/tests/ui/lower/{ => expander}/special-form-expander/type-generic-duplicate.jsonc (100%) rename libs/@local/hashql/ast/tests/ui/lower/{ => expander}/special-form-expander/type-generic-duplicate.stderr (100%) rename libs/@local/hashql/ast/tests/ui/lower/{ => expander}/special-form-expander/type-generic-generic-ident.jsonc (100%) rename libs/@local/hashql/ast/tests/ui/lower/{ => expander}/special-form-expander/type-generic-generic-ident.stderr (100%) rename libs/@local/hashql/ast/tests/ui/lower/{ => expander}/special-form-expander/type-generic-relative-path.jsonc (100%) rename libs/@local/hashql/ast/tests/ui/lower/{ => expander}/special-form-expander/type-generic-relative-path.stderr (100%) rename libs/@local/hashql/ast/tests/ui/lower/{ => expander}/special-form-expander/type-generic-struct.jsonc (100%) rename libs/@local/hashql/ast/tests/ui/lower/{ => expander}/special-form-expander/type-generic-struct.stderr (100%) rename libs/@local/hashql/ast/tests/ui/lower/{ => expander}/special-form-expander/type-generic.jsonc (100%) rename libs/@local/hashql/ast/tests/ui/lower/{ => expander}/special-form-expander/type-generic.stdout (100%) rename libs/@local/hashql/ast/tests/ui/lower/{ => expander}/special-form-expander/type-infer.jsonc (100%) rename libs/@local/hashql/ast/tests/ui/lower/{ => expander}/special-form-expander/type-infer.stdout (100%) rename libs/@local/hashql/ast/tests/ui/lower/{ => expander}/special-form-expander/type-never.jsonc (100%) rename libs/@local/hashql/ast/tests/ui/lower/{ => expander}/special-form-expander/type-never.stdout (100%) rename libs/@local/hashql/ast/tests/ui/lower/{ => expander}/special-form-expander/type-struct-has-type.jsonc (100%) rename libs/@local/hashql/ast/tests/ui/lower/{ => expander}/special-form-expander/type-struct-has-type.stderr (100%) rename libs/@local/hashql/ast/tests/ui/lower/{ => expander}/special-form-expander/type-tuple-has-type.jsonc (100%) rename libs/@local/hashql/ast/tests/ui/lower/{ => expander}/special-form-expander/type-tuple-has-type.stderr (100%) rename libs/@local/hashql/ast/tests/ui/lower/{ => expander}/special-form-expander/type-unknown.jsonc (100%) rename libs/@local/hashql/ast/tests/ui/lower/{ => expander}/special-form-expander/type-unknown.stdout (100%) rename libs/@local/hashql/ast/tests/ui/lower/{ => expander}/special-form-expander/unknown-special-form-typo.jsonc (100%) rename libs/@local/hashql/ast/tests/ui/lower/{ => expander}/special-form-expander/unknown-special-form-typo.stderr (100%) rename libs/@local/hashql/ast/tests/ui/lower/{ => expander}/special-form-expander/unknown-special-form.jsonc (100%) rename libs/@local/hashql/ast/tests/ui/lower/{ => expander}/special-form-expander/unknown-special-form.stderr (100%) rename libs/@local/hashql/ast/tests/ui/lower/{ => expander}/special-form-expander/use-2.jsonc (100%) rename libs/@local/hashql/ast/tests/ui/lower/{ => expander}/special-form-expander/use-2.stderr (100%) rename libs/@local/hashql/ast/tests/ui/lower/{ => expander}/special-form-expander/use-3.jsonc (100%) rename libs/@local/hashql/ast/tests/ui/lower/{ => expander}/special-form-expander/use-3.stdout (100%) rename libs/@local/hashql/ast/tests/ui/lower/{ => expander}/special-form-expander/use-4.jsonc (100%) rename libs/@local/hashql/ast/tests/ui/lower/{ => expander}/special-form-expander/use-4.stderr (100%) rename libs/@local/hashql/ast/tests/ui/lower/{ => expander}/special-form-expander/use-glob-not-ident.jsonc (100%) rename libs/@local/hashql/ast/tests/ui/lower/{ => expander}/special-form-expander/use-glob-not-ident.stderr (100%) rename libs/@local/hashql/ast/tests/ui/lower/{ => expander}/special-form-expander/use-glob-not-star.jsonc (100%) rename libs/@local/hashql/ast/tests/ui/lower/{ => expander}/special-form-expander/use-glob-not-star.stderr (100%) rename libs/@local/hashql/ast/tests/ui/lower/{ => expander}/special-form-expander/use-glob.jsonc (100%) rename libs/@local/hashql/ast/tests/ui/lower/{ => expander}/special-form-expander/use-glob.stdout (100%) rename libs/@local/hashql/ast/tests/ui/lower/{ => expander}/special-form-expander/use-literal.jsonc (100%) rename libs/@local/hashql/ast/tests/ui/lower/{ => expander}/special-form-expander/use-literal.stderr (100%) rename libs/@local/hashql/ast/tests/ui/lower/{ => expander}/special-form-expander/use-struct-literal.jsonc (100%) rename libs/@local/hashql/ast/tests/ui/lower/{ => expander}/special-form-expander/use-struct-literal.stderr (100%) rename libs/@local/hashql/ast/tests/ui/lower/{ => expander}/special-form-expander/use-struct-path.jsonc (100%) rename libs/@local/hashql/ast/tests/ui/lower/{ => expander}/special-form-expander/use-struct-path.stderr (100%) rename libs/@local/hashql/ast/tests/ui/lower/{ => expander}/special-form-expander/use-struct-type.jsonc (100%) rename libs/@local/hashql/ast/tests/ui/lower/{ => expander}/special-form-expander/use-struct-type.stderr (100%) rename libs/@local/hashql/ast/tests/ui/lower/{ => expander}/special-form-expander/use-struct.jsonc (100%) rename libs/@local/hashql/ast/tests/ui/lower/{ => expander}/special-form-expander/use-struct.stdout (100%) rename libs/@local/hashql/ast/tests/ui/lower/{ => expander}/special-form-expander/use-tuple-literal.jsonc (100%) rename libs/@local/hashql/ast/tests/ui/lower/{ => expander}/special-form-expander/use-tuple-literal.stderr (100%) rename libs/@local/hashql/ast/tests/ui/lower/{ => expander}/special-form-expander/use-tuple-path.jsonc (100%) rename libs/@local/hashql/ast/tests/ui/lower/{ => expander}/special-form-expander/use-tuple-path.stderr (100%) rename libs/@local/hashql/ast/tests/ui/lower/{ => expander}/special-form-expander/use-tuple-type.jsonc (100%) rename libs/@local/hashql/ast/tests/ui/lower/{ => expander}/special-form-expander/use-tuple-type.stderr (100%) rename libs/@local/hashql/ast/tests/ui/lower/{ => expander}/special-form-expander/use-tuple.jsonc (100%) rename libs/@local/hashql/ast/tests/ui/lower/{ => expander}/special-form-expander/use-tuple.stdout (100%) delete mode 100644 libs/@local/hashql/ast/tests/ui/lower/import-resolver/.spec.toml delete mode 100644 libs/@local/hashql/ast/tests/ui/lower/import-resolver/continue/.spec.toml delete mode 100644 libs/@local/hashql/ast/tests/ui/lower/pre-expansion-name-resolver/.spec.toml delete mode 100644 libs/@local/hashql/ast/tests/ui/lower/special-form-expander/.spec.toml create mode 100644 libs/@local/hashql/compiletest/src/suite/ast_lower_expander.rs rename libs/@local/hashql/compiletest/src/suite/{ast_lowering_node_mangler.rs => ast_lower_node_mangler.rs} (62%) rename libs/@local/hashql/compiletest/src/suite/{ast_lowering_node_renumberer.rs => ast_lower_node_renumberer.rs} (61%) rename libs/@local/hashql/compiletest/src/suite/{ast_lowering_sanitizer.rs => ast_lower_sanitizer.rs} (64%) rename libs/@local/hashql/compiletest/src/suite/{ast_lowering_type_definition_extractor.rs => ast_lower_type_definition_extractor.rs} (77%) rename libs/@local/hashql/compiletest/src/suite/{ast_lowering_type_extractor.rs => ast_lower_type_extractor.rs} (86%) delete mode 100644 libs/@local/hashql/compiletest/src/suite/ast_lowering_import_resolver.rs delete mode 100644 libs/@local/hashql/compiletest/src/suite/ast_lowering_import_resolver_continue.rs delete mode 100644 libs/@local/hashql/compiletest/src/suite/ast_lowering_pre_expansion_name_resolver.rs delete mode 100644 libs/@local/hashql/compiletest/src/suite/ast_lowering_special_form_expander.rs diff --git a/libs/@local/graph/api/src/rest/hashql/compile.rs b/libs/@local/graph/api/src/rest/hashql/compile.rs index 86b44c687cb..b56c9738864 100644 --- a/libs/@local/graph/api/src/rest/hashql/compile.rs +++ b/libs/@local/graph/api/src/rest/hashql/compile.rs @@ -68,7 +68,7 @@ impl<'heap> Compilation<'heap> { let Success { value: types, advisories, - } = hashql_ast::lower::lower(sym::path::main, &mut ast, &env, &modules) + } = hashql_ast::lower::lower(sym::path::main, &mut ast, &env, &modules, &mut *scratch) .map_category(|category| { HashQlDiagnosticCategory::Ast(AstDiagnosticCategory::Lowering(category)) }) diff --git a/libs/@local/hashql/ast/tests/ui/lower/expander/.spec.toml b/libs/@local/hashql/ast/tests/ui/lower/expander/.spec.toml new file mode 100644 index 00000000000..61945bdb75e --- /dev/null +++ b/libs/@local/hashql/ast/tests/ui/lower/expander/.spec.toml @@ -0,0 +1 @@ +suite = "ast/lower/expander" diff --git a/libs/@local/hashql/ast/tests/ui/lower/import-resolver/basic-absolute-imports.jsonc b/libs/@local/hashql/ast/tests/ui/lower/expander/import-resolver/basic-absolute-imports.jsonc similarity index 100% rename from libs/@local/hashql/ast/tests/ui/lower/import-resolver/basic-absolute-imports.jsonc rename to libs/@local/hashql/ast/tests/ui/lower/expander/import-resolver/basic-absolute-imports.jsonc diff --git a/libs/@local/hashql/ast/tests/ui/lower/import-resolver/basic-absolute-imports.stdout b/libs/@local/hashql/ast/tests/ui/lower/expander/import-resolver/basic-absolute-imports.stdout similarity index 100% rename from libs/@local/hashql/ast/tests/ui/lower/import-resolver/basic-absolute-imports.stdout rename to libs/@local/hashql/ast/tests/ui/lower/expander/import-resolver/basic-absolute-imports.stdout diff --git a/libs/@local/hashql/ast/tests/ui/lower/import-resolver/basic-glob-import.jsonc b/libs/@local/hashql/ast/tests/ui/lower/expander/import-resolver/basic-glob-import.jsonc similarity index 100% rename from libs/@local/hashql/ast/tests/ui/lower/import-resolver/basic-glob-import.jsonc rename to libs/@local/hashql/ast/tests/ui/lower/expander/import-resolver/basic-glob-import.jsonc diff --git a/libs/@local/hashql/ast/tests/ui/lower/import-resolver/basic-glob-import.stdout b/libs/@local/hashql/ast/tests/ui/lower/expander/import-resolver/basic-glob-import.stdout similarity index 100% rename from libs/@local/hashql/ast/tests/ui/lower/import-resolver/basic-glob-import.stdout rename to libs/@local/hashql/ast/tests/ui/lower/expander/import-resolver/basic-glob-import.stdout diff --git a/libs/@local/hashql/ast/tests/ui/lower/import-resolver/basic-relative-import.jsonc b/libs/@local/hashql/ast/tests/ui/lower/expander/import-resolver/basic-relative-import.jsonc similarity index 100% rename from libs/@local/hashql/ast/tests/ui/lower/import-resolver/basic-relative-import.jsonc rename to libs/@local/hashql/ast/tests/ui/lower/expander/import-resolver/basic-relative-import.jsonc diff --git a/libs/@local/hashql/ast/tests/ui/lower/import-resolver/basic-relative-import.stdout b/libs/@local/hashql/ast/tests/ui/lower/expander/import-resolver/basic-relative-import.stdout similarity index 100% rename from libs/@local/hashql/ast/tests/ui/lower/import-resolver/basic-relative-import.stdout rename to libs/@local/hashql/ast/tests/ui/lower/expander/import-resolver/basic-relative-import.stdout diff --git a/libs/@local/hashql/ast/tests/ui/lower/import-resolver/basic-renamed-import.jsonc b/libs/@local/hashql/ast/tests/ui/lower/expander/import-resolver/basic-renamed-import.jsonc similarity index 100% rename from libs/@local/hashql/ast/tests/ui/lower/import-resolver/basic-renamed-import.jsonc rename to libs/@local/hashql/ast/tests/ui/lower/expander/import-resolver/basic-renamed-import.jsonc diff --git a/libs/@local/hashql/ast/tests/ui/lower/import-resolver/basic-renamed-import.stdout b/libs/@local/hashql/ast/tests/ui/lower/expander/import-resolver/basic-renamed-import.stdout similarity index 100% rename from libs/@local/hashql/ast/tests/ui/lower/import-resolver/basic-renamed-import.stdout rename to libs/@local/hashql/ast/tests/ui/lower/expander/import-resolver/basic-renamed-import.stdout diff --git a/libs/@local/hashql/ast/tests/ui/lower/import-resolver/closure-complex-return-type.jsonc b/libs/@local/hashql/ast/tests/ui/lower/expander/import-resolver/closure-complex-return-type.jsonc similarity index 100% rename from libs/@local/hashql/ast/tests/ui/lower/import-resolver/closure-complex-return-type.jsonc rename to libs/@local/hashql/ast/tests/ui/lower/expander/import-resolver/closure-complex-return-type.jsonc diff --git a/libs/@local/hashql/ast/tests/ui/lower/import-resolver/closure-complex-return-type.stdout b/libs/@local/hashql/ast/tests/ui/lower/expander/import-resolver/closure-complex-return-type.stdout similarity index 100% rename from libs/@local/hashql/ast/tests/ui/lower/import-resolver/closure-complex-return-type.stdout rename to libs/@local/hashql/ast/tests/ui/lower/expander/import-resolver/closure-complex-return-type.stdout diff --git a/libs/@local/hashql/ast/tests/ui/lower/import-resolver/closure-generic-not-resolved.jsonc b/libs/@local/hashql/ast/tests/ui/lower/expander/import-resolver/closure-generic-not-resolved.jsonc similarity index 100% rename from libs/@local/hashql/ast/tests/ui/lower/import-resolver/closure-generic-not-resolved.jsonc rename to libs/@local/hashql/ast/tests/ui/lower/expander/import-resolver/closure-generic-not-resolved.jsonc diff --git a/libs/@local/hashql/ast/tests/ui/lower/import-resolver/closure-generic-not-resolved.stdout b/libs/@local/hashql/ast/tests/ui/lower/expander/import-resolver/closure-generic-not-resolved.stdout similarity index 100% rename from libs/@local/hashql/ast/tests/ui/lower/import-resolver/closure-generic-not-resolved.stdout rename to libs/@local/hashql/ast/tests/ui/lower/expander/import-resolver/closure-generic-not-resolved.stdout diff --git a/libs/@local/hashql/ast/tests/ui/lower/import-resolver/closure-mixed-resolution.jsonc b/libs/@local/hashql/ast/tests/ui/lower/expander/import-resolver/closure-mixed-resolution.jsonc similarity index 100% rename from libs/@local/hashql/ast/tests/ui/lower/import-resolver/closure-mixed-resolution.jsonc rename to libs/@local/hashql/ast/tests/ui/lower/expander/import-resolver/closure-mixed-resolution.jsonc diff --git a/libs/@local/hashql/ast/tests/ui/lower/import-resolver/closure-mixed-resolution.stdout b/libs/@local/hashql/ast/tests/ui/lower/expander/import-resolver/closure-mixed-resolution.stdout similarity index 100% rename from libs/@local/hashql/ast/tests/ui/lower/import-resolver/closure-mixed-resolution.stdout rename to libs/@local/hashql/ast/tests/ui/lower/expander/import-resolver/closure-mixed-resolution.stdout diff --git a/libs/@local/hashql/ast/tests/ui/lower/import-resolver/closure-param-not-resolved.jsonc b/libs/@local/hashql/ast/tests/ui/lower/expander/import-resolver/closure-param-not-resolved.jsonc similarity index 100% rename from libs/@local/hashql/ast/tests/ui/lower/import-resolver/closure-param-not-resolved.jsonc rename to libs/@local/hashql/ast/tests/ui/lower/expander/import-resolver/closure-param-not-resolved.jsonc diff --git a/libs/@local/hashql/ast/tests/ui/lower/import-resolver/closure-param-not-resolved.stdout b/libs/@local/hashql/ast/tests/ui/lower/expander/import-resolver/closure-param-not-resolved.stdout similarity index 100% rename from libs/@local/hashql/ast/tests/ui/lower/import-resolver/closure-param-not-resolved.stdout rename to libs/@local/hashql/ast/tests/ui/lower/expander/import-resolver/closure-param-not-resolved.stdout diff --git a/libs/@local/hashql/ast/tests/ui/lower/import-resolver/complex-nested-type-parameters.jsonc b/libs/@local/hashql/ast/tests/ui/lower/expander/import-resolver/complex-nested-type-parameters.jsonc similarity index 100% rename from libs/@local/hashql/ast/tests/ui/lower/import-resolver/complex-nested-type-parameters.jsonc rename to libs/@local/hashql/ast/tests/ui/lower/expander/import-resolver/complex-nested-type-parameters.jsonc diff --git a/libs/@local/hashql/ast/tests/ui/lower/import-resolver/complex-nested-type-parameters.stdout b/libs/@local/hashql/ast/tests/ui/lower/expander/import-resolver/complex-nested-type-parameters.stdout similarity index 100% rename from libs/@local/hashql/ast/tests/ui/lower/import-resolver/complex-nested-type-parameters.stdout rename to libs/@local/hashql/ast/tests/ui/lower/expander/import-resolver/complex-nested-type-parameters.stdout diff --git a/libs/@local/hashql/ast/tests/ui/lower/import-resolver/complex-path-resolution.jsonc b/libs/@local/hashql/ast/tests/ui/lower/expander/import-resolver/complex-path-resolution.jsonc similarity index 100% rename from libs/@local/hashql/ast/tests/ui/lower/import-resolver/complex-path-resolution.jsonc rename to libs/@local/hashql/ast/tests/ui/lower/expander/import-resolver/complex-path-resolution.jsonc diff --git a/libs/@local/hashql/ast/tests/ui/lower/import-resolver/complex-path-resolution.stdout b/libs/@local/hashql/ast/tests/ui/lower/expander/import-resolver/complex-path-resolution.stdout similarity index 100% rename from libs/@local/hashql/ast/tests/ui/lower/import-resolver/complex-path-resolution.stdout rename to libs/@local/hashql/ast/tests/ui/lower/expander/import-resolver/complex-path-resolution.stdout diff --git a/libs/@local/hashql/ast/tests/ui/lower/import-resolver/continue/unresolved-nested.jsonc b/libs/@local/hashql/ast/tests/ui/lower/expander/import-resolver/continue/unresolved-nested.jsonc similarity index 90% rename from libs/@local/hashql/ast/tests/ui/lower/import-resolver/continue/unresolved-nested.jsonc rename to libs/@local/hashql/ast/tests/ui/lower/expander/import-resolver/continue/unresolved-nested.jsonc index aa31bd58c0f..352bf7781e1 100644 --- a/libs/@local/hashql/ast/tests/ui/lower/import-resolver/continue/unresolved-nested.jsonc +++ b/libs/@local/hashql/ast/tests/ui/lower/expander/import-resolver/continue/unresolved-nested.jsonc @@ -1,5 +1,6 @@ //@ run: pass //@ description: Tests that unresolved nested type variables are handled by dummy replacement, allowing lowering to continue. +//@ suite#continue: true [ "type", "Foo", diff --git a/libs/@local/hashql/ast/tests/ui/lower/import-resolver/continue/unresolved-nested.stderr b/libs/@local/hashql/ast/tests/ui/lower/expander/import-resolver/continue/unresolved-nested.stderr similarity index 100% rename from libs/@local/hashql/ast/tests/ui/lower/import-resolver/continue/unresolved-nested.stderr rename to libs/@local/hashql/ast/tests/ui/lower/expander/import-resolver/continue/unresolved-nested.stderr diff --git a/libs/@local/hashql/ast/tests/ui/lower/import-resolver/continue/unresolved-nested.stdout b/libs/@local/hashql/ast/tests/ui/lower/expander/import-resolver/continue/unresolved-nested.stdout similarity index 100% rename from libs/@local/hashql/ast/tests/ui/lower/import-resolver/continue/unresolved-nested.stdout rename to libs/@local/hashql/ast/tests/ui/lower/expander/import-resolver/continue/unresolved-nested.stdout diff --git a/libs/@local/hashql/ast/tests/ui/lower/import-resolver/continue/unresolved-type.jsonc b/libs/@local/hashql/ast/tests/ui/lower/expander/import-resolver/continue/unresolved-type.jsonc similarity index 88% rename from libs/@local/hashql/ast/tests/ui/lower/import-resolver/continue/unresolved-type.jsonc rename to libs/@local/hashql/ast/tests/ui/lower/expander/import-resolver/continue/unresolved-type.jsonc index 24aebc675f8..6ba9772a652 100644 --- a/libs/@local/hashql/ast/tests/ui/lower/import-resolver/continue/unresolved-type.jsonc +++ b/libs/@local/hashql/ast/tests/ui/lower/expander/import-resolver/continue/unresolved-type.jsonc @@ -1,5 +1,6 @@ //@ run: pass //@ description: Tests that an unresolved type is handled by dummy replacement, allowing lowering to continue. +//@ suite#continue: true [ "type", "Foo", diff --git a/libs/@local/hashql/ast/tests/ui/lower/import-resolver/continue/unresolved-type.stderr b/libs/@local/hashql/ast/tests/ui/lower/expander/import-resolver/continue/unresolved-type.stderr similarity index 100% rename from libs/@local/hashql/ast/tests/ui/lower/import-resolver/continue/unresolved-type.stderr rename to libs/@local/hashql/ast/tests/ui/lower/expander/import-resolver/continue/unresolved-type.stderr diff --git a/libs/@local/hashql/ast/tests/ui/lower/import-resolver/continue/unresolved-type.stdout b/libs/@local/hashql/ast/tests/ui/lower/expander/import-resolver/continue/unresolved-type.stdout similarity index 100% rename from libs/@local/hashql/ast/tests/ui/lower/import-resolver/continue/unresolved-type.stdout rename to libs/@local/hashql/ast/tests/ui/lower/expander/import-resolver/continue/unresolved-type.stdout diff --git a/libs/@local/hashql/ast/tests/ui/lower/import-resolver/continue/unresolved-value.jsonc b/libs/@local/hashql/ast/tests/ui/lower/expander/import-resolver/continue/unresolved-value.jsonc similarity index 90% rename from libs/@local/hashql/ast/tests/ui/lower/import-resolver/continue/unresolved-value.jsonc rename to libs/@local/hashql/ast/tests/ui/lower/expander/import-resolver/continue/unresolved-value.jsonc index bd32353537f..3443755d98c 100644 --- a/libs/@local/hashql/ast/tests/ui/lower/import-resolver/continue/unresolved-value.jsonc +++ b/libs/@local/hashql/ast/tests/ui/lower/expander/import-resolver/continue/unresolved-value.jsonc @@ -1,5 +1,6 @@ //@ run: pass //@ description: Tests that an unresolved value (function `bit_shl`) is handled by dummy replacement, allowing lowering to continue. +//@ suite#continue: true [ "shl", //~^ ERROR Cannot find variable 'shl' diff --git a/libs/@local/hashql/ast/tests/ui/lower/import-resolver/continue/unresolved-value.stderr b/libs/@local/hashql/ast/tests/ui/lower/expander/import-resolver/continue/unresolved-value.stderr similarity index 100% rename from libs/@local/hashql/ast/tests/ui/lower/import-resolver/continue/unresolved-value.stderr rename to libs/@local/hashql/ast/tests/ui/lower/expander/import-resolver/continue/unresolved-value.stderr diff --git a/libs/@local/hashql/ast/tests/ui/lower/import-resolver/continue/unresolved-value.stdout b/libs/@local/hashql/ast/tests/ui/lower/expander/import-resolver/continue/unresolved-value.stdout similarity index 100% rename from libs/@local/hashql/ast/tests/ui/lower/import-resolver/continue/unresolved-value.stdout rename to libs/@local/hashql/ast/tests/ui/lower/expander/import-resolver/continue/unresolved-value.stdout diff --git a/libs/@local/hashql/ast/tests/ui/lower/import-resolver/continue/use-not-found.jsonc b/libs/@local/hashql/ast/tests/ui/lower/expander/import-resolver/continue/use-not-found.jsonc similarity index 91% rename from libs/@local/hashql/ast/tests/ui/lower/import-resolver/continue/use-not-found.jsonc rename to libs/@local/hashql/ast/tests/ui/lower/expander/import-resolver/continue/use-not-found.jsonc index 043f5efa8b3..201624c5d1e 100644 --- a/libs/@local/hashql/ast/tests/ui/lower/import-resolver/continue/use-not-found.jsonc +++ b/libs/@local/hashql/ast/tests/ui/lower/expander/import-resolver/continue/use-not-found.jsonc @@ -1,5 +1,6 @@ //@ run: pass //@ description: Tests that a `use` statement for a non-existent module (`kernel::foo`) is handled by dummy replacement, allowing lowering to continue. +//@ suite#continue: true [ "use", "kernel::foo", diff --git a/libs/@local/hashql/ast/tests/ui/lower/import-resolver/continue/use-not-found.stderr b/libs/@local/hashql/ast/tests/ui/lower/expander/import-resolver/continue/use-not-found.stderr similarity index 100% rename from libs/@local/hashql/ast/tests/ui/lower/import-resolver/continue/use-not-found.stderr rename to libs/@local/hashql/ast/tests/ui/lower/expander/import-resolver/continue/use-not-found.stderr diff --git a/libs/@local/hashql/ast/tests/ui/lower/import-resolver/continue/use-not-found.stdout b/libs/@local/hashql/ast/tests/ui/lower/expander/import-resolver/continue/use-not-found.stdout similarity index 100% rename from libs/@local/hashql/ast/tests/ui/lower/import-resolver/continue/use-not-found.stdout rename to libs/@local/hashql/ast/tests/ui/lower/expander/import-resolver/continue/use-not-found.stdout diff --git a/libs/@local/hashql/ast/tests/ui/lower/import-resolver/generic-argument-absolute-path.jsonc b/libs/@local/hashql/ast/tests/ui/lower/expander/import-resolver/generic-argument-absolute-path.jsonc similarity index 100% rename from libs/@local/hashql/ast/tests/ui/lower/import-resolver/generic-argument-absolute-path.jsonc rename to libs/@local/hashql/ast/tests/ui/lower/expander/import-resolver/generic-argument-absolute-path.jsonc diff --git a/libs/@local/hashql/ast/tests/ui/lower/import-resolver/generic-argument-absolute-path.stderr b/libs/@local/hashql/ast/tests/ui/lower/expander/import-resolver/generic-argument-absolute-path.stderr similarity index 100% rename from libs/@local/hashql/ast/tests/ui/lower/import-resolver/generic-argument-absolute-path.stderr rename to libs/@local/hashql/ast/tests/ui/lower/expander/import-resolver/generic-argument-absolute-path.stderr diff --git a/libs/@local/hashql/ast/tests/ui/lower/import-resolver/generic-argument-use-path.jsonc b/libs/@local/hashql/ast/tests/ui/lower/expander/import-resolver/generic-argument-use-path.jsonc similarity index 100% rename from libs/@local/hashql/ast/tests/ui/lower/import-resolver/generic-argument-use-path.jsonc rename to libs/@local/hashql/ast/tests/ui/lower/expander/import-resolver/generic-argument-use-path.jsonc diff --git a/libs/@local/hashql/ast/tests/ui/lower/import-resolver/generic-argument-use-path.stderr b/libs/@local/hashql/ast/tests/ui/lower/expander/import-resolver/generic-argument-use-path.stderr similarity index 100% rename from libs/@local/hashql/ast/tests/ui/lower/import-resolver/generic-argument-use-path.stderr rename to libs/@local/hashql/ast/tests/ui/lower/expander/import-resolver/generic-argument-use-path.stderr diff --git a/libs/@local/hashql/ast/tests/ui/lower/import-resolver/generic-arguments-in-final-segment.jsonc b/libs/@local/hashql/ast/tests/ui/lower/expander/import-resolver/generic-arguments-in-final-segment.jsonc similarity index 100% rename from libs/@local/hashql/ast/tests/ui/lower/import-resolver/generic-arguments-in-final-segment.jsonc rename to libs/@local/hashql/ast/tests/ui/lower/expander/import-resolver/generic-arguments-in-final-segment.jsonc diff --git a/libs/@local/hashql/ast/tests/ui/lower/import-resolver/generic-arguments-in-final-segment.stdout b/libs/@local/hashql/ast/tests/ui/lower/expander/import-resolver/generic-arguments-in-final-segment.stdout similarity index 100% rename from libs/@local/hashql/ast/tests/ui/lower/import-resolver/generic-arguments-in-final-segment.stdout rename to libs/@local/hashql/ast/tests/ui/lower/expander/import-resolver/generic-arguments-in-final-segment.stdout diff --git a/libs/@local/hashql/ast/tests/ui/lower/import-resolver/generic-constraints-type.jsonc b/libs/@local/hashql/ast/tests/ui/lower/expander/import-resolver/generic-constraints-type.jsonc similarity index 100% rename from libs/@local/hashql/ast/tests/ui/lower/import-resolver/generic-constraints-type.jsonc rename to libs/@local/hashql/ast/tests/ui/lower/expander/import-resolver/generic-constraints-type.jsonc diff --git a/libs/@local/hashql/ast/tests/ui/lower/import-resolver/generic-constraints-type.stdout b/libs/@local/hashql/ast/tests/ui/lower/expander/import-resolver/generic-constraints-type.stdout similarity index 100% rename from libs/@local/hashql/ast/tests/ui/lower/import-resolver/generic-constraints-type.stdout rename to libs/@local/hashql/ast/tests/ui/lower/expander/import-resolver/generic-constraints-type.stdout diff --git a/libs/@local/hashql/ast/tests/ui/lower/import-resolver/generic-constraints.newtype.jsonc b/libs/@local/hashql/ast/tests/ui/lower/expander/import-resolver/generic-constraints.newtype.jsonc similarity index 100% rename from libs/@local/hashql/ast/tests/ui/lower/import-resolver/generic-constraints.newtype.jsonc rename to libs/@local/hashql/ast/tests/ui/lower/expander/import-resolver/generic-constraints.newtype.jsonc diff --git a/libs/@local/hashql/ast/tests/ui/lower/import-resolver/generic-constraints.newtype.stdout b/libs/@local/hashql/ast/tests/ui/lower/expander/import-resolver/generic-constraints.newtype.stdout similarity index 100% rename from libs/@local/hashql/ast/tests/ui/lower/import-resolver/generic-constraints.newtype.stdout rename to libs/@local/hashql/ast/tests/ui/lower/expander/import-resolver/generic-constraints.newtype.stdout diff --git a/libs/@local/hashql/ast/tests/ui/lower/import-resolver/glob-not-found.jsonc b/libs/@local/hashql/ast/tests/ui/lower/expander/import-resolver/glob-not-found.jsonc similarity index 100% rename from libs/@local/hashql/ast/tests/ui/lower/import-resolver/glob-not-found.jsonc rename to libs/@local/hashql/ast/tests/ui/lower/expander/import-resolver/glob-not-found.jsonc diff --git a/libs/@local/hashql/ast/tests/ui/lower/import-resolver/glob-not-found.stderr b/libs/@local/hashql/ast/tests/ui/lower/expander/import-resolver/glob-not-found.stderr similarity index 100% rename from libs/@local/hashql/ast/tests/ui/lower/import-resolver/glob-not-found.stderr rename to libs/@local/hashql/ast/tests/ui/lower/expander/import-resolver/glob-not-found.stderr diff --git a/libs/@local/hashql/ast/tests/ui/lower/import-resolver/item-not-found.jsonc b/libs/@local/hashql/ast/tests/ui/lower/expander/import-resolver/item-not-found.jsonc similarity index 100% rename from libs/@local/hashql/ast/tests/ui/lower/import-resolver/item-not-found.jsonc rename to libs/@local/hashql/ast/tests/ui/lower/expander/import-resolver/item-not-found.jsonc diff --git a/libs/@local/hashql/ast/tests/ui/lower/import-resolver/item-not-found.stderr b/libs/@local/hashql/ast/tests/ui/lower/expander/import-resolver/item-not-found.stderr similarity index 100% rename from libs/@local/hashql/ast/tests/ui/lower/import-resolver/item-not-found.stderr rename to libs/@local/hashql/ast/tests/ui/lower/expander/import-resolver/item-not-found.stderr diff --git a/libs/@local/hashql/ast/tests/ui/lower/import-resolver/local-binding-recursive-type.jsonc b/libs/@local/hashql/ast/tests/ui/lower/expander/import-resolver/local-binding-recursive-type.jsonc similarity index 100% rename from libs/@local/hashql/ast/tests/ui/lower/import-resolver/local-binding-recursive-type.jsonc rename to libs/@local/hashql/ast/tests/ui/lower/expander/import-resolver/local-binding-recursive-type.jsonc diff --git a/libs/@local/hashql/ast/tests/ui/lower/import-resolver/local-binding-recursive-type.stdout b/libs/@local/hashql/ast/tests/ui/lower/expander/import-resolver/local-binding-recursive-type.stdout similarity index 100% rename from libs/@local/hashql/ast/tests/ui/lower/import-resolver/local-binding-recursive-type.stdout rename to libs/@local/hashql/ast/tests/ui/lower/expander/import-resolver/local-binding-recursive-type.stdout diff --git a/libs/@local/hashql/ast/tests/ui/lower/import-resolver/local-binding-recursive-value.jsonc b/libs/@local/hashql/ast/tests/ui/lower/expander/import-resolver/local-binding-recursive-value.jsonc similarity index 100% rename from libs/@local/hashql/ast/tests/ui/lower/import-resolver/local-binding-recursive-value.jsonc rename to libs/@local/hashql/ast/tests/ui/lower/expander/import-resolver/local-binding-recursive-value.jsonc diff --git a/libs/@local/hashql/ast/tests/ui/lower/import-resolver/local-binding-recursive-value.stdout b/libs/@local/hashql/ast/tests/ui/lower/expander/import-resolver/local-binding-recursive-value.stdout similarity index 100% rename from libs/@local/hashql/ast/tests/ui/lower/import-resolver/local-binding-recursive-value.stdout rename to libs/@local/hashql/ast/tests/ui/lower/expander/import-resolver/local-binding-recursive-value.stdout diff --git a/libs/@local/hashql/ast/tests/ui/lower/import-resolver/local-binding-type.jsonc b/libs/@local/hashql/ast/tests/ui/lower/expander/import-resolver/local-binding-type.jsonc similarity index 100% rename from libs/@local/hashql/ast/tests/ui/lower/import-resolver/local-binding-type.jsonc rename to libs/@local/hashql/ast/tests/ui/lower/expander/import-resolver/local-binding-type.jsonc diff --git a/libs/@local/hashql/ast/tests/ui/lower/import-resolver/local-binding-type.stdout b/libs/@local/hashql/ast/tests/ui/lower/expander/import-resolver/local-binding-type.stdout similarity index 100% rename from libs/@local/hashql/ast/tests/ui/lower/import-resolver/local-binding-type.stdout rename to libs/@local/hashql/ast/tests/ui/lower/expander/import-resolver/local-binding-type.stdout diff --git a/libs/@local/hashql/ast/tests/ui/lower/import-resolver/local-binding-value.jsonc b/libs/@local/hashql/ast/tests/ui/lower/expander/import-resolver/local-binding-value.jsonc similarity index 100% rename from libs/@local/hashql/ast/tests/ui/lower/import-resolver/local-binding-value.jsonc rename to libs/@local/hashql/ast/tests/ui/lower/expander/import-resolver/local-binding-value.jsonc diff --git a/libs/@local/hashql/ast/tests/ui/lower/import-resolver/local-binding-value.stdout b/libs/@local/hashql/ast/tests/ui/lower/expander/import-resolver/local-binding-value.stdout similarity index 100% rename from libs/@local/hashql/ast/tests/ui/lower/import-resolver/local-binding-value.stdout rename to libs/@local/hashql/ast/tests/ui/lower/expander/import-resolver/local-binding-value.stdout diff --git a/libs/@local/hashql/ast/tests/ui/lower/import-resolver/module-not-found.jsonc b/libs/@local/hashql/ast/tests/ui/lower/expander/import-resolver/module-not-found.jsonc similarity index 100% rename from libs/@local/hashql/ast/tests/ui/lower/import-resolver/module-not-found.jsonc rename to libs/@local/hashql/ast/tests/ui/lower/expander/import-resolver/module-not-found.jsonc diff --git a/libs/@local/hashql/ast/tests/ui/lower/import-resolver/module-not-found.stderr b/libs/@local/hashql/ast/tests/ui/lower/expander/import-resolver/module-not-found.stderr similarity index 100% rename from libs/@local/hashql/ast/tests/ui/lower/import-resolver/module-not-found.stderr rename to libs/@local/hashql/ast/tests/ui/lower/expander/import-resolver/module-not-found.stderr diff --git a/libs/@local/hashql/ast/tests/ui/lower/import-resolver/multiple-named-imports.jsonc b/libs/@local/hashql/ast/tests/ui/lower/expander/import-resolver/multiple-named-imports.jsonc similarity index 100% rename from libs/@local/hashql/ast/tests/ui/lower/import-resolver/multiple-named-imports.jsonc rename to libs/@local/hashql/ast/tests/ui/lower/expander/import-resolver/multiple-named-imports.jsonc diff --git a/libs/@local/hashql/ast/tests/ui/lower/import-resolver/multiple-named-imports.stdout b/libs/@local/hashql/ast/tests/ui/lower/expander/import-resolver/multiple-named-imports.stdout similarity index 100% rename from libs/@local/hashql/ast/tests/ui/lower/import-resolver/multiple-named-imports.stdout rename to libs/@local/hashql/ast/tests/ui/lower/expander/import-resolver/multiple-named-imports.stdout diff --git a/libs/@local/hashql/ast/tests/ui/lower/import-resolver/nested-resolution.jsonc b/libs/@local/hashql/ast/tests/ui/lower/expander/import-resolver/nested-resolution.jsonc similarity index 100% rename from libs/@local/hashql/ast/tests/ui/lower/import-resolver/nested-resolution.jsonc rename to libs/@local/hashql/ast/tests/ui/lower/expander/import-resolver/nested-resolution.jsonc diff --git a/libs/@local/hashql/ast/tests/ui/lower/import-resolver/nested-resolution.stdout b/libs/@local/hashql/ast/tests/ui/lower/expander/import-resolver/nested-resolution.stdout similarity index 100% rename from libs/@local/hashql/ast/tests/ui/lower/import-resolver/nested-resolution.stdout rename to libs/@local/hashql/ast/tests/ui/lower/expander/import-resolver/nested-resolution.stdout diff --git a/libs/@local/hashql/ast/tests/ui/lower/import-resolver/newtype-scope.jsonc b/libs/@local/hashql/ast/tests/ui/lower/expander/import-resolver/newtype-scope.jsonc similarity index 100% rename from libs/@local/hashql/ast/tests/ui/lower/import-resolver/newtype-scope.jsonc rename to libs/@local/hashql/ast/tests/ui/lower/expander/import-resolver/newtype-scope.jsonc diff --git a/libs/@local/hashql/ast/tests/ui/lower/import-resolver/newtype-scope.stdout b/libs/@local/hashql/ast/tests/ui/lower/expander/import-resolver/newtype-scope.stdout similarity index 100% rename from libs/@local/hashql/ast/tests/ui/lower/import-resolver/newtype-scope.stdout rename to libs/@local/hashql/ast/tests/ui/lower/expander/import-resolver/newtype-scope.stdout diff --git a/libs/@local/hashql/ast/tests/ui/lower/import-resolver/path-normalization.jsonc b/libs/@local/hashql/ast/tests/ui/lower/expander/import-resolver/path-normalization.jsonc similarity index 100% rename from libs/@local/hashql/ast/tests/ui/lower/import-resolver/path-normalization.jsonc rename to libs/@local/hashql/ast/tests/ui/lower/expander/import-resolver/path-normalization.jsonc diff --git a/libs/@local/hashql/ast/tests/ui/lower/import-resolver/path-normalization.stdout b/libs/@local/hashql/ast/tests/ui/lower/expander/import-resolver/path-normalization.stdout similarity index 100% rename from libs/@local/hashql/ast/tests/ui/lower/import-resolver/path-normalization.stdout rename to libs/@local/hashql/ast/tests/ui/lower/expander/import-resolver/path-normalization.stdout diff --git a/libs/@local/hashql/ast/tests/ui/lower/import-resolver/prelude.jsonc b/libs/@local/hashql/ast/tests/ui/lower/expander/import-resolver/prelude.jsonc similarity index 100% rename from libs/@local/hashql/ast/tests/ui/lower/import-resolver/prelude.jsonc rename to libs/@local/hashql/ast/tests/ui/lower/expander/import-resolver/prelude.jsonc diff --git a/libs/@local/hashql/ast/tests/ui/lower/import-resolver/prelude.stdout b/libs/@local/hashql/ast/tests/ui/lower/expander/import-resolver/prelude.stdout similarity index 100% rename from libs/@local/hashql/ast/tests/ui/lower/import-resolver/prelude.stdout rename to libs/@local/hashql/ast/tests/ui/lower/expander/import-resolver/prelude.stdout diff --git a/libs/@local/hashql/ast/tests/ui/lower/import-resolver/regression-generic-arguments-identifier.jsonc b/libs/@local/hashql/ast/tests/ui/lower/expander/import-resolver/regression-generic-arguments-identifier.jsonc similarity index 100% rename from libs/@local/hashql/ast/tests/ui/lower/import-resolver/regression-generic-arguments-identifier.jsonc rename to libs/@local/hashql/ast/tests/ui/lower/expander/import-resolver/regression-generic-arguments-identifier.jsonc diff --git a/libs/@local/hashql/ast/tests/ui/lower/import-resolver/regression-generic-arguments-identifier.stdout b/libs/@local/hashql/ast/tests/ui/lower/expander/import-resolver/regression-generic-arguments-identifier.stdout similarity index 100% rename from libs/@local/hashql/ast/tests/ui/lower/import-resolver/regression-generic-arguments-identifier.stdout rename to libs/@local/hashql/ast/tests/ui/lower/expander/import-resolver/regression-generic-arguments-identifier.stdout diff --git a/libs/@local/hashql/ast/tests/ui/lower/import-resolver/rollback.jsonc b/libs/@local/hashql/ast/tests/ui/lower/expander/import-resolver/rollback.jsonc similarity index 100% rename from libs/@local/hashql/ast/tests/ui/lower/import-resolver/rollback.jsonc rename to libs/@local/hashql/ast/tests/ui/lower/expander/import-resolver/rollback.jsonc diff --git a/libs/@local/hashql/ast/tests/ui/lower/import-resolver/rollback.stderr b/libs/@local/hashql/ast/tests/ui/lower/expander/import-resolver/rollback.stderr similarity index 100% rename from libs/@local/hashql/ast/tests/ui/lower/import-resolver/rollback.stderr rename to libs/@local/hashql/ast/tests/ui/lower/expander/import-resolver/rollback.stderr diff --git a/libs/@local/hashql/ast/tests/ui/lower/import-resolver/shadowed-imports.jsonc b/libs/@local/hashql/ast/tests/ui/lower/expander/import-resolver/shadowed-imports.jsonc similarity index 100% rename from libs/@local/hashql/ast/tests/ui/lower/import-resolver/shadowed-imports.jsonc rename to libs/@local/hashql/ast/tests/ui/lower/expander/import-resolver/shadowed-imports.jsonc diff --git a/libs/@local/hashql/ast/tests/ui/lower/import-resolver/shadowed-imports.stdout b/libs/@local/hashql/ast/tests/ui/lower/expander/import-resolver/shadowed-imports.stdout similarity index 100% rename from libs/@local/hashql/ast/tests/ui/lower/import-resolver/shadowed-imports.stdout rename to libs/@local/hashql/ast/tests/ui/lower/expander/import-resolver/shadowed-imports.stdout diff --git a/libs/@local/hashql/ast/tests/ui/lower/import-resolver/shadowed-prelude.jsonc b/libs/@local/hashql/ast/tests/ui/lower/expander/import-resolver/shadowed-prelude.jsonc similarity index 100% rename from libs/@local/hashql/ast/tests/ui/lower/import-resolver/shadowed-prelude.jsonc rename to libs/@local/hashql/ast/tests/ui/lower/expander/import-resolver/shadowed-prelude.jsonc diff --git a/libs/@local/hashql/ast/tests/ui/lower/import-resolver/shadowed-prelude.stdout b/libs/@local/hashql/ast/tests/ui/lower/expander/import-resolver/shadowed-prelude.stdout similarity index 100% rename from libs/@local/hashql/ast/tests/ui/lower/import-resolver/shadowed-prelude.stdout rename to libs/@local/hashql/ast/tests/ui/lower/expander/import-resolver/shadowed-prelude.stdout diff --git a/libs/@local/hashql/ast/tests/ui/lower/import-resolver/substitution.jsonc b/libs/@local/hashql/ast/tests/ui/lower/expander/import-resolver/substitution.jsonc similarity index 100% rename from libs/@local/hashql/ast/tests/ui/lower/import-resolver/substitution.jsonc rename to libs/@local/hashql/ast/tests/ui/lower/expander/import-resolver/substitution.jsonc diff --git a/libs/@local/hashql/ast/tests/ui/lower/import-resolver/substitution.stdout b/libs/@local/hashql/ast/tests/ui/lower/expander/import-resolver/substitution.stdout similarity index 100% rename from libs/@local/hashql/ast/tests/ui/lower/import-resolver/substitution.stdout rename to libs/@local/hashql/ast/tests/ui/lower/expander/import-resolver/substitution.stdout diff --git a/libs/@local/hashql/ast/tests/ui/lower/import-resolver/universe-ambiguity-resolution.jsonc b/libs/@local/hashql/ast/tests/ui/lower/expander/import-resolver/universe-ambiguity-resolution.jsonc similarity index 100% rename from libs/@local/hashql/ast/tests/ui/lower/import-resolver/universe-ambiguity-resolution.jsonc rename to libs/@local/hashql/ast/tests/ui/lower/expander/import-resolver/universe-ambiguity-resolution.jsonc diff --git a/libs/@local/hashql/ast/tests/ui/lower/import-resolver/universe-ambiguity-resolution.stdout b/libs/@local/hashql/ast/tests/ui/lower/expander/import-resolver/universe-ambiguity-resolution.stdout similarity index 100% rename from libs/@local/hashql/ast/tests/ui/lower/import-resolver/universe-ambiguity-resolution.stdout rename to libs/@local/hashql/ast/tests/ui/lower/expander/import-resolver/universe-ambiguity-resolution.stdout diff --git a/libs/@local/hashql/ast/tests/ui/lower/import-resolver/unresolver-variable.jsonc b/libs/@local/hashql/ast/tests/ui/lower/expander/import-resolver/unresolver-variable.jsonc similarity index 100% rename from libs/@local/hashql/ast/tests/ui/lower/import-resolver/unresolver-variable.jsonc rename to libs/@local/hashql/ast/tests/ui/lower/expander/import-resolver/unresolver-variable.jsonc diff --git a/libs/@local/hashql/ast/tests/ui/lower/import-resolver/unresolver-variable.stderr b/libs/@local/hashql/ast/tests/ui/lower/expander/import-resolver/unresolver-variable.stderr similarity index 100% rename from libs/@local/hashql/ast/tests/ui/lower/import-resolver/unresolver-variable.stderr rename to libs/@local/hashql/ast/tests/ui/lower/expander/import-resolver/unresolver-variable.stderr diff --git a/libs/@local/hashql/ast/tests/ui/lower/import-resolver/use-shadowing-let.jsonc b/libs/@local/hashql/ast/tests/ui/lower/expander/import-resolver/use-shadowing-let.jsonc similarity index 100% rename from libs/@local/hashql/ast/tests/ui/lower/import-resolver/use-shadowing-let.jsonc rename to libs/@local/hashql/ast/tests/ui/lower/expander/import-resolver/use-shadowing-let.jsonc diff --git a/libs/@local/hashql/ast/tests/ui/lower/import-resolver/use-shadowing-let.stdout b/libs/@local/hashql/ast/tests/ui/lower/expander/import-resolver/use-shadowing-let.stdout similarity index 100% rename from libs/@local/hashql/ast/tests/ui/lower/import-resolver/use-shadowing-let.stdout rename to libs/@local/hashql/ast/tests/ui/lower/expander/import-resolver/use-shadowing-let.stdout diff --git a/libs/@local/hashql/ast/tests/ui/lower/import-resolver/use-shadowing-use.jsonc b/libs/@local/hashql/ast/tests/ui/lower/expander/import-resolver/use-shadowing-use.jsonc similarity index 100% rename from libs/@local/hashql/ast/tests/ui/lower/import-resolver/use-shadowing-use.jsonc rename to libs/@local/hashql/ast/tests/ui/lower/expander/import-resolver/use-shadowing-use.jsonc diff --git a/libs/@local/hashql/ast/tests/ui/lower/import-resolver/use-shadowing-use.stdout b/libs/@local/hashql/ast/tests/ui/lower/expander/import-resolver/use-shadowing-use.stdout similarity index 100% rename from libs/@local/hashql/ast/tests/ui/lower/import-resolver/use-shadowing-use.stdout rename to libs/@local/hashql/ast/tests/ui/lower/expander/import-resolver/use-shadowing-use.stdout diff --git a/libs/@local/hashql/ast/tests/ui/lower/pre-expansion-name-resolver/absolute-path.jsonc b/libs/@local/hashql/ast/tests/ui/lower/expander/pre-expansion-name-resolver/absolute-path.jsonc similarity index 100% rename from libs/@local/hashql/ast/tests/ui/lower/pre-expansion-name-resolver/absolute-path.jsonc rename to libs/@local/hashql/ast/tests/ui/lower/expander/pre-expansion-name-resolver/absolute-path.jsonc diff --git a/libs/@local/hashql/ast/tests/ui/lower/pre-expansion-name-resolver/absolute-path.stdout b/libs/@local/hashql/ast/tests/ui/lower/expander/pre-expansion-name-resolver/absolute-path.stdout similarity index 100% rename from libs/@local/hashql/ast/tests/ui/lower/pre-expansion-name-resolver/absolute-path.stdout rename to libs/@local/hashql/ast/tests/ui/lower/expander/pre-expansion-name-resolver/absolute-path.stdout diff --git a/libs/@local/hashql/ast/tests/ui/lower/pre-expansion-name-resolver/alias-absolute-path.jsonc b/libs/@local/hashql/ast/tests/ui/lower/expander/pre-expansion-name-resolver/alias-absolute-path.jsonc similarity index 100% rename from libs/@local/hashql/ast/tests/ui/lower/pre-expansion-name-resolver/alias-absolute-path.jsonc rename to libs/@local/hashql/ast/tests/ui/lower/expander/pre-expansion-name-resolver/alias-absolute-path.jsonc diff --git a/libs/@local/hashql/ast/tests/ui/lower/pre-expansion-name-resolver/alias-absolute-path.stdout b/libs/@local/hashql/ast/tests/ui/lower/expander/pre-expansion-name-resolver/alias-absolute-path.stdout similarity index 100% rename from libs/@local/hashql/ast/tests/ui/lower/pre-expansion-name-resolver/alias-absolute-path.stdout rename to libs/@local/hashql/ast/tests/ui/lower/expander/pre-expansion-name-resolver/alias-absolute-path.stdout diff --git a/libs/@local/hashql/ast/tests/ui/lower/pre-expansion-name-resolver/alias-symbol.jsonc b/libs/@local/hashql/ast/tests/ui/lower/expander/pre-expansion-name-resolver/alias-symbol.jsonc similarity index 100% rename from libs/@local/hashql/ast/tests/ui/lower/pre-expansion-name-resolver/alias-symbol.jsonc rename to libs/@local/hashql/ast/tests/ui/lower/expander/pre-expansion-name-resolver/alias-symbol.jsonc diff --git a/libs/@local/hashql/ast/tests/ui/lower/pre-expansion-name-resolver/alias-symbol.stdout b/libs/@local/hashql/ast/tests/ui/lower/expander/pre-expansion-name-resolver/alias-symbol.stdout similarity index 100% rename from libs/@local/hashql/ast/tests/ui/lower/pre-expansion-name-resolver/alias-symbol.stdout rename to libs/@local/hashql/ast/tests/ui/lower/expander/pre-expansion-name-resolver/alias-symbol.stdout diff --git a/libs/@local/hashql/ast/tests/ui/lower/pre-expansion-name-resolver/invalid-let-expr.jsonc b/libs/@local/hashql/ast/tests/ui/lower/expander/pre-expansion-name-resolver/invalid-let-expr.jsonc similarity index 100% rename from libs/@local/hashql/ast/tests/ui/lower/pre-expansion-name-resolver/invalid-let-expr.jsonc rename to libs/@local/hashql/ast/tests/ui/lower/expander/pre-expansion-name-resolver/invalid-let-expr.jsonc diff --git a/libs/@local/hashql/ast/tests/ui/lower/pre-expansion-name-resolver/invalid-let-expr.stdout b/libs/@local/hashql/ast/tests/ui/lower/expander/pre-expansion-name-resolver/invalid-let-expr.stdout similarity index 100% rename from libs/@local/hashql/ast/tests/ui/lower/pre-expansion-name-resolver/invalid-let-expr.stdout rename to libs/@local/hashql/ast/tests/ui/lower/expander/pre-expansion-name-resolver/invalid-let-expr.stdout diff --git a/libs/@local/hashql/ast/tests/ui/lower/pre-expansion-name-resolver/let-3-alias.jsonc b/libs/@local/hashql/ast/tests/ui/lower/expander/pre-expansion-name-resolver/let-3-alias.jsonc similarity index 100% rename from libs/@local/hashql/ast/tests/ui/lower/pre-expansion-name-resolver/let-3-alias.jsonc rename to libs/@local/hashql/ast/tests/ui/lower/expander/pre-expansion-name-resolver/let-3-alias.jsonc diff --git a/libs/@local/hashql/ast/tests/ui/lower/pre-expansion-name-resolver/let-3-alias.stdout b/libs/@local/hashql/ast/tests/ui/lower/expander/pre-expansion-name-resolver/let-3-alias.stdout similarity index 100% rename from libs/@local/hashql/ast/tests/ui/lower/pre-expansion-name-resolver/let-3-alias.stdout rename to libs/@local/hashql/ast/tests/ui/lower/expander/pre-expansion-name-resolver/let-3-alias.stdout diff --git a/libs/@local/hashql/ast/tests/ui/lower/pre-expansion-name-resolver/let-3.jsonc b/libs/@local/hashql/ast/tests/ui/lower/expander/pre-expansion-name-resolver/let-3.jsonc similarity index 100% rename from libs/@local/hashql/ast/tests/ui/lower/pre-expansion-name-resolver/let-3.jsonc rename to libs/@local/hashql/ast/tests/ui/lower/expander/pre-expansion-name-resolver/let-3.jsonc diff --git a/libs/@local/hashql/ast/tests/ui/lower/pre-expansion-name-resolver/let-3.stdout b/libs/@local/hashql/ast/tests/ui/lower/expander/pre-expansion-name-resolver/let-3.stdout similarity index 100% rename from libs/@local/hashql/ast/tests/ui/lower/pre-expansion-name-resolver/let-3.stdout rename to libs/@local/hashql/ast/tests/ui/lower/expander/pre-expansion-name-resolver/let-3.stdout diff --git a/libs/@local/hashql/ast/tests/ui/lower/pre-expansion-name-resolver/let-4-alias.jsonc b/libs/@local/hashql/ast/tests/ui/lower/expander/pre-expansion-name-resolver/let-4-alias.jsonc similarity index 100% rename from libs/@local/hashql/ast/tests/ui/lower/pre-expansion-name-resolver/let-4-alias.jsonc rename to libs/@local/hashql/ast/tests/ui/lower/expander/pre-expansion-name-resolver/let-4-alias.jsonc diff --git a/libs/@local/hashql/ast/tests/ui/lower/pre-expansion-name-resolver/let-4-alias.stdout b/libs/@local/hashql/ast/tests/ui/lower/expander/pre-expansion-name-resolver/let-4-alias.stdout similarity index 100% rename from libs/@local/hashql/ast/tests/ui/lower/pre-expansion-name-resolver/let-4-alias.stdout rename to libs/@local/hashql/ast/tests/ui/lower/expander/pre-expansion-name-resolver/let-4-alias.stdout diff --git a/libs/@local/hashql/ast/tests/ui/lower/pre-expansion-name-resolver/let-4.jsonc b/libs/@local/hashql/ast/tests/ui/lower/expander/pre-expansion-name-resolver/let-4.jsonc similarity index 100% rename from libs/@local/hashql/ast/tests/ui/lower/pre-expansion-name-resolver/let-4.jsonc rename to libs/@local/hashql/ast/tests/ui/lower/expander/pre-expansion-name-resolver/let-4.jsonc diff --git a/libs/@local/hashql/ast/tests/ui/lower/pre-expansion-name-resolver/let-4.stdout b/libs/@local/hashql/ast/tests/ui/lower/expander/pre-expansion-name-resolver/let-4.stdout similarity index 100% rename from libs/@local/hashql/ast/tests/ui/lower/pre-expansion-name-resolver/let-4.stdout rename to libs/@local/hashql/ast/tests/ui/lower/expander/pre-expansion-name-resolver/let-4.stdout diff --git a/libs/@local/hashql/ast/tests/ui/lower/pre-expansion-name-resolver/let-absolute.jsonc b/libs/@local/hashql/ast/tests/ui/lower/expander/pre-expansion-name-resolver/let-absolute.jsonc similarity index 100% rename from libs/@local/hashql/ast/tests/ui/lower/pre-expansion-name-resolver/let-absolute.jsonc rename to libs/@local/hashql/ast/tests/ui/lower/expander/pre-expansion-name-resolver/let-absolute.jsonc diff --git a/libs/@local/hashql/ast/tests/ui/lower/pre-expansion-name-resolver/let-absolute.stdout b/libs/@local/hashql/ast/tests/ui/lower/expander/pre-expansion-name-resolver/let-absolute.stdout similarity index 100% rename from libs/@local/hashql/ast/tests/ui/lower/pre-expansion-name-resolver/let-absolute.stdout rename to libs/@local/hashql/ast/tests/ui/lower/expander/pre-expansion-name-resolver/let-absolute.stdout diff --git a/libs/@local/hashql/ast/tests/ui/lower/pre-expansion-name-resolver/let-ident-generic.jsonc b/libs/@local/hashql/ast/tests/ui/lower/expander/pre-expansion-name-resolver/let-ident-generic.jsonc similarity index 100% rename from libs/@local/hashql/ast/tests/ui/lower/pre-expansion-name-resolver/let-ident-generic.jsonc rename to libs/@local/hashql/ast/tests/ui/lower/expander/pre-expansion-name-resolver/let-ident-generic.jsonc diff --git a/libs/@local/hashql/ast/tests/ui/lower/pre-expansion-name-resolver/let-ident-generic.stdout b/libs/@local/hashql/ast/tests/ui/lower/expander/pre-expansion-name-resolver/let-ident-generic.stdout similarity index 100% rename from libs/@local/hashql/ast/tests/ui/lower/pre-expansion-name-resolver/let-ident-generic.stdout rename to libs/@local/hashql/ast/tests/ui/lower/expander/pre-expansion-name-resolver/let-ident-generic.stdout diff --git a/libs/@local/hashql/ast/tests/ui/lower/pre-expansion-name-resolver/multi-segment-resolution.jsonc b/libs/@local/hashql/ast/tests/ui/lower/expander/pre-expansion-name-resolver/multi-segment-resolution.jsonc similarity index 100% rename from libs/@local/hashql/ast/tests/ui/lower/pre-expansion-name-resolver/multi-segment-resolution.jsonc rename to libs/@local/hashql/ast/tests/ui/lower/expander/pre-expansion-name-resolver/multi-segment-resolution.jsonc diff --git a/libs/@local/hashql/ast/tests/ui/lower/pre-expansion-name-resolver/multi-segment-resolution.stdout b/libs/@local/hashql/ast/tests/ui/lower/expander/pre-expansion-name-resolver/multi-segment-resolution.stdout similarity index 100% rename from libs/@local/hashql/ast/tests/ui/lower/pre-expansion-name-resolver/multi-segment-resolution.stdout rename to libs/@local/hashql/ast/tests/ui/lower/expander/pre-expansion-name-resolver/multi-segment-resolution.stdout diff --git a/libs/@local/hashql/ast/tests/ui/lower/pre-expansion-name-resolver/nested-let.jsonc b/libs/@local/hashql/ast/tests/ui/lower/expander/pre-expansion-name-resolver/nested-let.jsonc similarity index 100% rename from libs/@local/hashql/ast/tests/ui/lower/pre-expansion-name-resolver/nested-let.jsonc rename to libs/@local/hashql/ast/tests/ui/lower/expander/pre-expansion-name-resolver/nested-let.jsonc diff --git a/libs/@local/hashql/ast/tests/ui/lower/pre-expansion-name-resolver/nested-let.stdout b/libs/@local/hashql/ast/tests/ui/lower/expander/pre-expansion-name-resolver/nested-let.stdout similarity index 100% rename from libs/@local/hashql/ast/tests/ui/lower/pre-expansion-name-resolver/nested-let.stdout rename to libs/@local/hashql/ast/tests/ui/lower/expander/pre-expansion-name-resolver/nested-let.stdout diff --git a/libs/@local/hashql/ast/tests/ui/lower/pre-expansion-name-resolver/newtype-3-alias.jsonc b/libs/@local/hashql/ast/tests/ui/lower/expander/pre-expansion-name-resolver/newtype-3-alias.jsonc similarity index 100% rename from libs/@local/hashql/ast/tests/ui/lower/pre-expansion-name-resolver/newtype-3-alias.jsonc rename to libs/@local/hashql/ast/tests/ui/lower/expander/pre-expansion-name-resolver/newtype-3-alias.jsonc diff --git a/libs/@local/hashql/ast/tests/ui/lower/pre-expansion-name-resolver/newtype-3-alias.stdout b/libs/@local/hashql/ast/tests/ui/lower/expander/pre-expansion-name-resolver/newtype-3-alias.stdout similarity index 100% rename from libs/@local/hashql/ast/tests/ui/lower/pre-expansion-name-resolver/newtype-3-alias.stdout rename to libs/@local/hashql/ast/tests/ui/lower/expander/pre-expansion-name-resolver/newtype-3-alias.stdout diff --git a/libs/@local/hashql/ast/tests/ui/lower/pre-expansion-name-resolver/newtype-3.jsonc b/libs/@local/hashql/ast/tests/ui/lower/expander/pre-expansion-name-resolver/newtype-3.jsonc similarity index 100% rename from libs/@local/hashql/ast/tests/ui/lower/pre-expansion-name-resolver/newtype-3.jsonc rename to libs/@local/hashql/ast/tests/ui/lower/expander/pre-expansion-name-resolver/newtype-3.jsonc diff --git a/libs/@local/hashql/ast/tests/ui/lower/pre-expansion-name-resolver/newtype-3.stdout b/libs/@local/hashql/ast/tests/ui/lower/expander/pre-expansion-name-resolver/newtype-3.stdout similarity index 100% rename from libs/@local/hashql/ast/tests/ui/lower/pre-expansion-name-resolver/newtype-3.stdout rename to libs/@local/hashql/ast/tests/ui/lower/expander/pre-expansion-name-resolver/newtype-3.stdout diff --git a/libs/@local/hashql/ast/tests/ui/lower/pre-expansion-name-resolver/newtype-4.jsonc b/libs/@local/hashql/ast/tests/ui/lower/expander/pre-expansion-name-resolver/newtype-4.jsonc similarity index 100% rename from libs/@local/hashql/ast/tests/ui/lower/pre-expansion-name-resolver/newtype-4.jsonc rename to libs/@local/hashql/ast/tests/ui/lower/expander/pre-expansion-name-resolver/newtype-4.jsonc diff --git a/libs/@local/hashql/ast/tests/ui/lower/pre-expansion-name-resolver/newtype-4.stdout b/libs/@local/hashql/ast/tests/ui/lower/expander/pre-expansion-name-resolver/newtype-4.stdout similarity index 100% rename from libs/@local/hashql/ast/tests/ui/lower/pre-expansion-name-resolver/newtype-4.stdout rename to libs/@local/hashql/ast/tests/ui/lower/expander/pre-expansion-name-resolver/newtype-4.stdout diff --git a/libs/@local/hashql/ast/tests/ui/lower/pre-expansion-name-resolver/re-assign-prelude-diverging.jsonc b/libs/@local/hashql/ast/tests/ui/lower/expander/pre-expansion-name-resolver/re-assign-prelude-diverging.jsonc similarity index 100% rename from libs/@local/hashql/ast/tests/ui/lower/pre-expansion-name-resolver/re-assign-prelude-diverging.jsonc rename to libs/@local/hashql/ast/tests/ui/lower/expander/pre-expansion-name-resolver/re-assign-prelude-diverging.jsonc diff --git a/libs/@local/hashql/ast/tests/ui/lower/pre-expansion-name-resolver/re-assign-prelude-diverging.stdout b/libs/@local/hashql/ast/tests/ui/lower/expander/pre-expansion-name-resolver/re-assign-prelude-diverging.stdout similarity index 100% rename from libs/@local/hashql/ast/tests/ui/lower/pre-expansion-name-resolver/re-assign-prelude-diverging.stdout rename to libs/@local/hashql/ast/tests/ui/lower/expander/pre-expansion-name-resolver/re-assign-prelude-diverging.stdout diff --git a/libs/@local/hashql/ast/tests/ui/lower/pre-expansion-name-resolver/re-assign-prelude.jsonc b/libs/@local/hashql/ast/tests/ui/lower/expander/pre-expansion-name-resolver/re-assign-prelude.jsonc similarity index 100% rename from libs/@local/hashql/ast/tests/ui/lower/pre-expansion-name-resolver/re-assign-prelude.jsonc rename to libs/@local/hashql/ast/tests/ui/lower/expander/pre-expansion-name-resolver/re-assign-prelude.jsonc diff --git a/libs/@local/hashql/ast/tests/ui/lower/pre-expansion-name-resolver/re-assign-prelude.stdout b/libs/@local/hashql/ast/tests/ui/lower/expander/pre-expansion-name-resolver/re-assign-prelude.stdout similarity index 100% rename from libs/@local/hashql/ast/tests/ui/lower/pre-expansion-name-resolver/re-assign-prelude.stdout rename to libs/@local/hashql/ast/tests/ui/lower/expander/pre-expansion-name-resolver/re-assign-prelude.stdout diff --git a/libs/@local/hashql/ast/tests/ui/lower/pre-expansion-name-resolver/re-assign.jsonc b/libs/@local/hashql/ast/tests/ui/lower/expander/pre-expansion-name-resolver/re-assign.jsonc similarity index 100% rename from libs/@local/hashql/ast/tests/ui/lower/pre-expansion-name-resolver/re-assign.jsonc rename to libs/@local/hashql/ast/tests/ui/lower/expander/pre-expansion-name-resolver/re-assign.jsonc diff --git a/libs/@local/hashql/ast/tests/ui/lower/pre-expansion-name-resolver/re-assign.stdout b/libs/@local/hashql/ast/tests/ui/lower/expander/pre-expansion-name-resolver/re-assign.stdout similarity index 100% rename from libs/@local/hashql/ast/tests/ui/lower/pre-expansion-name-resolver/re-assign.stdout rename to libs/@local/hashql/ast/tests/ui/lower/expander/pre-expansion-name-resolver/re-assign.stdout diff --git a/libs/@local/hashql/ast/tests/ui/lower/pre-expansion-name-resolver/resolve-generics.jsonc b/libs/@local/hashql/ast/tests/ui/lower/expander/pre-expansion-name-resolver/resolve-generics.jsonc similarity index 100% rename from libs/@local/hashql/ast/tests/ui/lower/pre-expansion-name-resolver/resolve-generics.jsonc rename to libs/@local/hashql/ast/tests/ui/lower/expander/pre-expansion-name-resolver/resolve-generics.jsonc diff --git a/libs/@local/hashql/ast/tests/ui/lower/pre-expansion-name-resolver/resolve-generics.stdout b/libs/@local/hashql/ast/tests/ui/lower/expander/pre-expansion-name-resolver/resolve-generics.stdout similarity index 100% rename from libs/@local/hashql/ast/tests/ui/lower/pre-expansion-name-resolver/resolve-generics.stdout rename to libs/@local/hashql/ast/tests/ui/lower/expander/pre-expansion-name-resolver/resolve-generics.stdout diff --git a/libs/@local/hashql/ast/tests/ui/lower/pre-expansion-name-resolver/resolve-symbol.jsonc b/libs/@local/hashql/ast/tests/ui/lower/expander/pre-expansion-name-resolver/resolve-symbol.jsonc similarity index 100% rename from libs/@local/hashql/ast/tests/ui/lower/pre-expansion-name-resolver/resolve-symbol.jsonc rename to libs/@local/hashql/ast/tests/ui/lower/expander/pre-expansion-name-resolver/resolve-symbol.jsonc diff --git a/libs/@local/hashql/ast/tests/ui/lower/pre-expansion-name-resolver/resolve-symbol.stdout b/libs/@local/hashql/ast/tests/ui/lower/expander/pre-expansion-name-resolver/resolve-symbol.stdout similarity index 100% rename from libs/@local/hashql/ast/tests/ui/lower/pre-expansion-name-resolver/resolve-symbol.stdout rename to libs/@local/hashql/ast/tests/ui/lower/expander/pre-expansion-name-resolver/resolve-symbol.stdout diff --git a/libs/@local/hashql/ast/tests/ui/lower/pre-expansion-name-resolver/restoration-bindings.jsonc b/libs/@local/hashql/ast/tests/ui/lower/expander/pre-expansion-name-resolver/restoration-bindings.jsonc similarity index 100% rename from libs/@local/hashql/ast/tests/ui/lower/pre-expansion-name-resolver/restoration-bindings.jsonc rename to libs/@local/hashql/ast/tests/ui/lower/expander/pre-expansion-name-resolver/restoration-bindings.jsonc diff --git a/libs/@local/hashql/ast/tests/ui/lower/pre-expansion-name-resolver/restoration-bindings.stdout b/libs/@local/hashql/ast/tests/ui/lower/expander/pre-expansion-name-resolver/restoration-bindings.stdout similarity index 100% rename from libs/@local/hashql/ast/tests/ui/lower/pre-expansion-name-resolver/restoration-bindings.stdout rename to libs/@local/hashql/ast/tests/ui/lower/expander/pre-expansion-name-resolver/restoration-bindings.stdout diff --git a/libs/@local/hashql/ast/tests/ui/lower/pre-expansion-name-resolver/type-3-alias.jsonc b/libs/@local/hashql/ast/tests/ui/lower/expander/pre-expansion-name-resolver/type-3-alias.jsonc similarity index 100% rename from libs/@local/hashql/ast/tests/ui/lower/pre-expansion-name-resolver/type-3-alias.jsonc rename to libs/@local/hashql/ast/tests/ui/lower/expander/pre-expansion-name-resolver/type-3-alias.jsonc diff --git a/libs/@local/hashql/ast/tests/ui/lower/pre-expansion-name-resolver/type-3-alias.stdout b/libs/@local/hashql/ast/tests/ui/lower/expander/pre-expansion-name-resolver/type-3-alias.stdout similarity index 100% rename from libs/@local/hashql/ast/tests/ui/lower/pre-expansion-name-resolver/type-3-alias.stdout rename to libs/@local/hashql/ast/tests/ui/lower/expander/pre-expansion-name-resolver/type-3-alias.stdout diff --git a/libs/@local/hashql/ast/tests/ui/lower/pre-expansion-name-resolver/type-3.jsonc b/libs/@local/hashql/ast/tests/ui/lower/expander/pre-expansion-name-resolver/type-3.jsonc similarity index 100% rename from libs/@local/hashql/ast/tests/ui/lower/pre-expansion-name-resolver/type-3.jsonc rename to libs/@local/hashql/ast/tests/ui/lower/expander/pre-expansion-name-resolver/type-3.jsonc diff --git a/libs/@local/hashql/ast/tests/ui/lower/pre-expansion-name-resolver/type-3.stdout b/libs/@local/hashql/ast/tests/ui/lower/expander/pre-expansion-name-resolver/type-3.stdout similarity index 100% rename from libs/@local/hashql/ast/tests/ui/lower/pre-expansion-name-resolver/type-3.stdout rename to libs/@local/hashql/ast/tests/ui/lower/expander/pre-expansion-name-resolver/type-3.stdout diff --git a/libs/@local/hashql/ast/tests/ui/lower/pre-expansion-name-resolver/type-4.jsonc b/libs/@local/hashql/ast/tests/ui/lower/expander/pre-expansion-name-resolver/type-4.jsonc similarity index 100% rename from libs/@local/hashql/ast/tests/ui/lower/pre-expansion-name-resolver/type-4.jsonc rename to libs/@local/hashql/ast/tests/ui/lower/expander/pre-expansion-name-resolver/type-4.jsonc diff --git a/libs/@local/hashql/ast/tests/ui/lower/pre-expansion-name-resolver/type-4.stdout b/libs/@local/hashql/ast/tests/ui/lower/expander/pre-expansion-name-resolver/type-4.stdout similarity index 100% rename from libs/@local/hashql/ast/tests/ui/lower/pre-expansion-name-resolver/type-4.stdout rename to libs/@local/hashql/ast/tests/ui/lower/expander/pre-expansion-name-resolver/type-4.stdout diff --git a/libs/@local/hashql/ast/tests/ui/lower/special-form-expander/access-1.jsonc b/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/access-1.jsonc similarity index 100% rename from libs/@local/hashql/ast/tests/ui/lower/special-form-expander/access-1.jsonc rename to libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/access-1.jsonc diff --git a/libs/@local/hashql/ast/tests/ui/lower/special-form-expander/access-1.stderr b/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/access-1.stderr similarity index 100% rename from libs/@local/hashql/ast/tests/ui/lower/special-form-expander/access-1.stderr rename to libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/access-1.stderr diff --git a/libs/@local/hashql/ast/tests/ui/lower/special-form-expander/access-2.jsonc b/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/access-2.jsonc similarity index 100% rename from libs/@local/hashql/ast/tests/ui/lower/special-form-expander/access-2.jsonc rename to libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/access-2.jsonc diff --git a/libs/@local/hashql/ast/tests/ui/lower/special-form-expander/access-2.stdout b/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/access-2.stdout similarity index 100% rename from libs/@local/hashql/ast/tests/ui/lower/special-form-expander/access-2.stdout rename to libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/access-2.stdout diff --git a/libs/@local/hashql/ast/tests/ui/lower/special-form-expander/access-3.jsonc b/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/access-3.jsonc similarity index 100% rename from libs/@local/hashql/ast/tests/ui/lower/special-form-expander/access-3.jsonc rename to libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/access-3.jsonc diff --git a/libs/@local/hashql/ast/tests/ui/lower/special-form-expander/access-3.stderr b/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/access-3.stderr similarity index 100% rename from libs/@local/hashql/ast/tests/ui/lower/special-form-expander/access-3.stderr rename to libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/access-3.stderr diff --git a/libs/@local/hashql/ast/tests/ui/lower/special-form-expander/access-field-index-out-of-bounds.jsonc b/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/access-field-index-out-of-bounds.jsonc similarity index 100% rename from libs/@local/hashql/ast/tests/ui/lower/special-form-expander/access-field-index-out-of-bounds.jsonc rename to libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/access-field-index-out-of-bounds.jsonc diff --git a/libs/@local/hashql/ast/tests/ui/lower/special-form-expander/access-field-index-out-of-bounds.stderr b/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/access-field-index-out-of-bounds.stderr similarity index 100% rename from libs/@local/hashql/ast/tests/ui/lower/special-form-expander/access-field-index-out-of-bounds.stderr rename to libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/access-field-index-out-of-bounds.stderr diff --git a/libs/@local/hashql/ast/tests/ui/lower/special-form-expander/access-field-literal-boolean.jsonc b/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/access-field-literal-boolean.jsonc similarity index 100% rename from libs/@local/hashql/ast/tests/ui/lower/special-form-expander/access-field-literal-boolean.jsonc rename to libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/access-field-literal-boolean.jsonc diff --git a/libs/@local/hashql/ast/tests/ui/lower/special-form-expander/access-field-literal-boolean.stderr b/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/access-field-literal-boolean.stderr similarity index 100% rename from libs/@local/hashql/ast/tests/ui/lower/special-form-expander/access-field-literal-boolean.stderr rename to libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/access-field-literal-boolean.stderr diff --git a/libs/@local/hashql/ast/tests/ui/lower/special-form-expander/access-field-literal-string.jsonc b/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/access-field-literal-string.jsonc similarity index 100% rename from libs/@local/hashql/ast/tests/ui/lower/special-form-expander/access-field-literal-string.jsonc rename to libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/access-field-literal-string.jsonc diff --git a/libs/@local/hashql/ast/tests/ui/lower/special-form-expander/access-field-literal-string.stderr b/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/access-field-literal-string.stderr similarity index 100% rename from libs/@local/hashql/ast/tests/ui/lower/special-form-expander/access-field-literal-string.stderr rename to libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/access-field-literal-string.stderr diff --git a/libs/@local/hashql/ast/tests/ui/lower/special-form-expander/access-field-literal-type-annotation.jsonc b/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/access-field-literal-type-annotation.jsonc similarity index 100% rename from libs/@local/hashql/ast/tests/ui/lower/special-form-expander/access-field-literal-type-annotation.jsonc rename to libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/access-field-literal-type-annotation.jsonc diff --git a/libs/@local/hashql/ast/tests/ui/lower/special-form-expander/access-field-literal-type-annotation.stderr b/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/access-field-literal-type-annotation.stderr similarity index 100% rename from libs/@local/hashql/ast/tests/ui/lower/special-form-expander/access-field-literal-type-annotation.stderr rename to libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/access-field-literal-type-annotation.stderr diff --git a/libs/@local/hashql/ast/tests/ui/lower/special-form-expander/access-field-literal-valid.jsonc b/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/access-field-literal-valid.jsonc similarity index 100% rename from libs/@local/hashql/ast/tests/ui/lower/special-form-expander/access-field-literal-valid.jsonc rename to libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/access-field-literal-valid.jsonc diff --git a/libs/@local/hashql/ast/tests/ui/lower/special-form-expander/access-field-literal-valid.stdout b/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/access-field-literal-valid.stdout similarity index 100% rename from libs/@local/hashql/ast/tests/ui/lower/special-form-expander/access-field-literal-valid.stdout rename to libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/access-field-literal-valid.stdout diff --git a/libs/@local/hashql/ast/tests/ui/lower/special-form-expander/as-1.jsonc b/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/as-1.jsonc similarity index 100% rename from libs/@local/hashql/ast/tests/ui/lower/special-form-expander/as-1.jsonc rename to libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/as-1.jsonc diff --git a/libs/@local/hashql/ast/tests/ui/lower/special-form-expander/as-1.stderr b/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/as-1.stderr similarity index 100% rename from libs/@local/hashql/ast/tests/ui/lower/special-form-expander/as-1.stderr rename to libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/as-1.stderr diff --git a/libs/@local/hashql/ast/tests/ui/lower/special-form-expander/as-2.jsonc b/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/as-2.jsonc similarity index 100% rename from libs/@local/hashql/ast/tests/ui/lower/special-form-expander/as-2.jsonc rename to libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/as-2.jsonc diff --git a/libs/@local/hashql/ast/tests/ui/lower/special-form-expander/as-2.stdout b/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/as-2.stdout similarity index 100% rename from libs/@local/hashql/ast/tests/ui/lower/special-form-expander/as-2.stdout rename to libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/as-2.stdout diff --git a/libs/@local/hashql/ast/tests/ui/lower/special-form-expander/as-3.jsonc b/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/as-3.jsonc similarity index 100% rename from libs/@local/hashql/ast/tests/ui/lower/special-form-expander/as-3.jsonc rename to libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/as-3.jsonc diff --git a/libs/@local/hashql/ast/tests/ui/lower/special-form-expander/as-3.stderr b/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/as-3.stderr similarity index 100% rename from libs/@local/hashql/ast/tests/ui/lower/special-form-expander/as-3.stderr rename to libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/as-3.stderr diff --git a/libs/@local/hashql/ast/tests/ui/lower/special-form-expander/does-not-touch-non-kernel.jsonc b/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/does-not-touch-non-kernel.jsonc similarity index 100% rename from libs/@local/hashql/ast/tests/ui/lower/special-form-expander/does-not-touch-non-kernel.jsonc rename to libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/does-not-touch-non-kernel.jsonc diff --git a/libs/@local/hashql/ast/tests/ui/lower/special-form-expander/does-not-touch-non-kernel.stdout b/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/does-not-touch-non-kernel.stdout similarity index 100% rename from libs/@local/hashql/ast/tests/ui/lower/special-form-expander/does-not-touch-non-kernel.stdout rename to libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/does-not-touch-non-kernel.stdout diff --git a/libs/@local/hashql/ast/tests/ui/lower/special-form-expander/fn-3.jsonc b/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/fn-3.jsonc similarity index 100% rename from libs/@local/hashql/ast/tests/ui/lower/special-form-expander/fn-3.jsonc rename to libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/fn-3.jsonc diff --git a/libs/@local/hashql/ast/tests/ui/lower/special-form-expander/fn-3.stderr b/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/fn-3.stderr similarity index 100% rename from libs/@local/hashql/ast/tests/ui/lower/special-form-expander/fn-3.stderr rename to libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/fn-3.stderr diff --git a/libs/@local/hashql/ast/tests/ui/lower/special-form-expander/fn-4.jsonc b/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/fn-4.jsonc similarity index 100% rename from libs/@local/hashql/ast/tests/ui/lower/special-form-expander/fn-4.jsonc rename to libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/fn-4.jsonc diff --git a/libs/@local/hashql/ast/tests/ui/lower/special-form-expander/fn-4.stdout b/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/fn-4.stdout similarity index 100% rename from libs/@local/hashql/ast/tests/ui/lower/special-form-expander/fn-4.stdout rename to libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/fn-4.stdout diff --git a/libs/@local/hashql/ast/tests/ui/lower/special-form-expander/fn-5.jsonc b/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/fn-5.jsonc similarity index 100% rename from libs/@local/hashql/ast/tests/ui/lower/special-form-expander/fn-5.jsonc rename to libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/fn-5.jsonc diff --git a/libs/@local/hashql/ast/tests/ui/lower/special-form-expander/fn-5.stderr b/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/fn-5.stderr similarity index 100% rename from libs/@local/hashql/ast/tests/ui/lower/special-form-expander/fn-5.stderr rename to libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/fn-5.stderr diff --git a/libs/@local/hashql/ast/tests/ui/lower/special-form-expander/fn-generics-duplicates.jsonc b/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/fn-generics-duplicates.jsonc similarity index 100% rename from libs/@local/hashql/ast/tests/ui/lower/special-form-expander/fn-generics-duplicates.jsonc rename to libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/fn-generics-duplicates.jsonc diff --git a/libs/@local/hashql/ast/tests/ui/lower/special-form-expander/fn-generics-duplicates.stderr b/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/fn-generics-duplicates.stderr similarity index 100% rename from libs/@local/hashql/ast/tests/ui/lower/special-form-expander/fn-generics-duplicates.stderr rename to libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/fn-generics-duplicates.stderr diff --git a/libs/@local/hashql/ast/tests/ui/lower/special-form-expander/fn-generics-literal.jsonc b/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/fn-generics-literal.jsonc similarity index 100% rename from libs/@local/hashql/ast/tests/ui/lower/special-form-expander/fn-generics-literal.jsonc rename to libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/fn-generics-literal.jsonc diff --git a/libs/@local/hashql/ast/tests/ui/lower/special-form-expander/fn-generics-literal.stderr b/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/fn-generics-literal.stderr similarity index 100% rename from libs/@local/hashql/ast/tests/ui/lower/special-form-expander/fn-generics-literal.stderr rename to libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/fn-generics-literal.stderr diff --git a/libs/@local/hashql/ast/tests/ui/lower/special-form-expander/fn-generics-struct-literal.jsonc b/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/fn-generics-struct-literal.jsonc similarity index 100% rename from libs/@local/hashql/ast/tests/ui/lower/special-form-expander/fn-generics-struct-literal.jsonc rename to libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/fn-generics-struct-literal.jsonc diff --git a/libs/@local/hashql/ast/tests/ui/lower/special-form-expander/fn-generics-struct-literal.stderr b/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/fn-generics-struct-literal.stderr similarity index 100% rename from libs/@local/hashql/ast/tests/ui/lower/special-form-expander/fn-generics-struct-literal.stderr rename to libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/fn-generics-struct-literal.stderr diff --git a/libs/@local/hashql/ast/tests/ui/lower/special-form-expander/fn-generics-struct-type.jsonc b/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/fn-generics-struct-type.jsonc similarity index 100% rename from libs/@local/hashql/ast/tests/ui/lower/special-form-expander/fn-generics-struct-type.jsonc rename to libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/fn-generics-struct-type.jsonc diff --git a/libs/@local/hashql/ast/tests/ui/lower/special-form-expander/fn-generics-struct-type.stderr b/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/fn-generics-struct-type.stderr similarity index 100% rename from libs/@local/hashql/ast/tests/ui/lower/special-form-expander/fn-generics-struct-type.stderr rename to libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/fn-generics-struct-type.stderr diff --git a/libs/@local/hashql/ast/tests/ui/lower/special-form-expander/fn-generics-struct-underscore.jsonc b/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/fn-generics-struct-underscore.jsonc similarity index 100% rename from libs/@local/hashql/ast/tests/ui/lower/special-form-expander/fn-generics-struct-underscore.jsonc rename to libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/fn-generics-struct-underscore.jsonc diff --git a/libs/@local/hashql/ast/tests/ui/lower/special-form-expander/fn-generics-struct-underscore.stdout b/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/fn-generics-struct-underscore.stdout similarity index 100% rename from libs/@local/hashql/ast/tests/ui/lower/special-form-expander/fn-generics-struct-underscore.stdout rename to libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/fn-generics-struct-underscore.stdout diff --git a/libs/@local/hashql/ast/tests/ui/lower/special-form-expander/fn-generics-struct.jsonc b/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/fn-generics-struct.jsonc similarity index 100% rename from libs/@local/hashql/ast/tests/ui/lower/special-form-expander/fn-generics-struct.jsonc rename to libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/fn-generics-struct.jsonc diff --git a/libs/@local/hashql/ast/tests/ui/lower/special-form-expander/fn-generics-struct.stdout b/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/fn-generics-struct.stdout similarity index 100% rename from libs/@local/hashql/ast/tests/ui/lower/special-form-expander/fn-generics-struct.stdout rename to libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/fn-generics-struct.stdout diff --git a/libs/@local/hashql/ast/tests/ui/lower/special-form-expander/fn-generics-tuple-literal.jsonc b/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/fn-generics-tuple-literal.jsonc similarity index 100% rename from libs/@local/hashql/ast/tests/ui/lower/special-form-expander/fn-generics-tuple-literal.jsonc rename to libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/fn-generics-tuple-literal.jsonc diff --git a/libs/@local/hashql/ast/tests/ui/lower/special-form-expander/fn-generics-tuple-literal.stderr b/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/fn-generics-tuple-literal.stderr similarity index 100% rename from libs/@local/hashql/ast/tests/ui/lower/special-form-expander/fn-generics-tuple-literal.stderr rename to libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/fn-generics-tuple-literal.stderr diff --git a/libs/@local/hashql/ast/tests/ui/lower/special-form-expander/fn-generics-tuple-path.jsonc b/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/fn-generics-tuple-path.jsonc similarity index 100% rename from libs/@local/hashql/ast/tests/ui/lower/special-form-expander/fn-generics-tuple-path.jsonc rename to libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/fn-generics-tuple-path.jsonc diff --git a/libs/@local/hashql/ast/tests/ui/lower/special-form-expander/fn-generics-tuple-path.stderr b/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/fn-generics-tuple-path.stderr similarity index 100% rename from libs/@local/hashql/ast/tests/ui/lower/special-form-expander/fn-generics-tuple-path.stderr rename to libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/fn-generics-tuple-path.stderr diff --git a/libs/@local/hashql/ast/tests/ui/lower/special-form-expander/fn-generics-tuple-type.jsonc b/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/fn-generics-tuple-type.jsonc similarity index 100% rename from libs/@local/hashql/ast/tests/ui/lower/special-form-expander/fn-generics-tuple-type.jsonc rename to libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/fn-generics-tuple-type.jsonc diff --git a/libs/@local/hashql/ast/tests/ui/lower/special-form-expander/fn-generics-tuple-type.stderr b/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/fn-generics-tuple-type.stderr similarity index 100% rename from libs/@local/hashql/ast/tests/ui/lower/special-form-expander/fn-generics-tuple-type.stderr rename to libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/fn-generics-tuple-type.stderr diff --git a/libs/@local/hashql/ast/tests/ui/lower/special-form-expander/fn-generics-tuple.jsonc b/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/fn-generics-tuple.jsonc similarity index 100% rename from libs/@local/hashql/ast/tests/ui/lower/special-form-expander/fn-generics-tuple.jsonc rename to libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/fn-generics-tuple.jsonc diff --git a/libs/@local/hashql/ast/tests/ui/lower/special-form-expander/fn-generics-tuple.stdout b/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/fn-generics-tuple.stdout similarity index 100% rename from libs/@local/hashql/ast/tests/ui/lower/special-form-expander/fn-generics-tuple.stdout rename to libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/fn-generics-tuple.stdout diff --git a/libs/@local/hashql/ast/tests/ui/lower/special-form-expander/fn-params-duplicates.jsonc b/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/fn-params-duplicates.jsonc similarity index 100% rename from libs/@local/hashql/ast/tests/ui/lower/special-form-expander/fn-params-duplicates.jsonc rename to libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/fn-params-duplicates.jsonc diff --git a/libs/@local/hashql/ast/tests/ui/lower/special-form-expander/fn-params-duplicates.stderr b/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/fn-params-duplicates.stderr similarity index 100% rename from libs/@local/hashql/ast/tests/ui/lower/special-form-expander/fn-params-duplicates.stderr rename to libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/fn-params-duplicates.stderr diff --git a/libs/@local/hashql/ast/tests/ui/lower/special-form-expander/fn-params-tuple.jsonc b/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/fn-params-tuple.jsonc similarity index 100% rename from libs/@local/hashql/ast/tests/ui/lower/special-form-expander/fn-params-tuple.jsonc rename to libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/fn-params-tuple.jsonc diff --git a/libs/@local/hashql/ast/tests/ui/lower/special-form-expander/fn-params-tuple.stderr b/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/fn-params-tuple.stderr similarity index 100% rename from libs/@local/hashql/ast/tests/ui/lower/special-form-expander/fn-params-tuple.stderr rename to libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/fn-params-tuple.stderr diff --git a/libs/@local/hashql/ast/tests/ui/lower/special-form-expander/fn-params-type.jsonc b/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/fn-params-type.jsonc similarity index 100% rename from libs/@local/hashql/ast/tests/ui/lower/special-form-expander/fn-params-type.jsonc rename to libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/fn-params-type.jsonc diff --git a/libs/@local/hashql/ast/tests/ui/lower/special-form-expander/fn-params-type.stderr b/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/fn-params-type.stderr similarity index 100% rename from libs/@local/hashql/ast/tests/ui/lower/special-form-expander/fn-params-type.stderr rename to libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/fn-params-type.stderr diff --git a/libs/@local/hashql/ast/tests/ui/lower/special-form-expander/generics.jsonc b/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/generics.jsonc similarity index 100% rename from libs/@local/hashql/ast/tests/ui/lower/special-form-expander/generics.jsonc rename to libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/generics.jsonc diff --git a/libs/@local/hashql/ast/tests/ui/lower/special-form-expander/generics.stderr b/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/generics.stderr similarity index 100% rename from libs/@local/hashql/ast/tests/ui/lower/special-form-expander/generics.stderr rename to libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/generics.stderr diff --git a/libs/@local/hashql/ast/tests/ui/lower/special-form-expander/if-1.jsonc b/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/if-1.jsonc similarity index 100% rename from libs/@local/hashql/ast/tests/ui/lower/special-form-expander/if-1.jsonc rename to libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/if-1.jsonc diff --git a/libs/@local/hashql/ast/tests/ui/lower/special-form-expander/if-1.stderr b/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/if-1.stderr similarity index 100% rename from libs/@local/hashql/ast/tests/ui/lower/special-form-expander/if-1.stderr rename to libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/if-1.stderr diff --git a/libs/@local/hashql/ast/tests/ui/lower/special-form-expander/if-2.jsonc b/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/if-2.jsonc similarity index 100% rename from libs/@local/hashql/ast/tests/ui/lower/special-form-expander/if-2.jsonc rename to libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/if-2.jsonc diff --git a/libs/@local/hashql/ast/tests/ui/lower/special-form-expander/if-2.stdout b/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/if-2.stdout similarity index 100% rename from libs/@local/hashql/ast/tests/ui/lower/special-form-expander/if-2.stdout rename to libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/if-2.stdout diff --git a/libs/@local/hashql/ast/tests/ui/lower/special-form-expander/if-3.jsonc b/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/if-3.jsonc similarity index 100% rename from libs/@local/hashql/ast/tests/ui/lower/special-form-expander/if-3.jsonc rename to libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/if-3.jsonc diff --git a/libs/@local/hashql/ast/tests/ui/lower/special-form-expander/if-3.stdout b/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/if-3.stdout similarity index 100% rename from libs/@local/hashql/ast/tests/ui/lower/special-form-expander/if-3.stdout rename to libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/if-3.stdout diff --git a/libs/@local/hashql/ast/tests/ui/lower/special-form-expander/if-4.jsonc b/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/if-4.jsonc similarity index 100% rename from libs/@local/hashql/ast/tests/ui/lower/special-form-expander/if-4.jsonc rename to libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/if-4.jsonc diff --git a/libs/@local/hashql/ast/tests/ui/lower/special-form-expander/if-4.stderr b/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/if-4.stderr similarity index 100% rename from libs/@local/hashql/ast/tests/ui/lower/special-form-expander/if-4.stderr rename to libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/if-4.stderr diff --git a/libs/@local/hashql/ast/tests/ui/lower/special-form-expander/index-1.jsonc b/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/index-1.jsonc similarity index 100% rename from libs/@local/hashql/ast/tests/ui/lower/special-form-expander/index-1.jsonc rename to libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/index-1.jsonc diff --git a/libs/@local/hashql/ast/tests/ui/lower/special-form-expander/index-1.stderr b/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/index-1.stderr similarity index 100% rename from libs/@local/hashql/ast/tests/ui/lower/special-form-expander/index-1.stderr rename to libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/index-1.stderr diff --git a/libs/@local/hashql/ast/tests/ui/lower/special-form-expander/index-2.jsonc b/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/index-2.jsonc similarity index 100% rename from libs/@local/hashql/ast/tests/ui/lower/special-form-expander/index-2.jsonc rename to libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/index-2.jsonc diff --git a/libs/@local/hashql/ast/tests/ui/lower/special-form-expander/index-2.stdout b/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/index-2.stdout similarity index 100% rename from libs/@local/hashql/ast/tests/ui/lower/special-form-expander/index-2.stdout rename to libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/index-2.stdout diff --git a/libs/@local/hashql/ast/tests/ui/lower/special-form-expander/index-3.jsonc b/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/index-3.jsonc similarity index 100% rename from libs/@local/hashql/ast/tests/ui/lower/special-form-expander/index-3.jsonc rename to libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/index-3.jsonc diff --git a/libs/@local/hashql/ast/tests/ui/lower/special-form-expander/index-3.stderr b/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/index-3.stderr similarity index 100% rename from libs/@local/hashql/ast/tests/ui/lower/special-form-expander/index-3.stderr rename to libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/index-3.stderr diff --git a/libs/@local/hashql/ast/tests/ui/lower/special-form-expander/input-1.jsonc b/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/input-1.jsonc similarity index 100% rename from libs/@local/hashql/ast/tests/ui/lower/special-form-expander/input-1.jsonc rename to libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/input-1.jsonc diff --git a/libs/@local/hashql/ast/tests/ui/lower/special-form-expander/input-1.stderr b/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/input-1.stderr similarity index 100% rename from libs/@local/hashql/ast/tests/ui/lower/special-form-expander/input-1.stderr rename to libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/input-1.stderr diff --git a/libs/@local/hashql/ast/tests/ui/lower/special-form-expander/input-2.jsonc b/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/input-2.jsonc similarity index 100% rename from libs/@local/hashql/ast/tests/ui/lower/special-form-expander/input-2.jsonc rename to libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/input-2.jsonc diff --git a/libs/@local/hashql/ast/tests/ui/lower/special-form-expander/input-2.stdout b/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/input-2.stdout similarity index 100% rename from libs/@local/hashql/ast/tests/ui/lower/special-form-expander/input-2.stdout rename to libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/input-2.stdout diff --git a/libs/@local/hashql/ast/tests/ui/lower/special-form-expander/input-3.jsonc b/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/input-3.jsonc similarity index 100% rename from libs/@local/hashql/ast/tests/ui/lower/special-form-expander/input-3.jsonc rename to libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/input-3.jsonc diff --git a/libs/@local/hashql/ast/tests/ui/lower/special-form-expander/input-3.stdout b/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/input-3.stdout similarity index 100% rename from libs/@local/hashql/ast/tests/ui/lower/special-form-expander/input-3.stdout rename to libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/input-3.stdout diff --git a/libs/@local/hashql/ast/tests/ui/lower/special-form-expander/input-4.jsonc b/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/input-4.jsonc similarity index 100% rename from libs/@local/hashql/ast/tests/ui/lower/special-form-expander/input-4.jsonc rename to libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/input-4.jsonc diff --git a/libs/@local/hashql/ast/tests/ui/lower/special-form-expander/input-4.stderr b/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/input-4.stderr similarity index 100% rename from libs/@local/hashql/ast/tests/ui/lower/special-form-expander/input-4.stderr rename to libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/input-4.stderr diff --git a/libs/@local/hashql/ast/tests/ui/lower/special-form-expander/labeled-argument.jsonc b/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/labeled-argument.jsonc similarity index 100% rename from libs/@local/hashql/ast/tests/ui/lower/special-form-expander/labeled-argument.jsonc rename to libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/labeled-argument.jsonc diff --git a/libs/@local/hashql/ast/tests/ui/lower/special-form-expander/labeled-argument.stderr b/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/labeled-argument.stderr similarity index 100% rename from libs/@local/hashql/ast/tests/ui/lower/special-form-expander/labeled-argument.stderr rename to libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/labeled-argument.stderr diff --git a/libs/@local/hashql/ast/tests/ui/lower/special-form-expander/let-2.jsonc b/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/let-2.jsonc similarity index 100% rename from libs/@local/hashql/ast/tests/ui/lower/special-form-expander/let-2.jsonc rename to libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/let-2.jsonc diff --git a/libs/@local/hashql/ast/tests/ui/lower/special-form-expander/let-2.stderr b/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/let-2.stderr similarity index 100% rename from libs/@local/hashql/ast/tests/ui/lower/special-form-expander/let-2.stderr rename to libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/let-2.stderr diff --git a/libs/@local/hashql/ast/tests/ui/lower/special-form-expander/let-3.jsonc b/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/let-3.jsonc similarity index 100% rename from libs/@local/hashql/ast/tests/ui/lower/special-form-expander/let-3.jsonc rename to libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/let-3.jsonc diff --git a/libs/@local/hashql/ast/tests/ui/lower/special-form-expander/let-3.stdout b/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/let-3.stdout similarity index 100% rename from libs/@local/hashql/ast/tests/ui/lower/special-form-expander/let-3.stdout rename to libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/let-3.stdout diff --git a/libs/@local/hashql/ast/tests/ui/lower/special-form-expander/let-4.jsonc b/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/let-4.jsonc similarity index 100% rename from libs/@local/hashql/ast/tests/ui/lower/special-form-expander/let-4.jsonc rename to libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/let-4.jsonc diff --git a/libs/@local/hashql/ast/tests/ui/lower/special-form-expander/let-4.stdout b/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/let-4.stdout similarity index 100% rename from libs/@local/hashql/ast/tests/ui/lower/special-form-expander/let-4.stdout rename to libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/let-4.stdout diff --git a/libs/@local/hashql/ast/tests/ui/lower/special-form-expander/let-5.jsonc b/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/let-5.jsonc similarity index 100% rename from libs/@local/hashql/ast/tests/ui/lower/special-form-expander/let-5.jsonc rename to libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/let-5.jsonc diff --git a/libs/@local/hashql/ast/tests/ui/lower/special-form-expander/let-5.stderr b/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/let-5.stderr similarity index 100% rename from libs/@local/hashql/ast/tests/ui/lower/special-form-expander/let-5.stderr rename to libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/let-5.stderr diff --git a/libs/@local/hashql/ast/tests/ui/lower/special-form-expander/let-argument-not-ident.jsonc b/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/let-argument-not-ident.jsonc similarity index 100% rename from libs/@local/hashql/ast/tests/ui/lower/special-form-expander/let-argument-not-ident.jsonc rename to libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/let-argument-not-ident.jsonc diff --git a/libs/@local/hashql/ast/tests/ui/lower/special-form-expander/let-argument-not-ident.stderr b/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/let-argument-not-ident.stderr similarity index 100% rename from libs/@local/hashql/ast/tests/ui/lower/special-form-expander/let-argument-not-ident.stderr rename to libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/let-argument-not-ident.stderr diff --git a/libs/@local/hashql/ast/tests/ui/lower/special-form-expander/let-argument-not-path.jsonc b/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/let-argument-not-path.jsonc similarity index 100% rename from libs/@local/hashql/ast/tests/ui/lower/special-form-expander/let-argument-not-path.jsonc rename to libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/let-argument-not-path.jsonc diff --git a/libs/@local/hashql/ast/tests/ui/lower/special-form-expander/let-argument-not-path.stderr b/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/let-argument-not-path.stderr similarity index 100% rename from libs/@local/hashql/ast/tests/ui/lower/special-form-expander/let-argument-not-path.stderr rename to libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/let-argument-not-path.stderr diff --git a/libs/@local/hashql/ast/tests/ui/lower/special-form-expander/let-collect-all-errors.jsonc b/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/let-collect-all-errors.jsonc similarity index 100% rename from libs/@local/hashql/ast/tests/ui/lower/special-form-expander/let-collect-all-errors.jsonc rename to libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/let-collect-all-errors.jsonc diff --git a/libs/@local/hashql/ast/tests/ui/lower/special-form-expander/let-collect-all-errors.stderr b/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/let-collect-all-errors.stderr similarity index 100% rename from libs/@local/hashql/ast/tests/ui/lower/special-form-expander/let-collect-all-errors.stderr rename to libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/let-collect-all-errors.stderr diff --git a/libs/@local/hashql/ast/tests/ui/lower/special-form-expander/newtype-2.jsonc b/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/newtype-2.jsonc similarity index 100% rename from libs/@local/hashql/ast/tests/ui/lower/special-form-expander/newtype-2.jsonc rename to libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/newtype-2.jsonc diff --git a/libs/@local/hashql/ast/tests/ui/lower/special-form-expander/newtype-2.stderr b/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/newtype-2.stderr similarity index 100% rename from libs/@local/hashql/ast/tests/ui/lower/special-form-expander/newtype-2.stderr rename to libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/newtype-2.stderr diff --git a/libs/@local/hashql/ast/tests/ui/lower/special-form-expander/newtype-3.jsonc b/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/newtype-3.jsonc similarity index 100% rename from libs/@local/hashql/ast/tests/ui/lower/special-form-expander/newtype-3.jsonc rename to libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/newtype-3.jsonc diff --git a/libs/@local/hashql/ast/tests/ui/lower/special-form-expander/newtype-3.stdout b/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/newtype-3.stdout similarity index 100% rename from libs/@local/hashql/ast/tests/ui/lower/special-form-expander/newtype-3.stdout rename to libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/newtype-3.stdout diff --git a/libs/@local/hashql/ast/tests/ui/lower/special-form-expander/newtype-4.jsonc b/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/newtype-4.jsonc similarity index 100% rename from libs/@local/hashql/ast/tests/ui/lower/special-form-expander/newtype-4.jsonc rename to libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/newtype-4.jsonc diff --git a/libs/@local/hashql/ast/tests/ui/lower/special-form-expander/newtype-4.stderr b/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/newtype-4.stderr similarity index 100% rename from libs/@local/hashql/ast/tests/ui/lower/special-form-expander/newtype-4.stderr rename to libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/newtype-4.stderr diff --git a/libs/@local/hashql/ast/tests/ui/lower/special-form-expander/newtype-collect-all-errors.jsonc b/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/newtype-collect-all-errors.jsonc similarity index 100% rename from libs/@local/hashql/ast/tests/ui/lower/special-form-expander/newtype-collect-all-errors.jsonc rename to libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/newtype-collect-all-errors.jsonc diff --git a/libs/@local/hashql/ast/tests/ui/lower/special-form-expander/newtype-collect-all-errors.stderr b/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/newtype-collect-all-errors.stderr similarity index 100% rename from libs/@local/hashql/ast/tests/ui/lower/special-form-expander/newtype-collect-all-errors.stderr rename to libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/newtype-collect-all-errors.stderr diff --git a/libs/@local/hashql/ast/tests/ui/lower/special-form-expander/newtype-constraints.jsonc b/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/newtype-constraints.jsonc similarity index 100% rename from libs/@local/hashql/ast/tests/ui/lower/special-form-expander/newtype-constraints.jsonc rename to libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/newtype-constraints.jsonc diff --git a/libs/@local/hashql/ast/tests/ui/lower/special-form-expander/newtype-constraints.stdout b/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/newtype-constraints.stdout similarity index 100% rename from libs/@local/hashql/ast/tests/ui/lower/special-form-expander/newtype-constraints.stdout rename to libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/newtype-constraints.stdout diff --git a/libs/@local/hashql/ast/tests/ui/lower/special-form-expander/not-enough-segments.jsonc b/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/not-enough-segments.jsonc similarity index 100% rename from libs/@local/hashql/ast/tests/ui/lower/special-form-expander/not-enough-segments.jsonc rename to libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/not-enough-segments.jsonc diff --git a/libs/@local/hashql/ast/tests/ui/lower/special-form-expander/not-enough-segments.stderr b/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/not-enough-segments.stderr similarity index 100% rename from libs/@local/hashql/ast/tests/ui/lower/special-form-expander/not-enough-segments.stderr rename to libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/not-enough-segments.stderr diff --git a/libs/@local/hashql/ast/tests/ui/lower/special-form-expander/too-many-segments.jsonc b/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/too-many-segments.jsonc similarity index 100% rename from libs/@local/hashql/ast/tests/ui/lower/special-form-expander/too-many-segments.jsonc rename to libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/too-many-segments.jsonc diff --git a/libs/@local/hashql/ast/tests/ui/lower/special-form-expander/too-many-segments.stderr b/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/too-many-segments.stderr similarity index 100% rename from libs/@local/hashql/ast/tests/ui/lower/special-form-expander/too-many-segments.stderr rename to libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/too-many-segments.stderr diff --git a/libs/@local/hashql/ast/tests/ui/lower/special-form-expander/type-2.jsonc b/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/type-2.jsonc similarity index 100% rename from libs/@local/hashql/ast/tests/ui/lower/special-form-expander/type-2.jsonc rename to libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/type-2.jsonc diff --git a/libs/@local/hashql/ast/tests/ui/lower/special-form-expander/type-2.stderr b/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/type-2.stderr similarity index 100% rename from libs/@local/hashql/ast/tests/ui/lower/special-form-expander/type-2.stderr rename to libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/type-2.stderr diff --git a/libs/@local/hashql/ast/tests/ui/lower/special-form-expander/type-3.jsonc b/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/type-3.jsonc similarity index 100% rename from libs/@local/hashql/ast/tests/ui/lower/special-form-expander/type-3.jsonc rename to libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/type-3.jsonc diff --git a/libs/@local/hashql/ast/tests/ui/lower/special-form-expander/type-3.stdout b/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/type-3.stdout similarity index 100% rename from libs/@local/hashql/ast/tests/ui/lower/special-form-expander/type-3.stdout rename to libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/type-3.stdout diff --git a/libs/@local/hashql/ast/tests/ui/lower/special-form-expander/type-4.jsonc b/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/type-4.jsonc similarity index 100% rename from libs/@local/hashql/ast/tests/ui/lower/special-form-expander/type-4.jsonc rename to libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/type-4.jsonc diff --git a/libs/@local/hashql/ast/tests/ui/lower/special-form-expander/type-4.stderr b/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/type-4.stderr similarity index 100% rename from libs/@local/hashql/ast/tests/ui/lower/special-form-expander/type-4.stderr rename to libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/type-4.stderr diff --git a/libs/@local/hashql/ast/tests/ui/lower/special-form-expander/type-collect-all-errors.jsonc b/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/type-collect-all-errors.jsonc similarity index 100% rename from libs/@local/hashql/ast/tests/ui/lower/special-form-expander/type-collect-all-errors.jsonc rename to libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/type-collect-all-errors.jsonc diff --git a/libs/@local/hashql/ast/tests/ui/lower/special-form-expander/type-collect-all-errors.stderr b/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/type-collect-all-errors.stderr similarity index 100% rename from libs/@local/hashql/ast/tests/ui/lower/special-form-expander/type-collect-all-errors.stderr rename to libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/type-collect-all-errors.stderr diff --git a/libs/@local/hashql/ast/tests/ui/lower/special-form-expander/type-expr-call-arbitrary.jsonc b/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/type-expr-call-arbitrary.jsonc similarity index 100% rename from libs/@local/hashql/ast/tests/ui/lower/special-form-expander/type-expr-call-arbitrary.jsonc rename to libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/type-expr-call-arbitrary.jsonc diff --git a/libs/@local/hashql/ast/tests/ui/lower/special-form-expander/type-expr-call-arbitrary.stderr b/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/type-expr-call-arbitrary.stderr similarity index 100% rename from libs/@local/hashql/ast/tests/ui/lower/special-form-expander/type-expr-call-arbitrary.stderr rename to libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/type-expr-call-arbitrary.stderr diff --git a/libs/@local/hashql/ast/tests/ui/lower/special-form-expander/type-expr-call-intersection.jsonc b/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/type-expr-call-intersection.jsonc similarity index 100% rename from libs/@local/hashql/ast/tests/ui/lower/special-form-expander/type-expr-call-intersection.jsonc rename to libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/type-expr-call-intersection.jsonc diff --git a/libs/@local/hashql/ast/tests/ui/lower/special-form-expander/type-expr-call-intersection.stdout b/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/type-expr-call-intersection.stdout similarity index 100% rename from libs/@local/hashql/ast/tests/ui/lower/special-form-expander/type-expr-call-intersection.stdout rename to libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/type-expr-call-intersection.stdout diff --git a/libs/@local/hashql/ast/tests/ui/lower/special-form-expander/type-expr-call-not-path.jsonc b/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/type-expr-call-not-path.jsonc similarity index 100% rename from libs/@local/hashql/ast/tests/ui/lower/special-form-expander/type-expr-call-not-path.jsonc rename to libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/type-expr-call-not-path.jsonc diff --git a/libs/@local/hashql/ast/tests/ui/lower/special-form-expander/type-expr-call-not-path.stderr b/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/type-expr-call-not-path.stderr similarity index 100% rename from libs/@local/hashql/ast/tests/ui/lower/special-form-expander/type-expr-call-not-path.stderr rename to libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/type-expr-call-not-path.stderr diff --git a/libs/@local/hashql/ast/tests/ui/lower/special-form-expander/type-expr-call-union.jsonc b/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/type-expr-call-union.jsonc similarity index 100% rename from libs/@local/hashql/ast/tests/ui/lower/special-form-expander/type-expr-call-union.jsonc rename to libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/type-expr-call-union.jsonc diff --git a/libs/@local/hashql/ast/tests/ui/lower/special-form-expander/type-expr-call-union.stdout b/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/type-expr-call-union.stdout similarity index 100% rename from libs/@local/hashql/ast/tests/ui/lower/special-form-expander/type-expr-call-union.stdout rename to libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/type-expr-call-union.stdout diff --git a/libs/@local/hashql/ast/tests/ui/lower/special-form-expander/type-expr-invalid.jsonc b/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/type-expr-invalid.jsonc similarity index 100% rename from libs/@local/hashql/ast/tests/ui/lower/special-form-expander/type-expr-invalid.jsonc rename to libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/type-expr-invalid.jsonc diff --git a/libs/@local/hashql/ast/tests/ui/lower/special-form-expander/type-expr-invalid.stderr b/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/type-expr-invalid.stderr similarity index 100% rename from libs/@local/hashql/ast/tests/ui/lower/special-form-expander/type-expr-invalid.stderr rename to libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/type-expr-invalid.stderr diff --git a/libs/@local/hashql/ast/tests/ui/lower/special-form-expander/type-expr-struct.jsonc b/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/type-expr-struct.jsonc similarity index 100% rename from libs/@local/hashql/ast/tests/ui/lower/special-form-expander/type-expr-struct.jsonc rename to libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/type-expr-struct.jsonc diff --git a/libs/@local/hashql/ast/tests/ui/lower/special-form-expander/type-expr-struct.stdout b/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/type-expr-struct.stdout similarity index 100% rename from libs/@local/hashql/ast/tests/ui/lower/special-form-expander/type-expr-struct.stdout rename to libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/type-expr-struct.stdout diff --git a/libs/@local/hashql/ast/tests/ui/lower/special-form-expander/type-expr-tuple.jsonc b/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/type-expr-tuple.jsonc similarity index 100% rename from libs/@local/hashql/ast/tests/ui/lower/special-form-expander/type-expr-tuple.jsonc rename to libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/type-expr-tuple.jsonc diff --git a/libs/@local/hashql/ast/tests/ui/lower/special-form-expander/type-expr-tuple.stdout b/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/type-expr-tuple.stdout similarity index 100% rename from libs/@local/hashql/ast/tests/ui/lower/special-form-expander/type-expr-tuple.stdout rename to libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/type-expr-tuple.stdout diff --git a/libs/@local/hashql/ast/tests/ui/lower/special-form-expander/type-generic-absolute-path.jsonc b/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/type-generic-absolute-path.jsonc similarity index 100% rename from libs/@local/hashql/ast/tests/ui/lower/special-form-expander/type-generic-absolute-path.jsonc rename to libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/type-generic-absolute-path.jsonc diff --git a/libs/@local/hashql/ast/tests/ui/lower/special-form-expander/type-generic-absolute-path.stderr b/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/type-generic-absolute-path.stderr similarity index 100% rename from libs/@local/hashql/ast/tests/ui/lower/special-form-expander/type-generic-absolute-path.stderr rename to libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/type-generic-absolute-path.stderr diff --git a/libs/@local/hashql/ast/tests/ui/lower/special-form-expander/type-generic-constraint.jsonc b/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/type-generic-constraint.jsonc similarity index 100% rename from libs/@local/hashql/ast/tests/ui/lower/special-form-expander/type-generic-constraint.jsonc rename to libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/type-generic-constraint.jsonc diff --git a/libs/@local/hashql/ast/tests/ui/lower/special-form-expander/type-generic-constraint.stdout b/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/type-generic-constraint.stdout similarity index 100% rename from libs/@local/hashql/ast/tests/ui/lower/special-form-expander/type-generic-constraint.stdout rename to libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/type-generic-constraint.stdout diff --git a/libs/@local/hashql/ast/tests/ui/lower/special-form-expander/type-generic-duplicate.jsonc b/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/type-generic-duplicate.jsonc similarity index 100% rename from libs/@local/hashql/ast/tests/ui/lower/special-form-expander/type-generic-duplicate.jsonc rename to libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/type-generic-duplicate.jsonc diff --git a/libs/@local/hashql/ast/tests/ui/lower/special-form-expander/type-generic-duplicate.stderr b/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/type-generic-duplicate.stderr similarity index 100% rename from libs/@local/hashql/ast/tests/ui/lower/special-form-expander/type-generic-duplicate.stderr rename to libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/type-generic-duplicate.stderr diff --git a/libs/@local/hashql/ast/tests/ui/lower/special-form-expander/type-generic-generic-ident.jsonc b/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/type-generic-generic-ident.jsonc similarity index 100% rename from libs/@local/hashql/ast/tests/ui/lower/special-form-expander/type-generic-generic-ident.jsonc rename to libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/type-generic-generic-ident.jsonc diff --git a/libs/@local/hashql/ast/tests/ui/lower/special-form-expander/type-generic-generic-ident.stderr b/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/type-generic-generic-ident.stderr similarity index 100% rename from libs/@local/hashql/ast/tests/ui/lower/special-form-expander/type-generic-generic-ident.stderr rename to libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/type-generic-generic-ident.stderr diff --git a/libs/@local/hashql/ast/tests/ui/lower/special-form-expander/type-generic-relative-path.jsonc b/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/type-generic-relative-path.jsonc similarity index 100% rename from libs/@local/hashql/ast/tests/ui/lower/special-form-expander/type-generic-relative-path.jsonc rename to libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/type-generic-relative-path.jsonc diff --git a/libs/@local/hashql/ast/tests/ui/lower/special-form-expander/type-generic-relative-path.stderr b/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/type-generic-relative-path.stderr similarity index 100% rename from libs/@local/hashql/ast/tests/ui/lower/special-form-expander/type-generic-relative-path.stderr rename to libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/type-generic-relative-path.stderr diff --git a/libs/@local/hashql/ast/tests/ui/lower/special-form-expander/type-generic-struct.jsonc b/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/type-generic-struct.jsonc similarity index 100% rename from libs/@local/hashql/ast/tests/ui/lower/special-form-expander/type-generic-struct.jsonc rename to libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/type-generic-struct.jsonc diff --git a/libs/@local/hashql/ast/tests/ui/lower/special-form-expander/type-generic-struct.stderr b/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/type-generic-struct.stderr similarity index 100% rename from libs/@local/hashql/ast/tests/ui/lower/special-form-expander/type-generic-struct.stderr rename to libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/type-generic-struct.stderr diff --git a/libs/@local/hashql/ast/tests/ui/lower/special-form-expander/type-generic.jsonc b/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/type-generic.jsonc similarity index 100% rename from libs/@local/hashql/ast/tests/ui/lower/special-form-expander/type-generic.jsonc rename to libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/type-generic.jsonc diff --git a/libs/@local/hashql/ast/tests/ui/lower/special-form-expander/type-generic.stdout b/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/type-generic.stdout similarity index 100% rename from libs/@local/hashql/ast/tests/ui/lower/special-form-expander/type-generic.stdout rename to libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/type-generic.stdout diff --git a/libs/@local/hashql/ast/tests/ui/lower/special-form-expander/type-infer.jsonc b/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/type-infer.jsonc similarity index 100% rename from libs/@local/hashql/ast/tests/ui/lower/special-form-expander/type-infer.jsonc rename to libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/type-infer.jsonc diff --git a/libs/@local/hashql/ast/tests/ui/lower/special-form-expander/type-infer.stdout b/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/type-infer.stdout similarity index 100% rename from libs/@local/hashql/ast/tests/ui/lower/special-form-expander/type-infer.stdout rename to libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/type-infer.stdout diff --git a/libs/@local/hashql/ast/tests/ui/lower/special-form-expander/type-never.jsonc b/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/type-never.jsonc similarity index 100% rename from libs/@local/hashql/ast/tests/ui/lower/special-form-expander/type-never.jsonc rename to libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/type-never.jsonc diff --git a/libs/@local/hashql/ast/tests/ui/lower/special-form-expander/type-never.stdout b/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/type-never.stdout similarity index 100% rename from libs/@local/hashql/ast/tests/ui/lower/special-form-expander/type-never.stdout rename to libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/type-never.stdout diff --git a/libs/@local/hashql/ast/tests/ui/lower/special-form-expander/type-struct-has-type.jsonc b/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/type-struct-has-type.jsonc similarity index 100% rename from libs/@local/hashql/ast/tests/ui/lower/special-form-expander/type-struct-has-type.jsonc rename to libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/type-struct-has-type.jsonc diff --git a/libs/@local/hashql/ast/tests/ui/lower/special-form-expander/type-struct-has-type.stderr b/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/type-struct-has-type.stderr similarity index 100% rename from libs/@local/hashql/ast/tests/ui/lower/special-form-expander/type-struct-has-type.stderr rename to libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/type-struct-has-type.stderr diff --git a/libs/@local/hashql/ast/tests/ui/lower/special-form-expander/type-tuple-has-type.jsonc b/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/type-tuple-has-type.jsonc similarity index 100% rename from libs/@local/hashql/ast/tests/ui/lower/special-form-expander/type-tuple-has-type.jsonc rename to libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/type-tuple-has-type.jsonc diff --git a/libs/@local/hashql/ast/tests/ui/lower/special-form-expander/type-tuple-has-type.stderr b/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/type-tuple-has-type.stderr similarity index 100% rename from libs/@local/hashql/ast/tests/ui/lower/special-form-expander/type-tuple-has-type.stderr rename to libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/type-tuple-has-type.stderr diff --git a/libs/@local/hashql/ast/tests/ui/lower/special-form-expander/type-unknown.jsonc b/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/type-unknown.jsonc similarity index 100% rename from libs/@local/hashql/ast/tests/ui/lower/special-form-expander/type-unknown.jsonc rename to libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/type-unknown.jsonc diff --git a/libs/@local/hashql/ast/tests/ui/lower/special-form-expander/type-unknown.stdout b/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/type-unknown.stdout similarity index 100% rename from libs/@local/hashql/ast/tests/ui/lower/special-form-expander/type-unknown.stdout rename to libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/type-unknown.stdout diff --git a/libs/@local/hashql/ast/tests/ui/lower/special-form-expander/unknown-special-form-typo.jsonc b/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/unknown-special-form-typo.jsonc similarity index 100% rename from libs/@local/hashql/ast/tests/ui/lower/special-form-expander/unknown-special-form-typo.jsonc rename to libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/unknown-special-form-typo.jsonc diff --git a/libs/@local/hashql/ast/tests/ui/lower/special-form-expander/unknown-special-form-typo.stderr b/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/unknown-special-form-typo.stderr similarity index 100% rename from libs/@local/hashql/ast/tests/ui/lower/special-form-expander/unknown-special-form-typo.stderr rename to libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/unknown-special-form-typo.stderr diff --git a/libs/@local/hashql/ast/tests/ui/lower/special-form-expander/unknown-special-form.jsonc b/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/unknown-special-form.jsonc similarity index 100% rename from libs/@local/hashql/ast/tests/ui/lower/special-form-expander/unknown-special-form.jsonc rename to libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/unknown-special-form.jsonc diff --git a/libs/@local/hashql/ast/tests/ui/lower/special-form-expander/unknown-special-form.stderr b/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/unknown-special-form.stderr similarity index 100% rename from libs/@local/hashql/ast/tests/ui/lower/special-form-expander/unknown-special-form.stderr rename to libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/unknown-special-form.stderr diff --git a/libs/@local/hashql/ast/tests/ui/lower/special-form-expander/use-2.jsonc b/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/use-2.jsonc similarity index 100% rename from libs/@local/hashql/ast/tests/ui/lower/special-form-expander/use-2.jsonc rename to libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/use-2.jsonc diff --git a/libs/@local/hashql/ast/tests/ui/lower/special-form-expander/use-2.stderr b/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/use-2.stderr similarity index 100% rename from libs/@local/hashql/ast/tests/ui/lower/special-form-expander/use-2.stderr rename to libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/use-2.stderr diff --git a/libs/@local/hashql/ast/tests/ui/lower/special-form-expander/use-3.jsonc b/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/use-3.jsonc similarity index 100% rename from libs/@local/hashql/ast/tests/ui/lower/special-form-expander/use-3.jsonc rename to libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/use-3.jsonc diff --git a/libs/@local/hashql/ast/tests/ui/lower/special-form-expander/use-3.stdout b/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/use-3.stdout similarity index 100% rename from libs/@local/hashql/ast/tests/ui/lower/special-form-expander/use-3.stdout rename to libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/use-3.stdout diff --git a/libs/@local/hashql/ast/tests/ui/lower/special-form-expander/use-4.jsonc b/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/use-4.jsonc similarity index 100% rename from libs/@local/hashql/ast/tests/ui/lower/special-form-expander/use-4.jsonc rename to libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/use-4.jsonc diff --git a/libs/@local/hashql/ast/tests/ui/lower/special-form-expander/use-4.stderr b/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/use-4.stderr similarity index 100% rename from libs/@local/hashql/ast/tests/ui/lower/special-form-expander/use-4.stderr rename to libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/use-4.stderr diff --git a/libs/@local/hashql/ast/tests/ui/lower/special-form-expander/use-glob-not-ident.jsonc b/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/use-glob-not-ident.jsonc similarity index 100% rename from libs/@local/hashql/ast/tests/ui/lower/special-form-expander/use-glob-not-ident.jsonc rename to libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/use-glob-not-ident.jsonc diff --git a/libs/@local/hashql/ast/tests/ui/lower/special-form-expander/use-glob-not-ident.stderr b/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/use-glob-not-ident.stderr similarity index 100% rename from libs/@local/hashql/ast/tests/ui/lower/special-form-expander/use-glob-not-ident.stderr rename to libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/use-glob-not-ident.stderr diff --git a/libs/@local/hashql/ast/tests/ui/lower/special-form-expander/use-glob-not-star.jsonc b/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/use-glob-not-star.jsonc similarity index 100% rename from libs/@local/hashql/ast/tests/ui/lower/special-form-expander/use-glob-not-star.jsonc rename to libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/use-glob-not-star.jsonc diff --git a/libs/@local/hashql/ast/tests/ui/lower/special-form-expander/use-glob-not-star.stderr b/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/use-glob-not-star.stderr similarity index 100% rename from libs/@local/hashql/ast/tests/ui/lower/special-form-expander/use-glob-not-star.stderr rename to libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/use-glob-not-star.stderr diff --git a/libs/@local/hashql/ast/tests/ui/lower/special-form-expander/use-glob.jsonc b/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/use-glob.jsonc similarity index 100% rename from libs/@local/hashql/ast/tests/ui/lower/special-form-expander/use-glob.jsonc rename to libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/use-glob.jsonc diff --git a/libs/@local/hashql/ast/tests/ui/lower/special-form-expander/use-glob.stdout b/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/use-glob.stdout similarity index 100% rename from libs/@local/hashql/ast/tests/ui/lower/special-form-expander/use-glob.stdout rename to libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/use-glob.stdout diff --git a/libs/@local/hashql/ast/tests/ui/lower/special-form-expander/use-literal.jsonc b/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/use-literal.jsonc similarity index 100% rename from libs/@local/hashql/ast/tests/ui/lower/special-form-expander/use-literal.jsonc rename to libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/use-literal.jsonc diff --git a/libs/@local/hashql/ast/tests/ui/lower/special-form-expander/use-literal.stderr b/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/use-literal.stderr similarity index 100% rename from libs/@local/hashql/ast/tests/ui/lower/special-form-expander/use-literal.stderr rename to libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/use-literal.stderr diff --git a/libs/@local/hashql/ast/tests/ui/lower/special-form-expander/use-struct-literal.jsonc b/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/use-struct-literal.jsonc similarity index 100% rename from libs/@local/hashql/ast/tests/ui/lower/special-form-expander/use-struct-literal.jsonc rename to libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/use-struct-literal.jsonc diff --git a/libs/@local/hashql/ast/tests/ui/lower/special-form-expander/use-struct-literal.stderr b/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/use-struct-literal.stderr similarity index 100% rename from libs/@local/hashql/ast/tests/ui/lower/special-form-expander/use-struct-literal.stderr rename to libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/use-struct-literal.stderr diff --git a/libs/@local/hashql/ast/tests/ui/lower/special-form-expander/use-struct-path.jsonc b/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/use-struct-path.jsonc similarity index 100% rename from libs/@local/hashql/ast/tests/ui/lower/special-form-expander/use-struct-path.jsonc rename to libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/use-struct-path.jsonc diff --git a/libs/@local/hashql/ast/tests/ui/lower/special-form-expander/use-struct-path.stderr b/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/use-struct-path.stderr similarity index 100% rename from libs/@local/hashql/ast/tests/ui/lower/special-form-expander/use-struct-path.stderr rename to libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/use-struct-path.stderr diff --git a/libs/@local/hashql/ast/tests/ui/lower/special-form-expander/use-struct-type.jsonc b/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/use-struct-type.jsonc similarity index 100% rename from libs/@local/hashql/ast/tests/ui/lower/special-form-expander/use-struct-type.jsonc rename to libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/use-struct-type.jsonc diff --git a/libs/@local/hashql/ast/tests/ui/lower/special-form-expander/use-struct-type.stderr b/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/use-struct-type.stderr similarity index 100% rename from libs/@local/hashql/ast/tests/ui/lower/special-form-expander/use-struct-type.stderr rename to libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/use-struct-type.stderr diff --git a/libs/@local/hashql/ast/tests/ui/lower/special-form-expander/use-struct.jsonc b/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/use-struct.jsonc similarity index 100% rename from libs/@local/hashql/ast/tests/ui/lower/special-form-expander/use-struct.jsonc rename to libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/use-struct.jsonc diff --git a/libs/@local/hashql/ast/tests/ui/lower/special-form-expander/use-struct.stdout b/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/use-struct.stdout similarity index 100% rename from libs/@local/hashql/ast/tests/ui/lower/special-form-expander/use-struct.stdout rename to libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/use-struct.stdout diff --git a/libs/@local/hashql/ast/tests/ui/lower/special-form-expander/use-tuple-literal.jsonc b/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/use-tuple-literal.jsonc similarity index 100% rename from libs/@local/hashql/ast/tests/ui/lower/special-form-expander/use-tuple-literal.jsonc rename to libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/use-tuple-literal.jsonc diff --git a/libs/@local/hashql/ast/tests/ui/lower/special-form-expander/use-tuple-literal.stderr b/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/use-tuple-literal.stderr similarity index 100% rename from libs/@local/hashql/ast/tests/ui/lower/special-form-expander/use-tuple-literal.stderr rename to libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/use-tuple-literal.stderr diff --git a/libs/@local/hashql/ast/tests/ui/lower/special-form-expander/use-tuple-path.jsonc b/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/use-tuple-path.jsonc similarity index 100% rename from libs/@local/hashql/ast/tests/ui/lower/special-form-expander/use-tuple-path.jsonc rename to libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/use-tuple-path.jsonc diff --git a/libs/@local/hashql/ast/tests/ui/lower/special-form-expander/use-tuple-path.stderr b/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/use-tuple-path.stderr similarity index 100% rename from libs/@local/hashql/ast/tests/ui/lower/special-form-expander/use-tuple-path.stderr rename to libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/use-tuple-path.stderr diff --git a/libs/@local/hashql/ast/tests/ui/lower/special-form-expander/use-tuple-type.jsonc b/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/use-tuple-type.jsonc similarity index 100% rename from libs/@local/hashql/ast/tests/ui/lower/special-form-expander/use-tuple-type.jsonc rename to libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/use-tuple-type.jsonc diff --git a/libs/@local/hashql/ast/tests/ui/lower/special-form-expander/use-tuple-type.stderr b/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/use-tuple-type.stderr similarity index 100% rename from libs/@local/hashql/ast/tests/ui/lower/special-form-expander/use-tuple-type.stderr rename to libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/use-tuple-type.stderr diff --git a/libs/@local/hashql/ast/tests/ui/lower/special-form-expander/use-tuple.jsonc b/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/use-tuple.jsonc similarity index 100% rename from libs/@local/hashql/ast/tests/ui/lower/special-form-expander/use-tuple.jsonc rename to libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/use-tuple.jsonc diff --git a/libs/@local/hashql/ast/tests/ui/lower/special-form-expander/use-tuple.stdout b/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/use-tuple.stdout similarity index 100% rename from libs/@local/hashql/ast/tests/ui/lower/special-form-expander/use-tuple.stdout rename to libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/use-tuple.stdout diff --git a/libs/@local/hashql/ast/tests/ui/lower/import-resolver/.spec.toml b/libs/@local/hashql/ast/tests/ui/lower/import-resolver/.spec.toml deleted file mode 100644 index 06841add3ea..00000000000 --- a/libs/@local/hashql/ast/tests/ui/lower/import-resolver/.spec.toml +++ /dev/null @@ -1 +0,0 @@ -suite = "ast/lowering/import-resolver" diff --git a/libs/@local/hashql/ast/tests/ui/lower/import-resolver/continue/.spec.toml b/libs/@local/hashql/ast/tests/ui/lower/import-resolver/continue/.spec.toml deleted file mode 100644 index 32a91777a7a..00000000000 --- a/libs/@local/hashql/ast/tests/ui/lower/import-resolver/continue/.spec.toml +++ /dev/null @@ -1 +0,0 @@ -suite = "ast/lowering/import-resolver/continue" diff --git a/libs/@local/hashql/ast/tests/ui/lower/pre-expansion-name-resolver/.spec.toml b/libs/@local/hashql/ast/tests/ui/lower/pre-expansion-name-resolver/.spec.toml deleted file mode 100644 index 51611c0cbf3..00000000000 --- a/libs/@local/hashql/ast/tests/ui/lower/pre-expansion-name-resolver/.spec.toml +++ /dev/null @@ -1 +0,0 @@ -suite = "ast/lowering/pre-expansion-name-resolver" diff --git a/libs/@local/hashql/ast/tests/ui/lower/special-form-expander/.spec.toml b/libs/@local/hashql/ast/tests/ui/lower/special-form-expander/.spec.toml deleted file mode 100644 index 15cabf9d93a..00000000000 --- a/libs/@local/hashql/ast/tests/ui/lower/special-form-expander/.spec.toml +++ /dev/null @@ -1 +0,0 @@ -suite = "ast/lowering/special-form-expander" diff --git a/libs/@local/hashql/compiletest/src/pipeline.rs b/libs/@local/hashql/compiletest/src/pipeline.rs index 9fd7613f858..4100efcc856 100644 --- a/libs/@local/hashql/compiletest/src/pipeline.rs +++ b/libs/@local/hashql/compiletest/src/pipeline.rs @@ -158,6 +158,7 @@ impl<'heap> Pipeline<'heap> { &mut expr, &self.env, ®istry, + &mut self.scratch )); let hir_interner = hashql_hir::intern::Interner::new(self.heap); diff --git a/libs/@local/hashql/compiletest/src/suite/ast_lower_expander.rs b/libs/@local/hashql/compiletest/src/suite/ast_lower_expander.rs new file mode 100644 index 00000000000..a0c75880545 --- /dev/null +++ b/libs/@local/hashql/compiletest/src/suite/ast_lower_expander.rs @@ -0,0 +1,76 @@ +use error_stack::ReportSink; +use hashql_ast::{ + self, format::SyntaxDump as _, lower::expander::Expander, node::expr::Expr, visit::Visitor as _, +}; +use hashql_core::{ + heap::Scratch, + module::{ModuleRegistry, namespace::ModuleNamespace}, + r#type::environment::Environment, +}; +use hashql_diagnostics::Diagnostic; + +use super::{RunContext, Suite, SuiteDiagnostic, SuiteDirectives, common::process_issues}; +use crate::harness::trial::TrialError; + +fn should_continue( + this: &impl Suite, + directives: &SuiteDirectives, + reports: &mut ReportSink, +) -> bool { + let Some(r#continue) = directives.get("continue") else { + return false; + }; + + let Some(r#continue) = r#continue.as_bool() else { + reports.capture(TrialError::Run( + this.name(), + "suite#continue must be a valid boolean", + )); + + return false; + }; + + r#continue +} + +pub(crate) struct AstLowerExpanderSuite; + +impl Suite for AstLowerExpanderSuite { + fn name(&self) -> &'static str { + "ast/lower/expander" + } + + fn description(&self) -> &'static str { + "Expansion of special forms in the AST" + } + + fn run<'heap>( + &self, + RunContext { + heap, + diagnostics, + suite_directives, + reports, + .. + }: RunContext<'_, 'heap>, + mut expr: Expr<'heap>, + ) -> Result { + let environment = Environment::new(heap); + let registry = ModuleRegistry::new(&environment); + let mut scratch = Scratch::new(); + + let mut namespace = ModuleNamespace::new(®istry); + namespace.import_prelude(); + + let mut expander = Expander::new(namespace, &mut scratch); + expander.visit_expr(&mut expr); + + if should_continue(self, suite_directives, reports) { + diagnostics.extend(expander.take_diagnostics().map(Diagnostic::boxed)); + } else { + process_issues(diagnostics, expander.take_diagnostics())?; + } + + Ok(expr.syntax_dump_to_string()) + } +} diff --git a/libs/@local/hashql/compiletest/src/suite/ast_lowering_node_mangler.rs b/libs/@local/hashql/compiletest/src/suite/ast_lower_node_mangler.rs similarity index 62% rename from libs/@local/hashql/compiletest/src/suite/ast_lowering_node_mangler.rs rename to libs/@local/hashql/compiletest/src/suite/ast_lower_node_mangler.rs index 478f56382d4..d9a969eff60 100644 --- a/libs/@local/hashql/compiletest/src/suite/ast_lowering_node_mangler.rs +++ b/libs/@local/hashql/compiletest/src/suite/ast_lower_node_mangler.rs @@ -1,21 +1,22 @@ use hashql_ast::{ format::SyntaxDump as _, - lower::{ - name_mangler::NameMangler, pre_expansion_name_resolver::PreExpansionNameResolver, - special_form_expander::SpecialFormExpander, - }, + lower::{expander::Expander, name_mangler::NameMangler}, node::expr::Expr, visit::Visitor as _, }; -use hashql_core::{module::ModuleRegistry, r#type::environment::Environment}; +use hashql_core::{ + heap::Scratch, + module::{ModuleRegistry, namespace::ModuleNamespace}, + r#type::environment::Environment, +}; use super::{RunContext, Suite, SuiteDiagnostic, common::process_issues}; -pub(crate) struct AstLoweringNameManglerSuite; +pub(crate) struct AstLowerNameManglerSuite; -impl Suite for AstLoweringNameManglerSuite { +impl Suite for AstLowerNameManglerSuite { fn name(&self) -> &'static str { - "ast/lowering/name-mangler" + "ast/lower/name-mangler" } fn description(&self) -> &'static str { @@ -31,14 +32,13 @@ impl Suite for AstLoweringNameManglerSuite { ) -> Result { let environment = Environment::new(heap); let registry = ModuleRegistry::new(&environment); + let mut scratch = Scratch::new(); - let mut resolver = PreExpansionNameResolver::new(®istry); - - resolver.visit_expr(&mut expr); + let mut namespace = ModuleNamespace::new(®istry); + namespace.import_prelude(); - let mut expander = SpecialFormExpander::new(heap); + let mut expander = Expander::new(namespace, &mut scratch); expander.visit_expr(&mut expr); - process_issues(diagnostics, expander.take_diagnostics())?; let mut renumberer = NameMangler::new(heap); diff --git a/libs/@local/hashql/compiletest/src/suite/ast_lowering_node_renumberer.rs b/libs/@local/hashql/compiletest/src/suite/ast_lower_node_renumberer.rs similarity index 61% rename from libs/@local/hashql/compiletest/src/suite/ast_lowering_node_renumberer.rs rename to libs/@local/hashql/compiletest/src/suite/ast_lower_node_renumberer.rs index 4fe653c1283..02b57ec9df9 100644 --- a/libs/@local/hashql/compiletest/src/suite/ast_lowering_node_renumberer.rs +++ b/libs/@local/hashql/compiletest/src/suite/ast_lower_node_renumberer.rs @@ -1,21 +1,22 @@ use hashql_ast::{ format::SyntaxDump as _, - lower::{ - node_renumberer::NodeRenumberer, pre_expansion_name_resolver::PreExpansionNameResolver, - special_form_expander::SpecialFormExpander, - }, + lower::{expander::Expander, node_renumberer::NodeRenumberer}, node::expr::Expr, visit::Visitor as _, }; -use hashql_core::{module::ModuleRegistry, r#type::environment::Environment}; +use hashql_core::{ + heap::Scratch, + module::{ModuleRegistry, namespace::ModuleNamespace}, + r#type::environment::Environment, +}; use super::{RunContext, Suite, SuiteDiagnostic, common::process_issues}; -pub(crate) struct AstLoweringNodeRenumbererSuite; +pub(crate) struct AstLowerNodeRenumbererSuite; -impl Suite for AstLoweringNodeRenumbererSuite { +impl Suite for AstLowerNodeRenumbererSuite { fn name(&self) -> &'static str { - "ast/lowering/node-renumberer" + "ast/lower/node-renumberer" } fn description(&self) -> &'static str { @@ -31,14 +32,13 @@ impl Suite for AstLoweringNodeRenumbererSuite { ) -> Result { let environment = Environment::new(heap); let registry = ModuleRegistry::new(&environment); + let mut scratch = Scratch::new(); - let mut resolver = PreExpansionNameResolver::new(®istry); - - resolver.visit_expr(&mut expr); + let mut namespace = ModuleNamespace::new(®istry); + namespace.import_prelude(); - let mut expander = SpecialFormExpander::new(heap); + let mut expander = Expander::new(namespace, &mut scratch); expander.visit_expr(&mut expr); - process_issues(diagnostics, expander.take_diagnostics())?; let mut renumberer = NodeRenumberer::new(); diff --git a/libs/@local/hashql/compiletest/src/suite/ast_lowering_sanitizer.rs b/libs/@local/hashql/compiletest/src/suite/ast_lower_sanitizer.rs similarity index 64% rename from libs/@local/hashql/compiletest/src/suite/ast_lowering_sanitizer.rs rename to libs/@local/hashql/compiletest/src/suite/ast_lower_sanitizer.rs index 5bd33d64362..520af4598d4 100644 --- a/libs/@local/hashql/compiletest/src/suite/ast_lowering_sanitizer.rs +++ b/libs/@local/hashql/compiletest/src/suite/ast_lower_sanitizer.rs @@ -1,21 +1,22 @@ use hashql_ast::{ format::SyntaxDump as _, - lower::{ - pre_expansion_name_resolver::PreExpansionNameResolver, sanitizer::Sanitizer, - special_form_expander::SpecialFormExpander, - }, + lower::{expander::Expander, sanitizer::Sanitizer}, node::expr::Expr, visit::Visitor as _, }; -use hashql_core::{module::ModuleRegistry, r#type::environment::Environment}; +use hashql_core::{ + heap::Scratch, + module::{ModuleRegistry, namespace::ModuleNamespace}, + r#type::environment::Environment, +}; use super::{RunContext, Suite, SuiteDiagnostic, common::process_issues}; -pub(crate) struct AstLoweringSanitizerSuite; +pub(crate) struct AstLowerSanitizerSuite; -impl Suite for AstLoweringSanitizerSuite { +impl Suite for AstLowerSanitizerSuite { fn name(&self) -> &'static str { - "ast/lowering/sanitizer" + "ast/lower/sanitizer" } fn description(&self) -> &'static str { @@ -31,14 +32,13 @@ impl Suite for AstLoweringSanitizerSuite { ) -> Result { let environment = Environment::new(heap); let registry = ModuleRegistry::new(&environment); + let mut scratch = Scratch::new(); - let mut resolver = PreExpansionNameResolver::new(®istry); - - resolver.visit_expr(&mut expr); + let mut namespace = ModuleNamespace::new(®istry); + namespace.import_prelude(); - let mut expander = SpecialFormExpander::new(heap); + let mut expander = Expander::new(namespace, &mut scratch); expander.visit_expr(&mut expr); - process_issues(diagnostics, expander.take_diagnostics())?; let mut sanitizer = Sanitizer::new(); diff --git a/libs/@local/hashql/compiletest/src/suite/ast_lowering_type_definition_extractor.rs b/libs/@local/hashql/compiletest/src/suite/ast_lower_type_definition_extractor.rs similarity index 77% rename from libs/@local/hashql/compiletest/src/suite/ast_lowering_type_definition_extractor.rs rename to libs/@local/hashql/compiletest/src/suite/ast_lower_type_definition_extractor.rs index 39ea2b87b97..ca282a4155a 100644 --- a/libs/@local/hashql/compiletest/src/suite/ast_lowering_type_definition_extractor.rs +++ b/libs/@local/hashql/compiletest/src/suite/ast_lower_type_definition_extractor.rs @@ -3,14 +3,13 @@ use core::fmt::Write as _; use hashql_ast::{ format::SyntaxDump as _, lower::{ - import_resolver::ImportResolver, name_mangler::NameMangler, - pre_expansion_name_resolver::PreExpansionNameResolver, - special_form_expander::SpecialFormExpander, type_extractor::TypeDefinitionExtractor, + expander::Expander, name_mangler::NameMangler, type_extractor::TypeDefinitionExtractor, }, node::expr::Expr, visit::Visitor as _, }; use hashql_core::{ + heap::Scratch, module::{ ModuleRegistry, locals::{Local, TypeDef}, @@ -23,11 +22,11 @@ use hashql_core::{ use super::{RunContext, Suite, SuiteDiagnostic, common::process_issues}; use crate::suite::common::Annotated; -pub(crate) struct AstLoweringTypeDefinitionExtractorSuite; +pub(crate) struct AstLowerTypeDefinitionExtractorSuite; -impl Suite for AstLoweringTypeDefinitionExtractorSuite { +impl Suite for AstLowerTypeDefinitionExtractorSuite { fn name(&self) -> &'static str { - "ast/lowering/type-definition-extractor" + "ast/lower/type-definition-extractor" } fn description(&self) -> &'static str { @@ -43,23 +42,14 @@ impl Suite for AstLoweringTypeDefinitionExtractorSuite { ) -> Result { let environment = Environment::new(heap); let registry = ModuleRegistry::new(&environment); - - let mut resolver = PreExpansionNameResolver::new(®istry); - - resolver.visit_expr(&mut expr); - - let mut expander = SpecialFormExpander::new(heap); - expander.visit_expr(&mut expr); - - process_issues(diagnostics, expander.take_diagnostics())?; + let mut scratch = Scratch::new(); let mut namespace = ModuleNamespace::new(®istry); namespace.import_prelude(); - let mut resolver = ImportResolver::new(heap, namespace); - resolver.visit_expr(&mut expr); - - process_issues(diagnostics, resolver.take_diagnostics())?; + let mut expander = Expander::new(namespace, &mut scratch); + expander.visit_expr(&mut expr); + process_issues(diagnostics, expander.take_diagnostics())?; let mut mangler = NameMangler::new(heap); mangler.visit_expr(&mut expr); diff --git a/libs/@local/hashql/compiletest/src/suite/ast_lowering_type_extractor.rs b/libs/@local/hashql/compiletest/src/suite/ast_lower_type_extractor.rs similarity index 86% rename from libs/@local/hashql/compiletest/src/suite/ast_lowering_type_extractor.rs rename to libs/@local/hashql/compiletest/src/suite/ast_lower_type_extractor.rs index 7f33d3ddc1a..29a4073dfc1 100644 --- a/libs/@local/hashql/compiletest/src/suite/ast_lowering_type_extractor.rs +++ b/libs/@local/hashql/compiletest/src/suite/ast_lower_type_extractor.rs @@ -3,17 +3,16 @@ use core::fmt::Write as _; use hashql_ast::{ format::SyntaxDump as _, lower::{ - import_resolver::ImportResolver, + expander::Expander, name_mangler::NameMangler, node_renumberer::NodeRenumberer, - pre_expansion_name_resolver::PreExpansionNameResolver, - special_form_expander::SpecialFormExpander, type_extractor::{TypeDefinitionExtractor, TypeExtractor}, }, node::expr::Expr, visit::Visitor as _, }; use hashql_core::{ + heap::Scratch, module::{ ModuleRegistry, locals::{Local, TypeDef}, @@ -26,11 +25,11 @@ use hashql_core::{ use super::{RunContext, Suite, SuiteDiagnostic, common::process_issues}; use crate::suite::common::Annotated; -pub(crate) struct AstLoweringTypeExtractorSuite; +pub(crate) struct AstLowerTypeExtractorSuite; -impl Suite for AstLoweringTypeExtractorSuite { +impl Suite for AstLowerTypeExtractorSuite { fn name(&self) -> &'static str { - "ast/lowering/type-extractor" + "ast/lower/type-extractor" } fn description(&self) -> &'static str { @@ -46,22 +45,14 @@ impl Suite for AstLoweringTypeExtractorSuite { ) -> Result { let environment = Environment::new(heap); let registry = ModuleRegistry::new(&environment); - - let mut resolver = PreExpansionNameResolver::new(®istry); - resolver.visit_expr(&mut expr); - - let mut expander = SpecialFormExpander::new(heap); - expander.visit_expr(&mut expr); - - process_issues(diagnostics, expander.take_diagnostics())?; + let mut scratch = Scratch::new(); let mut namespace = ModuleNamespace::new(®istry); namespace.import_prelude(); - let mut resolver = ImportResolver::new(heap, namespace); - resolver.visit_expr(&mut expr); - - process_issues(diagnostics, resolver.take_diagnostics())?; + let mut expander = Expander::new(namespace, &mut scratch); + expander.visit_expr(&mut expr); + process_issues(diagnostics, expander.take_diagnostics())?; let mut mangler = NameMangler::new(heap); mangler.visit_expr(&mut expr); diff --git a/libs/@local/hashql/compiletest/src/suite/ast_lowering_import_resolver.rs b/libs/@local/hashql/compiletest/src/suite/ast_lowering_import_resolver.rs deleted file mode 100644 index b8c1eff3726..00000000000 --- a/libs/@local/hashql/compiletest/src/suite/ast_lowering_import_resolver.rs +++ /dev/null @@ -1,57 +0,0 @@ -use hashql_ast::{ - format::SyntaxDump as _, - lower::{ - import_resolver::ImportResolver, pre_expansion_name_resolver::PreExpansionNameResolver, - special_form_expander::SpecialFormExpander, - }, - node::expr::Expr, - visit::Visitor as _, -}; -use hashql_core::{ - module::{ModuleRegistry, namespace::ModuleNamespace}, - r#type::environment::Environment, -}; - -use super::{RunContext, Suite, SuiteDiagnostic, common::process_issues}; - -pub(crate) struct AstLoweringImportResolverSuite; - -impl Suite for AstLoweringImportResolverSuite { - fn name(&self) -> &'static str { - "ast/lowering/import-resolver" - } - - fn description(&self) -> &'static str { - "Import and module resolution in the AST" - } - - fn run<'heap>( - &self, - RunContext { - heap, diagnostics, .. - }: RunContext<'_, 'heap>, - mut expr: Expr<'heap>, - ) -> Result { - let environment = Environment::new(heap); - let registry = ModuleRegistry::new(&environment); - - let mut resolver = PreExpansionNameResolver::new(®istry); - - resolver.visit_expr(&mut expr); - - let mut expander = SpecialFormExpander::new(heap); - expander.visit_expr(&mut expr); - - process_issues(diagnostics, expander.take_diagnostics())?; - - let mut namespace = ModuleNamespace::new(®istry); - namespace.import_prelude(); - - let mut resolver = ImportResolver::new(heap, namespace); - resolver.visit_expr(&mut expr); - - process_issues(diagnostics, resolver.take_diagnostics())?; - - Ok(expr.syntax_dump_to_string()) - } -} diff --git a/libs/@local/hashql/compiletest/src/suite/ast_lowering_import_resolver_continue.rs b/libs/@local/hashql/compiletest/src/suite/ast_lowering_import_resolver_continue.rs deleted file mode 100644 index c25551ca91b..00000000000 --- a/libs/@local/hashql/compiletest/src/suite/ast_lowering_import_resolver_continue.rs +++ /dev/null @@ -1,68 +0,0 @@ -use hashql_ast::{ - format::SyntaxDump as _, - lower::{ - import_resolver::ImportResolver, pre_expansion_name_resolver::PreExpansionNameResolver, - special_form_expander::SpecialFormExpander, - }, - node::expr::Expr, - visit::Visitor as _, -}; -use hashql_core::{ - module::{ModuleRegistry, namespace::ModuleNamespace}, - r#type::environment::Environment, -}; -use hashql_diagnostics::Diagnostic; - -use super::{RunContext, Suite, SuiteDiagnostic}; - -pub(crate) struct AstLoweringImportResolverContinueSuite; - -impl Suite for AstLoweringImportResolverContinueSuite { - fn name(&self) -> &'static str { - "ast/lowering/import-resolver/continue" - } - - fn description(&self) -> &'static str { - "Import resolution with non-fatal error handling" - } - - fn run<'heap>( - &self, - RunContext { - heap, diagnostics, .. - }: RunContext<'_, 'heap>, - mut expr: Expr<'heap>, - ) -> Result { - let environment = Environment::new(heap); - let registry = ModuleRegistry::new(&environment); - - let mut resolver = PreExpansionNameResolver::new(®istry); - - resolver.visit_expr(&mut expr); - - let mut expander = SpecialFormExpander::new(heap); - expander.visit_expr(&mut expr); - - diagnostics.extend( - expander - .take_diagnostics() - .into_iter() - .map(Diagnostic::boxed), - ); - - let mut namespace = ModuleNamespace::new(®istry); - namespace.import_prelude(); - - let mut resolver = ImportResolver::new(heap, namespace); - resolver.visit_expr(&mut expr); - - diagnostics.extend( - resolver - .take_diagnostics() - .into_iter() - .map(Diagnostic::boxed), - ); - - Ok(expr.syntax_dump_to_string()) - } -} diff --git a/libs/@local/hashql/compiletest/src/suite/ast_lowering_pre_expansion_name_resolver.rs b/libs/@local/hashql/compiletest/src/suite/ast_lowering_pre_expansion_name_resolver.rs deleted file mode 100644 index 8110415a05a..00000000000 --- a/libs/@local/hashql/compiletest/src/suite/ast_lowering_pre_expansion_name_resolver.rs +++ /dev/null @@ -1,34 +0,0 @@ -use hashql_ast::{ - format::SyntaxDump as _, lower::pre_expansion_name_resolver::PreExpansionNameResolver, - node::expr::Expr, visit::Visitor as _, -}; -use hashql_core::{module::ModuleRegistry, r#type::environment::Environment}; - -use super::{RunContext, Suite, SuiteDiagnostic}; - -pub(crate) struct AstLoweringNameResolverSuite; - -impl Suite for AstLoweringNameResolverSuite { - fn name(&self) -> &'static str { - "ast/lowering/pre-expansion-name-resolver" - } - - fn description(&self) -> &'static str { - "Name resolution before macro expansion" - } - - fn run<'heap>( - &self, - RunContext { heap, .. }: RunContext<'_, 'heap>, - mut expr: Expr<'heap>, - ) -> Result { - let environment = Environment::new(heap); - let registry = ModuleRegistry::new(&environment); - - let mut resolver = PreExpansionNameResolver::new(®istry); - - resolver.visit_expr(&mut expr); - - Ok(expr.syntax_dump_to_string()) - } -} diff --git a/libs/@local/hashql/compiletest/src/suite/ast_lowering_special_form_expander.rs b/libs/@local/hashql/compiletest/src/suite/ast_lowering_special_form_expander.rs deleted file mode 100644 index c94a0e6f8d1..00000000000 --- a/libs/@local/hashql/compiletest/src/suite/ast_lowering_special_form_expander.rs +++ /dev/null @@ -1,34 +0,0 @@ -use hashql_ast::{ - format::SyntaxDump as _, lower::special_form_expander::SpecialFormExpander, node::expr::Expr, - visit::Visitor as _, -}; - -use super::{RunContext, Suite, SuiteDiagnostic, common::process_issues}; - -pub(crate) struct AstLoweringSpecialFormExpanderSuite; - -impl Suite for AstLoweringSpecialFormExpanderSuite { - fn name(&self) -> &'static str { - "ast/lowering/special-form-expander" - } - - fn description(&self) -> &'static str { - "Special form and macro expansion in the AST" - } - - fn run<'heap>( - &self, - RunContext { - heap, diagnostics, .. - }: RunContext<'_, 'heap>, - mut expr: Expr<'heap>, - ) -> Result { - let mut expander = SpecialFormExpander::new(heap); - - expander.visit_expr(&mut expr); - - process_issues(diagnostics, expander.take_diagnostics())?; - - Ok(expr.syntax_dump_to_string()) - } -} diff --git a/libs/@local/hashql/compiletest/src/suite/hir_reify.rs b/libs/@local/hashql/compiletest/src/suite/hir_reify.rs index 1d3e6767e62..2e26a08b40b 100644 --- a/libs/@local/hashql/compiletest/src/suite/hir_reify.rs +++ b/libs/@local/hashql/compiletest/src/suite/hir_reify.rs @@ -3,7 +3,7 @@ use hashql_ast::{ node::expr::Expr, }; use hashql_core::{ - heap::Heap, + heap::{Heap, Scratch}, module::ModuleRegistry, pretty::{Formatter, RenderOptions}, r#type::environment::Environment, @@ -24,11 +24,13 @@ pub(crate) fn hir_reify<'heap>( context: &mut HirContext<'_, 'heap>, diagnostics: &mut Vec, ) -> Result<(Node<'heap>, ExtractedTypes<'heap>), SuiteDiagnostic> { + let mut scratch = Scratch::new(); let result = lower( heap.intern_symbol("::main"), &mut expr, environment, context.modules, + &mut scratch, ); let types = process_status(diagnostics, result)?; diff --git a/libs/@local/hashql/compiletest/src/suite/mir_reify.rs b/libs/@local/hashql/compiletest/src/suite/mir_reify.rs index 81a96a9baf3..38addae107f 100644 --- a/libs/@local/hashql/compiletest/src/suite/mir_reify.rs +++ b/libs/@local/hashql/compiletest/src/suite/mir_reify.rs @@ -43,7 +43,9 @@ pub(crate) fn mir_reify<'heap>( &mut expr, environment, hir_context.modules, + &mut scratch, ); + scratch.reset(); let types = process_status(diagnostics, result)?; let node = process_status( diff --git a/libs/@local/hashql/compiletest/src/suite/mod.rs b/libs/@local/hashql/compiletest/src/suite/mod.rs index 69edab286f1..89f3f62165f 100644 --- a/libs/@local/hashql/compiletest/src/suite/mod.rs +++ b/libs/@local/hashql/compiletest/src/suite/mod.rs @@ -1,13 +1,10 @@ #![coverage(off)] -mod ast_lowering_import_resolver; -mod ast_lowering_import_resolver_continue; -mod ast_lowering_node_mangler; -mod ast_lowering_node_renumberer; -mod ast_lowering_pre_expansion_name_resolver; -mod ast_lowering_sanitizer; -mod ast_lowering_special_form_expander; -mod ast_lowering_type_definition_extractor; -mod ast_lowering_type_extractor; +mod ast_lower_expander; +mod ast_lower_node_mangler; +mod ast_lower_node_renumberer; +mod ast_lower_sanitizer; +mod ast_lower_type_definition_extractor; +mod ast_lower_type_extractor; pub(crate) mod common; mod eval_postgres; mod hir_lower_alias_replacement; @@ -41,15 +38,11 @@ use hashql_core::{collections::FastHashMap, heap::Heap, span::SpanId}; use hashql_diagnostics::{Diagnostic, category::DiagnosticCategory}; use self::{ - ast_lowering_import_resolver::AstLoweringImportResolverSuite, - ast_lowering_import_resolver_continue::AstLoweringImportResolverContinueSuite, - ast_lowering_node_mangler::AstLoweringNameManglerSuite, - ast_lowering_node_renumberer::AstLoweringNodeRenumbererSuite, - ast_lowering_pre_expansion_name_resolver::AstLoweringNameResolverSuite, - ast_lowering_sanitizer::AstLoweringSanitizerSuite, - ast_lowering_special_form_expander::AstLoweringSpecialFormExpanderSuite, - ast_lowering_type_definition_extractor::AstLoweringTypeDefinitionExtractorSuite, - ast_lowering_type_extractor::AstLoweringTypeExtractorSuite, eval_postgres::EvalPostgres, + ast_lower_expander::AstLowerExpanderSuite, ast_lower_node_mangler::AstLowerNameManglerSuite, + ast_lower_node_renumberer::AstLowerNodeRenumbererSuite, + ast_lower_sanitizer::AstLowerSanitizerSuite, + ast_lower_type_definition_extractor::AstLowerTypeDefinitionExtractorSuite, + ast_lower_type_extractor::AstLowerTypeExtractorSuite, eval_postgres::EvalPostgres, hir_lower_alias_replacement::HirLowerAliasReplacementSuite, hir_lower_checking::HirLowerTypeCheckingSuite, hir_lower_ctor::HirLowerCtorSuite, hir_lower_graph_hoisting::HirLowerGraphHoistingSuite, @@ -141,15 +134,12 @@ pub(crate) trait Suite: RefUnwindSafe + Send + Sync + 'static { } const SUITES: &[&dyn Suite] = &[ - &AstLoweringImportResolverContinueSuite, - &AstLoweringImportResolverSuite, - &AstLoweringNameManglerSuite, - &AstLoweringNameResolverSuite, - &AstLoweringNodeRenumbererSuite, - &AstLoweringSanitizerSuite, - &AstLoweringSpecialFormExpanderSuite, - &AstLoweringTypeDefinitionExtractorSuite, - &AstLoweringTypeExtractorSuite, + &AstLowerExpanderSuite, + &AstLowerNameManglerSuite, + &AstLowerNodeRenumbererSuite, + &AstLowerSanitizerSuite, + &AstLowerTypeDefinitionExtractorSuite, + &AstLowerTypeExtractorSuite, &EvalPostgres, &HirLowerAliasReplacementSuite, &HirLowerCtorSuite, From 4f903507f475de77a113944f9377e0a40e3466e5 Mon Sep 17 00:00:00 2001 From: Bilal Mahmoud <7252775+indietyp@users.noreply.github.com> Date: Mon, 15 Jun 2026 13:04:42 +0200 Subject: [PATCH 30/55] allow for recursive definition of types --- .../hashql/ast/src/lower/expander/error.rs | 31 ++++++- .../hashql/ast/src/lower/expander/mod.rs | 31 ++++++- .../hashql/ast/src/lower/expander/newtype.rs | 59 +++++++------ .../hashql/ast/src/lower/expander/type.rs | 86 +++++++++++-------- 4 files changed, 145 insertions(+), 62 deletions(-) diff --git a/libs/@local/hashql/ast/src/lower/expander/error.rs b/libs/@local/hashql/ast/src/lower/expander/error.rs index 4f076d48cf6..133c2ef88e6 100644 --- a/libs/@local/hashql/ast/src/lower/expander/error.rs +++ b/libs/@local/hashql/ast/src/lower/expander/error.rs @@ -213,6 +213,11 @@ const INTRINSIC_TYPE_ANNOTATION: TerminalDiagnosticCategory = TerminalDiagnostic name: "Type annotation on intrinsic binding", }; +const INTRINSIC_GENERIC_ARGUMENTS: TerminalDiagnosticCategory = TerminalDiagnosticCategory { + id: "intrinsic-generic-arguments", + name: "Generic arguments on intrinsic", +}; + const INVALID_USE_PATH: TerminalDiagnosticCategory = TerminalDiagnosticCategory { id: "invalid-use-path", name: "Invalid use path", @@ -257,6 +262,7 @@ pub enum ExpanderDiagnosticCategory { DuplicateFnGeneric, DuplicateFnParameter, IntrinsicTypeAnnotation, + IntrinsicGenericArguments, InvalidUseImports, InvalidUseImportBinding, InvalidUseAlias, @@ -308,6 +314,7 @@ impl DiagnosticCategory for ExpanderDiagnosticCategory { Self::DuplicateFnGeneric => Some(&DUPLICATE_FN_GENERIC), Self::DuplicateFnParameter => Some(&DUPLICATE_FN_PARAMETER), Self::IntrinsicTypeAnnotation => Some(&INTRINSIC_TYPE_ANNOTATION), + Self::IntrinsicGenericArguments => Some(&INTRINSIC_GENERIC_ARGUMENTS), Self::InvalidUseImports => Some(&INVALID_USE_IMPORTS), Self::InvalidUseImportBinding => Some(&INVALID_USE_IMPORT_BINDING), Self::InvalidUseAlias => Some(&INVALID_USE_ALIAS), @@ -650,7 +657,7 @@ fn module_not_found<'heap>( let parent_path = FormatUserPath { rooted: path.rooted, segments: &path.segments, - up_to: (depth > 0).then_some(depth - 1), + up_to: depth.checked_sub(1), }; let primary_message = if depth > 0 { @@ -1109,6 +1116,28 @@ pub(crate) fn intrinsic_type_annotation( diagnostic } +/// Generic arguments were attached to an intrinsic that does not accept them. +/// +/// Special forms and built-in type operators are not generic. The generic +/// arguments should be removed. +pub(crate) fn intrinsic_generic_arguments(ident: &PathSegment<'_>) -> ExpanderDiagnostic { + let mut diagnostic = Diagnostic::new( + ExpanderDiagnosticCategory::IntrinsicGenericArguments, + Severity::Error, + ) + .primary(Label::new( + ident.span, + format!("`{}` does not accept generic arguments", ident.name.value), + )); + + diagnostic.add_message(Message::help(format!( + "remove the generic arguments from `{}`", + ident.name.value, + ))); + + diagnostic +} + /// An `as` call was passed labeled arguments. /// /// `as` only accepts positional arguments. diff --git a/libs/@local/hashql/ast/src/lower/expander/mod.rs b/libs/@local/hashql/ast/src/lower/expander/mod.rs index aa3ee094e59..8d00a2d88af 100644 --- a/libs/@local/hashql/ast/src/lower/expander/mod.rs +++ b/libs/@local/hashql/ast/src/lower/expander/mod.rs @@ -24,10 +24,11 @@ use hashql_core::{ heap::{self, BumpAllocator}, module::{ self, Reference, Universe, - item::{IntrinsicItem, Item}, + item::{IntrinsicItem, IntrinsicTypeItem, IntrinsicValueItem, Item, ItemKind}, namespace::{ModuleNamespace, ResolutionMode, ResolveOptions}, }, symbol::{Ident, Symbol, sym}, + r#type::kind::IntrinsicType, }; use self::{ @@ -228,7 +229,7 @@ where self.current_item = None; visit::walk_path(self, path); - let [modules @ .., _] = &*path.segments else { + let [modules @ .., ident] = &*path.segments else { self.diagnostics.push(error::empty_path(path.span)); self.trampoline = Some(node::expr::Expr::dummy()); return; @@ -282,6 +283,32 @@ where self.current_item = Some(item); + match item.kind { + ItemKind::Intrinsic(IntrinsicItem::Type(IntrinsicTypeItem { name })) + if let Some(const_name) = name.as_constant() + && matches!( + const_name, + sym::path::Union::CONST | sym::path::Intersection::CONST + ) + && !ident.arguments.is_empty() => + { + self.diagnostics + .push(error::intrinsic_generic_arguments(ident)); + self.trampoline = Some(node::expr::Expr::dummy()); + return; + } + ItemKind::Intrinsic(IntrinsicItem::Value(_)) if !ident.arguments.is_empty() => { + self.diagnostics + .push(error::intrinsic_generic_arguments(ident)); + self.trampoline = Some(node::expr::Expr::dummy()); + return; + } + ItemKind::Module(_) + | ItemKind::Type(_) + | ItemKind::Constructor(_) + | ItemKind::Intrinsic(_) => {} + } + let absolute_path = item.absolute_path_rev(self.namespace.registry()); if absolute_path.len() < path.segments.len() { self.diagnostics.push(error::absolute_path_mismatch( diff --git a/libs/@local/hashql/ast/src/lower/expander/newtype.rs b/libs/@local/hashql/ast/src/lower/expander/newtype.rs index d9e0442061b..1d4736fecaa 100644 --- a/libs/@local/hashql/ast/src/lower/expander/newtype.rs +++ b/libs/@local/hashql/ast/src/lower/expander/newtype.rs @@ -1,6 +1,10 @@ use core::mem; -use hashql_core::{heap::BumpAllocator, span::SpanId}; +use hashql_core::{ + heap::{self, BumpAllocator}, + module::Universe, + span::SpanId, +}; use super::Expander; use crate::{ @@ -36,32 +40,39 @@ where let mut value = mem::replace(&mut value.value, Expr::dummy()); let mut body = mem::replace(&mut body.value, Expr::dummy()); - expander.with_universe(hashql_core::module::Universe::Type, |expander| { - expander.visit(&mut value) - }); - let value = lower_expr_to_type(expander, value); + let (_, expr) = expander.bind_many_with( + constraints, + |constraints, binder| { + binder.bind(name.value, Universe::Type); + binder.bind(name.value, Universe::Value); + for constraint in constraints { + binder.bind(constraint.name.value, Universe::Type); + } + }, + |expander, constraints| { + expander.with_universe(Universe::Type, |expander| { + expander.visit(&mut value); + }); + + expander.visit(&mut body); + let value = lower_expr_to_type(expander, value); - expander.bind_many( - // Newtype expressions are scoped to both universes - [ - (name.value, hashql_core::module::Universe::Type), - (name.value, hashql_core::module::Universe::Value), - ], - |expander| expander.visit(&mut body), + Expr { + id: NodeId::PLACEHOLDER, + span, + kind: ExprKind::NewType(NewTypeExpr { + id: NodeId::PLACEHOLDER, + span, + name, + constraints: mem::replace(constraints, Vec::new_in(expander.heap)), + value: Box::new_in(value, expander.heap), + body: Box::new_in(body, expander.heap), + }), + } + }, ); - Expr { - id: NodeId::PLACEHOLDER, - span, - kind: ExprKind::NewType(NewTypeExpr { - id: NodeId::PLACEHOLDER, - span, - name, - constraints, - value: Box::new_in(value, expander.heap), - body: Box::new_in(body, expander.heap), - }), - } + expr } /// Lowers a `newtype` call into a [`NewTypeExpr`]. diff --git a/libs/@local/hashql/ast/src/lower/expander/type.rs b/libs/@local/hashql/ast/src/lower/expander/type.rs index 1a23ebb90ab..19fb20153a7 100644 --- a/libs/@local/hashql/ast/src/lower/expander/type.rs +++ b/libs/@local/hashql/ast/src/lower/expander/type.rs @@ -5,7 +5,7 @@ use hashql_core::{ heap::{self, BumpAllocator, Heap}, module::{ Universe, - item::{IntrinsicItem, Item}, + item::{IntrinsicItem, IntrinsicTypeItem, Item}, }, span::SpanId, symbol::{Ident, sym}, @@ -370,46 +370,62 @@ where let mut value = mem::replace(&mut value.value, Expr::dummy()); let mut body = mem::replace(&mut body.value, Expr::dummy()); - let item = expander.with_universe(hashql_core::module::Universe::Type, |expander| { - expander.visit(&mut value) - }); - - if let Some( - item @ Item { - kind: hashql_core::module::item::ItemKind::Intrinsic(_), - .. + let (_, expr) = expander.bind_many_with( + constraints, + |constraints, binder| { + binder.bind(name.value, Universe::Type); + for constraint in constraints { + binder.bind(constraint.name.value, Universe::Type); + } }, - ) = item - { - // We rebound an intrinsic, instead of erroring out, we use the body directly, and "show" - // the new value; - expander.bind(name.value, item, |expander| { - expander.visit(&mut body); - }); + |expander, constraints| { + let item = expander.with_universe(hashql_core::module::Universe::Type, |expander| { + expander.visit(&mut value) + }); + + if let Some( + item @ Item { + kind: + hashql_core::module::item::ItemKind::Intrinsic(IntrinsicItem::Type( + IntrinsicTypeItem { + name: intrinsic_name, + }, + )), + .. + }, + ) = item + && let Some(const_name) = intrinsic_name.as_constant() + && matches!( + const_name, + sym::path::Union::CONST | sym::path::Intersection::CONST + ) + { + // We rebound an intrinsic, instead of erroring out, we use the body + // directly, and "show" the new value: + expander.bind(name.value, item, |expander| expander.visit(&mut body)); - return body; - } + return body; + } - let value = lower_expr_to_type(expander, value); + expander.visit(&mut body); + let value = lower_expr_to_type(expander, value); - expander.bind( - name.value, - hashql_core::module::Universe::Type, - |expander| expander.visit(&mut body), + Expr { + id: NodeId::PLACEHOLDER, + span, + kind: ExprKind::Type(TypeExpr { + id: NodeId::PLACEHOLDER, + span, + name, + constraints: mem::replace(constraints, Vec::new_in(expander.heap)), + value: Box::new_in(value, expander.heap), + body: Box::new_in(body, expander.heap), + }), + } + }, ); - Expr { - id: NodeId::PLACEHOLDER, - span, - kind: ExprKind::Type(TypeExpr { - id: NodeId::PLACEHOLDER, - span, - name, - constraints, - value: Box::new_in(value, expander.heap), - body: Box::new_in(body, expander.heap), - }), - } + expr } /// Lowers a `type` call into a [`TypeExpr`]. From 51fe14eae787eb38896311007252503a8542fe41 Mon Sep 17 00:00:00 2001 From: Bilal Mahmoud <7252775+indietyp@users.noreply.github.com> Date: Mon, 15 Jun 2026 13:18:54 +0200 Subject: [PATCH 31/55] chore: lints --- libs/@local/hashql/ast/src/lower/expander/mod.rs | 3 +-- libs/@local/hashql/ast/src/lower/expander/newtype.rs | 6 +----- 2 files changed, 2 insertions(+), 7 deletions(-) diff --git a/libs/@local/hashql/ast/src/lower/expander/mod.rs b/libs/@local/hashql/ast/src/lower/expander/mod.rs index 8d00a2d88af..bce468f3418 100644 --- a/libs/@local/hashql/ast/src/lower/expander/mod.rs +++ b/libs/@local/hashql/ast/src/lower/expander/mod.rs @@ -24,11 +24,10 @@ use hashql_core::{ heap::{self, BumpAllocator}, module::{ self, Reference, Universe, - item::{IntrinsicItem, IntrinsicTypeItem, IntrinsicValueItem, Item, ItemKind}, + item::{IntrinsicItem, IntrinsicTypeItem, Item, ItemKind}, namespace::{ModuleNamespace, ResolutionMode, ResolveOptions}, }, symbol::{Ident, Symbol, sym}, - r#type::kind::IntrinsicType, }; use self::{ diff --git a/libs/@local/hashql/ast/src/lower/expander/newtype.rs b/libs/@local/hashql/ast/src/lower/expander/newtype.rs index 1d4736fecaa..1b0b6704d73 100644 --- a/libs/@local/hashql/ast/src/lower/expander/newtype.rs +++ b/libs/@local/hashql/ast/src/lower/expander/newtype.rs @@ -1,10 +1,6 @@ use core::mem; -use hashql_core::{ - heap::{self, BumpAllocator}, - module::Universe, - span::SpanId, -}; +use hashql_core::{heap::BumpAllocator, module::Universe, span::SpanId}; use super::Expander; use crate::{ From 76c6eaa78d1bdca949e2ef3a6d2c79b0ab915368 Mon Sep 17 00:00:00 2001 From: Bilal Mahmoud <7252775+indietyp@users.noreply.github.com> Date: Mon, 15 Jun 2026 13:45:51 +0200 Subject: [PATCH 32/55] feat: checkpoint --- .../references/compiletest-guide.md | 2 +- .../hashql/ast/src/lower/expander/access.rs | 4 +- .../hashql/ast/src/lower/expander/mod.rs | 6 + .../hashql/ast/src/lower/expander/newtype.rs | 1 + .../hashql/ast/src/lower/expander/type.rs | 1 + .../continue/unresolved-nested.stderr | 10 +- .../continue/unresolved-nested.stdout | 12 +- .../continue/unresolved-type.stderr | 42 +- .../continue/unresolved-type.stdout | 2 +- .../continue/unresolved-value.stderr | 21 +- .../continue/unresolved-value.stdout | 2 +- .../continue/use-not-found.jsonc | 2 +- .../continue/use-not-found.stderr | 27 +- .../generic-argument-absolute-path.stderr | 37 +- .../generic-argument-use-path.stderr | 35 +- .../import-resolver/glob-not-found.jsonc | 2 +- .../import-resolver/glob-not-found.stderr | 13 +- .../import-resolver/item-not-found.stderr | 9 +- .../import-resolver/module-not-found.jsonc | 2 +- .../import-resolver/module-not-found.stderr | 13 +- .../expander/import-resolver/rollback.stderr | 19 +- .../unresolver-variable.stderr | 15 +- .../alias-absolute-path.stdout | 60 +- .../pre-expansion-name-resolver/type-3.jsonc | 2 +- .../pre-expansion-name-resolver/type-3.stdout | 69 +- .../special-form-expander/access-1.jsonc | 2 +- .../special-form-expander/access-1.stderr | 8 +- .../special-form-expander/access-3.jsonc | 2 +- .../special-form-expander/access-3.stderr | 24 +- .../access-field-index-out-of-bounds.jsonc | 2 +- .../access-field-index-out-of-bounds.stderr | 7 +- .../access-field-literal-boolean.jsonc | 2 +- .../access-field-literal-boolean.stderr | 10 +- .../access-field-literal-string.jsonc | 2 +- .../access-field-literal-string.stderr | 10 +- ...access-field-literal-type-annotation.jsonc | 2 +- ...ccess-field-literal-type-annotation.stderr | 15 +- .../expander/special-form-expander/as-1.jsonc | 2 +- .../special-form-expander/as-1.stderr | 8 +- .../expander/special-form-expander/as-3.jsonc | 2 +- .../special-form-expander/as-3.stderr | 24 +- .../does-not-touch-non-kernel.stdout | 6 +- .../expander/special-form-expander/fn-3.jsonc | 2 +- .../special-form-expander/fn-3.stderr | 8 +- .../expander/special-form-expander/fn-5.jsonc | 2 +- .../special-form-expander/fn-5.stderr | 26 +- .../fn-generics-duplicates.jsonc | 2 +- .../fn-generics-duplicates.stderr | 55 +- .../fn-generics-literal.jsonc | 2 +- .../fn-generics-literal.stderr | 56 +- .../fn-generics-struct-literal.jsonc | 2 +- .../fn-generics-struct-literal.stderr | 60 +- .../fn-generics-struct-type.jsonc | 2 +- .../fn-generics-struct-type.stderr | 62 +- .../fn-generics-tuple-literal.jsonc | 2 +- .../fn-generics-tuple-literal.stderr | 56 +- .../fn-generics-tuple-path.jsonc | 2 +- .../fn-generics-tuple-path.stderr | 53 +- .../fn-generics-tuple-type.jsonc | 2 +- .../fn-generics-tuple-type.stderr | 54 +- .../fn-params-duplicates.jsonc | 2 +- .../fn-params-duplicates.stderr | 56 +- .../fn-params-tuple.jsonc | 2 +- .../fn-params-tuple.stderr | 53 +- .../fn-params-type.jsonc | 2 +- .../fn-params-type.stderr | 53 +- .../special-form-expander/generics.stderr | 55 +- .../expander/special-form-expander/if-1.jsonc | 2 +- .../special-form-expander/if-1.stderr | 10 +- .../expander/special-form-expander/if-4.jsonc | 2 +- .../special-form-expander/if-4.stderr | 28 +- .../special-form-expander/index-1.jsonc | 2 +- .../special-form-expander/index-1.stderr | 8 +- .../special-form-expander/index-3.jsonc | 2 +- .../special-form-expander/index-3.stderr | 24 +- .../special-form-expander/input-1.jsonc | 2 +- .../special-form-expander/input-1.stderr | 10 +- .../special-form-expander/input-4.jsonc | 2 +- .../special-form-expander/input-4.stderr | 28 +- .../labeled-argument.jsonc | 2 +- .../labeled-argument.stderr | 20 +- .../special-form-expander/let-2.jsonc | 2 +- .../special-form-expander/let-2.stderr | 10 +- .../special-form-expander/let-3.stdout | 6 +- .../special-form-expander/let-4.stdout | 10 +- .../special-form-expander/let-5.jsonc | 2 +- .../special-form-expander/let-5.stderr | 28 +- .../let-argument-not-ident.jsonc | 6 +- .../let-argument-not-ident.stderr | 24 +- .../let-argument-not-path.jsonc | 2 +- .../let-argument-not-path.stderr | 11 +- .../let-collect-all-errors.jsonc | 4 +- .../let-collect-all-errors.stderr | 22 +- .../special-form-expander/newtype-2.jsonc | 2 +- .../special-form-expander/newtype-2.stderr | 8 +- .../special-form-expander/newtype-3.stdout | 4 +- .../special-form-expander/newtype-4.jsonc | 2 +- .../special-form-expander/newtype-4.stderr | 26 +- .../newtype-collect-all-errors.jsonc | 4 +- .../newtype-collect-all-errors.stderr | 22 +- .../newtype-constraints.jsonc | 2 +- .../newtype-constraints.stdout | 10 +- .../not-enough-segments.stderr | 9 +- .../too-many-segments.stderr | 13 +- .../special-form-expander/type-2.jsonc | 2 +- .../special-form-expander/type-2.stderr | 8 +- .../special-form-expander/type-4.jsonc | 2 +- .../special-form-expander/type-4.stderr | 26 +- .../type-collect-all-errors.jsonc | 4 +- .../type-collect-all-errors.stderr | 22 +- .../type-expr-call-arbitrary.jsonc | 2 +- .../type-expr-call-arbitrary.stderr | 27 +- .../type-expr-call-not-path.jsonc | 6 +- .../type-expr-call-not-path.stderr | 44 +- .../type-expr-invalid.jsonc | 8 +- .../type-expr-invalid.stderr | 204 +- .../type-generic-absolute-path.jsonc | 4 +- .../type-generic-absolute-path.stderr | 8 +- .../type-generic-duplicate.jsonc | 2 +- .../type-generic-duplicate.stderr | 25 +- .../type-generic-generic-ident.jsonc | 2 +- .../type-generic-generic-ident.stderr | 16 +- .../type-generic-relative-path.jsonc | 2 +- .../type-generic-relative-path.stderr | 16 +- .../type-generic-struct.jsonc | 2 +- .../type-generic-struct.stderr | 16 +- .../special-form-expander/type-generic.stdout | 4 +- .../type-struct-has-type.jsonc | 2 +- .../type-struct-has-type.stderr | 42 +- .../type-tuple-has-type.jsonc | 2 +- .../type-tuple-has-type.stderr | 52 +- .../unknown-special-form-typo.stderr | 18 +- .../unknown-special-form.stderr | 12 +- .../special-form-expander/use-2.jsonc | 2 +- .../special-form-expander/use-2.stderr | 8 +- .../special-form-expander/use-4.jsonc | 2 +- .../special-form-expander/use-4.stderr | 26 +- .../use-glob-not-ident.jsonc | 2 +- .../use-glob-not-ident.stderr | 7 +- .../use-glob-not-star.jsonc | 2 +- .../use-glob-not-star.stderr | 10 +- .../special-form-expander/use-literal.jsonc | 2 +- .../special-form-expander/use-literal.stderr | 10 +- .../use-struct-literal.jsonc | 2 +- .../use-struct-literal.stderr | 44 +- .../use-struct-path.jsonc | 2 +- .../use-struct-path.stderr | 56 +- .../use-struct-type.stderr | 36 +- .../use-tuple-literal.jsonc | 2 +- .../use-tuple-literal.stderr | 33 +- .../use-tuple-path.jsonc | 2 +- .../use-tuple-path.stderr | 30 +- .../use-tuple-type.stderr | 30 +- .../tests/ui/lower/name-mangler/.spec.toml | 2 +- .../lower/name-mangler/fn-types-of-ret.stdout | 4 +- .../name-mangler/scopes-no-include.stdout | 4 +- ...pe-generics-interdependent-generics.stdout | 4 +- .../name-mangler/type-generics-nested.stdout | 8 +- .../lower/name-mangler/type-generics.stdout | 4 +- .../tests/ui/lower/node-renumberer/.spec.toml | 2 +- .../ast/tests/ui/lower/sanitizer/.spec.toml | 2 +- .../ui/lower/sanitizer/constraint.stderr | 12 +- .../special-form-type-position.stderr | 9 +- .../lower/sanitizer/special-form-value.stderr | 36 +- .../tests/ui/lower/type-extractor/.spec.toml | 2 +- .../lower/type-extractor/complex-types.stdout | 4 +- .../type-extractor/definition/.spec.toml | 2 +- .../global-generic-constraint-too-many.jsonc | 2 +- .../type-extractor/nested-type-nodes.stdout | 4 +- .../@local/hashql/compiletest/test-report.txt | 7673 +++++++++++++++++ .../hashql/core/src/module/namespace.rs | 5 + .../diagnostics/src/diagnostic/suggestion.rs | 8 +- .../alias-replacement/complex-mixed.stdout | 2 +- .../generic-reassignment.stderr | 17 +- .../alias-replacement/nested-aliases.stdout | 2 +- .../qualified-variable-alias.stdout | 5 +- .../ui/lower/ctor/too-many-arguments.jsonc | 2 +- .../inference/bind-arguments-explicit.stderr | 16 +- .../inference/intrinsics/assignment.stdout | 7 +- .../inference/intrinsics/re-assignment.stdout | 16 +- .../collect-custom-collect.stderr | 136 +- 181 files changed, 9448 insertions(+), 1008 deletions(-) create mode 100644 libs/@local/hashql/compiletest/test-report.txt diff --git a/.claude/skills/testing-hashql/references/compiletest-guide.md b/.claude/skills/testing-hashql/references/compiletest-guide.md index 1b2ceac669c..36e68b704ae 100644 --- a/.claude/skills/testing-hashql/references/compiletest-guide.md +++ b/.claude/skills/testing-hashql/references/compiletest-guide.md @@ -236,7 +236,7 @@ cargo run -p hashql-compiletest suites --json ### Suite Categories - `parse/*` - Parsing tests (e.g., `parse/syntax-dump`) -- `ast/lowering/*` - AST lowering phases +- `ast/lower/*` - AST lowering phases - `hir/lower/*` - HIR lowering phases - `hir/reify` - HIR generation from AST - `mir/*` - MIR passes and generation diff --git a/libs/@local/hashql/ast/src/lower/expander/access.rs b/libs/@local/hashql/ast/src/lower/expander/access.rs index 595133929ac..f115e394a34 100644 --- a/libs/@local/hashql/ast/src/lower/expander/access.rs +++ b/libs/@local/hashql/ast/src/lower/expander/access.rs @@ -27,10 +27,10 @@ fn argument_to_field<'heap, S>( ) -> Option> { // Integer literal for tuple field access if let ExprKind::Literal(literal) = &argument.value.kind { - if literal.r#type.is_some() { + if let Some(annotation) = &literal.r#type { expander .diagnostics - .push(error::field_literal_type_annotation(literal.span)); + .push(error::field_literal_type_annotation(annotation.span)); } let Primitive::Integer(integer) = literal.kind else { diff --git a/libs/@local/hashql/ast/src/lower/expander/mod.rs b/libs/@local/hashql/ast/src/lower/expander/mod.rs index bce468f3418..fd41e8a0cb1 100644 --- a/libs/@local/hashql/ast/src/lower/expander/mod.rs +++ b/libs/@local/hashql/ast/src/lower/expander/mod.rs @@ -408,4 +408,10 @@ where fn visit_expr(&mut self, expr: &mut node::expr::Expr<'heap>) { self.visit(expr); } + + fn visit_type(&mut self, r#type: &mut node::r#type::Type<'heap>) { + self.with_universe(Universe::Type, |this| { + visit::walk_type(this, &mut *r#type); + }); + } } diff --git a/libs/@local/hashql/ast/src/lower/expander/newtype.rs b/libs/@local/hashql/ast/src/lower/expander/newtype.rs index 1b0b6704d73..e7e5b64780f 100644 --- a/libs/@local/hashql/ast/src/lower/expander/newtype.rs +++ b/libs/@local/hashql/ast/src/lower/expander/newtype.rs @@ -12,6 +12,7 @@ use crate::{ expr::{CallExpr, Expr, ExprKind, NewTypeExpr, call::Argument}, id::NodeId, }, + visit::Visitor as _, }; fn lower_newtype_impl<'heap, S>( diff --git a/libs/@local/hashql/ast/src/lower/expander/type.rs b/libs/@local/hashql/ast/src/lower/expander/type.rs index 19fb20153a7..e54033ffe43 100644 --- a/libs/@local/hashql/ast/src/lower/expander/type.rs +++ b/libs/@local/hashql/ast/src/lower/expander/type.rs @@ -334,6 +334,7 @@ where // The constraints _have not yet_ been validated, this is on purpose, because we // must first convert them, now that they are converted, we can // validate them. + for constraint in constraints { if let Some(bound) = constraint.bound.as_mut() { expander.visit_type(bound); diff --git a/libs/@local/hashql/ast/tests/ui/lower/expander/import-resolver/continue/unresolved-nested.stderr b/libs/@local/hashql/ast/tests/ui/lower/expander/import-resolver/continue/unresolved-nested.stderr index e4c88b40f45..18bb80302dd 100644 --- a/libs/@local/hashql/ast/tests/ui/lower/expander/import-resolver/continue/unresolved-nested.stderr +++ b/libs/@local/hashql/ast/tests/ui/lower/expander/import-resolver/continue/unresolved-nested.stderr @@ -1,7 +1,7 @@ -error[import-resolver::unresolved-variable]: Unresolved variable +error[expander::unresolved-variable]: Unresolved variable ╭▸ -5 │ "Foo", - │ ━━━ Cannot find variable 'Bar' +6 │ "Foo", + │ ━━━ cannot find `Bar` in this scope │ - ├ help: The name 'Bar' doesn't exist in this scope. - ╰ note: Variables must be defined before they can be used. This could be a typo, a variable used outside its scope, or a missing declaration. If it's a function or type from another module, you might need to import it first. \ No newline at end of file + ├ help: check the spelling, or import the name with a `use` statement + ╰ note: this could be a typo, a name used outside its scope, or a missing declaration; if it is a function or type from another module, you may need to import it first \ No newline at end of file diff --git a/libs/@local/hashql/ast/tests/ui/lower/expander/import-resolver/continue/unresolved-nested.stdout b/libs/@local/hashql/ast/tests/ui/lower/expander/import-resolver/continue/unresolved-nested.stdout index 29720f36808..4027d81fecd 100644 --- a/libs/@local/hashql/ast/tests/ui/lower/expander/import-resolver/continue/unresolved-nested.stdout +++ b/libs/@local/hashql/ast/tests/ui/lower/expander/import-resolver/continue/unresolved-nested.stdout @@ -3,12 +3,10 @@ Expr#4294967040@19 TypeExpr#4294967040@19 (name: Foo) GenericConstraint#4294967040@10 (name: T) Type#4294967040@9 - TypeKind (Dummy) - Type#4294967040@16 - TypeKind (Path) - Path#4294967040@16 (rooted: true) - PathSegment#4294967040@15 (name: kernel) - PathSegment#4294967040@15 (name: type) - PathSegment#4294967040@15 (name: Number) + TypeKind (Path) + Path#4294967040@9 (rooted: false) + PathSegment#4294967040@8 (name: Bar) + Type#4294967040@4294967295 + TypeKind (Dummy) Expr#4294967040@18 ExprKind (Underscore) diff --git a/libs/@local/hashql/ast/tests/ui/lower/expander/import-resolver/continue/unresolved-type.stderr b/libs/@local/hashql/ast/tests/ui/lower/expander/import-resolver/continue/unresolved-type.stderr index 25feff0dc70..3373129c383 100644 --- a/libs/@local/hashql/ast/tests/ui/lower/expander/import-resolver/continue/unresolved-type.stderr +++ b/libs/@local/hashql/ast/tests/ui/lower/expander/import-resolver/continue/unresolved-type.stderr @@ -1,18 +1,28 @@ -error[import-resolver::unresolved-variable]: Unresolved variable +error[expander::unresolved-variable]: Unresolved variable ╭▸ -6 │ "T", - │ ━ Cannot find variable 'T' +7 │ "T", + │ ━ cannot find `T` in this scope │ - ├ help: The name 'T' doesn't exist in this scope. - │ - │ Did you mean one of these local variables: - │ - Foo - │ - │ Or perhaps you meant one of these imported items: - │ - Result - │ - Some - │ - String - │ - Unknown - │ - Url - │ (13 more available) - ╰ note: Variables must be defined before they can be used. This could be a typo, a variable used outside its scope, or a missing declaration. If it's a function or type from another module, you might need to import it first. \ No newline at end of file + ╰ note: this could be a typo, a name used outside its scope, or a missing declaration; if it is a function or type from another module, you may need to import it first +help: a similar local binding exists + ╭╴ +7 - "T", +7 + "Foo", + ╰╴ +help: a similar imported name exists + ╭╴ +7 - "T", +7 + "String", + ├╴ +7 - "T", +7 + "Union", + ├╴ +7 - "T", +7 + "Unknown", + ├╴ +7 - "T", +7 + "Url", + ├╴ +7 - "T", +7 + "|", + ╰╴ \ No newline at end of file diff --git a/libs/@local/hashql/ast/tests/ui/lower/expander/import-resolver/continue/unresolved-type.stdout b/libs/@local/hashql/ast/tests/ui/lower/expander/import-resolver/continue/unresolved-type.stdout index 910dbbe538c..707039108af 100644 --- a/libs/@local/hashql/ast/tests/ui/lower/expander/import-resolver/continue/unresolved-type.stdout +++ b/libs/@local/hashql/ast/tests/ui/lower/expander/import-resolver/continue/unresolved-type.stdout @@ -1,7 +1,7 @@ Expr#4294967040@14 ExprKind (Type) TypeExpr#4294967040@14 (name: Foo) - Type#4294967040@11 + Type#4294967040@4294967295 TypeKind (Dummy) Expr#4294967040@13 ExprKind (Underscore) diff --git a/libs/@local/hashql/ast/tests/ui/lower/expander/import-resolver/continue/unresolved-value.stderr b/libs/@local/hashql/ast/tests/ui/lower/expander/import-resolver/continue/unresolved-value.stderr index 9cddf97bb09..2090c6c7cfe 100644 --- a/libs/@local/hashql/ast/tests/ui/lower/expander/import-resolver/continue/unresolved-value.stderr +++ b/libs/@local/hashql/ast/tests/ui/lower/expander/import-resolver/continue/unresolved-value.stderr @@ -1,14 +1,11 @@ -error[import-resolver::unresolved-variable]: Unresolved variable +error[expander::unresolved-variable]: Unresolved variable ╭▸ -4 │ "shl", - │ ━━━ Cannot find variable 'shl' +5 │ "shl", + │ ━━━ cannot find `shl` in this scope │ - ├ help: The name 'shl' doesn't exist in this scope. - │ - │ Items with a similar name exist in other modules: - │ - ::core::bits::shl - │ - │ To use an item, you can either: - │ 1. Import it: use ::core::bits::shl in - │ 2. Use fully qualified path: ::core::bits::shl - ╰ note: Variables must be defined before they can be used. This could be a typo, a variable used outside its scope, or a missing declaration. If it's a function or type from another module, you might need to import it first. \ No newline at end of file + ├ help: bring it into scope: `use ::core::bits::shl in` + ╰ note: this could be a typo, a name used outside its scope, or a missing declaration; if it is a function or type from another module, you may need to import it first +help: use one of these fully qualified paths + ╭╴ +5 │ "::core::bits::shl", + ╰╴ ++++++++++++++ \ No newline at end of file diff --git a/libs/@local/hashql/ast/tests/ui/lower/expander/import-resolver/continue/unresolved-value.stdout b/libs/@local/hashql/ast/tests/ui/lower/expander/import-resolver/continue/unresolved-value.stdout index c0320a1ab26..0ecccdd28e0 100644 --- a/libs/@local/hashql/ast/tests/ui/lower/expander/import-resolver/continue/unresolved-value.stdout +++ b/libs/@local/hashql/ast/tests/ui/lower/expander/import-resolver/continue/unresolved-value.stdout @@ -1,7 +1,7 @@ Expr#4294967040@8 ExprKind (Call) CallExpr#4294967040@8 - Expr#4294967040@3 + Expr#4294967040@4294967295 ExprKind (Dummy) Argument#4294967040@5 Expr#4294967040@5 diff --git a/libs/@local/hashql/ast/tests/ui/lower/expander/import-resolver/continue/use-not-found.jsonc b/libs/@local/hashql/ast/tests/ui/lower/expander/import-resolver/continue/use-not-found.jsonc index 201624c5d1e..e986ddf5a33 100644 --- a/libs/@local/hashql/ast/tests/ui/lower/expander/import-resolver/continue/use-not-found.jsonc +++ b/libs/@local/hashql/ast/tests/ui/lower/expander/import-resolver/continue/use-not-found.jsonc @@ -4,7 +4,7 @@ [ "use", "kernel::foo", - //~^ ERROR Module 'foo' not found + //~^ ERROR cannot find module `foo` "*", ["add", { "#literal": 1 }, { "#literal": 2 }] ] diff --git a/libs/@local/hashql/ast/tests/ui/lower/expander/import-resolver/continue/use-not-found.stderr b/libs/@local/hashql/ast/tests/ui/lower/expander/import-resolver/continue/use-not-found.stderr index 16771f2c5c4..baddf10c51c 100644 --- a/libs/@local/hashql/ast/tests/ui/lower/expander/import-resolver/continue/use-not-found.stderr +++ b/libs/@local/hashql/ast/tests/ui/lower/expander/import-resolver/continue/use-not-found.stderr @@ -1,10 +1,21 @@ -error[import-resolver::unresolved-import]: Unresolved import +error[expander::unresolved-variable]: Unresolved variable ╭▸ -5 │ "kernel::foo", - │ ┬───────┯━━ - │ │ │ - │ │ Module 'foo' not found - │ In this path +9 │ ["add", { "#literal": 1 }, { "#literal": 2 }] + │ ━━━ cannot find `add` in this scope │ - ├ help: The module 'kernel::foo' doesn't exist in this scope. Check the spelling and ensure the module is available. - ╰ note: Modules must be properly defined and exported from their parent module to be accessible. \ No newline at end of file + ├ help: bring it into scope: `use ::core::math::add in` + ╰ note: this could be a typo, a name used outside its scope, or a missing declaration; if it is a function or type from another module, you may need to import it first +help: use one of these fully qualified paths + ╭╴ +9 │ ["::core::math::add", { "#literal": 1 }, { "#literal": 2 }] + ╰╴ ++++++++++++++ + +error[expander::module-not-found]: Module not found + ╭▸ +6 │ "kernel::foo", + │ ┬───── ━━━ cannot find module `foo` in `kernel` + │ │ + │ looked in this module + │ + ├ help: check the module name and ensure it is exported from its parent + ╰ note: only exported sub-modules are reachable via `::` \ No newline at end of file diff --git a/libs/@local/hashql/ast/tests/ui/lower/expander/import-resolver/generic-argument-absolute-path.stderr b/libs/@local/hashql/ast/tests/ui/lower/expander/import-resolver/generic-argument-absolute-path.stderr index 86516eb6459..1ee0574f8bc 100644 --- a/libs/@local/hashql/ast/tests/ui/lower/expander/import-resolver/generic-argument-absolute-path.stderr +++ b/libs/@local/hashql/ast/tests/ui/lower/expander/import-resolver/generic-argument-absolute-path.stderr @@ -1,12 +1,31 @@ -error[import-resolver::generic-arguments-in-module]: Generic arguments only allowed in final path segment +error[expander::generic-arguments-in-module]: Generic arguments in module path ╭▸ 3 │ ["::math::add", { "#literal": 2 }, { "#literal": 3 }] - │ ━ Remove this generic argument + │ ━ generic argument not allowed here │ - ├ help: Generic arguments can only appear on the final type in a path. Remove them from this module segment or move them to the final type in the path. - │ - │ Correct: `module::submodule::Type` - │ Incorrect: `module::submodule::Type` - ╰ note: Module paths don't accept generic parameters because modules themselves aren't generic. Only the final type in a path can have generic parameters. - - The path resolution happens before any generic type checking, so generic arguments can only be applied after the item is found. \ No newline at end of file + ├ help: move the generic arguments to the final segment of the path, or remove them + ╰ note: modules are not generic; only the final item in a path can be parameterized + +error[expander::unresolved-variable]: Unresolved variable + ╭▸ +3 │ ["::math::add", { "#literal": 2 }, { "#literal": 3 }] + │ ━ cannot find `T` in this scope + │ + ╰ note: this could be a typo, a name used outside its scope, or a missing declaration; if it is a function or type from another module, you may need to import it first +help: a similar imported name exists + ╭╴ +3 - ["::math::add", { "#literal": 2 }, { "#literal": 3 }] +3 + ["::math::add", { "#literal": 2 }, { "#literal": 3 }] + ├╴ +3 - ["::math::add", { "#literal": 2 }, { "#literal": 3 }] +3 + ["::math::add", { "#literal": 2 }, { "#literal": 3 }] + ├╴ +3 - ["::math::add", { "#literal": 2 }, { "#literal": 3 }] +3 + ["::math::add", { "#literal": 2 }, { "#literal": 3 }] + ├╴ +3 - ["::math::add", { "#literal": 2 }, { "#literal": 3 }] +3 + ["::math::add", { "#literal": 2 }, { "#literal": 3 }] + ├╴ +3 - ["::math::add", { "#literal": 2 }, { "#literal": 3 }] +3 + ["::math<|>::add", { "#literal": 2 }, { "#literal": 3 }] + ╰╴ \ No newline at end of file diff --git a/libs/@local/hashql/ast/tests/ui/lower/expander/import-resolver/generic-argument-use-path.stderr b/libs/@local/hashql/ast/tests/ui/lower/expander/import-resolver/generic-argument-use-path.stderr index ec9fba73da4..4c5c0caa4a5 100644 --- a/libs/@local/hashql/ast/tests/ui/lower/expander/import-resolver/generic-argument-use-path.stderr +++ b/libs/@local/hashql/ast/tests/ui/lower/expander/import-resolver/generic-argument-use-path.stderr @@ -1,10 +1,31 @@ -error[special-form-expander::use-path-with-generics]: Use path with generic arguments +error[expander::item-not-found]: Item not found ╭▸ 3 │ ["use", "kernel::type", { "#tuple": ["T"] }, "_"] - │ ┯━━━━━━━┬────── - │ │ │ - │ │ Generic arguments are not allowed here - │ Remove these generic arguments + │ ┬─── ━ cannot find `T` in module `kernel::type` + │ │ + │ looked in this module + ╰╴ +help: a similar item exists in this module + ╭╴ +3 - ["use", "kernel::type", { "#tuple": ["T"] }, "_"] +3 + ["use", "kernel::type", { "#tuple": ["Number"] }, "_"] + ├╴ +3 - ["use", "kernel::type", { "#tuple": ["T"] }, "_"] +3 + ["use", "kernel::type", { "#tuple": ["String"] }, "_"] + ├╴ +3 - ["use", "kernel::type", { "#tuple": ["T"] }, "_"] +3 + ["use", "kernel::type", { "#tuple": ["Union"] }, "_"] + ├╴ +3 - ["use", "kernel::type", { "#tuple": ["T"] }, "_"] +3 + ["use", "kernel::type", { "#tuple": ["Unknown"] }, "_"] + ├╴ +3 - ["use", "kernel::type", { "#tuple": ["T"] }, "_"] +3 + ["use", "kernel::type", { "#tuple": ["|"] }, "_"] + ╰╴ + +error[expander::use-path-generic-arguments]: Generic arguments in use path + ╭▸ +3 │ ["use", "kernel::type", { "#tuple": ["T"] }, "_"] + │ ━━━━━━━━━━━━━━━ generic arguments are not allowed in `use` paths │ - ├ help: The 'use' special form does not support generic arguments in import paths. Remove all generic arguments from the path. - ╰ note: Use statements in HashQL can only import modules or specific symbols, but cannot specify generic parameters during import. \ No newline at end of file + ╰ help: remove the generic arguments; `use` imports modules and items, which do not take type parameters at the import site \ No newline at end of file diff --git a/libs/@local/hashql/ast/tests/ui/lower/expander/import-resolver/glob-not-found.jsonc b/libs/@local/hashql/ast/tests/ui/lower/expander/import-resolver/glob-not-found.jsonc index 8496dae28b8..0d7e82377f3 100644 --- a/libs/@local/hashql/ast/tests/ui/lower/expander/import-resolver/glob-not-found.jsonc +++ b/libs/@local/hashql/ast/tests/ui/lower/expander/import-resolver/glob-not-found.jsonc @@ -1,4 +1,4 @@ //@ run: fail //@ description: Tests that importing from a non-existent module produces an appropriate error with suggestions ["use", "kernel::foo", "*", "_"] -//~^ ERROR Module 'foo' not found +//~^ ERROR cannot find module `foo` diff --git a/libs/@local/hashql/ast/tests/ui/lower/expander/import-resolver/glob-not-found.stderr b/libs/@local/hashql/ast/tests/ui/lower/expander/import-resolver/glob-not-found.stderr index 00a417bae80..e0f15939bd1 100644 --- a/libs/@local/hashql/ast/tests/ui/lower/expander/import-resolver/glob-not-found.stderr +++ b/libs/@local/hashql/ast/tests/ui/lower/expander/import-resolver/glob-not-found.stderr @@ -1,10 +1,9 @@ -error[import-resolver::unresolved-import]: Unresolved import +error[expander::module-not-found]: Module not found ╭▸ 3 │ ["use", "kernel::foo", "*", "_"] - │ ┬───────┯━━ - │ │ │ - │ │ Module 'foo' not found - │ In this path + │ ┬───── ━━━ cannot find module `foo` in `kernel` + │ │ + │ looked in this module │ - ├ help: The module 'kernel::foo' doesn't exist in this scope. Check the spelling and ensure the module is available. - ╰ note: Modules must be properly defined and exported from their parent module to be accessible. \ No newline at end of file + ├ help: check the module name and ensure it is exported from its parent + ╰ note: only exported sub-modules are reachable via `::` \ No newline at end of file diff --git a/libs/@local/hashql/ast/tests/ui/lower/expander/import-resolver/item-not-found.stderr b/libs/@local/hashql/ast/tests/ui/lower/expander/import-resolver/item-not-found.stderr index 447389a421d..4d0dc7bb262 100644 --- a/libs/@local/hashql/ast/tests/ui/lower/expander/import-resolver/item-not-found.stderr +++ b/libs/@local/hashql/ast/tests/ui/lower/expander/import-resolver/item-not-found.stderr @@ -1,7 +1,8 @@ -error[import-resolver::unresolved-import]: Unresolved import +error[expander::item-not-found]: Item not found ╭▸ 3 │ ["use", "core::bits", { "#tuple": ["lshift"] }, "_"] - │ ──── This module ━━━━━━ 'lshift' not found in module 'core::bits' + │ ┬─── ━━━━━━ cannot find `lshift` in module `core::bits` + │ │ + │ looked in this module │ - ├ help: Check the spelling and ensure the item is exported and available in this context. - ╰ note: Items must be defined and accessible from the importing location. Make sure the item exists and is public. \ No newline at end of file + ╰ help: check the spelling and ensure the item is exported \ No newline at end of file diff --git a/libs/@local/hashql/ast/tests/ui/lower/expander/import-resolver/module-not-found.jsonc b/libs/@local/hashql/ast/tests/ui/lower/expander/import-resolver/module-not-found.jsonc index ec8b77b6c9d..4918886a8b6 100644 --- a/libs/@local/hashql/ast/tests/ui/lower/expander/import-resolver/module-not-found.jsonc +++ b/libs/@local/hashql/ast/tests/ui/lower/expander/import-resolver/module-not-found.jsonc @@ -1,4 +1,4 @@ //@ run: fail //@ description: Tests that importing from a non-existent module produces an appropriate error with suggestions ["use", "kernel::foo", { "#tuple": ["baz"] }, "_"] -//~^ ERROR Module 'foo' not found +//~^ ERROR cannot find module `foo` diff --git a/libs/@local/hashql/ast/tests/ui/lower/expander/import-resolver/module-not-found.stderr b/libs/@local/hashql/ast/tests/ui/lower/expander/import-resolver/module-not-found.stderr index 175adbbbc8e..a6d78041561 100644 --- a/libs/@local/hashql/ast/tests/ui/lower/expander/import-resolver/module-not-found.stderr +++ b/libs/@local/hashql/ast/tests/ui/lower/expander/import-resolver/module-not-found.stderr @@ -1,10 +1,9 @@ -error[import-resolver::unresolved-import]: Unresolved import +error[expander::module-not-found]: Module not found ╭▸ 3 │ ["use", "kernel::foo", { "#tuple": ["baz"] }, "_"] - │ ┬───────┯━━ - │ │ │ - │ │ Module 'foo' not found - │ In this path + │ ┬───── ━━━ cannot find module `foo` in `kernel` + │ │ + │ looked in this module │ - ├ help: The module 'kernel::foo' doesn't exist in this scope. Check the spelling and ensure the module is available. - ╰ note: Modules must be properly defined and exported from their parent module to be accessible. \ No newline at end of file + ├ help: check the module name and ensure it is exported from its parent + ╰ note: only exported sub-modules are reachable via `::` \ No newline at end of file diff --git a/libs/@local/hashql/ast/tests/ui/lower/expander/import-resolver/rollback.stderr b/libs/@local/hashql/ast/tests/ui/lower/expander/import-resolver/rollback.stderr index dd377a57377..51808c1fe9e 100644 --- a/libs/@local/hashql/ast/tests/ui/lower/expander/import-resolver/rollback.stderr +++ b/libs/@local/hashql/ast/tests/ui/lower/expander/import-resolver/rollback.stderr @@ -1,14 +1,11 @@ -error[import-resolver::unresolved-variable]: Unresolved variable +error[expander::unresolved-variable]: Unresolved variable ╭▸ 7 │ "shl" - │ ━━━ Cannot find variable 'shl' + │ ━━━ cannot find `shl` in this scope │ - ├ help: The name 'shl' doesn't exist in this scope. - │ - │ Items with a similar name exist in other modules: - │ - ::core::bits::shl - │ - │ To use an item, you can either: - │ 1. Import it: use ::core::bits::shl in - │ 2. Use fully qualified path: ::core::bits::shl - ╰ note: Variables must be defined before they can be used. This could be a typo, a variable used outside its scope, or a missing declaration. If it's a function or type from another module, you might need to import it first. \ No newline at end of file + ├ help: bring it into scope: `use ::core::bits::shl in` + ╰ note: this could be a typo, a name used outside its scope, or a missing declaration; if it is a function or type from another module, you may need to import it first +help: use one of these fully qualified paths + ╭╴ +7 │ "::core::bits::shl" + ╰╴ ++++++++++++++ \ No newline at end of file diff --git a/libs/@local/hashql/ast/tests/ui/lower/expander/import-resolver/unresolver-variable.stderr b/libs/@local/hashql/ast/tests/ui/lower/expander/import-resolver/unresolver-variable.stderr index 4ae61191046..1b458591446 100644 --- a/libs/@local/hashql/ast/tests/ui/lower/expander/import-resolver/unresolver-variable.stderr +++ b/libs/@local/hashql/ast/tests/ui/lower/expander/import-resolver/unresolver-variable.stderr @@ -1,10 +1,11 @@ -error[import-resolver::unresolved-variable]: Unresolved variable +error[expander::unresolved-variable]: Unresolved variable ╭▸ 11 │ "föo" - │ ━━━ Cannot find variable 'föo' + │ ━━━ cannot find `föo` in this scope │ - ├ help: The name 'föo' doesn't exist in this scope. - │ - │ Did you mean one of these local variables: - │ - foo - ╰ note: Variables must be defined before they can be used. This could be a typo, a variable used outside its scope, or a missing declaration. If it's a function or type from another module, you might need to import it first. \ No newline at end of file + ╰ note: this could be a typo, a name used outside its scope, or a missing declaration; if it is a function or type from another module, you may need to import it first +help: a similar local binding exists + ╭╴ +11 - "föo" +11 + "foo" + ╰╴ \ No newline at end of file diff --git a/libs/@local/hashql/ast/tests/ui/lower/expander/pre-expansion-name-resolver/alias-absolute-path.stdout b/libs/@local/hashql/ast/tests/ui/lower/expander/pre-expansion-name-resolver/alias-absolute-path.stdout index b7e15b93a7f..29c004f34b0 100644 --- a/libs/@local/hashql/ast/tests/ui/lower/expander/pre-expansion-name-resolver/alias-absolute-path.stdout +++ b/libs/@local/hashql/ast/tests/ui/lower/expander/pre-expansion-name-resolver/alias-absolute-path.stdout @@ -1,43 +1,21 @@ -Expr#4294967040@25 +Expr#4294967040@24 ExprKind (Call) - CallExpr#4294967040@25 - Expr#4294967040@3 + CallExpr#4294967040@24 + Expr#4294967040@19 ExprKind (Path) - Path#4294967040@3 (rooted: true) - PathSegment#4294967040@2 (name: kernel) - PathSegment#4294967040@2 (name: special_form) - PathSegment#4294967040@2 (name: let) - Argument#4294967040@7 - Expr#4294967040@7 - ExprKind (Path) - Path#4294967040@7 (rooted: false) - PathSegment#4294967040@6 (name: a) - Argument#4294967040@15 - Expr#4294967040@15 - ExprKind (Path) - Path#4294967040@15 (rooted: true) - PathSegment#4294967040@10 (name: core) - PathSegment#4294967040@12 (name: math) - PathSegment#4294967040@14 (name: add) - Argument#4294967040@24 - Expr#4294967040@24 - ExprKind (Call) - CallExpr#4294967040@24 - Expr#4294967040@19 - ExprKind (Path) - Path#4294967040@19 (rooted: true) - PathSegment#4294967040@18 (name: core) - PathSegment#4294967040@18 (name: math) - PathSegment#4294967040@18 (name: add) - Argument#4294967040@21 - Expr#4294967040@21 - ExprKind (Literal) - LiteralExpr#4294967040@20 - Primitive (Integer) - Integer (1) - Argument#4294967040@23 - Expr#4294967040@23 - ExprKind (Literal) - LiteralExpr#4294967040@22 - Primitive (Integer) - Integer (2) + Path#4294967040@19 (rooted: true) + PathSegment#4294967040@18 (name: core) + PathSegment#4294967040@18 (name: math) + PathSegment#4294967040@18 (name: add) + Argument#4294967040@21 + Expr#4294967040@21 + ExprKind (Literal) + LiteralExpr#4294967040@20 + Primitive (Integer) + Integer (1) + Argument#4294967040@23 + Expr#4294967040@23 + ExprKind (Literal) + LiteralExpr#4294967040@22 + Primitive (Integer) + Integer (2) diff --git a/libs/@local/hashql/ast/tests/ui/lower/expander/pre-expansion-name-resolver/type-3.jsonc b/libs/@local/hashql/ast/tests/ui/lower/expander/pre-expansion-name-resolver/type-3.jsonc index 21c2cba1d15..f518a27b03e 100644 --- a/libs/@local/hashql/ast/tests/ui/lower/expander/pre-expansion-name-resolver/type-3.jsonc +++ b/libs/@local/hashql/ast/tests/ui/lower/expander/pre-expansion-name-resolver/type-3.jsonc @@ -1,3 +1,3 @@ //@ run: pass //@ description: Test that `type/3` is resolved to `::kernel::special_form::type` -["type", "a", "b", ["+", { "#literal": 2 }, { "#literal": 3 }]] +["type", "a", "Integer", ["+", { "#literal": 2 }, { "#literal": 3 }]] diff --git a/libs/@local/hashql/ast/tests/ui/lower/expander/pre-expansion-name-resolver/type-3.stdout b/libs/@local/hashql/ast/tests/ui/lower/expander/pre-expansion-name-resolver/type-3.stdout index aca18297238..6b27ddc6d62 100644 --- a/libs/@local/hashql/ast/tests/ui/lower/expander/pre-expansion-name-resolver/type-3.stdout +++ b/libs/@local/hashql/ast/tests/ui/lower/expander/pre-expansion-name-resolver/type-3.stdout @@ -1,41 +1,30 @@ Expr#4294967040@21 - ExprKind (Call) - CallExpr#4294967040@21 - Expr#4294967040@3 - ExprKind (Path) - Path#4294967040@3 (rooted: true) - PathSegment#4294967040@2 (name: kernel) - PathSegment#4294967040@2 (name: special_form) - PathSegment#4294967040@2 (name: type) - Argument#4294967040@7 - Expr#4294967040@7 - ExprKind (Path) - Path#4294967040@7 (rooted: false) - PathSegment#4294967040@6 (name: a) - Argument#4294967040@11 - Expr#4294967040@11 - ExprKind (Path) - Path#4294967040@11 (rooted: false) - PathSegment#4294967040@10 (name: b) - Argument#4294967040@20 - Expr#4294967040@20 - ExprKind (Call) - CallExpr#4294967040@20 - Expr#4294967040@15 - ExprKind (Path) - Path#4294967040@15 (rooted: true) - PathSegment#4294967040@14 (name: core) - PathSegment#4294967040@14 (name: math) - PathSegment#4294967040@14 (name: add) - Argument#4294967040@17 - Expr#4294967040@17 - ExprKind (Literal) - LiteralExpr#4294967040@16 - Primitive (Integer) - Integer (2) - Argument#4294967040@19 - Expr#4294967040@19 - ExprKind (Literal) - LiteralExpr#4294967040@18 - Primitive (Integer) - Integer (3) + ExprKind (Type) + TypeExpr#4294967040@21 (name: a) + Type#4294967040@11 + TypeKind (Path) + Path#4294967040@11 (rooted: true) + PathSegment#4294967040@10 (name: kernel) + PathSegment#4294967040@10 (name: type) + PathSegment#4294967040@10 (name: Integer) + Expr#4294967040@20 + ExprKind (Call) + CallExpr#4294967040@20 + Expr#4294967040@15 + ExprKind (Path) + Path#4294967040@15 (rooted: true) + PathSegment#4294967040@14 (name: core) + PathSegment#4294967040@14 (name: math) + PathSegment#4294967040@14 (name: add) + Argument#4294967040@17 + Expr#4294967040@17 + ExprKind (Literal) + LiteralExpr#4294967040@16 + Primitive (Integer) + Integer (2) + Argument#4294967040@19 + Expr#4294967040@19 + ExprKind (Literal) + LiteralExpr#4294967040@18 + Primitive (Integer) + Integer (3) diff --git a/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/access-1.jsonc b/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/access-1.jsonc index f6cc8513ce4..1c3013eed75 100644 --- a/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/access-1.jsonc +++ b/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/access-1.jsonc @@ -1,4 +1,4 @@ //@ run: fail //@ description: access/1 should error out ["::kernel::special_form::access", "x"] -//~^ ERROR Add missing arguments +//~^ ERROR expected 2 arguments to `.`, found 1 diff --git a/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/access-1.stderr b/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/access-1.stderr index 95e4afe65bd..929d2674f9c 100644 --- a/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/access-1.stderr +++ b/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/access-1.stderr @@ -1,7 +1,7 @@ -error[special-form-expander::special-form-argument-length]: Incorrect number of arguments for special form +error[expander::invalid-argument-count]: Invalid argument count ╭▸ 3 │ ["::kernel::special_form::access", "x"] - │ ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ Add missing arguments + │ ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ expected 2 arguments to `.`, found 1 │ - ├ help: The access/2 form should look like: (. object field) - ╰ note: The access function has 1 variant: access/2 \ No newline at end of file + ├ help: use `(. value field)` + ╰ note: the first argument is the value and the second is the field name or index \ No newline at end of file diff --git a/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/access-3.jsonc b/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/access-3.jsonc index 1d33c5afb63..5934d367ee7 100644 --- a/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/access-3.jsonc +++ b/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/access-3.jsonc @@ -5,5 +5,5 @@ "x", "y", "z" - //~^ ERROR Remove this argument + //~^ ERROR unexpected argument ] diff --git a/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/access-3.stderr b/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/access-3.stderr index 97af653e0ad..33589f2dce1 100644 --- a/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/access-3.stderr +++ b/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/access-3.stderr @@ -1,14 +1,14 @@ -error[special-form-expander::special-form-argument-length]: Incorrect number of arguments for special form +error[expander::invalid-argument-count]: Invalid argument count ╭▸ -3 │ ┌ [ -4 │ │ "::kernel::special_form::access", -5 │ │ "x", -6 │ │ "y", -7 │ │ "z" - │ │ ━ Remove this argument -8 │ │ //~^ ERROR Remove this argument -9 │ │ ] - │ └─┘ In this `access` special form call +3 │ ┏ [ +4 │ ┃ "::kernel::special_form::access", +5 │ ┃ "x", +6 │ ┃ "y", +7 │ ┃ "z" + │ ┃ ─ unexpected argument +8 │ ┃ //~^ ERROR unexpected argument +9 │ ┃ ] + │ ┗━┛ expected 2 arguments to `.`, found 3 │ - ├ help: The access/2 form should look like: (. object field) - ╰ note: The access function has 1 variant: access/2 \ No newline at end of file + ├ help: use `(. value field)` + ╰ note: the first argument is the value and the second is the field name or index \ No newline at end of file diff --git a/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/access-field-index-out-of-bounds.jsonc b/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/access-field-index-out-of-bounds.jsonc index 2d51fb7d06e..a45b32c3f55 100644 --- a/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/access-field-index-out-of-bounds.jsonc +++ b/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/access-field-index-out-of-bounds.jsonc @@ -1,4 +1,4 @@ //@ run: fail //@ description: Field index out of bounds should error ["::kernel::special_form::access", "data", { "#literal": 18446744073709551616 }] -//~^ ERROR Use a valid field index within usize bounds +//~^ ERROR field index is out of bounds diff --git a/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/access-field-index-out-of-bounds.stderr b/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/access-field-index-out-of-bounds.stderr index 4c3afe10ee4..80a6cef0ca7 100644 --- a/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/access-field-index-out-of-bounds.stderr +++ b/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/access-field-index-out-of-bounds.stderr @@ -1,7 +1,6 @@ -error[special-form-expander::field-index-out-of-bounds]: Field index out of bounds +error[expander::field-index-out-of-bounds]: Field index out of bounds ╭▸ 3 │ ["::kernel::special_form::access", "data", { "#literal": 18446744073709551616 }] - │ ━━━━━━━━━━━━━━━━━━━━ Use a valid field index within usize bounds + │ ━━━━━━━━━━━━━━━━━━━━ field index is out of bounds │ - ├ help: Field indices must be non-negative integers that fit within the bounds of usize. Very large numbers or negative numbers cannot be used as field indices. - ╰ note: Field indexing in HashQL uses zero-based indexing where the first field is at index 0, the second at index 1, and so on. The maximum valid index depends on the system's architecture, which is 64-bit. \ No newline at end of file + ╰ help: use a non-negative integer that fits within platform bounds \ No newline at end of file diff --git a/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/access-field-literal-boolean.jsonc b/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/access-field-literal-boolean.jsonc index 19d39c52a1b..9700f27ea38 100644 --- a/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/access-field-literal-boolean.jsonc +++ b/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/access-field-literal-boolean.jsonc @@ -1,4 +1,4 @@ //@ run: fail //@ description: Field access with boolean literal should error ["::kernel::special_form::access", "data", { "#literal": true }] -//~^ ERROR Use an integer literal here +//~^ ERROR expected an integer for field indexing diff --git a/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/access-field-literal-boolean.stderr b/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/access-field-literal-boolean.stderr index 3ec8e549e4a..b775a33892e 100644 --- a/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/access-field-literal-boolean.stderr +++ b/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/access-field-literal-boolean.stderr @@ -1,10 +1,6 @@ -error[special-form-expander::invalid-field-literal-type]: Invalid field literal type +error[expander::invalid-field-literal-type]: Invalid field literal type ╭▸ 3 │ ["::kernel::special_form::access", "data", { "#literal": true }] - │ ━━━━ Use an integer literal here + │ ━━━━ expected an integer for field indexing │ - ├ help: Field access using literals requires an integer literal that specifies the field index. Other literal types like strings, booleans, or numbers cannot be used for field indexing. - ╰ note: Valid field access examples: - - (access tuple 0) - accesses first field - - (access record 2) - accesses third field - - (access data my_field) - accesses named field \ No newline at end of file + ╰ help: use an integer index like `0` for tuple field access, or a name like `field` for named field access \ No newline at end of file diff --git a/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/access-field-literal-string.jsonc b/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/access-field-literal-string.jsonc index 9275f5e1def..be58bf8afd2 100644 --- a/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/access-field-literal-string.jsonc +++ b/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/access-field-literal-string.jsonc @@ -1,4 +1,4 @@ //@ run: fail //@ description: Field access with string literal should error ["::kernel::special_form::access", "data", { "#literal": "field_name" }] -//~^ ERROR Use an integer literal here +//~^ ERROR expected an integer for field indexing diff --git a/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/access-field-literal-string.stderr b/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/access-field-literal-string.stderr index 317a6962225..6091f29fdd1 100644 --- a/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/access-field-literal-string.stderr +++ b/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/access-field-literal-string.stderr @@ -1,10 +1,6 @@ -error[special-form-expander::invalid-field-literal-type]: Invalid field literal type +error[expander::invalid-field-literal-type]: Invalid field literal type ╭▸ 3 │ ["::kernel::special_form::access", "data", { "#literal": "field_name" }] - │ ━━━━━━━━━━━━ Use an integer literal here + │ ━━━━━━━━━━━━ expected an integer for field indexing │ - ├ help: Field access using literals requires an integer literal that specifies the field index. Other literal types like strings, booleans, or numbers cannot be used for field indexing. - ╰ note: Valid field access examples: - - (access tuple 0) - accesses first field - - (access record 2) - accesses third field - - (access data my_field) - accesses named field \ No newline at end of file + ╰ help: use an integer index like `0` for tuple field access, or a name like `field` for named field access \ No newline at end of file diff --git a/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/access-field-literal-type-annotation.jsonc b/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/access-field-literal-type-annotation.jsonc index bab9003bf53..aa4bbed410a 100644 --- a/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/access-field-literal-type-annotation.jsonc +++ b/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/access-field-literal-type-annotation.jsonc @@ -4,5 +4,5 @@ "::kernel::special_form::access", "tuple", { "#literal": 0, "#type": "Integer" } - //~^ ERROR Remove this type annotation + //~^ ERROR type annotations are not allowed on field index literals ] diff --git a/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/access-field-literal-type-annotation.stderr b/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/access-field-literal-type-annotation.stderr index 699857743f4..8772d5d798a 100644 --- a/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/access-field-literal-type-annotation.stderr +++ b/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/access-field-literal-type-annotation.stderr @@ -1,7 +1,14 @@ -error[special-form-expander::field-literal-type-annotation]: Field literal with type annotation +error[expander::unresolved-variable]: Unresolved variable + ╭▸ +5 │ "tuple", + │ ━━━━━ cannot find `tuple` in this scope + │ + ├ help: check the spelling, or import the name with a `use` statement + ╰ note: this could be a typo, a name used outside its scope, or a missing declaration; if it is a function or type from another module, you may need to import it first + +error[expander::field-literal-type-annotation]: Field literal with type annotation ╭▸ 6 │ { "#literal": 0, "#type": "Integer" } - │ ━━━━━━━ Remove this type annotation + │ ━━━━━━━ type annotations are not allowed on field index literals │ - ├ help: Field access using numeric literals cannot have type annotations. The literal represents the field index directly and doesn't need a separate type. - ╰ note: When using numeric literals for field access (e.g., in tuple destructuring), the number itself indicates the position and cannot be annotated with a type. \ No newline at end of file + ╰ help: remove the type annotation and use a plain integer like `0` \ No newline at end of file diff --git a/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/as-1.jsonc b/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/as-1.jsonc index c293e3b9843..4ad47783430 100644 --- a/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/as-1.jsonc +++ b/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/as-1.jsonc @@ -1,4 +1,4 @@ //@ run: fail //@ description: is/1 should error out ["::kernel::special_form::as", { "#literal": true }] -//~^ ERROR Add missing arguments +//~^ ERROR expected 2 arguments to `as`, found 1 diff --git a/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/as-1.stderr b/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/as-1.stderr index 641b9786510..c8ef1518c2c 100644 --- a/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/as-1.stderr +++ b/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/as-1.stderr @@ -1,7 +1,7 @@ -error[special-form-expander::special-form-argument-length]: Incorrect number of arguments for special form +error[expander::invalid-argument-count]: Invalid argument count ╭▸ 3 │ ["::kernel::special_form::as", { "#literal": true }] - │ ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ Add missing arguments + │ ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ expected 2 arguments to `as`, found 1 │ - ├ help: The as/2 form should look like: (as value type-expr) - ╰ note: The as function has 1 variant: as/2 \ No newline at end of file + ├ help: use `(as value type)` + ╰ note: the first argument is the value to cast and the second is the target type \ No newline at end of file diff --git a/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/as-3.jsonc b/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/as-3.jsonc index b5d65d219a4..10a014bac28 100644 --- a/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/as-3.jsonc +++ b/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/as-3.jsonc @@ -5,5 +5,5 @@ { "#literal": true }, { "#literal": true }, { "#literal": true } - //~^ ERROR Remove this argument + //~^ ERROR unexpected argument ] diff --git a/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/as-3.stderr b/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/as-3.stderr index 59559afebfd..cf894a628f6 100644 --- a/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/as-3.stderr +++ b/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/as-3.stderr @@ -1,14 +1,14 @@ -error[special-form-expander::special-form-argument-length]: Incorrect number of arguments for special form +error[expander::invalid-argument-count]: Invalid argument count ╭▸ -3 │ ┌ [ -4 │ │ "::kernel::special_form::as", -5 │ │ { "#literal": true }, -6 │ │ { "#literal": true }, -7 │ │ { "#literal": true } - │ │ ━━━━━━━━━━━━━━━━━━━━ Remove this argument -8 │ │ //~^ ERROR Remove this argument -9 │ │ ] - │ └─┘ In this `as` special form call +3 │ ┏ [ +4 │ ┃ "::kernel::special_form::as", +5 │ ┃ { "#literal": true }, +6 │ ┃ { "#literal": true }, +7 │ ┃ { "#literal": true } + │ ┃ ──────────────────── unexpected argument +8 │ ┃ //~^ ERROR unexpected argument +9 │ ┃ ] + │ ┗━┛ expected 2 arguments to `as`, found 3 │ - ├ help: The as/2 form should look like: (as value type-expr) - ╰ note: The as function has 1 variant: as/2 \ No newline at end of file + ├ help: use `(as value type)` + ╰ note: the first argument is the value to cast and the second is the target type \ No newline at end of file diff --git a/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/does-not-touch-non-kernel.stdout b/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/does-not-touch-non-kernel.stdout index 63f44f9f0dc..148e47c3265 100644 --- a/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/does-not-touch-non-kernel.stdout +++ b/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/does-not-touch-non-kernel.stdout @@ -3,8 +3,10 @@ Expr#4294967040@8 CallExpr#4294967040@8 Expr#4294967040@3 ExprKind (Path) - Path#4294967040@3 (rooted: false) - PathSegment#4294967040@2 (name: +) + Path#4294967040@3 (rooted: true) + PathSegment#4294967040@2 (name: core) + PathSegment#4294967040@2 (name: math) + PathSegment#4294967040@2 (name: add) Argument#4294967040@5 Expr#4294967040@5 ExprKind (Literal) diff --git a/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/fn-3.jsonc b/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/fn-3.jsonc index 512750875cc..64ba42deafa 100644 --- a/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/fn-3.jsonc +++ b/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/fn-3.jsonc @@ -1,4 +1,4 @@ //@ run: fail //@ description: fn/3 should error out ["::kernel::special_form::fn", { "#tuple": [] }, { "#struct": {} }, "_"] -//~^ ERROR Add missing arguments +//~^ ERROR expected 4 arguments to `fn`, found 3 diff --git a/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/fn-3.stderr b/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/fn-3.stderr index 44f5875824f..d2c361902f7 100644 --- a/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/fn-3.stderr +++ b/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/fn-3.stderr @@ -1,7 +1,7 @@ -error[special-form-expander::special-form-argument-length]: Incorrect number of arguments for special form +error[expander::invalid-argument-count]: Invalid argument count ╭▸ 3 │ ["::kernel::special_form::fn", { "#tuple": [] }, { "#struct": {} }, "_"] - │ ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ Add missing arguments + │ ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ expected 4 arguments to `fn`, found 3 │ - ├ help: The fn/4 form should look like: (fn generics arguments return-type body) - ╰ note: The fn function has 1 variant: fn/4 \ No newline at end of file + ├ help: use `(fn generics params return-type body)` + ╰ note: the arguments are, in order: the generic parameters (a tuple or struct), the function parameters (a struct), the return type, and the body expression \ No newline at end of file diff --git a/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/fn-5.jsonc b/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/fn-5.jsonc index 223a4a70f0e..5969c8a0673 100644 --- a/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/fn-5.jsonc +++ b/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/fn-5.jsonc @@ -7,5 +7,5 @@ "_", ["+", "a", "b"], ["*", "c", "d"] - //~^ ERROR Remove this argument + //~^ ERROR unexpected argument ] diff --git a/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/fn-5.stderr b/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/fn-5.stderr index 3eb8ecf37e5..bc26092bbfb 100644 --- a/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/fn-5.stderr +++ b/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/fn-5.stderr @@ -1,15 +1,15 @@ -error[special-form-expander::special-form-argument-length]: Incorrect number of arguments for special form +error[expander::invalid-argument-count]: Invalid argument count ╭▸ - 3 │ ┌ [ - 4 │ │ "::kernel::special_form::fn", - 5 │ │ { "#tuple": [] }, - 6 │ │ { "#struct": {} }, - ‡ │ - 9 │ │ ["*", "c", "d"] - │ │ ━━━━━━━━━━━━━━━ Remove this argument -10 │ │ //~^ ERROR Remove this argument -11 │ │ ] - │ └─┘ In this `fn` special form call + 3 │ ┏ [ + 4 │ ┃ "::kernel::special_form::fn", + 5 │ ┃ { "#tuple": [] }, + 6 │ ┃ { "#struct": {} }, + ‡ ┃ + 9 │ ┃ ["*", "c", "d"] + │ ┃ ─────────────── unexpected argument +10 │ ┃ //~^ ERROR unexpected argument +11 │ ┃ ] + │ ┗━┛ expected 4 arguments to `fn`, found 5 │ - ├ help: The fn/4 form should look like: (fn generics arguments return-type body) - ╰ note: The fn function has 1 variant: fn/4 \ No newline at end of file + ├ help: use `(fn generics params return-type body)` + ╰ note: the arguments are, in order: the generic parameters (a tuple or struct), the function parameters (a struct), the return type, and the body expression \ No newline at end of file diff --git a/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/fn-generics-duplicates.jsonc b/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/fn-generics-duplicates.jsonc index ca575ea650e..e0db01d7958 100644 --- a/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/fn-generics-duplicates.jsonc +++ b/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/fn-generics-duplicates.jsonc @@ -3,7 +3,7 @@ [ "::kernel::special_form::fn", { "#tuple": ["T", "T"] }, - //~^ ERROR Remove this duplicate generic parameter 'T' + //~^ ERROR `T` is already declared as a generic parameter { "#struct": {} }, "_", ["+", "a", "b"] diff --git a/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/fn-generics-duplicates.stderr b/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/fn-generics-duplicates.stderr index f26820dcee8..4e7d2355bd1 100644 --- a/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/fn-generics-duplicates.stderr +++ b/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/fn-generics-duplicates.stderr @@ -1,9 +1,54 @@ -error[special-form-expander::duplicate-generic-constraint]: Duplicate generic parameter constraint +error[expander::unresolved-variable]: Unresolved variable + ╭▸ +9 │ ["+", "a", "b"] + │ ━ cannot find `b` in this scope + │ + ╰ note: this could be a typo, a name used outside its scope, or a missing declaration; if it is a function or type from another module, you may need to import it first +help: a similar imported name exists + ╭╴ +9 - ["+", "a", "b"] +9 + ["+", "a", "~"] + ├╴ +9 - ["+", "a", "b"] +9 + ["+", "a", "↑"] + ├╴ +9 - ["+", "a", "b"] +9 + ["+", "a", "√"] + ├╴ +9 - ["+", "a", "b"] +9 + ["+", "a", "∛"] + ├╴ +9 - ["+", "a", "b"] +9 + ["+", "a", "cbrt"] + ╰╴ + +error[expander::unresolved-variable]: Unresolved variable + ╭▸ +9 │ ["+", "a", "b"] + │ ━ cannot find `a` in this scope + │ + ╰ note: this could be a typo, a name used outside its scope, or a missing declaration; if it is a function or type from another module, you may need to import it first +help: a similar imported name exists + ╭╴ +9 - ["+", "a", "b"] +9 + ["+", "↑", "b"] + ├╴ +9 - ["+", "a", "b"] +9 + ["+", "√", "b"] + ├╴ +9 - ["+", "a", "b"] +9 + ["+", "∛", "b"] + ├╴ +9 │ ["+", "access", "b"] + ├╴ +++++ +9 │ ["+", "as", "b"] + ╰╴ + + +error[expander::duplicate-fn-generic]: Duplicate generic parameter ╭▸ 5 │ { "#tuple": ["T", "T"] }, - │ ┬ ━ Remove this duplicate generic parameter 'T' + │ ┬ ━ duplicate generic parameter `T` │ │ - │ 'T' was previously declared here + │ `T` was first declared here │ - ├ help: Each generic parameter can only be declared once in a function definition. Remove the duplicate declaration or use a different name. - ╰ note: Generic parameter names must be unique within a function's generic parameter list. For example, in fn(param: T): U -> body), 'T' and 'U' are unique parameters. \ No newline at end of file + ╰ help: remove the duplicate declaration or use a different name \ No newline at end of file diff --git a/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/fn-generics-literal.jsonc b/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/fn-generics-literal.jsonc index 02c429de959..03eb044f303 100644 --- a/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/fn-generics-literal.jsonc +++ b/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/fn-generics-literal.jsonc @@ -3,7 +3,7 @@ [ "::kernel::special_form::fn", { "#literal": 2 }, - //~^ ERROR Use a valid generics expression + //~^ ERROR expected a tuple or struct for generic parameters { "#struct": {} }, "_", ["+", "a", "b"] diff --git a/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/fn-generics-literal.stderr b/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/fn-generics-literal.stderr index 75551a4d78c..6f5f04a398c 100644 --- a/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/fn-generics-literal.stderr +++ b/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/fn-generics-literal.stderr @@ -1,10 +1,52 @@ -error[special-form-expander::invalid-fn-generics-expression]: Invalid expression in function generics +error[expander::unresolved-variable]: Unresolved variable + ╭▸ +9 │ ["+", "a", "b"] + │ ━ cannot find `b` in this scope + │ + ╰ note: this could be a typo, a name used outside its scope, or a missing declaration; if it is a function or type from another module, you may need to import it first +help: a similar imported name exists + ╭╴ +9 - ["+", "a", "b"] +9 + ["+", "a", "~"] + ├╴ +9 - ["+", "a", "b"] +9 + ["+", "a", "↑"] + ├╴ +9 - ["+", "a", "b"] +9 + ["+", "a", "√"] + ├╴ +9 - ["+", "a", "b"] +9 + ["+", "a", "∛"] + ├╴ +9 - ["+", "a", "b"] +9 + ["+", "a", "cbrt"] + ╰╴ + +error[expander::unresolved-variable]: Unresolved variable + ╭▸ +9 │ ["+", "a", "b"] + │ ━ cannot find `a` in this scope + │ + ╰ note: this could be a typo, a name used outside its scope, or a missing declaration; if it is a function or type from another module, you may need to import it first +help: a similar imported name exists + ╭╴ +9 - ["+", "a", "b"] +9 + ["+", "↑", "b"] + ├╴ +9 - ["+", "a", "b"] +9 + ["+", "√", "b"] + ├╴ +9 - ["+", "a", "b"] +9 + ["+", "∛", "b"] + ├╴ +9 │ ["+", "access", "b"] + ├╴ +++++ +9 │ ["+", "as", "b"] + ╰╴ + + +error[expander::invalid-fn-generics]: Invalid generic parameter list ╭▸ 5 │ { "#literal": 2 }, - │ ━━━━━━━━━━━━━━━━━ Use a valid generics expression + │ ━━━━━━━━━━━━━━━━━ expected a tuple or struct for generic parameters │ - ├ help: Function generics must be specified as either a tuple of identifiers or a struct of bounded type parameters. Other expression types are not valid in this context. - ╰ note: Valid generics expressions include: - - Empty: () - - Tuple of identifiers: (T, U, V) - - Struct with bounds: (T: SomeBound, U: OtherBound) or (T: _, U: _) for unbounded types \ No newline at end of file + ╰ help: use a tuple like `(T, U)` for unbounded generics or a struct like `(T: bound, U: _)` for bounded generics \ No newline at end of file diff --git a/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/fn-generics-struct-literal.jsonc b/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/fn-generics-struct-literal.jsonc index 762adbd2d5a..322164a003b 100644 --- a/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/fn-generics-struct-literal.jsonc +++ b/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/fn-generics-struct-literal.jsonc @@ -5,7 +5,7 @@ { "#struct": { "T": { "#literal": 2 } - //~^ ERROR Replace this literal with a type name + //~^ ERROR expected a simple type parameter } }, { "#struct": {} }, diff --git a/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/fn-generics-struct-literal.stderr b/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/fn-generics-struct-literal.stderr index 7742694bbef..e3ccfce49c3 100644 --- a/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/fn-generics-struct-literal.stderr +++ b/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/fn-generics-struct-literal.stderr @@ -1,13 +1,53 @@ -error[special-form-expander::invalid-type-expression]: Invalid type expression +error[expander::unresolved-variable]: Unresolved variable + ╭▸ +13 │ ["+", "a", "b"] + │ ━ cannot find `b` in this scope + │ + ╰ note: this could be a typo, a name used outside its scope, or a missing declaration; if it is a function or type from another module, you may need to import it first +help: a similar imported name exists + ╭╴ +13 - ["+", "a", "b"] +13 + ["+", "a", "~"] + ├╴ +13 - ["+", "a", "b"] +13 + ["+", "a", "↑"] + ├╴ +13 - ["+", "a", "b"] +13 + ["+", "a", "√"] + ├╴ +13 - ["+", "a", "b"] +13 + ["+", "a", "∛"] + ├╴ +13 - ["+", "a", "b"] +13 + ["+", "a", "cbrt"] + ╰╴ + +error[expander::unresolved-variable]: Unresolved variable + ╭▸ +13 │ ["+", "a", "b"] + │ ━ cannot find `a` in this scope + │ + ╰ note: this could be a typo, a name used outside its scope, or a missing declaration; if it is a function or type from another module, you may need to import it first +help: a similar imported name exists + ╭╴ +13 - ["+", "a", "b"] +13 + ["+", "↑", "b"] + ├╴ +13 - ["+", "a", "b"] +13 + ["+", "√", "b"] + ├╴ +13 - ["+", "a", "b"] +13 + ["+", "∛", "b"] + ├╴ +13 │ ["+", "access", "b"] + ├╴ +++++ +13 │ ["+", "as", "b"] + ╰╴ + + +error[expander::invalid-expression-in-type-position]: Invalid expression in type position ╭▸ 7 │ "T": { "#literal": 2 } - │ ━━━━━━━━━━━━━━━━━ Replace this literal with a type name + │ ━━━━━━━━━━━━━━━━━ cannot use a literal value as a type │ - ├ help: Replace this expression with a valid type reference, struct type, or tuple type - ╰ note: Valid type expressions include: - - Type names: String, Int, Float - - Struct types: {name: String, age: Int} - - Tuple types: (String, Int, Boolean) - - Unions: (| String Int) - - Intersections: (& String Int) - - Generic types: Array, Option \ No newline at end of file + ├ help: replace this with a type path, tuple type, struct type, `_`, `(| ...)`, or `(& ...)` + ╰ note: valid type forms are: type paths like `String`, tuple types like `(Int, String)`, struct types like `(name: String)`, `_` for inference, unions `(| ...)`, and intersections `(& ...)` \ No newline at end of file diff --git a/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/fn-generics-struct-type.jsonc b/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/fn-generics-struct-type.jsonc index c4f096225d7..be0fd424128 100644 --- a/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/fn-generics-struct-type.jsonc +++ b/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/fn-generics-struct-type.jsonc @@ -5,7 +5,7 @@ { "#struct": { "T": "Int" }, "#type": "Int" - //~^ ERROR Remove this type annotation + //~^ ERROR type annotation is not allowed on the generic parameter list }, { "#struct": {} }, "_", diff --git a/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/fn-generics-struct-type.stderr b/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/fn-generics-struct-type.stderr index fd46b473574..0fc6111e219 100644 --- a/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/fn-generics-struct-type.stderr +++ b/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/fn-generics-struct-type.stderr @@ -1,7 +1,61 @@ -error[special-form-expander::fn-generics-with-type-annotation]: Function generics with type annotation +error[expander::unresolved-variable]: Unresolved variable + ╭▸ +12 │ ["+", "a", "b"] + │ ━ cannot find `b` in this scope + │ + ╰ note: this could be a typo, a name used outside its scope, or a missing declaration; if it is a function or type from another module, you may need to import it first +help: a similar imported name exists + ╭╴ +12 - ["+", "a", "b"] +12 + ["+", "a", "~"] + ├╴ +12 - ["+", "a", "b"] +12 + ["+", "a", "↑"] + ├╴ +12 - ["+", "a", "b"] +12 + ["+", "a", "√"] + ├╴ +12 - ["+", "a", "b"] +12 + ["+", "a", "∛"] + ├╴ +12 - ["+", "a", "b"] +12 + ["+", "a", "cbrt"] + ╰╴ + +error[expander::unresolved-variable]: Unresolved variable + ╭▸ +6 │ "#struct": { "T": "Int" }, + │ ━━━ cannot find `Int` in this scope + │ + ├ help: check the spelling, or import the name with a `use` statement + ╰ note: this could be a typo, a name used outside its scope, or a missing declaration; if it is a function or type from another module, you may need to import it first + +error[expander::unresolved-variable]: Unresolved variable + ╭▸ +12 │ ["+", "a", "b"] + │ ━ cannot find `a` in this scope + │ + ╰ note: this could be a typo, a name used outside its scope, or a missing declaration; if it is a function or type from another module, you may need to import it first +help: a similar imported name exists + ╭╴ +12 - ["+", "a", "b"] +12 + ["+", "↑", "b"] + ├╴ +12 - ["+", "a", "b"] +12 + ["+", "√", "b"] + ├╴ +12 - ["+", "a", "b"] +12 + ["+", "∛", "b"] + ├╴ +12 │ ["+", "access", "b"] + ├╴ +++++ +12 │ ["+", "as", "b"] + ╰╴ + + +error[expander::fn-generics-type-annotation]: Type annotation on generic parameter list ╭▸ 7 │ "#type": "Int" - │ ━━━ Remove this type annotation + │ ━━━ type annotation is not allowed on the generic parameter list │ - ├ help: Function generics declarations cannot have type annotations. Generic parameter lists define type parameters for the function, and do not have a meaningful type themselves. - ╰ note: In the 'fn' special form, the generics argument should be either a tuple of identifiers such as (T, U) or a struct of bounded type parameters such as (T: SomeBound, U: OtherBound, V: _), where an underscore indicates no bound. \ No newline at end of file + ├ help: remove the type annotation; the generic parameter list declares type variables, not a typed value + ╰ note: write `(fn (T, U) ...)` for unbounded generics or `(fn (T: bound, U: _) ...)` for bounded generics \ No newline at end of file diff --git a/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/fn-generics-tuple-literal.jsonc b/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/fn-generics-tuple-literal.jsonc index 3d164480745..17cc88a27f9 100644 --- a/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/fn-generics-tuple-literal.jsonc +++ b/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/fn-generics-tuple-literal.jsonc @@ -5,7 +5,7 @@ { "#tuple": [ { "#literal": 1 } - //~^ ERROR Use a valid generics expression + //~^ ERROR expected a tuple or struct for generic parameters ] }, { "#struct": {} }, diff --git a/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/fn-generics-tuple-literal.stderr b/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/fn-generics-tuple-literal.stderr index f850e33af93..799ec229d04 100644 --- a/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/fn-generics-tuple-literal.stderr +++ b/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/fn-generics-tuple-literal.stderr @@ -1,10 +1,52 @@ -error[special-form-expander::invalid-fn-generics-expression]: Invalid expression in function generics +error[expander::unresolved-variable]: Unresolved variable + ╭▸ +13 │ ["+", "a", "b"] + │ ━ cannot find `b` in this scope + │ + ╰ note: this could be a typo, a name used outside its scope, or a missing declaration; if it is a function or type from another module, you may need to import it first +help: a similar imported name exists + ╭╴ +13 - ["+", "a", "b"] +13 + ["+", "a", "~"] + ├╴ +13 - ["+", "a", "b"] +13 + ["+", "a", "↑"] + ├╴ +13 - ["+", "a", "b"] +13 + ["+", "a", "√"] + ├╴ +13 - ["+", "a", "b"] +13 + ["+", "a", "∛"] + ├╴ +13 - ["+", "a", "b"] +13 + ["+", "a", "cbrt"] + ╰╴ + +error[expander::unresolved-variable]: Unresolved variable + ╭▸ +13 │ ["+", "a", "b"] + │ ━ cannot find `a` in this scope + │ + ╰ note: this could be a typo, a name used outside its scope, or a missing declaration; if it is a function or type from another module, you may need to import it first +help: a similar imported name exists + ╭╴ +13 - ["+", "a", "b"] +13 + ["+", "↑", "b"] + ├╴ +13 - ["+", "a", "b"] +13 + ["+", "√", "b"] + ├╴ +13 - ["+", "a", "b"] +13 + ["+", "∛", "b"] + ├╴ +13 │ ["+", "access", "b"] + ├╴ +++++ +13 │ ["+", "as", "b"] + ╰╴ + + +error[expander::invalid-fn-generic-param]: Invalid generic parameter ╭▸ 7 │ { "#literal": 1 } - │ ━━━━━━━━━━━━━━━━━ Use a valid generics expression + │ ━━━━━━━━━━━━━━━━━ expected a simple type parameter name │ - ├ help: Function generics must be specified as either a tuple of identifiers or a struct of bounded type parameters. Other expression types are not valid in this context. - ╰ note: Valid generics expressions include: - - Empty: () - - Tuple of identifiers: (T, U, V) - - Struct with bounds: (T: SomeBound, U: OtherBound) or (T: _, U: _) for unbounded types \ No newline at end of file + ╰ help: each generic parameter must be a plain identifier like `T`, not a qualified path or expression \ No newline at end of file diff --git a/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/fn-generics-tuple-path.jsonc b/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/fn-generics-tuple-path.jsonc index f04165507b5..673cde59512 100644 --- a/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/fn-generics-tuple-path.jsonc +++ b/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/fn-generics-tuple-path.jsonc @@ -5,7 +5,7 @@ { "#tuple": [ "::core::math::add" - //~^ ERROR Use a simple identifier here + //~^ ERROR expected a simple type parameter name ] }, { "#struct": {} }, diff --git a/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/fn-generics-tuple-path.stderr b/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/fn-generics-tuple-path.stderr index 59710edbc9a..0691c3e7bf7 100644 --- a/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/fn-generics-tuple-path.stderr +++ b/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/fn-generics-tuple-path.stderr @@ -1,7 +1,52 @@ -error[special-form-expander::invalid-fn-generic-param]: Invalid generic parameter in function declaration +error[expander::unresolved-variable]: Unresolved variable + ╭▸ +13 │ ["+", "a", "b"] + │ ━ cannot find `b` in this scope + │ + ╰ note: this could be a typo, a name used outside its scope, or a missing declaration; if it is a function or type from another module, you may need to import it first +help: a similar imported name exists + ╭╴ +13 - ["+", "a", "b"] +13 + ["+", "a", "~"] + ├╴ +13 - ["+", "a", "b"] +13 + ["+", "a", "↑"] + ├╴ +13 - ["+", "a", "b"] +13 + ["+", "a", "√"] + ├╴ +13 - ["+", "a", "b"] +13 + ["+", "a", "∛"] + ├╴ +13 - ["+", "a", "b"] +13 + ["+", "a", "cbrt"] + ╰╴ + +error[expander::unresolved-variable]: Unresolved variable + ╭▸ +13 │ ["+", "a", "b"] + │ ━ cannot find `a` in this scope + │ + ╰ note: this could be a typo, a name used outside its scope, or a missing declaration; if it is a function or type from another module, you may need to import it first +help: a similar imported name exists + ╭╴ +13 - ["+", "a", "b"] +13 + ["+", "↑", "b"] + ├╴ +13 - ["+", "a", "b"] +13 + ["+", "√", "b"] + ├╴ +13 - ["+", "a", "b"] +13 + ["+", "∛", "b"] + ├╴ +13 │ ["+", "access", "b"] + ├╴ +++++ +13 │ ["+", "as", "b"] + ╰╴ + + +error[expander::invalid-fn-generic-param]: Invalid generic parameter ╭▸ 7 │ "::core::math::add" - │ ━━━━━━━━━━━━━━━━━ Use a simple identifier here + │ ━━━━━━━━━━━━━━━━━ expected a simple type parameter name │ - ├ help: Generic type parameters must be simple identifiers. Qualified paths or complex expressions cannot be used in this context. - ╰ note: In function generic parameter lists, each element must be a simple identifier. For example: (T, U, V) is valid, but (some::path,) is not. \ No newline at end of file + ╰ help: each generic parameter must be a plain identifier like `T`, not a qualified path or expression \ No newline at end of file diff --git a/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/fn-generics-tuple-type.jsonc b/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/fn-generics-tuple-type.jsonc index 539748b003d..a0f5f0417be 100644 --- a/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/fn-generics-tuple-type.jsonc +++ b/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/fn-generics-tuple-type.jsonc @@ -5,7 +5,7 @@ { "#tuple": ["T"], "#type": "Int" - //~^ ERROR Remove this type annotation + //~^ ERROR type annotation is not allowed on the generic parameter list }, { "#struct": {} }, "_", diff --git a/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/fn-generics-tuple-type.stderr b/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/fn-generics-tuple-type.stderr index fd46b473574..8b584c68d2e 100644 --- a/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/fn-generics-tuple-type.stderr +++ b/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/fn-generics-tuple-type.stderr @@ -1,7 +1,53 @@ -error[special-form-expander::fn-generics-with-type-annotation]: Function generics with type annotation +error[expander::unresolved-variable]: Unresolved variable + ╭▸ +12 │ ["+", "a", "b"] + │ ━ cannot find `b` in this scope + │ + ╰ note: this could be a typo, a name used outside its scope, or a missing declaration; if it is a function or type from another module, you may need to import it first +help: a similar imported name exists + ╭╴ +12 - ["+", "a", "b"] +12 + ["+", "a", "~"] + ├╴ +12 - ["+", "a", "b"] +12 + ["+", "a", "↑"] + ├╴ +12 - ["+", "a", "b"] +12 + ["+", "a", "√"] + ├╴ +12 - ["+", "a", "b"] +12 + ["+", "a", "∛"] + ├╴ +12 - ["+", "a", "b"] +12 + ["+", "a", "cbrt"] + ╰╴ + +error[expander::unresolved-variable]: Unresolved variable + ╭▸ +12 │ ["+", "a", "b"] + │ ━ cannot find `a` in this scope + │ + ╰ note: this could be a typo, a name used outside its scope, or a missing declaration; if it is a function or type from another module, you may need to import it first +help: a similar imported name exists + ╭╴ +12 - ["+", "a", "b"] +12 + ["+", "↑", "b"] + ├╴ +12 - ["+", "a", "b"] +12 + ["+", "√", "b"] + ├╴ +12 - ["+", "a", "b"] +12 + ["+", "∛", "b"] + ├╴ +12 │ ["+", "access", "b"] + ├╴ +++++ +12 │ ["+", "as", "b"] + ╰╴ + + +error[expander::fn-generics-type-annotation]: Type annotation on generic parameter list ╭▸ 7 │ "#type": "Int" - │ ━━━ Remove this type annotation + │ ━━━ type annotation is not allowed on the generic parameter list │ - ├ help: Function generics declarations cannot have type annotations. Generic parameter lists define type parameters for the function, and do not have a meaningful type themselves. - ╰ note: In the 'fn' special form, the generics argument should be either a tuple of identifiers such as (T, U) or a struct of bounded type parameters such as (T: SomeBound, U: OtherBound, V: _), where an underscore indicates no bound. \ No newline at end of file + ├ help: remove the type annotation; the generic parameter list declares type variables, not a typed value + ╰ note: write `(fn (T, U) ...)` for unbounded generics or `(fn (T: bound, U: _) ...)` for bounded generics \ No newline at end of file diff --git a/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/fn-params-duplicates.jsonc b/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/fn-params-duplicates.jsonc index a0efa899152..4899562a33a 100644 --- a/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/fn-params-duplicates.jsonc +++ b/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/fn-params-duplicates.jsonc @@ -4,7 +4,7 @@ "::kernel::special_form::fn", { "#struct": {} }, { "#struct": { "a": "Int", "a": "Int" } }, - //~^ ERROR Remove this duplicate parameter 'a' + //~^ ERROR `a` is already declared as a parameter "_", ["+", "a", "b"] ] diff --git a/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/fn-params-duplicates.stderr b/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/fn-params-duplicates.stderr index bef8522b72f..4fa1f7f9195 100644 --- a/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/fn-params-duplicates.stderr +++ b/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/fn-params-duplicates.stderr @@ -1,9 +1,53 @@ -error[special-form-expander::duplicate-closure-parameter]: Duplicate closure parameter +error[expander::unresolved-variable]: Unresolved variable + ╭▸ +9 │ ["+", "a", "b"] + │ ━ cannot find `b` in this scope + │ + ╰ note: this could be a typo, a name used outside its scope, or a missing declaration; if it is a function or type from another module, you may need to import it first +help: a similar local binding exists + ╭╴ +9 - ["+", "a", "b"] +9 + ["+", "a", "a"] + ╰╴ +help: a similar imported name exists + ╭╴ +9 - ["+", "a", "b"] +9 + ["+", "a", "~"] + ├╴ +9 - ["+", "a", "b"] +9 + ["+", "a", "↑"] + ├╴ +9 - ["+", "a", "b"] +9 + ["+", "a", "√"] + ├╴ +9 - ["+", "a", "b"] +9 + ["+", "a", "∛"] + ├╴ +9 - ["+", "a", "b"] +9 + ["+", "a", "cbrt"] + ╰╴ + +error[expander::unresolved-variable]: Unresolved variable + ╭▸ +6 │ { "#struct": { "a": "Int", "a": "Int" } }, + │ ━━━ cannot find `Int` in this scope + │ + ├ help: check the spelling, or import the name with a `use` statement + ╰ note: this could be a typo, a name used outside its scope, or a missing declaration; if it is a function or type from another module, you may need to import it first + +error[expander::duplicate-fn-parameter]: Duplicate function parameter + ╭▸ +6 │ { "#struct": { "a": "Int", "a": "Int" } }, + │ ┬───────── ━━━━━━━━━━ duplicate parameter `a` + │ │ + │ `a` was first declared here + │ + ╰ help: remove the duplicate parameter or use a different name + +error[expander::unresolved-variable]: Unresolved variable ╭▸ 6 │ { "#struct": { "a": "Int", "a": "Int" } }, - │ ┬ ━ Remove this duplicate parameter 'a' - │ │ - │ 'a' was previously declared here + │ ━━━ cannot find `Int` in this scope │ - ├ help: Each function parameter must have a unique name. Rename this parameter or remove the duplicate declaration. - ╰ note: Function parameters must have unique names within the same parameter list. For example, in fn(x: Int, y: String): ReturnType body), 'x' and 'y' are unique parameters. \ No newline at end of file + ├ help: check the spelling, or import the name with a `use` statement + ╰ note: this could be a typo, a name used outside its scope, or a missing declaration; if it is a function or type from another module, you may need to import it first \ No newline at end of file diff --git a/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/fn-params-tuple.jsonc b/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/fn-params-tuple.jsonc index c1cf0d9077e..59c526a39a2 100644 --- a/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/fn-params-tuple.jsonc +++ b/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/fn-params-tuple.jsonc @@ -4,7 +4,7 @@ "::kernel::special_form::fn", { "#struct": {} }, { "#tuple": [] }, - //~^ ERROR Use a struct expression for parameters + //~^ ERROR expected a struct for function parameters "_", ["+", "a", "b"] ] diff --git a/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/fn-params-tuple.stderr b/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/fn-params-tuple.stderr index ccf6c0698d2..4f93c14c6bb 100644 --- a/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/fn-params-tuple.stderr +++ b/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/fn-params-tuple.stderr @@ -1,7 +1,52 @@ -error[special-form-expander::invalid-fn-params-expression]: Invalid expression in function parameters +error[expander::unresolved-variable]: Unresolved variable + ╭▸ +9 │ ["+", "a", "b"] + │ ━ cannot find `b` in this scope + │ + ╰ note: this could be a typo, a name used outside its scope, or a missing declaration; if it is a function or type from another module, you may need to import it first +help: a similar imported name exists + ╭╴ +9 - ["+", "a", "b"] +9 + ["+", "a", "~"] + ├╴ +9 - ["+", "a", "b"] +9 + ["+", "a", "↑"] + ├╴ +9 - ["+", "a", "b"] +9 + ["+", "a", "√"] + ├╴ +9 - ["+", "a", "b"] +9 + ["+", "a", "∛"] + ├╴ +9 - ["+", "a", "b"] +9 + ["+", "a", "cbrt"] + ╰╴ + +error[expander::unresolved-variable]: Unresolved variable + ╭▸ +9 │ ["+", "a", "b"] + │ ━ cannot find `a` in this scope + │ + ╰ note: this could be a typo, a name used outside its scope, or a missing declaration; if it is a function or type from another module, you may need to import it first +help: a similar imported name exists + ╭╴ +9 - ["+", "a", "b"] +9 + ["+", "↑", "b"] + ├╴ +9 - ["+", "a", "b"] +9 + ["+", "√", "b"] + ├╴ +9 - ["+", "a", "b"] +9 + ["+", "∛", "b"] + ├╴ +9 │ ["+", "access", "b"] + ├╴ +++++ +9 │ ["+", "as", "b"] + ╰╴ + + +error[expander::invalid-fn-params]: Invalid parameter list ╭▸ 6 │ { "#tuple": [] }, - │ ━━━━━━━━━━━━━━━━ Use a struct expression for parameters + │ ━━━━━━━━━━━━━━━━ expected a struct for function parameters │ - ├ help: Function parameters must be specified as a struct where field names are parameter names and field values are parameter types. Other expression types are not valid in this context. - ╰ note: Valid parameter expression is a struct in the form: (param1: Type1, param2: Type2, ...) \ No newline at end of file + ╰ help: write parameters as `(x: int, y: string)` where each field declares a parameter and its type \ No newline at end of file diff --git a/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/fn-params-type.jsonc b/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/fn-params-type.jsonc index f0f9a415ffb..a360d02a298 100644 --- a/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/fn-params-type.jsonc +++ b/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/fn-params-type.jsonc @@ -6,7 +6,7 @@ { "#struct": {}, "#type": "Int" - //~^ ERROR Remove this type annotation + //~^ ERROR type annotation is not allowed on the parameter list }, "_", ["+", "a", "b"] diff --git a/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/fn-params-type.stderr b/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/fn-params-type.stderr index 59ea7e39a8b..ef74564d5c2 100644 --- a/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/fn-params-type.stderr +++ b/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/fn-params-type.stderr @@ -1,7 +1,52 @@ -error[special-form-expander::fn-params-with-type-annotation]: Function parameters with type annotation +error[expander::unresolved-variable]: Unresolved variable + ╭▸ +12 │ ["+", "a", "b"] + │ ━ cannot find `b` in this scope + │ + ╰ note: this could be a typo, a name used outside its scope, or a missing declaration; if it is a function or type from another module, you may need to import it first +help: a similar imported name exists + ╭╴ +12 - ["+", "a", "b"] +12 + ["+", "a", "~"] + ├╴ +12 - ["+", "a", "b"] +12 + ["+", "a", "↑"] + ├╴ +12 - ["+", "a", "b"] +12 + ["+", "a", "√"] + ├╴ +12 - ["+", "a", "b"] +12 + ["+", "a", "∛"] + ├╴ +12 - ["+", "a", "b"] +12 + ["+", "a", "cbrt"] + ╰╴ + +error[expander::unresolved-variable]: Unresolved variable + ╭▸ +12 │ ["+", "a", "b"] + │ ━ cannot find `a` in this scope + │ + ╰ note: this could be a typo, a name used outside its scope, or a missing declaration; if it is a function or type from another module, you may need to import it first +help: a similar imported name exists + ╭╴ +12 - ["+", "a", "b"] +12 + ["+", "↑", "b"] + ├╴ +12 - ["+", "a", "b"] +12 + ["+", "√", "b"] + ├╴ +12 - ["+", "a", "b"] +12 + ["+", "∛", "b"] + ├╴ +12 │ ["+", "access", "b"] + ├╴ +++++ +12 │ ["+", "as", "b"] + ╰╴ + + +error[expander::fn-params-type-annotation]: Type annotation on parameter list ╭▸ 8 │ "#type": "Int" - │ ━━━ Remove this type annotation + │ ━━━ type annotation is not allowed on the parameter list │ - ├ help: Function parameter declarations cannot have type annotations at the struct level. The struct itself represents the parameter list, and each field represents a parameter with its type. - ╰ note: In the 'fn' special form, parameter lists should be structured as (param1: Type1, param2: Type2), where the struct itself does not have a type annotation. \ No newline at end of file + ╰ help: remove the type annotation; each parameter already declares its type individually as `(name: type)` \ No newline at end of file diff --git a/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/generics.stderr b/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/generics.stderr index b6364489393..c483f2051b4 100644 --- a/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/generics.stderr +++ b/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/generics.stderr @@ -1,9 +1,52 @@ -error[special-form-expander::unknown-special-form]: Unknown special form +error[expander::generic-arguments-in-module]: Generic arguments in module path ╭▸ 3 │ ["::kernel::special_form::if"] - │ ┯ ─ ... and these too - │ │ - │ Remove these generic arguments + │ ━ generic argument not allowed here │ - ├ help: Special form paths must not include generic arguments. Remove the angle brackets and their contents. - ╰ note: Special forms are built-in language constructs that don't support generics in their path reference. \ No newline at end of file + ├ help: move the generic arguments to the final segment of the path, or remove them + ╰ note: modules are not generic; only the final item in a path can be parameterized + +error[expander::unresolved-variable]: Unresolved variable + ╭▸ +3 │ ["::kernel::special_form::if"] + │ ━ cannot find `U` in this scope + │ + ╰ note: this could be a typo, a name used outside its scope, or a missing declaration; if it is a function or type from another module, you may need to import it first +help: a similar imported name exists + ╭╴ +3 - ["::kernel::special_form::if"] +3 + ["::kernel::special_form::if"] + ├╴ +3 - ["::kernel::special_form::if"] +3 + ["::kernel::special_form::if<|>"] + ├╴ +3 │ ["::kernel::special_form::if"] + ├╴ ++++++ +3 │ ["::kernel::special_form::if"] + ├╴ ++++ +3 │ ["::kernel::special_form::if"] + ╰╴ ++ + +error[expander::unresolved-variable]: Unresolved variable + ╭▸ +3 │ ["::kernel::special_form::if"] + │ ━ cannot find `T` in this scope + │ + ╰ note: this could be a typo, a name used outside its scope, or a missing declaration; if it is a function or type from another module, you may need to import it first +help: a similar imported name exists + ╭╴ +3 - ["::kernel::special_form::if"] +3 + ["::kernel::special_form::if"] + ├╴ +3 - ["::kernel::special_form::if"] +3 + ["::kernel::special_form::if"] + ├╴ +3 - ["::kernel::special_form::if"] +3 + ["::kernel::special_form::if"] + ├╴ +3 - ["::kernel::special_form::if"] +3 + ["::kernel::special_form::if"] + ├╴ +3 - ["::kernel::special_form::if"] +3 + ["::kernel::special_form<|>::if"] + ╰╴ \ No newline at end of file diff --git a/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/if-1.jsonc b/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/if-1.jsonc index 1e29ca7758e..3329acc46d7 100644 --- a/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/if-1.jsonc +++ b/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/if-1.jsonc @@ -1,4 +1,4 @@ //@ run: fail //@ description: if/1 should error out ["::kernel::special_form::if", { "#literal": true }] -//~^ ERROR Add missing arguments +//~^ ERROR expected 2 or 3 arguments to `if`, found 1 diff --git a/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/if-1.stderr b/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/if-1.stderr index 021e4df6878..f4d93bfcebb 100644 --- a/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/if-1.stderr +++ b/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/if-1.stderr @@ -1,9 +1,7 @@ -error[special-form-expander::special-form-argument-length]: Incorrect number of arguments for special form +error[expander::invalid-argument-count]: Invalid argument count ╭▸ 3 │ ["::kernel::special_form::if", { "#literal": true }] - │ ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ Add missing arguments + │ ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ expected 2 or 3 arguments to `if`, found 1 │ - ├ help: Use either: - │ - if/2: (if condition then-expr) - │ - if/3: (if condition then-expr else-expr) - ╰ note: The if function has 2 variants: if/2, if/3 \ No newline at end of file + ├ help: use `(if condition then)` or `(if condition then else)` + ╰ note: the arguments are, in order: the condition, the then branch, and an optional else branch \ No newline at end of file diff --git a/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/if-4.jsonc b/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/if-4.jsonc index 461a63578ba..ce2c226e398 100644 --- a/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/if-4.jsonc +++ b/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/if-4.jsonc @@ -6,5 +6,5 @@ { "#literal": true }, { "#literal": true }, { "#literal": true } - //~^ ERROR Remove this argument + //~^ ERROR unexpected argument ] diff --git a/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/if-4.stderr b/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/if-4.stderr index ce3184d2fdd..69c494fcdd0 100644 --- a/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/if-4.stderr +++ b/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/if-4.stderr @@ -1,17 +1,15 @@ -error[special-form-expander::special-form-argument-length]: Incorrect number of arguments for special form +error[expander::invalid-argument-count]: Invalid argument count ╭▸ - 3 │ ┌ [ - 4 │ │ "::kernel::special_form::if", - 5 │ │ { "#literal": true }, - 6 │ │ { "#literal": true }, - 7 │ │ { "#literal": true }, - 8 │ │ { "#literal": true } - │ │ ━━━━━━━━━━━━━━━━━━━━ Remove this argument - 9 │ │ //~^ ERROR Remove this argument -10 │ │ ] - │ └─┘ In this `if` special form call + 3 │ ┏ [ + 4 │ ┃ "::kernel::special_form::if", + 5 │ ┃ { "#literal": true }, + 6 │ ┃ { "#literal": true }, + 7 │ ┃ { "#literal": true }, + 8 │ ┃ { "#literal": true } + │ ┃ ──────────────────── unexpected argument + 9 │ ┃ //~^ ERROR unexpected argument +10 │ ┃ ] + │ ┗━┛ expected 2 or 3 arguments to `if`, found 4 │ - ├ help: Use either: - │ - if/2: (if condition then-expr) - │ - if/3: (if condition then-expr else-expr) - ╰ note: The if function has 2 variants: if/2, if/3 \ No newline at end of file + ├ help: use `(if condition then)` or `(if condition then else)` + ╰ note: the arguments are, in order: the condition, the then branch, and an optional else branch \ No newline at end of file diff --git a/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/index-1.jsonc b/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/index-1.jsonc index 8dac82e56b3..e0baf13f119 100644 --- a/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/index-1.jsonc +++ b/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/index-1.jsonc @@ -1,4 +1,4 @@ //@ run: fail //@ description: index/1 should error out ["::kernel::special_form::index", "x"] -//~^ ERROR Add missing arguments +//~^ ERROR expected 2 arguments to `[]`, found 1 diff --git a/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/index-1.stderr b/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/index-1.stderr index 0dc6d995330..4c6623c6a76 100644 --- a/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/index-1.stderr +++ b/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/index-1.stderr @@ -1,7 +1,7 @@ -error[special-form-expander::special-form-argument-length]: Incorrect number of arguments for special form +error[expander::invalid-argument-count]: Invalid argument count ╭▸ 3 │ ["::kernel::special_form::index", "x"] - │ ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ Add missing arguments + │ ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ expected 2 arguments to `[]`, found 1 │ - ├ help: The index/2 form should look like: ([] object index) - ╰ note: The index function has 1 variant: index/2 \ No newline at end of file + ├ help: use `([] collection index)` + ╰ note: the first argument is the collection and the second is the index \ No newline at end of file diff --git a/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/index-3.jsonc b/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/index-3.jsonc index cdf816cf881..f3f3a688a9d 100644 --- a/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/index-3.jsonc +++ b/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/index-3.jsonc @@ -5,5 +5,5 @@ "x", "y", "z" - //~^ ERROR Remove this argument + //~^ ERROR unexpected argument ] diff --git a/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/index-3.stderr b/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/index-3.stderr index dd36e85cc50..84b0e8fdd8f 100644 --- a/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/index-3.stderr +++ b/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/index-3.stderr @@ -1,14 +1,14 @@ -error[special-form-expander::special-form-argument-length]: Incorrect number of arguments for special form +error[expander::invalid-argument-count]: Invalid argument count ╭▸ -3 │ ┌ [ -4 │ │ "::kernel::special_form::index", -5 │ │ "x", -6 │ │ "y", -7 │ │ "z" - │ │ ━ Remove this argument -8 │ │ //~^ ERROR Remove this argument -9 │ │ ] - │ └─┘ In this `index` special form call +3 │ ┏ [ +4 │ ┃ "::kernel::special_form::index", +5 │ ┃ "x", +6 │ ┃ "y", +7 │ ┃ "z" + │ ┃ ─ unexpected argument +8 │ ┃ //~^ ERROR unexpected argument +9 │ ┃ ] + │ ┗━┛ expected 2 arguments to `[]`, found 3 │ - ├ help: The index/2 form should look like: ([] object index) - ╰ note: The index function has 1 variant: index/2 \ No newline at end of file + ├ help: use `([] collection index)` + ╰ note: the first argument is the collection and the second is the index \ No newline at end of file diff --git a/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/input-1.jsonc b/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/input-1.jsonc index a956ac274bd..8c6d50b7151 100644 --- a/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/input-1.jsonc +++ b/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/input-1.jsonc @@ -1,4 +1,4 @@ //@ run: fail //@ description: input/1 should error out ["::kernel::special_form::input", "x"] -//~^ ERROR Add missing arguments +//~^ ERROR expected 2 or 3 arguments to `input`, found 1 diff --git a/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/input-1.stderr b/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/input-1.stderr index 7af3596c72c..856ede72354 100644 --- a/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/input-1.stderr +++ b/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/input-1.stderr @@ -1,9 +1,7 @@ -error[special-form-expander::special-form-argument-length]: Incorrect number of arguments for special form +error[expander::invalid-argument-count]: Invalid argument count ╭▸ 3 │ ["::kernel::special_form::input", "x"] - │ ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ Add missing arguments + │ ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ expected 2 or 3 arguments to `input`, found 1 │ - ├ help: Use either: - │ - input/2: (input name type) - │ - input/3: (input name type default) - ╰ note: The input function has 2 variants: input/2, input/3 \ No newline at end of file + ├ help: use `(input name type)` or `(input name type default)` + ╰ note: the arguments are, in order: the input name, its type, and an optional default value \ No newline at end of file diff --git a/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/input-4.jsonc b/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/input-4.jsonc index 564aed159d5..3c986f6b23a 100644 --- a/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/input-4.jsonc +++ b/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/input-4.jsonc @@ -6,5 +6,5 @@ "Y", "z", "w" - //~^ ERROR Remove this argument + //~^ ERROR unexpected argument ] diff --git a/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/input-4.stderr b/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/input-4.stderr index ffbf5b0443a..9bf9295a090 100644 --- a/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/input-4.stderr +++ b/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/input-4.stderr @@ -1,17 +1,15 @@ -error[special-form-expander::special-form-argument-length]: Incorrect number of arguments for special form +error[expander::invalid-argument-count]: Invalid argument count ╭▸ - 3 │ ┌ [ - 4 │ │ "::kernel::special_form::input", - 5 │ │ "x", - 6 │ │ "Y", - 7 │ │ "z", - 8 │ │ "w" - │ │ ━ Remove this argument - 9 │ │ //~^ ERROR Remove this argument -10 │ │ ] - │ └─┘ In this `input` special form call + 3 │ ┏ [ + 4 │ ┃ "::kernel::special_form::input", + 5 │ ┃ "x", + 6 │ ┃ "Y", + 7 │ ┃ "z", + 8 │ ┃ "w" + │ ┃ ─ unexpected argument + 9 │ ┃ //~^ ERROR unexpected argument +10 │ ┃ ] + │ ┗━┛ expected 2 or 3 arguments to `input`, found 4 │ - ├ help: Use either: - │ - input/2: (input name type) - │ - input/3: (input name type default) - ╰ note: The input function has 2 variants: input/2, input/3 \ No newline at end of file + ├ help: use `(input name type)` or `(input name type default)` + ╰ note: the arguments are, in order: the input name, its type, and an optional default value \ No newline at end of file diff --git a/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/labeled-argument.jsonc b/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/labeled-argument.jsonc index 8bc61922cb9..07ac6e67ed4 100644 --- a/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/labeled-argument.jsonc +++ b/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/labeled-argument.jsonc @@ -4,7 +4,7 @@ "::kernel::special_form::if", { ":test": { "#literal": true } - //~^ ERROR this labeled argument + //~^ ERROR labeled arguments are not allowed in `if` }, { "#literal": true }, { "#literal": false } diff --git a/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/labeled-argument.stderr b/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/labeled-argument.stderr index dd9cea6aaaa..c1099ff418d 100644 --- a/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/labeled-argument.stderr +++ b/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/labeled-argument.stderr @@ -1,14 +1,6 @@ -error[special-form-expander::labeled-arguments-not-supported]: Labeled arguments not supported in special forms - ╭▸ - 3 │ ┏ [ - 4 │ ┃ "::kernel::special_form::if", - 5 │ ┃ { - 6 │ ┃ ":test": { "#literal": true } - │ ┃ ───────────────────────────── Remove this labeled argument - ‡ ┃ -10 │ ┃ { "#literal": false } -11 │ ┃ ] - │ ┗━┛ In this special form call - │ - ├ help: Special forms only accept positional arguments. Convert all labeled arguments to positional arguments in the correct order. - ╰ note: Unlike regular functions, special forms have fixed parameter positions and cannot use labeled arguments. \ No newline at end of file +error[expander::labeled-arguments-not-supported]: Labeled arguments not supported + ╭▸ +6 │ ":test": { "#literal": true } + │ ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ labeled arguments are not allowed in `if` + │ + ╰ help: pass the arguments positionally: `(if condition then)` or `(if condition then else)` \ No newline at end of file diff --git a/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/let-2.jsonc b/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/let-2.jsonc index 8874c97f387..421331d8cf8 100644 --- a/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/let-2.jsonc +++ b/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/let-2.jsonc @@ -1,4 +1,4 @@ //@ run: fail //@ description: let/2 should error out ["::kernel::special_form::let", "x", { "#literal": true }] -//~^ ERROR Add missing arguments +//~^ ERROR expected 3 or 4 arguments to `let`, found 2 diff --git a/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/let-2.stderr b/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/let-2.stderr index 0f02728fe12..ef7e4209d33 100644 --- a/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/let-2.stderr +++ b/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/let-2.stderr @@ -1,9 +1,7 @@ -error[special-form-expander::special-form-argument-length]: Incorrect number of arguments for special form +error[expander::invalid-argument-count]: Invalid argument count ╭▸ 3 │ ["::kernel::special_form::let", "x", { "#literal": true }] - │ ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ Add missing arguments + │ ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ expected 3 or 4 arguments to `let`, found 2 │ - ├ help: Use either: - │ - let/3: (let name value body) - │ - let/4: (let name type value body) - ╰ note: The let function has 2 variants: let/3, let/4 \ No newline at end of file + ├ help: use `(let name value body)` or `(let name type value body)` + ╰ note: the arguments are, in order: the binding name, an optional type annotation, the bound value, and the body expression where the name is in scope \ No newline at end of file diff --git a/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/let-3.stdout b/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/let-3.stdout index 52207bde75d..fd4e1fb4f5a 100644 --- a/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/let-3.stdout +++ b/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/let-3.stdout @@ -10,8 +10,10 @@ Expr#4294967040@27 CallExpr#4294967040@26 Expr#4294967040@17 ExprKind (Path) - Path#4294967040@17 (rooted: false) - PathSegment#4294967040@16 (name: +) + Path#4294967040@17 (rooted: true) + PathSegment#4294967040@16 (name: core) + PathSegment#4294967040@16 (name: math) + PathSegment#4294967040@16 (name: add) Argument#4294967040@21 Expr#4294967040@21 ExprKind (Path) diff --git a/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/let-4.stdout b/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/let-4.stdout index cb564b62eeb..8198b3ed148 100644 --- a/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/let-4.stdout +++ b/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/let-4.stdout @@ -7,15 +7,19 @@ Expr#4294967040@31 Primitive (True) Type#4294967040@15 TypeKind (Path) - Path#4294967040@15 (rooted: false) + Path#4294967040@15 (rooted: true) + PathSegment#4294967040@14 (name: kernel) + PathSegment#4294967040@14 (name: type) PathSegment#4294967040@14 (name: Boolean) Expr#4294967040@30 ExprKind (Call) CallExpr#4294967040@30 Expr#4294967040@21 ExprKind (Path) - Path#4294967040@21 (rooted: false) - PathSegment#4294967040@20 (name: +) + Path#4294967040@21 (rooted: true) + PathSegment#4294967040@20 (name: core) + PathSegment#4294967040@20 (name: math) + PathSegment#4294967040@20 (name: add) Argument#4294967040@25 Expr#4294967040@25 ExprKind (Path) diff --git a/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/let-5.jsonc b/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/let-5.jsonc index 4f344140fa4..3e61fec9b42 100644 --- a/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/let-5.jsonc +++ b/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/let-5.jsonc @@ -7,5 +7,5 @@ { "#literal": true }, ["+", "x", "x"], { "#literal": true } - //~^ ERROR Remove this argument + //~^ ERROR unexpected argument ] diff --git a/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/let-5.stderr b/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/let-5.stderr index f131e8a6b9b..ca3ab689ef4 100644 --- a/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/let-5.stderr +++ b/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/let-5.stderr @@ -1,17 +1,15 @@ -error[special-form-expander::special-form-argument-length]: Incorrect number of arguments for special form +error[expander::invalid-argument-count]: Invalid argument count ╭▸ - 3 │ ┌ [ - 4 │ │ "::kernel::special_form::let", - 5 │ │ "x", - 6 │ │ "Boolean", - ‡ │ - 9 │ │ { "#literal": true } - │ │ ━━━━━━━━━━━━━━━━━━━━ Remove this argument -10 │ │ //~^ ERROR Remove this argument -11 │ │ ] - │ └─┘ In this `let` special form call + 3 │ ┏ [ + 4 │ ┃ "::kernel::special_form::let", + 5 │ ┃ "x", + 6 │ ┃ "Boolean", + ‡ ┃ + 9 │ ┃ { "#literal": true } + │ ┃ ──────────────────── unexpected argument +10 │ ┃ //~^ ERROR unexpected argument +11 │ ┃ ] + │ ┗━┛ expected 3 or 4 arguments to `let`, found 5 │ - ├ help: Use either: - │ - let/3: (let name value body) - │ - let/4: (let name type value body) - ╰ note: The let function has 2 variants: let/3, let/4 \ No newline at end of file + ├ help: use `(let name value body)` or `(let name type value body)` + ╰ note: the arguments are, in order: the binding name, an optional type annotation, the bound value, and the body expression where the name is in scope \ No newline at end of file diff --git a/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/let-argument-not-ident.jsonc b/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/let-argument-not-ident.jsonc index 1fb3ee07d9a..a89ebd58685 100644 --- a/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/let-argument-not-ident.jsonc +++ b/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/let-argument-not-ident.jsonc @@ -3,17 +3,17 @@ [ "::kernel::special_form::let", "Int", - //~^ ERROR Replace this with a simple identifier + //~^ ERROR expected a simple identifier for the `let` binding name { "#literal": true }, [ "::kernel::special_form::let", "x::A", - //~^ ERROR Replace this with a simple identifier + //~^ ERROR expected a simple identifier for the `let` binding name "y::B", [ "::kernel::special_form::let", "::z", - //~^ ERROR Replace this with a simple identifier + //~^ ERROR expected a simple identifier for the `let` binding name { "#literal": true }, ["+", "x", "y"] ] diff --git a/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/let-argument-not-ident.stderr b/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/let-argument-not-ident.stderr index 7811060c3f2..21354b71a08 100644 --- a/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/let-argument-not-ident.stderr +++ b/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/let-argument-not-ident.stderr @@ -1,23 +1,7 @@ -error[special-form-expander::qualified-binding-name]: Qualified path used as binding name +error[expander::invalid-binding-name]: Invalid binding name ╭▸ 5 │ "Int", - │ ━━━━━━ Replace this with a simple identifier + │ ━━━━━━ expected a simple identifier for the `let` binding name │ - ├ help: let binding names must be simple identifiers without any path qualification. Qualified paths cannot be used as binding names. - ╰ note: Valid identifiers are simple names like 'x', 'counter', '+', or 'user_name' without any namespace qualification, generic parameters, or path separators. - -error[special-form-expander::qualified-binding-name]: Qualified path used as binding name - ╭▸ -10 │ "x::A", - │ ━━━━ Replace this with a simple identifier - │ - ├ help: let binding names must be simple identifiers without any path qualification. Qualified paths cannot be used as binding names. - ╰ note: Valid identifiers are simple names like 'x', 'counter', '+', or 'user_name' without any namespace qualification, generic parameters, or path separators. - -error[special-form-expander::qualified-binding-name]: Qualified path used as binding name - ╭▸ -15 │ "::z", - │ ━━━ Replace this with a simple identifier - │ - ├ help: let binding names must be simple identifiers without any path qualification. Qualified paths cannot be used as binding names. - ╰ note: Valid identifiers are simple names like 'x', 'counter', '+', or 'user_name' without any namespace qualification, generic parameters, or path separators. \ No newline at end of file + ├ help: write `(let name value body)` with a plain name such as `x` + ╰ note: the first argument to `let` introduces a new local binding and must be a plain identifier without path qualification or generic arguments \ No newline at end of file diff --git a/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/let-argument-not-path.jsonc b/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/let-argument-not-path.jsonc index c19f5c8eafd..1bd16eaa126 100644 --- a/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/let-argument-not-path.jsonc +++ b/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/let-argument-not-path.jsonc @@ -3,7 +3,7 @@ [ "::kernel::special_form::let", { "#literal": true }, - //~^ ERROR Replace this expression with a simple identifier + //~^ ERROR expected a simple identifier for the `let` binding name { "#literal": true }, ["+", "x", "x"] ] diff --git a/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/let-argument-not-path.stderr b/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/let-argument-not-path.stderr index 52f710f5242..6f8d2ceb310 100644 --- a/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/let-argument-not-path.stderr +++ b/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/let-argument-not-path.stderr @@ -1,10 +1,7 @@ -error[special-form-expander::invalid-binding-name]: Invalid binding name +error[expander::invalid-binding-name]: Invalid binding name ╭▸ 5 │ { "#literal": true }, - │ ━━━━━━━━━━━━━━━━━━━━ Replace this expression with a simple identifier + │ ━━━━━━━━━━━━━━━━━━━━ expected a simple identifier for the `let` binding name │ - ├ help: The let binding name must be a simple identifier. Complex expressions are not allowed in binding positions. - ╰ note: Valid examples of let bindings: - - (let x value body) - - (let counter 0 ...) - - (let user_name input ...) \ No newline at end of file + ├ help: write `(let name value body)` with a plain name such as `x` + ╰ note: the first argument to `let` introduces a new local binding and must be a plain identifier without path qualification or generic arguments \ No newline at end of file diff --git a/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/let-collect-all-errors.jsonc b/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/let-collect-all-errors.jsonc index c3a89bb5da0..1dda3ad053f 100644 --- a/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/let-collect-all-errors.jsonc +++ b/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/let-collect-all-errors.jsonc @@ -3,9 +3,9 @@ [ "::kernel::special_form::let", "::x", - //~^ ERROR Replace this with a simple identifier + //~^ ERROR expected a simple identifier for the `let` binding name { "#literal": 1 }, - //~^ ERROR Replace this literal with a type name + //~^ ERROR cannot use a literal value as a type { "#literal": 1 }, "x" ] diff --git a/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/let-collect-all-errors.stderr b/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/let-collect-all-errors.stderr index cf7fe7dbedb..5000adb9827 100644 --- a/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/let-collect-all-errors.stderr +++ b/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/let-collect-all-errors.stderr @@ -1,21 +1,7 @@ -error[special-form-expander::invalid-type-expression]: Invalid type expression - ╭▸ -7 │ { "#literal": 1 }, - │ ━━━━━━━━━━━━━━━━━ Replace this literal with a type name - │ - ├ help: Replace this expression with a valid type reference, struct type, or tuple type - ╰ note: Valid type expressions include: - - Type names: String, Int, Float - - Struct types: {name: String, age: Int} - - Tuple types: (String, Int, Boolean) - - Unions: (| String Int) - - Intersections: (& String Int) - - Generic types: Array, Option - -error[special-form-expander::qualified-binding-name]: Qualified path used as binding name +error[expander::invalid-binding-name]: Invalid binding name ╭▸ 5 │ "::x", - │ ━━━ Replace this with a simple identifier + │ ━━━ expected a simple identifier for the `let` binding name │ - ├ help: let binding names must be simple identifiers without any path qualification. Qualified paths cannot be used as binding names. - ╰ note: Valid identifiers are simple names like 'x', 'counter', '+', or 'user_name' without any namespace qualification, generic parameters, or path separators. \ No newline at end of file + ├ help: write `(let name value body)` with a plain name such as `x` + ╰ note: the first argument to `let` introduces a new local binding and must be a plain identifier without path qualification or generic arguments \ No newline at end of file diff --git a/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/newtype-2.jsonc b/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/newtype-2.jsonc index 82e830dec5d..ceee6ef7315 100644 --- a/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/newtype-2.jsonc +++ b/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/newtype-2.jsonc @@ -1,4 +1,4 @@ //@ run: fail //@ description: newtype/2 should error out ["::kernel::special_form::newtype", "x", "Integer"] -//~^ ERROR Add missing arguments +//~^ ERROR expected 3 arguments to `newtype`, found 2 diff --git a/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/newtype-2.stderr b/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/newtype-2.stderr index 65f1e2c06c0..6d5804f3fed 100644 --- a/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/newtype-2.stderr +++ b/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/newtype-2.stderr @@ -1,7 +1,7 @@ -error[special-form-expander::special-form-argument-length]: Incorrect number of arguments for special form +error[expander::invalid-argument-count]: Invalid argument count ╭▸ 3 │ ["::kernel::special_form::newtype", "x", "Integer"] - │ ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ Add missing arguments + │ ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ expected 3 arguments to `newtype`, found 2 │ - ├ help: The newtype/3 form should look like: (newtype name type-expr body) - ╰ note: The newtype function has 1 variant: newtype/3 \ No newline at end of file + ├ help: use `(newtype Name type-expr body)` + ╰ note: the arguments are, in order: the type name (optionally with generic parameters), the underlying type, and the body where the name is in scope \ No newline at end of file diff --git a/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/newtype-3.stdout b/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/newtype-3.stdout index bb964e5dd05..be472c39786 100644 --- a/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/newtype-3.stdout +++ b/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/newtype-3.stdout @@ -3,7 +3,9 @@ Expr#4294967040@20 NewTypeExpr#4294967040@20 (name: x) Type#4294967040@15 TypeKind (Path) - Path#4294967040@15 (rooted: false) + Path#4294967040@15 (rooted: true) + PathSegment#4294967040@14 (name: kernel) + PathSegment#4294967040@14 (name: type) PathSegment#4294967040@14 (name: Integer) Expr#4294967040@19 ExprKind (Path) diff --git a/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/newtype-4.jsonc b/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/newtype-4.jsonc index ecdcfa0fdf8..87631dae4d6 100644 --- a/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/newtype-4.jsonc +++ b/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/newtype-4.jsonc @@ -6,5 +6,5 @@ "Boolean", ["+", "x", "x"], { "#literal": true } - //~^ ERROR Remove this argument + //~^ ERROR unexpected argument ] diff --git a/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/newtype-4.stderr b/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/newtype-4.stderr index 341f8c2b023..c97b34524d5 100644 --- a/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/newtype-4.stderr +++ b/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/newtype-4.stderr @@ -1,15 +1,15 @@ -error[special-form-expander::special-form-argument-length]: Incorrect number of arguments for special form +error[expander::invalid-argument-count]: Invalid argument count ╭▸ - 3 │ ┌ [ - 4 │ │ "::kernel::special_form::newtype", - 5 │ │ "x", - 6 │ │ "Boolean", - 7 │ │ ["+", "x", "x"], - 8 │ │ { "#literal": true } - │ │ ━━━━━━━━━━━━━━━━━━━━ Remove this argument - 9 │ │ //~^ ERROR Remove this argument -10 │ │ ] - │ └─┘ In this `newtype` special form call + 3 │ ┏ [ + 4 │ ┃ "::kernel::special_form::newtype", + 5 │ ┃ "x", + 6 │ ┃ "Boolean", + 7 │ ┃ ["+", "x", "x"], + 8 │ ┃ { "#literal": true } + │ ┃ ──────────────────── unexpected argument + 9 │ ┃ //~^ ERROR unexpected argument +10 │ ┃ ] + │ ┗━┛ expected 3 arguments to `newtype`, found 4 │ - ├ help: The newtype/3 form should look like: (newtype name type-expr body) - ╰ note: The newtype function has 1 variant: newtype/3 \ No newline at end of file + ├ help: use `(newtype Name type-expr body)` + ╰ note: the arguments are, in order: the type name (optionally with generic parameters), the underlying type, and the body where the name is in scope \ No newline at end of file diff --git a/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/newtype-collect-all-errors.jsonc b/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/newtype-collect-all-errors.jsonc index 65360071140..c8d82a1aa0b 100644 --- a/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/newtype-collect-all-errors.jsonc +++ b/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/newtype-collect-all-errors.jsonc @@ -1,5 +1,5 @@ //@ run: fail //@ description: We should collect all errors when lowering newtype/3, and not only report the first one. ["::kernel::special_form::newtype", "::x", { "#literal": 1 }, "x"] -//~^ ERROR Replace this qualified path with a simple identifier -//~| ERROR Replace this literal with a type name +//~^ ERROR expected a type name for the `newtype` binding +//~| ERROR cannot use a literal value as a type diff --git a/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/newtype-collect-all-errors.stderr b/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/newtype-collect-all-errors.stderr index 5fd593c50af..6bfb4ce07e3 100644 --- a/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/newtype-collect-all-errors.stderr +++ b/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/newtype-collect-all-errors.stderr @@ -1,21 +1,7 @@ -error[special-form-expander::invalid-type-expression]: Invalid type expression +error[expander::invalid-binding-name]: Invalid binding name ╭▸ 3 │ ["::kernel::special_form::newtype", "::x", { "#literal": 1 }, "x"] - │ ━━━━━━━━━━━━━━━━━ Replace this literal with a type name + │ ━━━ expected a type name for the `newtype` binding │ - ├ help: Replace this expression with a valid type reference, struct type, or tuple type - ╰ note: Valid type expressions include: - - Type names: String, Int, Float - - Struct types: {name: String, age: Int} - - Tuple types: (String, Int, Boolean) - - Unions: (| String Int) - - Intersections: (& String Int) - - Generic types: Array, Option - -error[special-form-expander::qualified-binding-name]: Qualified path used as binding name - ╭▸ -3 │ ["::kernel::special_form::newtype", "::x", { "#literal": 1 }, "x"] - │ ━━━ Replace this qualified path with a simple identifier - │ - ├ help: The newtype binding requires a simple type name (like 'String' or 'MyType'), not a qualified path (like 'std::string::String'). Remove the path segments. - ╰ note: Valid type names are simple identifiers, optionally followed by generic arguments (e.g., 'Identifier' or 'Container'). They cannot contain '::' path separators in this context. \ No newline at end of file + ├ help: write `(newtype Name type-expr body)` with a name like `UserId` or `Pair` + ╰ note: the first argument to `newtype` introduces a new distinct type and must be a simple identifier, optionally with generic parameters \ No newline at end of file diff --git a/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/newtype-constraints.jsonc b/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/newtype-constraints.jsonc index 2ea18aca8fa..ba45123328a 100644 --- a/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/newtype-constraints.jsonc +++ b/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/newtype-constraints.jsonc @@ -1,3 +1,3 @@ //@ run: pass //@ description: Constraints should be converted to an AST node -["::kernel::special_form::newtype", "Foo", "Integer", "_"] +["::kernel::special_form::newtype", "Foo", "Integer", "_"] diff --git a/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/newtype-constraints.stdout b/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/newtype-constraints.stdout index 76cc78cc0b6..1027e5e81e3 100644 --- a/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/newtype-constraints.stdout +++ b/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/newtype-constraints.stdout @@ -5,11 +5,15 @@ Expr#4294967040@28 GenericConstraint#4294967040@19 (name: U) Type#4294967040@18 TypeKind (Path) - Path#4294967040@18 (rooted: false) - PathSegment#4294967040@17 (name: Bar) + Path#4294967040@18 (rooted: true) + PathSegment#4294967040@17 (name: kernel) + PathSegment#4294967040@17 (name: type) + PathSegment#4294967040@17 (name: Number) Type#4294967040@25 TypeKind (Path) - Path#4294967040@25 (rooted: false) + Path#4294967040@25 (rooted: true) + PathSegment#4294967040@24 (name: kernel) + PathSegment#4294967040@24 (name: type) PathSegment#4294967040@24 (name: Integer) Expr#4294967040@27 ExprKind (Underscore) diff --git a/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/not-enough-segments.stderr b/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/not-enough-segments.stderr index 89f6f1e4fba..c131e4ba921 100644 --- a/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/not-enough-segments.stderr +++ b/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/not-enough-segments.stderr @@ -1,7 +1,8 @@ -error[special-form-expander::unknown-special-form]: Unknown special form +error[expander::item-not-found]: Item not found ╭▸ 4 │ "::kernel::special_form", - │ ━━━━━━━━━━━━━━━━━━━━━━ Fix this path to have exactly 3 segments + │ ┬───── ━━━━━━━━━━━━ cannot find `special_form` in module `::kernel` + │ │ + │ looked in this module │ - ├ help: Special form paths must follow the pattern '::kernel::special_form::' with exactly 3 segments - ╰ note: Found path with 2 segments, but special form paths must have exactly 3 segments \ No newline at end of file + ╰ help: check the spelling and ensure the item is exported \ No newline at end of file diff --git a/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/too-many-segments.stderr b/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/too-many-segments.stderr index 838742a7b6e..7894e15a36c 100644 --- a/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/too-many-segments.stderr +++ b/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/too-many-segments.stderr @@ -1,10 +1,9 @@ -error[special-form-expander::unknown-special-form]: Unknown special form +error[expander::module-required]: Module required ╭▸ 4 │ "::kernel::special_form::if::extra", - │ ┯━━━━━━━━━━━━━━━━━━━━━━━━━━━┬──── - │ │ │ - │ │ Remove this extra segment - │ Fix this path to have exactly 3 segments + │ ┯━ ───── cannot access items inside a non-module + │ │ + │ `::kernel::special_form::if` is a value, not a module │ - ├ help: Special form paths must follow the pattern '::kernel::special_form::' with exactly 3 segments - ╰ note: Found path with 4 segments, but special form paths must have exactly 3 segments \ No newline at end of file + ├ help: if you meant to access a field, use `.` instead of `::` + ╰ note: the `::` separator navigates into modules; values and types do not contain sub-items \ No newline at end of file diff --git a/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/type-2.jsonc b/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/type-2.jsonc index 95916919da9..c04259b99db 100644 --- a/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/type-2.jsonc +++ b/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/type-2.jsonc @@ -1,4 +1,4 @@ //@ run: fail //@ description: type/2 should error out ["::kernel::special_form::type", "x", "Integer"] -//~^ ERROR Add missing arguments +//~^ ERROR expected 3 arguments to `type`, found 2 diff --git a/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/type-2.stderr b/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/type-2.stderr index 888ac83beb7..df43df456ba 100644 --- a/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/type-2.stderr +++ b/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/type-2.stderr @@ -1,7 +1,7 @@ -error[special-form-expander::special-form-argument-length]: Incorrect number of arguments for special form +error[expander::invalid-argument-count]: Invalid argument count ╭▸ 3 │ ["::kernel::special_form::type", "x", "Integer"] - │ ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ Add missing arguments + │ ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ expected 3 arguments to `type`, found 2 │ - ├ help: The type/3 form should look like: (type name type-expr body) - ╰ note: The type function has 1 variant: type/3 \ No newline at end of file + ├ help: use `(type Name type-expr body)` + ╰ note: the arguments are, in order: the type name (optionally with generic parameters), the type definition, and the body where the name is in scope \ No newline at end of file diff --git a/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/type-4.jsonc b/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/type-4.jsonc index 1ba22332b8d..afb2ee2f482 100644 --- a/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/type-4.jsonc +++ b/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/type-4.jsonc @@ -6,5 +6,5 @@ "Boolean", ["+", "x", "x"], { "#literal": true } - //~^ ERROR Remove this argument + //~^ ERROR unexpected argument ] diff --git a/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/type-4.stderr b/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/type-4.stderr index 0213de44b0e..1d81416e70c 100644 --- a/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/type-4.stderr +++ b/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/type-4.stderr @@ -1,15 +1,15 @@ -error[special-form-expander::special-form-argument-length]: Incorrect number of arguments for special form +error[expander::invalid-argument-count]: Invalid argument count ╭▸ - 3 │ ┌ [ - 4 │ │ "::kernel::special_form::type", - 5 │ │ "x", - 6 │ │ "Boolean", - 7 │ │ ["+", "x", "x"], - 8 │ │ { "#literal": true } - │ │ ━━━━━━━━━━━━━━━━━━━━ Remove this argument - 9 │ │ //~^ ERROR Remove this argument -10 │ │ ] - │ └─┘ In this `type` special form call + 3 │ ┏ [ + 4 │ ┃ "::kernel::special_form::type", + 5 │ ┃ "x", + 6 │ ┃ "Boolean", + 7 │ ┃ ["+", "x", "x"], + 8 │ ┃ { "#literal": true } + │ ┃ ──────────────────── unexpected argument + 9 │ ┃ //~^ ERROR unexpected argument +10 │ ┃ ] + │ ┗━┛ expected 3 arguments to `type`, found 4 │ - ├ help: The type/3 form should look like: (type name type-expr body) - ╰ note: The type function has 1 variant: type/3 \ No newline at end of file + ├ help: use `(type Name type-expr body)` + ╰ note: the arguments are, in order: the type name (optionally with generic parameters), the type definition, and the body where the name is in scope \ No newline at end of file diff --git a/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/type-collect-all-errors.jsonc b/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/type-collect-all-errors.jsonc index f8958b0cd3d..a157f41477c 100644 --- a/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/type-collect-all-errors.jsonc +++ b/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/type-collect-all-errors.jsonc @@ -1,5 +1,5 @@ //@ run: fail //@ description: We should collect all errors when lowering type/3, and not only report the first one. ["::kernel::special_form::type", "::x", { "#literal": 1 }, "x"] -//~^ ERROR Replace this qualified path with a simple identifier -//~| ERROR Replace this literal with a type name +//~^ ERROR expected a type name for the `type` binding +//~| ERROR cannot use a literal value as a type diff --git a/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/type-collect-all-errors.stderr b/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/type-collect-all-errors.stderr index fb55601b5b0..4ce28048470 100644 --- a/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/type-collect-all-errors.stderr +++ b/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/type-collect-all-errors.stderr @@ -1,21 +1,7 @@ -error[special-form-expander::invalid-type-expression]: Invalid type expression +error[expander::invalid-binding-name]: Invalid binding name ╭▸ 3 │ ["::kernel::special_form::type", "::x", { "#literal": 1 }, "x"] - │ ━━━━━━━━━━━━━━━━━ Replace this literal with a type name + │ ━━━ expected a type name for the `type` binding │ - ├ help: Replace this expression with a valid type reference, struct type, or tuple type - ╰ note: Valid type expressions include: - - Type names: String, Int, Float - - Struct types: {name: String, age: Int} - - Tuple types: (String, Int, Boolean) - - Unions: (| String Int) - - Intersections: (& String Int) - - Generic types: Array, Option - -error[special-form-expander::qualified-binding-name]: Qualified path used as binding name - ╭▸ -3 │ ["::kernel::special_form::type", "::x", { "#literal": 1 }, "x"] - │ ━━━ Replace this qualified path with a simple identifier - │ - ├ help: The type binding requires a simple type name (like 'String' or 'MyType'), not a qualified path (like 'std::string::String'). Remove the path segments. - ╰ note: Valid type names are simple identifiers, optionally followed by generic arguments (e.g., 'Identifier' or 'Container'). They cannot contain '::' path separators in this context. \ No newline at end of file + ├ help: write `(type Name type-expr body)` with a name like `MyType` or `Pair` + ╰ note: the first argument to `type` introduces a new type alias and must be a simple identifier, optionally with generic parameters \ No newline at end of file diff --git a/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/type-expr-call-arbitrary.jsonc b/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/type-expr-call-arbitrary.jsonc index 1faa827e8d8..e849e184473 100644 --- a/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/type-expr-call-arbitrary.jsonc +++ b/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/type-expr-call-arbitrary.jsonc @@ -4,5 +4,5 @@ "::kernel::special_form::as", { "#literal": true }, ["::core::math::headpat", "Int", "Float"] - //~^ ERROR This function cannot be used as a type constructor + //~^ ERROR cannot use this as a type constructor ] diff --git a/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/type-expr-call-arbitrary.stderr b/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/type-expr-call-arbitrary.stderr index a2318ee60aa..1be765d040a 100644 --- a/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/type-expr-call-arbitrary.stderr +++ b/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/type-expr-call-arbitrary.stderr @@ -1,9 +1,24 @@ -error[special-form-expander::invalid-type-expression]: Invalid type expression +error[expander::unresolved-variable]: Unresolved variable ╭▸ 6 │ ["::core::math::headpat", "Int", "Float"] - │ ━━━━━━━━━━━━━━━━━━━━━ This function cannot be used as a type constructor + │ ━━━━━ cannot find `Float` in this scope │ - ├ help: Only specific type constructors like intersection (&) and union (|) operators can be used in type expressions. - ╰ note: Currently supported type operations are: - - Intersection: math::bit_and (written as & in source) - - Union: math::bit_or (written as | in source) \ No newline at end of file + ├ help: check the spelling, or import the name with a `use` statement + ╰ note: this could be a typo, a name used outside its scope, or a missing declaration; if it is a function or type from another module, you may need to import it first + +error[expander::unresolved-variable]: Unresolved variable + ╭▸ +6 │ ["::core::math::headpat", "Int", "Float"] + │ ━━━ cannot find `Int` in this scope + │ + ├ help: check the spelling, or import the name with a `use` statement + ╰ note: this could be a typo, a name used outside its scope, or a missing declaration; if it is a function or type from another module, you may need to import it first + +error[expander::item-not-found]: Item not found + ╭▸ +6 │ ["::core::math::headpat", "Int", "Float"] + │ ┬─── ━━━━━━━ cannot find `headpat` in module `::core::math` + │ │ + │ looked in this module + │ + ╰ help: check the spelling and ensure the item is exported \ No newline at end of file diff --git a/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/type-expr-call-not-path.jsonc b/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/type-expr-call-not-path.jsonc index 17fc10a5dce..80efaefff35 100644 --- a/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/type-expr-call-not-path.jsonc +++ b/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/type-expr-call-not-path.jsonc @@ -5,8 +5,8 @@ { "#literal": true }, [ ["+", { "#literal": 1 }, { "#literal": 2 }], - //~^ ERROR Function call with non-path callee cannot be used as a type - "Int", - "Float" + //~^ ERROR cannot use this as a type constructor + "Integer", + "Number" ] ] diff --git a/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/type-expr-call-not-path.stderr b/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/type-expr-call-not-path.stderr index cca84924ac3..549c26c45a8 100644 --- a/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/type-expr-call-not-path.stderr +++ b/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/type-expr-call-not-path.stderr @@ -1,13 +1,37 @@ -error[special-form-expander::invalid-type-expression]: Invalid type expression +error[expander::invalid-type-constructor-call]: Invalid type constructor call + ╭▸ + 6 │ ┌ [ + 7 │ │ ["+", { "#literal": 1 }, { "#literal": 2 }], + │ │ ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ cannot use this as a type constructor + 8 │ │ //~^ ERROR cannot use this as a type constructor + 9 │ │ "Integer", +10 │ │ "Number" +11 │ │ ] + │ └───┘ this call appears in a type position + │ + ├ help: use a type path directly, or use `(| ...)` / `(& ...)` for unions and intersections + ╰ note: generic type arguments belong on the type path itself, for example `Foo`, not `(Foo T)` + +error[expander::unresolved-variable]: Unresolved variable ╭▸ 7 │ ["+", { "#literal": 1 }, { "#literal": 2 }], - │ ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ Function call with non-path callee cannot be used as a type + │ ━ cannot find `+` in this scope │ - ├ help: Only specific type constructors like intersection (&) and union (|) operators can be used in type expressions. - ╰ note: Valid type expressions include: - - Type names: String, Int, Float - - Struct types: {name: String, age: Int} - - Tuple types: (String, Int, Boolean) - - Unions: (| String Int) - - Intersections: (& String Int) - - Generic types: Array, Option \ No newline at end of file + ╰ note: this could be a typo, a name used outside its scope, or a missing declaration; if it is a function or type from another module, you may need to import it first +help: a similar imported name exists + ╭╴ +7 - ["+", { "#literal": 1 }, { "#literal": 2 }], +7 + ["String", { "#literal": 1 }, { "#literal": 2 }], + ├╴ +7 - ["+", { "#literal": 1 }, { "#literal": 2 }], +7 + ["Union", { "#literal": 1 }, { "#literal": 2 }], + ├╴ +7 - ["+", { "#literal": 1 }, { "#literal": 2 }], +7 + ["Unknown", { "#literal": 1 }, { "#literal": 2 }], + ├╴ +7 - ["+", { "#literal": 1 }, { "#literal": 2 }], +7 + ["Url", { "#literal": 1 }, { "#literal": 2 }], + ├╴ +7 - ["+", { "#literal": 1 }, { "#literal": 2 }], +7 + ["|", { "#literal": 1 }, { "#literal": 2 }], + ╰╴ \ No newline at end of file diff --git a/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/type-expr-invalid.jsonc b/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/type-expr-invalid.jsonc index 7059285a0d8..fd83756d55c 100644 --- a/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/type-expr-invalid.jsonc +++ b/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/type-expr-invalid.jsonc @@ -11,14 +11,14 @@ "x", // ensure that we properly resolve nested is expressions as errors ["::kernel::special_form::as", "x", "X"] - //~^ ERROR Replace this as with a proper type expression + //~^ ERROR cannot use an `as` expression as a type ], { "#literal": 1 } - //~^ ERROR Replace this literal with a type name + //~^ ERROR cannot use a literal value as a type ], { "#list": ["a", "b"] } - //~^ ERROR Replace this list with a proper type expression + //~^ ERROR cannot use a list expression as a type ], { "#dict": { "a": "b" } } - //~^ ERROR Replace this dictionary with a proper type expression + //~^ ERROR cannot use a dictionary expression as a type ] diff --git a/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/type-expr-invalid.stderr b/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/type-expr-invalid.stderr index e14b4e82e4f..ca45b24e825 100644 --- a/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/type-expr-invalid.stderr +++ b/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/type-expr-invalid.stderr @@ -1,55 +1,175 @@ -error[special-form-expander::invalid-type-expression]: Invalid type expression +error[expander::invalid-expression-in-type-position]: Invalid expression in type position ╭▸ 22 │ { "#dict": { "a": "b" } } - │ ━━━━━━━━━━━━━━━━━━━━━━━━━ Replace this dictionary with a proper type expression + │ ━━━━━━━━━━━━━━━━━━━━━━━━━ cannot use a dictionary expression as a type │ - ├ help: Dictionaries do not constitute a valid type expression, did you mean to instantiate a struct type or refer to the `Dict` type? - ╰ note: Valid type expressions include: - - Type names: String, Int, Float - - Struct types: {name: String, age: Int} - - Tuple types: (String, Int, Boolean) - - Unions: (| String Int) - - Intersections: (& String Int) - - Generic types: Array, Option + ├ help: replace this with a type path, tuple type, struct type, `_`, `(| ...)`, or `(& ...)` + ╰ note: valid type forms are: type paths like `String`, tuple types like `(Int, String)`, struct types like `(name: String)`, `_` for inference, unions `(| ...)`, and intersections `(& ...)` -error[special-form-expander::invalid-type-expression]: Invalid type expression +error[expander::item-not-found]: Item not found + ╭▸ +13 │ ["::kernel::special_form::as", "x", "X"] + │ ┬─────────── ━━ cannot find `as` in module `::kernel::special_form` + │ │ + │ looked in this module + │ + ╰ help: check the spelling and ensure the item is exported + +error[expander::unresolved-variable]: Unresolved variable + ╭▸ +13 │ ["::kernel::special_form::as", "x", "X"] + │ ━ cannot find `x` in this scope + │ + ╰ note: this could be a typo, a name used outside its scope, or a missing declaration; if it is a function or type from another module, you may need to import it first +help: a similar imported name exists + ╭╴ +13 - ["::kernel::special_form::as", "x", "X"] +13 + ["::kernel::special_form::as", "String", "X"] + ├╴ +13 - ["::kernel::special_form::as", "x", "X"] +13 + ["::kernel::special_form::as", "Union", "X"] + ├╴ +13 - ["::kernel::special_form::as", "x", "X"] +13 + ["::kernel::special_form::as", "Unknown", "X"] + ├╴ +13 - ["::kernel::special_form::as", "x", "X"] +13 + ["::kernel::special_form::as", "Url", "X"] + ├╴ +13 - ["::kernel::special_form::as", "x", "X"] +13 + ["::kernel::special_form::as", "|", "X"] + ╰╴ + +error[expander::unresolved-variable]: Unresolved variable + ╭▸ +13 │ ["::kernel::special_form::as", "x", "X"] + │ ━ cannot find `X` in this scope + │ + ╰ note: this could be a typo, a name used outside its scope, or a missing declaration; if it is a function or type from another module, you may need to import it first +help: a similar imported name exists + ╭╴ +13 - ["::kernel::special_form::as", "x", "X"] +13 + ["::kernel::special_form::as", "x", "String"] + ├╴ +13 - ["::kernel::special_form::as", "x", "X"] +13 + ["::kernel::special_form::as", "x", "Union"] + ├╴ +13 - ["::kernel::special_form::as", "x", "X"] +13 + ["::kernel::special_form::as", "x", "Unknown"] + ├╴ +13 - ["::kernel::special_form::as", "x", "X"] +13 + ["::kernel::special_form::as", "x", "Url"] + ├╴ +13 - ["::kernel::special_form::as", "x", "X"] +13 + ["::kernel::special_form::as", "x", "|"] + ╰╴ + +error[expander::invalid-expression-in-type-position]: Invalid expression in type position ╭▸ 16 │ { "#literal": 1 } - │ ━━━━━━━━━━━━━━━━━ Replace this literal with a type name + │ ━━━━━━━━━━━━━━━━━ cannot use a literal value as a type │ - ├ help: Replace this expression with a valid type reference, struct type, or tuple type - ╰ note: Valid type expressions include: - - Type names: String, Int, Float - - Struct types: {name: String, age: Int} - - Tuple types: (String, Int, Boolean) - - Unions: (| String Int) - - Intersections: (& String Int) - - Generic types: Array, Option + ├ help: replace this with a type path, tuple type, struct type, `_`, `(| ...)`, or `(& ...)` + ╰ note: valid type forms are: type paths like `String`, tuple types like `(Int, String)`, struct types like `(name: String)`, `_` for inference, unions `(| ...)`, and intersections `(& ...)` -error[special-form-expander::invalid-type-expression]: Invalid type expression +error[expander::unresolved-variable]: Unresolved variable ╭▸ 19 │ { "#list": ["a", "b"] } - │ ━━━━━━━━━━━━━━━━━━━━━━━ Replace this list with a proper type expression + │ ━ cannot find `a` in this scope │ - ├ help: Arrays do not constitute a valid type expression, did you mean to instantiate a tuple type or refer to the `Array` type? - ╰ note: Valid type expressions include: - - Type names: String, Int, Float - - Struct types: {name: String, age: Int} - - Tuple types: (String, Int, Boolean) - - Unions: (| String Int) - - Intersections: (& String Int) - - Generic types: Array, Option + ╰ note: this could be a typo, a name used outside its scope, or a missing declaration; if it is a function or type from another module, you may need to import it first +help: a similar imported name exists + ╭╴ +19 - { "#list": ["a", "b"] } +19 + { "#list": ["Union", "b"] } + ├╴ +19 - { "#list": ["a", "b"] } +19 + { "#list": ["Unknown", "b"] } + ├╴ +19 - { "#list": ["a", "b"] } +19 + { "#list": ["Url", "b"] } + ├╴ +19 - { "#list": ["a", "b"] } +19 + { "#list": ["|", "b"] } + ├╴ +19 - { "#list": ["a", "b"] } +19 + { "#list": ["Boolean", "b"] } + ╰╴ -error[special-form-expander::invalid-type-expression]: Invalid type expression +error[expander::unresolved-variable]: Unresolved variable ╭▸ -13 │ ["::kernel::special_form::as", "x", "X"] - │ ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ Replace this as with a proper type expression - │ - ├ help: Replace this expression with a valid type reference, struct type, or tuple type - ╰ note: Valid type expressions include: - - Type names: String, Int, Float - - Struct types: {name: String, age: Int} - - Tuple types: (String, Int, Boolean) - - Unions: (| String Int) - - Intersections: (& String Int) - - Generic types: Array, Option \ No newline at end of file +19 │ { "#list": ["a", "b"] } + │ ━ cannot find `b` in this scope + │ + ╰ note: this could be a typo, a name used outside its scope, or a missing declaration; if it is a function or type from another module, you may need to import it first +help: a similar imported name exists + ╭╴ +19 - { "#list": ["a", "b"] } +19 + { "#list": ["a", "Union"] } + ├╴ +19 - { "#list": ["a", "b"] } +19 + { "#list": ["a", "Unknown"] } + ├╴ +19 - { "#list": ["a", "b"] } +19 + { "#list": ["a", "Url"] } + ├╴ +19 - { "#list": ["a", "b"] } +19 + { "#list": ["a", "|"] } + ├╴ +19 - { "#list": ["a", "b"] } +19 + { "#list": ["a", "Number"] } + ╰╴ + +error[expander::invalid-expression-in-type-position]: Invalid expression in type position + ╭▸ +19 │ { "#list": ["a", "b"] } + │ ━━━━━━━━━━━━━━━━━━━━━━━ cannot use a list expression as a type + │ + ├ help: replace this with a type path, tuple type, struct type, `_`, `(| ...)`, or `(& ...)` + ╰ note: valid type forms are: type paths like `String`, tuple types like `(Int, String)`, struct types like `(name: String)`, `_` for inference, unions `(| ...)`, and intersections `(& ...)` + +error[expander::unresolved-variable]: Unresolved variable + ╭▸ +22 │ { "#dict": { "a": "b" } } + │ ━ cannot find `b` in this scope + │ + ╰ note: this could be a typo, a name used outside its scope, or a missing declaration; if it is a function or type from another module, you may need to import it first +help: a similar imported name exists + ╭╴ +22 - { "#dict": { "a": "b" } } +22 + { "#dict": { "a": "Union" } } + ├╴ +22 - { "#dict": { "a": "b" } } +22 + { "#dict": { "a": "Unknown" } } + ├╴ +22 - { "#dict": { "a": "b" } } +22 + { "#dict": { "a": "Url" } } + ├╴ +22 - { "#dict": { "a": "b" } } +22 + { "#dict": { "a": "|" } } + ├╴ +22 - { "#dict": { "a": "b" } } +22 + { "#dict": { "a": "Number" } } + ╰╴ + +error[expander::unresolved-variable]: Unresolved variable + ╭▸ +11 │ "x", + │ ━ cannot find `x` in this scope + │ + ╰ note: this could be a typo, a name used outside its scope, or a missing declaration; if it is a function or type from another module, you may need to import it first +help: a similar imported name exists + ╭╴ +11 - "x", +11 + "~", + ├╴ +11 - "x", +11 + "↑", + ├╴ +11 - "x", +11 + "√", + ├╴ +11 - "x", +11 + "∛", + ├╴ +11 │ "index", + ╰╴ ++++ \ No newline at end of file diff --git a/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/type-generic-absolute-path.jsonc b/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/type-generic-absolute-path.jsonc index 9e71854a913..d58be4ca50a 100644 --- a/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/type-generic-absolute-path.jsonc +++ b/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/type-generic-absolute-path.jsonc @@ -3,7 +3,7 @@ [ "::kernel::special_form::type", "Foo<::foo::Bar>", - //~^ ERROR Generic arguments must be simple identifiers - { "#struct": { "foo": "Bar" } }, + //~^ ERROR expected a simple type parameter + { "#struct": { "foo": "Integer" } }, "_" ] diff --git a/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/type-generic-absolute-path.stderr b/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/type-generic-absolute-path.stderr index 641a2562e1b..703408d484d 100644 --- a/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/type-generic-absolute-path.stderr +++ b/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/type-generic-absolute-path.stderr @@ -1,7 +1,7 @@ -error[special-form-expander::invalid-generic-argument-path]: Invalid path in generic argument +error[expander::invalid-generic-argument]: Invalid generic argument ╭▸ 5 │ "Foo<::foo::Bar>", - │ ━━━━━━━━━━ Replace with a simple identifier + │ ━━━━━━━━━━ expected a simple type parameter │ - ├ help: Generic arguments must be simple identifiers. Qualified paths cannot be used as generic arguments in this context. - ╰ note: In generic parameter constraints, arguments should be simple identifiers like 'T', 'U', or 'Element' without namespace qualification or path separators. \ No newline at end of file + ├ help: use a simple identifier like `T`, not a qualified path + ╰ note: generic parameters are declared as `Name` for unconstrained or `Name` for constrained parameters \ No newline at end of file diff --git a/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/type-generic-duplicate.jsonc b/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/type-generic-duplicate.jsonc index e2d3394152c..53667bf74d6 100644 --- a/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/type-generic-duplicate.jsonc +++ b/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/type-generic-duplicate.jsonc @@ -3,7 +3,7 @@ [ "::kernel::special_form::type", "Foo", - //~^ ERROR Remove this duplicate declaration of 'T' + //~^ ERROR duplicate generic parameter `T` { "#struct": { "foo": "Bar" } }, "_" ] diff --git a/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/type-generic-duplicate.stderr b/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/type-generic-duplicate.stderr index d3c67b6aabe..4112fb43175 100644 --- a/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/type-generic-duplicate.stderr +++ b/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/type-generic-duplicate.stderr @@ -1,9 +1,24 @@ -error[special-form-expander::duplicate-generic-constraint]: Duplicate generic parameter constraint +error[expander::unresolved-variable]: Unresolved variable + ╭▸ +7 │ { "#struct": { "foo": "Bar" } }, + │ ━━━ cannot find `Bar` in this scope + │ + ├ help: check the spelling, or import the name with a `use` statement + ╰ note: this could be a typo, a name used outside its scope, or a missing declaration; if it is a function or type from another module, you may need to import it first + +error[expander::unresolved-variable]: Unresolved variable + ╭▸ +5 │ "Foo", + │ ━━━ cannot find `Bar` in this scope + │ + ├ help: check the spelling, or import the name with a `use` statement + ╰ note: this could be a typo, a name used outside its scope, or a missing declaration; if it is a function or type from another module, you may need to import it first + +error[expander::duplicate-generic-constraint]: Duplicate generic constraint ╭▸ 5 │ "Foo", - │ ┬ ━ Remove this duplicate declaration of 'T' + │ ┬ ━ duplicate generic parameter `T` │ │ - │ 'T' was previously declared here + │ `T` was first declared here │ - ├ help: Each generic parameter can only be declared once in a function or type definition. Remove the duplicate declaration or use a different name. - ╰ note: Generic parameter names must be unique within a single generic parameter list. For example, in foo, 'T' and 'U' are unique parameters. \ No newline at end of file + ╰ help: remove the duplicate declaration or use a different name \ No newline at end of file diff --git a/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/type-generic-generic-ident.jsonc b/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/type-generic-generic-ident.jsonc index 5bfeb06fda2..057e5176f57 100644 --- a/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/type-generic-generic-ident.jsonc +++ b/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/type-generic-generic-ident.jsonc @@ -3,7 +3,7 @@ [ "::kernel::special_form::type", "Foo>", - //~^ ERROR Generic arguments must be simple identifiers + //~^ ERROR expected a simple type parameter { "#struct": { "foo": "Bar" } }, "_" ] diff --git a/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/type-generic-generic-ident.stderr b/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/type-generic-generic-ident.stderr index 7fc76ef1683..df213e8c239 100644 --- a/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/type-generic-generic-ident.stderr +++ b/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/type-generic-generic-ident.stderr @@ -1,7 +1,15 @@ -error[special-form-expander::invalid-generic-argument-path]: Invalid path in generic argument +error[expander::unresolved-variable]: Unresolved variable + ╭▸ +7 │ { "#struct": { "foo": "Bar" } }, + │ ━━━ cannot find `Bar` in this scope + │ + ├ help: check the spelling, or import the name with a `use` statement + ╰ note: this could be a typo, a name used outside its scope, or a missing declaration; if it is a function or type from another module, you may need to import it first + +error[expander::invalid-generic-argument]: Invalid generic argument ╭▸ 5 │ "Foo>", - │ ━━━━━━━━ Replace with a simple identifier + │ ━━━━━━━━ expected a simple type parameter │ - ├ help: Generic arguments must be simple identifiers. Qualified paths cannot be used as generic arguments in this context. - ╰ note: In generic parameter constraints, arguments should be simple identifiers like 'T', 'U', or 'Element' without namespace qualification or path separators. \ No newline at end of file + ├ help: use a simple identifier like `T`, not a qualified path + ╰ note: generic parameters are declared as `Name` for unconstrained or `Name` for constrained parameters \ No newline at end of file diff --git a/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/type-generic-relative-path.jsonc b/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/type-generic-relative-path.jsonc index 5b96bbdb5b2..db243218f0c 100644 --- a/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/type-generic-relative-path.jsonc +++ b/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/type-generic-relative-path.jsonc @@ -3,7 +3,7 @@ [ "::kernel::special_form::type", "Foo", - //~^ ERROR Generic arguments must be simple identifiers + //~^ ERROR expected a simple type parameter { "#struct": { "foo": "Bar" } }, "_" ] diff --git a/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/type-generic-relative-path.stderr b/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/type-generic-relative-path.stderr index 6a87a800337..57434b93422 100644 --- a/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/type-generic-relative-path.stderr +++ b/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/type-generic-relative-path.stderr @@ -1,7 +1,15 @@ -error[special-form-expander::invalid-generic-argument-path]: Invalid path in generic argument +error[expander::unresolved-variable]: Unresolved variable + ╭▸ +7 │ { "#struct": { "foo": "Bar" } }, + │ ━━━ cannot find `Bar` in this scope + │ + ├ help: check the spelling, or import the name with a `use` statement + ╰ note: this could be a typo, a name used outside its scope, or a missing declaration; if it is a function or type from another module, you may need to import it first + +error[expander::invalid-generic-argument]: Invalid generic argument ╭▸ 5 │ "Foo", - │ ━━━━━━━━ Replace with a simple identifier + │ ━━━━━━━━ expected a simple type parameter │ - ├ help: Generic arguments must be simple identifiers. Qualified paths cannot be used as generic arguments in this context. - ╰ note: In generic parameter constraints, arguments should be simple identifiers like 'T', 'U', or 'Element' without namespace qualification or path separators. \ No newline at end of file + ├ help: use a simple identifier like `T`, not a qualified path + ╰ note: generic parameters are declared as `Name` for unconstrained or `Name` for constrained parameters \ No newline at end of file diff --git a/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/type-generic-struct.jsonc b/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/type-generic-struct.jsonc index 9da8fcd96b7..a783c46af90 100644 --- a/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/type-generic-struct.jsonc +++ b/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/type-generic-struct.jsonc @@ -3,7 +3,7 @@ [ "::kernel::special_form::type", "Foo<(a: String)>", - //~^ ERROR Generic argument types must be simple path identifiers + //~^ ERROR expected a simple type parameter { "#struct": { "foo": "Bar" } }, "_" ] diff --git a/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/type-generic-struct.stderr b/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/type-generic-struct.stderr index 96efe0878e6..cb6d49d54d4 100644 --- a/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/type-generic-struct.stderr +++ b/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/type-generic-struct.stderr @@ -1,7 +1,15 @@ -error[special-form-expander::invalid-generic-argument-type]: Invalid type in generic argument +error[expander::unresolved-variable]: Unresolved variable + ╭▸ +7 │ { "#struct": { "foo": "Bar" } }, + │ ━━━ cannot find `Bar` in this scope + │ + ├ help: check the spelling, or import the name with a `use` statement + ╰ note: this could be a typo, a name used outside its scope, or a missing declaration; if it is a function or type from another module, you may need to import it first + +error[expander::invalid-generic-argument]: Invalid generic argument ╭▸ 5 │ "Foo<(a: String)>", - │ ━━━━━━━━━━━ Use a simple type identifier here + │ ━━━━━━━━━━━ expected a simple type parameter │ - ├ help: Generic argument types must be simple path identifiers. Complex types like structs, tuples, or function types cannot be used as generic argument types in this context. - ╰ note: Valid generic argument types are simple identifiers that refer to type names, such as 'String', 'Number', or type parameters like 'T'. \ No newline at end of file + ├ help: use a simple identifier like `T` or a constraint like `T: Bound` + ╰ note: generic parameters are declared as `Name` for unconstrained or `Name` for constrained parameters \ No newline at end of file diff --git a/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/type-generic.stdout b/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/type-generic.stdout index e5e62631a6c..6582c8ae8a6 100644 --- a/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/type-generic.stdout +++ b/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/type-generic.stdout @@ -2,9 +2,9 @@ Expr#4294967040@28 ExprKind (Type) TypeExpr#4294967040@28 (name: Foo) GenericConstraint#4294967040@14 (name: Bar) - Type#4294967040@24 + Type#4294967040@25 TypeKind (Struct) - StructType#4294967040@24 + StructType#4294967040@25 StructField#4294967040@23 (name: foo) Type#4294967040@22 TypeKind (Path) diff --git a/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/type-struct-has-type.jsonc b/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/type-struct-has-type.jsonc index ac2ee070fa8..2e78ed2fc4f 100644 --- a/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/type-struct-has-type.jsonc +++ b/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/type-struct-has-type.jsonc @@ -6,7 +6,7 @@ { "#struct": { "name": "String" }, "#type": "(name: String)" - //~^ ERROR Remove this type annotation + //~^ ERROR type annotations are not allowed inside a type expression }, "x" ] diff --git a/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/type-struct-has-type.stderr b/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/type-struct-has-type.stderr index cc0a2673554..2808c6ecb22 100644 --- a/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/type-struct-has-type.stderr +++ b/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/type-struct-has-type.stderr @@ -1,7 +1,35 @@ -error[special-form-expander::type-with-existing-annotation]: Type expression with redundant type annotation - ╭▸ -8 │ "#type": "(name: String)" - │ ━━━━━━━━━━━━━━ Remove this type annotation - │ - ├ help: Type expressions used in special forms cannot have their own type annotations. The expression itself defines a type and cannot be annotated with another type. - ╰ note: When constructing type expressions for special forms like 'type', 'newtype', or 'as', the expression itself represents a type definition and cannot have a separate type annotation. \ No newline at end of file +error[expander::type-annotation-in-type-position]: Type annotation in type position + ╭▸ + 6 │ ┌ { + 7 │ │ "#struct": { "name": "String" }, + 8 │ │ "#type": "(name: String)" + │ │ ━━━━━━━━━━━━━━ type annotations are not allowed inside a type expression + 9 │ │ //~^ ERROR type annotations are not allowed inside a type expression +10 │ │ }, + │ └───┘ this struct is already being used as a type + │ + ├ help: remove the type annotation + ╰ note: in type position, `(name: String)` already defines a struct type + +error[expander::unresolved-variable]: Unresolved variable + ╭▸ +11 │ "x" + │ ━ cannot find `x` in this scope + │ + ╰ note: this could be a typo, a name used outside its scope, or a missing declaration; if it is a function or type from another module, you may need to import it first +help: a similar imported name exists + ╭╴ +11 - "x" +11 + "~" + ├╴ +11 - "x" +11 + "↑" + ├╴ +11 - "x" +11 + "√" + ├╴ +11 - "x" +11 + "∛" + ├╴ +11 │ "index" + ╰╴ ++++ \ No newline at end of file diff --git a/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/type-tuple-has-type.jsonc b/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/type-tuple-has-type.jsonc index 8f233439e7f..7f7f968839d 100644 --- a/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/type-tuple-has-type.jsonc +++ b/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/type-tuple-has-type.jsonc @@ -6,7 +6,7 @@ { "#tuple": ["Int"], "#type": "(Int)" - //~^ ERROR Remove this type annotation + //~^ ERROR type annotations are not allowed inside a type expression }, "x" ] diff --git a/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/type-tuple-has-type.stderr b/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/type-tuple-has-type.stderr index 383301502c5..e7d6a7f11a9 100644 --- a/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/type-tuple-has-type.stderr +++ b/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/type-tuple-has-type.stderr @@ -1,7 +1,51 @@ -error[special-form-expander::type-with-existing-annotation]: Type expression with redundant type annotation +error[expander::type-annotation-in-type-position]: Type annotation in type position + ╭▸ + 6 │ ┌ { + 7 │ │ "#tuple": ["Int"], + 8 │ │ "#type": "(Int)" + │ │ ━━━━━ type annotations are not allowed inside a type expression + 9 │ │ //~^ ERROR type annotations are not allowed inside a type expression +10 │ │ }, + │ └───┘ this tuple is already being used as a type + │ + ├ help: remove the type annotation + ╰ note: in type position, `(Int, String)` already defines a tuple type + +error[expander::unresolved-variable]: Unresolved variable + ╭▸ +7 │ "#tuple": ["Int"], + │ ━━━ cannot find `Int` in this scope + │ + ├ help: check the spelling, or import the name with a `use` statement + ╰ note: this could be a typo, a name used outside its scope, or a missing declaration; if it is a function or type from another module, you may need to import it first + +error[expander::unresolved-variable]: Unresolved variable + ╭▸ +11 │ "x" + │ ━ cannot find `x` in this scope + │ + ╰ note: this could be a typo, a name used outside its scope, or a missing declaration; if it is a function or type from another module, you may need to import it first +help: a similar imported name exists + ╭╴ +11 - "x" +11 + "~" + ├╴ +11 - "x" +11 + "↑" + ├╴ +11 - "x" +11 + "√" + ├╴ +11 - "x" +11 + "∛" + ├╴ +11 │ "index" + ╰╴ ++++ + +error[expander::unresolved-variable]: Unresolved variable ╭▸ 8 │ "#type": "(Int)" - │ ━━━━━ Remove this type annotation + │ ━━━ cannot find `Int` in this scope │ - ├ help: Type expressions used in special forms cannot have their own type annotations. The expression itself defines a type and cannot be annotated with another type. - ╰ note: When constructing type expressions for special forms like 'type', 'newtype', or 'as', the expression itself represents a type definition and cannot have a separate type annotation. \ No newline at end of file + ├ help: check the spelling, or import the name with a `use` statement + ╰ note: this could be a typo, a name used outside its scope, or a missing declaration; if it is a function or type from another module, you may need to import it first \ No newline at end of file diff --git a/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/unknown-special-form-typo.stderr b/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/unknown-special-form-typo.stderr index 768da72de27..4a7c21706ea 100644 --- a/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/unknown-special-form-typo.stderr +++ b/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/unknown-special-form-typo.stderr @@ -1,10 +1,12 @@ -error[special-form-expander::unknown-special-form]: Unknown special form +error[expander::item-not-found]: Item not found ╭▸ 3 │ ["::kernel::special_form::nuwtype"] - │ ┬───────────────────────┯━━━━━━ - │ │ │ - │ │ Replace 'nuwtype' with a valid special form name - │ This special form path is invalid - │ - ├ help: Did you mean to use 'newtype' instead? - ╰ note: Available special forms include: if, as, let, type, newtype, use, fn, input, access, index \ No newline at end of file + │ ┬─────────── ━━━━━━━ cannot find `nuwtype` in module `::kernel::special_form` + │ │ + │ looked in this module + ╰╴ +help: a similar item exists in this module + ╭╴ +3 - ["::kernel::special_form::nuwtype"] +3 + ["::kernel::special_form::newtype"] + ╰╴ \ No newline at end of file diff --git a/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/unknown-special-form.stderr b/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/unknown-special-form.stderr index ccf72b67d02..0a781ad5eef 100644 --- a/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/unknown-special-form.stderr +++ b/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/unknown-special-form.stderr @@ -1,10 +1,8 @@ -error[special-form-expander::unknown-special-form]: Unknown special form +error[expander::item-not-found]: Item not found ╭▸ 3 │ ["::kernel::special_form::headpat"] - │ ┬───────────────────────┯━━━━━━ - │ │ │ - │ │ Replace 'headpat' with a valid special form name - │ This special form path is invalid + │ ┬─────────── ━━━━━━━ cannot find `headpat` in module `::kernel::special_form` + │ │ + │ looked in this module │ - ├ help: Special forms must use one of the predefined names shown in the note below - ╰ note: Available special forms include: if, as, let, type, newtype, use, fn, input, access, index \ No newline at end of file + ╰ help: check the spelling and ensure the item is exported \ No newline at end of file diff --git a/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/use-2.jsonc b/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/use-2.jsonc index 7d563102037..edd120d8d50 100644 --- a/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/use-2.jsonc +++ b/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/use-2.jsonc @@ -1,4 +1,4 @@ //@ run: fail //@ description: use/2 should error out ["::kernel::special_form::use", "::math", { "#tuple": ["pi"] }] -//~^ ERROR Add missing arguments +//~^ ERROR expected 3 arguments to `use`, found 2 diff --git a/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/use-2.stderr b/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/use-2.stderr index b8479ec9ebc..003e8dcda26 100644 --- a/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/use-2.stderr +++ b/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/use-2.stderr @@ -1,7 +1,7 @@ -error[special-form-expander::special-form-argument-length]: Incorrect number of arguments for special form +error[expander::invalid-argument-count]: Invalid argument count ╭▸ 3 │ ["::kernel::special_form::use", "::math", { "#tuple": ["pi"] }] - │ ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ Add missing arguments + │ ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ expected 3 arguments to `use`, found 2 │ - ├ help: The use/3 form should look like: (use module imports body) - ╰ note: The use function has 1 variant: use/3 \ No newline at end of file + ├ help: use `(use path imports body)` + ╰ note: the arguments are, in order: the module path to import from, the import specifier (`*`, a tuple of names, or a struct of aliases), and the body where the imports are in scope \ No newline at end of file diff --git a/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/use-4.jsonc b/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/use-4.jsonc index 4945cf3d9a8..940c2e43190 100644 --- a/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/use-4.jsonc +++ b/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/use-4.jsonc @@ -6,5 +6,5 @@ { "#tuple": ["pi"] }, "x", "y" - //~^ ERROR Remove this argument + //~^ ERROR unexpected argument ] diff --git a/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/use-4.stderr b/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/use-4.stderr index fe93229b352..d3618b299f3 100644 --- a/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/use-4.stderr +++ b/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/use-4.stderr @@ -1,15 +1,15 @@ -error[special-form-expander::special-form-argument-length]: Incorrect number of arguments for special form +error[expander::invalid-argument-count]: Invalid argument count ╭▸ - 3 │ ┌ [ - 4 │ │ "::kernel::special_form::use", - 5 │ │ "::math", - 6 │ │ { "#tuple": ["pi"] }, - 7 │ │ "x", - 8 │ │ "y" - │ │ ━ Remove this argument - 9 │ │ //~^ ERROR Remove this argument -10 │ │ ] - │ └─┘ In this `use` special form call + 3 │ ┏ [ + 4 │ ┃ "::kernel::special_form::use", + 5 │ ┃ "::math", + 6 │ ┃ { "#tuple": ["pi"] }, + 7 │ ┃ "x", + 8 │ ┃ "y" + │ ┃ ─ unexpected argument + 9 │ ┃ //~^ ERROR unexpected argument +10 │ ┃ ] + │ ┗━┛ expected 3 arguments to `use`, found 4 │ - ├ help: The use/3 form should look like: (use module imports body) - ╰ note: The use function has 1 variant: use/3 \ No newline at end of file + ├ help: use `(use path imports body)` + ╰ note: the arguments are, in order: the module path to import from, the import specifier (`*`, a tuple of names, or a struct of aliases), and the body where the imports are in scope \ No newline at end of file diff --git a/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/use-glob-not-ident.jsonc b/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/use-glob-not-ident.jsonc index 24161d33a79..ba189f0a1e1 100644 --- a/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/use-glob-not-ident.jsonc +++ b/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/use-glob-not-ident.jsonc @@ -4,6 +4,6 @@ "::kernel::special_form::use", "::core", "::core::math::X", - //~^ ERROR Use a simple identifier here + //~^ ERROR expected a simple name to import "x" ] diff --git a/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/use-glob-not-ident.stderr b/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/use-glob-not-ident.stderr index 9624214648a..c0aa7a50c21 100644 --- a/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/use-glob-not-ident.stderr +++ b/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/use-glob-not-ident.stderr @@ -1,7 +1,6 @@ -error[special-form-expander::invalid-use-import]: Invalid use import expression +error[expander::invalid-use-imports]: Invalid use imports ╭▸ 6 │ "::core::math::X", - │ ━━━━━━━━━━━━━━━ Use a simple identifier here + │ ━━━━━━━━━━━━━━━ expected `*`, a tuple of names, or a struct of aliases │ - ├ help: Use binding names must be simple identifiers. Qualified paths or complex expressions cannot be used in this context. - ╰ note: In tuple imports, each element must be a simple identifier. For example: (name1, name2) is valid, but (path::to::name,) is not. \ No newline at end of file + ╰ help: use `*` to import everything, `(a, b)` to import specific names, or `(a: alias, b: _)` to import with aliases \ No newline at end of file diff --git a/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/use-glob-not-star.jsonc b/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/use-glob-not-star.jsonc index 3abb8522d15..dc6dc1ce675 100644 --- a/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/use-glob-not-star.jsonc +++ b/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/use-glob-not-star.jsonc @@ -4,6 +4,6 @@ "::kernel::special_form::use", "::math", "X", - //~^ ERROR Replace with a valid import expression + //~^ ERROR expected `*`, a tuple of names, or a struct of aliases "x" ] diff --git a/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/use-glob-not-star.stderr b/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/use-glob-not-star.stderr index d7465879c9f..112cf61cdc8 100644 --- a/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/use-glob-not-star.stderr +++ b/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/use-glob-not-star.stderr @@ -1,10 +1,6 @@ -error[special-form-expander::invalid-use-import]: Invalid use import expression +error[expander::invalid-use-imports]: Invalid use imports ╭▸ 6 │ "X", - │ ━ Replace with a valid import expression + │ ━ expected `*`, a tuple of names, or a struct of aliases │ - ├ help: Use imports must be either a glob (*), a tuple of identifiers, or a struct of bindings. Other expression types are not valid in this context. - ╰ note: Valid import expressions include: - - Glob: * - - Tuple of identifiers: (name1, name2) - - Struct with aliases: (name1: alias1, name2: alias2) or (name1: _, name2: _) \ No newline at end of file + ╰ help: use `*` to import everything, `(a, b)` to import specific names, or `(a: alias, b: _)` to import with aliases \ No newline at end of file diff --git a/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/use-literal.jsonc b/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/use-literal.jsonc index 912a728d5d4..37c379ce908 100644 --- a/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/use-literal.jsonc +++ b/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/use-literal.jsonc @@ -4,6 +4,6 @@ "::kernel::special_form::use", "::math", { "#literal": 1 }, - //~^ ERROR Replace with a valid import expression + //~^ ERROR expected `*`, a tuple of names, or a struct of aliases "x" ] diff --git a/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/use-literal.stderr b/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/use-literal.stderr index ce1165be228..ab7efef0756 100644 --- a/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/use-literal.stderr +++ b/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/use-literal.stderr @@ -1,10 +1,6 @@ -error[special-form-expander::invalid-use-import]: Invalid use import expression +error[expander::invalid-use-imports]: Invalid use imports ╭▸ 6 │ { "#literal": 1 }, - │ ━━━━━━━━━━━━━━━━━ Replace with a valid import expression + │ ━━━━━━━━━━━━━━━━━ expected `*`, a tuple of names, or a struct of aliases │ - ├ help: Use imports must be either a glob (*), a tuple of identifiers, or a struct of bindings. Other expression types are not valid in this context. - ╰ note: Valid import expressions include: - - Glob: * - - Tuple of identifiers: (name1, name2) - - Struct with aliases: (name1: alias1, name2: alias2) or (name1: _, name2: _) \ No newline at end of file + ╰ help: use `*` to import everything, `(a, b)` to import specific names, or `(a: alias, b: _)` to import with aliases \ No newline at end of file diff --git a/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/use-struct-literal.jsonc b/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/use-struct-literal.jsonc index e9d9af0fb77..6f67dc6dcec 100644 --- a/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/use-struct-literal.jsonc +++ b/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/use-struct-literal.jsonc @@ -6,7 +6,7 @@ { "#struct": { "x": { "#literal": 1 } - //~^ ERROR Replace with a valid import expression + //~^ ERROR expected `*`, a tuple of names, or a struct of aliases } }, "x" diff --git a/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/use-struct-literal.stderr b/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/use-struct-literal.stderr index e7124de25aa..2f724e825b3 100644 --- a/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/use-struct-literal.stderr +++ b/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/use-struct-literal.stderr @@ -1,10 +1,40 @@ -error[special-form-expander::invalid-use-import]: Invalid use import expression +error[expander::unresolved-variable]: Unresolved variable + ╭▸ +12 │ "x" + │ ━ cannot find `x` in this scope + │ + ╰ note: this could be a typo, a name used outside its scope, or a missing declaration; if it is a function or type from another module, you may need to import it first +help: a similar imported name exists + ╭╴ +12 - "x" +12 + "~" + ├╴ +12 - "x" +12 + "↑" + ├╴ +12 - "x" +12 + "√" + ├╴ +12 - "x" +12 + "∛" + ├╴ +12 │ "index" + ╰╴ ++++ + +error[expander::package-not-found]: Package not found + ╭▸ +5 │ "::math", + │ ┬─┯━━━ + │ │ │ + │ │ cannot find package `math` + │ in this path + │ + ├ help: check the package name, or add it to the project dependencies + ╰ note: absolute paths start from an installed package + +error[expander::invalid-use-alias]: Invalid use alias ╭▸ 8 │ "x": { "#literal": 1 } - │ ━━━━━━━━━━━━━━━━━ Replace with a valid import expression + │ ━━━━━━━━━━━━━━━━━ expected `_` or a simple identifier as the alias │ - ├ help: Use imports must be either a glob (*), a tuple of identifiers, or a struct of bindings. Other expression types are not valid in this context. - ╰ note: Valid import expressions include: - - Glob: * - - Tuple of identifiers: (name1, name2) - - Struct with aliases: (name1: alias1, name2: alias2) or (name1: _, name2: _) \ No newline at end of file + ╰ help: use `_` to keep the original name or a simple identifier to rename: `(name: alias)` or `(name: _)` \ No newline at end of file diff --git a/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/use-struct-path.jsonc b/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/use-struct-path.jsonc index c4babb43fa9..8cc711f754f 100644 --- a/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/use-struct-path.jsonc +++ b/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/use-struct-path.jsonc @@ -6,7 +6,7 @@ { "#struct": { "x": "::core::math::sub" - //~^ ERROR Use a simple identifier here + //~^ ERROR expected a simple name to import } }, "x" diff --git a/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/use-struct-path.stderr b/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/use-struct-path.stderr index 6e48cee9614..600df8893da 100644 --- a/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/use-struct-path.stderr +++ b/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/use-struct-path.stderr @@ -1,7 +1,55 @@ -error[special-form-expander::invalid-use-import]: Invalid use import expression +error[expander::unresolved-variable]: Unresolved variable + ╭▸ +12 │ "x" + │ ━ cannot find `x` in this scope + │ + ╰ note: this could be a typo, a name used outside its scope, or a missing declaration; if it is a function or type from another module, you may need to import it first +help: a similar imported name exists + ╭╴ +12 - "x" +12 + "~" + ├╴ +12 - "x" +12 + "↑" + ├╴ +12 - "x" +12 + "√" + ├╴ +12 - "x" +12 + "∛" + ├╴ +12 │ "index" + ╰╴ ++++ + +error[expander::item-not-found]: Item not found ╭▸ +5 │ "::core", + │ ──── looked in this module + ‡ 8 │ "x": "::core::math::sub" - │ ━━━━━━━━━━━━━━━━━ Use a simple identifier here + │ ━ cannot find `x` in module `::core` + ╰╴ +help: a similar item exists in this module + ╭╴ +8 - "x": "::core::math::sub" +8 + "math": "::core::math::sub" + ├╴ +8 - "x": "::core::math::sub" +8 + "option": "::core::math::sub" + ├╴ +8 - "x": "::core::math::sub" +8 + "result": "::core::math::sub" + ├╴ +8 - "x": "::core::math::sub" +8 + "url": "::core::math::sub" + ├╴ +8 - "x": "::core::math::sub" +8 + "uuid": "::core::math::sub" + ╰╴ + +error[expander::invalid-use-alias]: Invalid use alias + ╭▸ +8 │ "x": "::core::math::sub" + │ ━━━━━━━━━━━━━━━━━ expected `_` or a simple identifier as the alias │ - ├ help: Use binding names must be simple identifiers. Qualified paths or complex expressions cannot be used in this context. - ╰ note: In tuple imports, each element must be a simple identifier. For example: (name1, name2) is valid, but (path::to::name,) is not. \ No newline at end of file + ╰ help: use `_` to keep the original name or a simple identifier to rename: `(name: alias)` or `(name: _)` \ No newline at end of file diff --git a/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/use-struct-type.stderr b/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/use-struct-type.stderr index 7436e775433..7a43bd0d5ff 100644 --- a/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/use-struct-type.stderr +++ b/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/use-struct-type.stderr @@ -1,7 +1,33 @@ -error[special-form-expander::invalid-use-import]: Invalid use import expression +error[expander::unresolved-variable]: Unresolved variable + ╭▸ +11 │ "x" + │ ━ cannot find `x` in this scope + │ + ╰ note: this could be a typo, a name used outside its scope, or a missing declaration; if it is a function or type from another module, you may need to import it first +help: a similar imported name exists + ╭╴ +11 - "x" +11 + "~" + ├╴ +11 - "x" +11 + "↑" + ├╴ +11 - "x" +11 + "√" + ├╴ +11 - "x" +11 + "∛" + ├╴ +11 │ "index" + ╰╴ ++++ + +error[expander::package-not-found]: Package not found ╭▸ -8 │ "#type": "X" - │ ━ Remove this type annotation +5 │ "::math", + │ ┬─┯━━━ + │ │ │ + │ │ cannot find package `math` + │ in this path │ - ├ help: Use import expressions cannot have type annotations. Import expressions define which symbols to import, and do not have a meaningful type in this context. - ╰ note: Import expressions in the 'use' special form can only be a glob (*), a tuple of identifiers, or a struct of bindings, none of which should have type annotations. \ No newline at end of file + ├ help: check the package name, or add it to the project dependencies + ╰ note: absolute paths start from an installed package \ No newline at end of file diff --git a/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/use-tuple-literal.jsonc b/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/use-tuple-literal.jsonc index 6575f11162e..c2d9a201a4f 100644 --- a/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/use-tuple-literal.jsonc +++ b/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/use-tuple-literal.jsonc @@ -4,6 +4,6 @@ "::kernel::special_form::use", "::math", { "#tuple": [{ "#literal": 1 }] }, - //~^ ERROR Replace with a valid import expression + //~^ ERROR expected `*`, a tuple of names, or a struct of aliases "x" ] diff --git a/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/use-tuple-literal.stderr b/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/use-tuple-literal.stderr index 41efec6a33e..b520afab99e 100644 --- a/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/use-tuple-literal.stderr +++ b/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/use-tuple-literal.stderr @@ -1,10 +1,29 @@ -error[special-form-expander::invalid-use-import]: Invalid use import expression +error[expander::unresolved-variable]: Unresolved variable + ╭▸ +8 │ "x" + │ ━ cannot find `x` in this scope + │ + ╰ note: this could be a typo, a name used outside its scope, or a missing declaration; if it is a function or type from another module, you may need to import it first +help: a similar imported name exists + ╭╴ +8 - "x" +8 + "~" + ├╴ +8 - "x" +8 + "↑" + ├╴ +8 - "x" +8 + "√" + ├╴ +8 - "x" +8 + "∛" + ├╴ +8 │ "index" + ╰╴ ++++ + +error[expander::invalid-use-import-binding]: Invalid use import binding ╭▸ 6 │ { "#tuple": [{ "#literal": 1 }] }, - │ ━━━━━━━━━━━━━━━━━ Replace with a valid import expression + │ ━━━━━━━━━━━━━━━━━ expected a simple name to import │ - ├ help: Use imports must be either a glob (*), a tuple of identifiers, or a struct of bindings. Other expression types are not valid in this context. - ╰ note: Valid import expressions include: - - Glob: * - - Tuple of identifiers: (name1, name2) - - Struct with aliases: (name1: alias1, name2: alias2) or (name1: _, name2: _) \ No newline at end of file + ╰ help: each import must be a plain identifier like `foo`, not a qualified path or expression \ No newline at end of file diff --git a/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/use-tuple-path.jsonc b/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/use-tuple-path.jsonc index 126549e0c3b..986eaa79738 100644 --- a/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/use-tuple-path.jsonc +++ b/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/use-tuple-path.jsonc @@ -4,6 +4,6 @@ "::kernel::special_form::use", "::core", { "#tuple": ["::core::math::sub"] }, - //~^ ERROR Use a simple identifier here + //~^ ERROR expected a simple name to import "x" ] diff --git a/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/use-tuple-path.stderr b/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/use-tuple-path.stderr index f2397aedf24..0565d98ec15 100644 --- a/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/use-tuple-path.stderr +++ b/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/use-tuple-path.stderr @@ -1,7 +1,29 @@ -error[special-form-expander::invalid-use-import]: Invalid use import expression +error[expander::unresolved-variable]: Unresolved variable + ╭▸ +8 │ "x" + │ ━ cannot find `x` in this scope + │ + ╰ note: this could be a typo, a name used outside its scope, or a missing declaration; if it is a function or type from another module, you may need to import it first +help: a similar imported name exists + ╭╴ +8 - "x" +8 + "~" + ├╴ +8 - "x" +8 + "↑" + ├╴ +8 - "x" +8 + "√" + ├╴ +8 - "x" +8 + "∛" + ├╴ +8 │ "index" + ╰╴ ++++ + +error[expander::invalid-use-import-binding]: Invalid use import binding ╭▸ 6 │ { "#tuple": ["::core::math::sub"] }, - │ ━━━━━━━━━━━━━━━━━ Use a simple identifier here + │ ━━━━━━━━━━━━━━━━━ expected a simple name to import │ - ├ help: Use binding names must be simple identifiers. Qualified paths or complex expressions cannot be used in this context. - ╰ note: In tuple imports, each element must be a simple identifier. For example: (name1, name2) is valid, but (path::to::name,) is not. \ No newline at end of file + ╰ help: each import must be a plain identifier like `foo`, not a qualified path or expression \ No newline at end of file diff --git a/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/use-tuple-type.stderr b/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/use-tuple-type.stderr index 3c0516f91e4..8a1dd3adf73 100644 --- a/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/use-tuple-type.stderr +++ b/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/use-tuple-type.stderr @@ -1,7 +1,29 @@ -error[special-form-expander::invalid-use-import]: Invalid use import expression +error[expander::unresolved-variable]: Unresolved variable + ╭▸ +8 │ "x" + │ ━ cannot find `x` in this scope + │ + ╰ note: this could be a typo, a name used outside its scope, or a missing declaration; if it is a function or type from another module, you may need to import it first +help: a similar imported name exists + ╭╴ +8 - "x" +8 + "~" + ├╴ +8 - "x" +8 + "↑" + ├╴ +8 - "x" +8 + "√" + ├╴ +8 - "x" +8 + "∛" + ├╴ +8 │ "index" + ╰╴ ++++ + +error[expander::invalid-use-import-binding]: Invalid use import binding ╭▸ 6 │ { "#tuple": ["::core::math::sub"], "#type": "Number" }, - │ ━━━━━━ Remove this type annotation + │ ━━━━━━━━━━━━━━━━━ expected a simple name to import │ - ├ help: Use import expressions cannot have type annotations. Import expressions define which symbols to import, and do not have a meaningful type in this context. - ╰ note: Import expressions in the 'use' special form can only be a glob (*), a tuple of identifiers, or a struct of bindings, none of which should have type annotations. \ No newline at end of file + ╰ help: each import must be a plain identifier like `foo`, not a qualified path or expression \ No newline at end of file diff --git a/libs/@local/hashql/ast/tests/ui/lower/name-mangler/.spec.toml b/libs/@local/hashql/ast/tests/ui/lower/name-mangler/.spec.toml index 9c6ce418bf1..ddbe402a1eb 100644 --- a/libs/@local/hashql/ast/tests/ui/lower/name-mangler/.spec.toml +++ b/libs/@local/hashql/ast/tests/ui/lower/name-mangler/.spec.toml @@ -1 +1 @@ -suite = "ast/lowering/name-mangler" +suite = "ast/lower/name-mangler" diff --git a/libs/@local/hashql/ast/tests/ui/lower/name-mangler/fn-types-of-ret.stdout b/libs/@local/hashql/ast/tests/ui/lower/name-mangler/fn-types-of-ret.stdout index dcabca45e00..840766cecb2 100644 --- a/libs/@local/hashql/ast/tests/ui/lower/name-mangler/fn-types-of-ret.stdout +++ b/libs/@local/hashql/ast/tests/ui/lower/name-mangler/fn-types-of-ret.stdout @@ -7,7 +7,9 @@ Expr#4294967040@27 ClosureParam#4294967040@16 (name: a:0) Type#4294967040@15 TypeKind (Path) - Path#4294967040@15 (rooted: false) + Path#4294967040@15 (rooted: true) + PathSegment#4294967040@14 (name: kernel) + PathSegment#4294967040@14 (name: type) PathSegment#4294967040@14 (name: Integer) Type#4294967040@22 TypeKind (Path) diff --git a/libs/@local/hashql/ast/tests/ui/lower/name-mangler/scopes-no-include.stdout b/libs/@local/hashql/ast/tests/ui/lower/name-mangler/scopes-no-include.stdout index 8c6ee37408e..fbaeb372930 100644 --- a/libs/@local/hashql/ast/tests/ui/lower/name-mangler/scopes-no-include.stdout +++ b/libs/@local/hashql/ast/tests/ui/lower/name-mangler/scopes-no-include.stdout @@ -11,7 +11,9 @@ Expr#4294967040@36 TypeExpr#4294967040@35 (name: a:1) Type#4294967040@21 TypeKind (Path) - Path#4294967040@21 (rooted: false) + Path#4294967040@21 (rooted: true) + PathSegment#4294967040@20 (name: kernel) + PathSegment#4294967040@20 (name: type) PathSegment#4294967040@20 (name: Integer) Expr#4294967040@34 ExprKind (As) diff --git a/libs/@local/hashql/ast/tests/ui/lower/name-mangler/type-generics-interdependent-generics.stdout b/libs/@local/hashql/ast/tests/ui/lower/name-mangler/type-generics-interdependent-generics.stdout index 7e85bb78fc3..7d41dc29bac 100644 --- a/libs/@local/hashql/ast/tests/ui/lower/name-mangler/type-generics-interdependent-generics.stdout +++ b/libs/@local/hashql/ast/tests/ui/lower/name-mangler/type-generics-interdependent-generics.stdout @@ -7,9 +7,9 @@ Expr#4294967040@36 Path#4294967040@9 (rooted: false) PathSegment#4294967040@8 (name: U:0) GenericConstraint#4294967040@15 (name: U:0) - Type#4294967040@32 + Type#4294967040@33 TypeKind (Struct) - StructType#4294967040@32 + StructType#4294967040@33 StructField#4294967040@24 (name: foo) Type#4294967040@23 TypeKind (Path) diff --git a/libs/@local/hashql/ast/tests/ui/lower/name-mangler/type-generics-nested.stdout b/libs/@local/hashql/ast/tests/ui/lower/name-mangler/type-generics-nested.stdout index 927d52eb06a..9f7d3b0df70 100644 --- a/libs/@local/hashql/ast/tests/ui/lower/name-mangler/type-generics-nested.stdout +++ b/libs/@local/hashql/ast/tests/ui/lower/name-mangler/type-generics-nested.stdout @@ -3,7 +3,9 @@ Expr#4294967040@37 TypeExpr#4294967040@37 (name: Foo:0) Type#4294967040@11 TypeKind (Path) - Path#4294967040@11 (rooted: false) + Path#4294967040@11 (rooted: true) + PathSegment#4294967040@10 (name: kernel) + PathSegment#4294967040@10 (name: type) PathSegment#4294967040@10 (name: String) Expr#4294967040@36 ExprKind (Type) @@ -13,9 +15,9 @@ Expr#4294967040@37 TypeKind (Path) Path#4294967040@21 (rooted: false) PathSegment#4294967040@20 (name: Foo:0) - Type#4294967040@32 + Type#4294967040@33 TypeKind (Struct) - StructType#4294967040@32 + StructType#4294967040@33 StructField#4294967040@31 (name: foo) Type#4294967040@30 TypeKind (Path) diff --git a/libs/@local/hashql/ast/tests/ui/lower/name-mangler/type-generics.stdout b/libs/@local/hashql/ast/tests/ui/lower/name-mangler/type-generics.stdout index 8d630b9cb1f..e8c9e637af3 100644 --- a/libs/@local/hashql/ast/tests/ui/lower/name-mangler/type-generics.stdout +++ b/libs/@local/hashql/ast/tests/ui/lower/name-mangler/type-generics.stdout @@ -2,9 +2,9 @@ Expr#4294967040@24 ExprKind (Type) TypeExpr#4294967040@24 (name: Foo:0) GenericConstraint#4294967040@10 (name: Bar:0) - Type#4294967040@20 + Type#4294967040@21 TypeKind (Struct) - StructType#4294967040@20 + StructType#4294967040@21 StructField#4294967040@19 (name: foo) Type#4294967040@18 TypeKind (Path) diff --git a/libs/@local/hashql/ast/tests/ui/lower/node-renumberer/.spec.toml b/libs/@local/hashql/ast/tests/ui/lower/node-renumberer/.spec.toml index b2dac700d22..57c7233188e 100644 --- a/libs/@local/hashql/ast/tests/ui/lower/node-renumberer/.spec.toml +++ b/libs/@local/hashql/ast/tests/ui/lower/node-renumberer/.spec.toml @@ -1 +1 @@ -suite = "ast/lowering/node-renumberer" +suite = "ast/lower/node-renumberer" diff --git a/libs/@local/hashql/ast/tests/ui/lower/sanitizer/.spec.toml b/libs/@local/hashql/ast/tests/ui/lower/sanitizer/.spec.toml index 3d770678cbf..668705131d4 100644 --- a/libs/@local/hashql/ast/tests/ui/lower/sanitizer/.spec.toml +++ b/libs/@local/hashql/ast/tests/ui/lower/sanitizer/.spec.toml @@ -1 +1 @@ -suite = "ast/lowering/sanitizer" +suite = "ast/lower/sanitizer" diff --git a/libs/@local/hashql/ast/tests/ui/lower/sanitizer/constraint.stderr b/libs/@local/hashql/ast/tests/ui/lower/sanitizer/constraint.stderr index bf190e01187..adf1ca19e79 100644 --- a/libs/@local/hashql/ast/tests/ui/lower/sanitizer/constraint.stderr +++ b/libs/@local/hashql/ast/tests/ui/lower/sanitizer/constraint.stderr @@ -1,7 +1,11 @@ -error[sanitizer::invalid-generic-constraint]: Invalid generic constraint +error[expander::unresolved-variable]: Unresolved variable ╭▸ 4 │ "add", - │ ━━━━━━━━━ Remove this constraint from 'T' + │ ━━━ cannot find `add` in this scope │ - ├ help: Generic constraints (like 'T: Bound') are not allowed in this context. Use just the parameter name without bounds: 'T'. For example, change 'T: Clone' to just 'T'. - ╰ note: Generic constraints with bounds can only be used in certain positions such as function declarations, type declarations and newtype declarations. In other contexts, like usage sites, only the parameter name should be specified. \ No newline at end of file + ├ help: bring it into scope: `use ::core::math::add in` + ╰ note: this could be a typo, a name used outside its scope, or a missing declaration; if it is a function or type from another module, you may need to import it first +help: use one of these fully qualified paths + ╭╴ +4 │ "::core::math::add", + ╰╴ ++++++++++++++ \ No newline at end of file diff --git a/libs/@local/hashql/ast/tests/ui/lower/sanitizer/special-form-type-position.stderr b/libs/@local/hashql/ast/tests/ui/lower/sanitizer/special-form-type-position.stderr index f16bad42ef5..a7acfc1b761 100644 --- a/libs/@local/hashql/ast/tests/ui/lower/sanitizer/special-form-type-position.stderr +++ b/libs/@local/hashql/ast/tests/ui/lower/sanitizer/special-form-type-position.stderr @@ -1,7 +1,8 @@ -error[sanitizer::invalid-special-form]: Invalid special form +error[expander::item-not-found]: Item not found ╭▸ 6 │ "::kernel::special_form::let", - │ ━━━━━━━━━━━━━━━━━━━━━━━━━━━ Special form cannot be used as a type + │ ┬─────────── ━━━ cannot find `let` in module `::kernel::special_form` + │ │ + │ looked in this module │ - ├ help: The special form 'let' must be called directly with arguments. It cannot be used as a type annotation or declaration or passed to other functions. Instead, use it in a direct function call syntax. - ╰ note: Special forms in HashQL are compile-time constructs that must be expanded during compilation. They can only be used in call position with their expected arguments, not as regular values, types, or function references. \ No newline at end of file + ╰ help: check the spelling and ensure the item is exported \ No newline at end of file diff --git a/libs/@local/hashql/ast/tests/ui/lower/sanitizer/special-form-value.stderr b/libs/@local/hashql/ast/tests/ui/lower/sanitizer/special-form-value.stderr index 4a5fc02ff83..20bce045db1 100644 --- a/libs/@local/hashql/ast/tests/ui/lower/sanitizer/special-form-value.stderr +++ b/libs/@local/hashql/ast/tests/ui/lower/sanitizer/special-form-value.stderr @@ -1,7 +1,33 @@ -error[sanitizer::invalid-special-form]: Invalid special form +error[expander::unresolved-variable]: Unresolved variable ╭▸ -5 │ "::kernel::special_form::let", - │ ━━━━━━━━━━━━━━━━━━━━━━━━━━━ Special form cannot be used as a value +7 │ "a" + │ ━ cannot find `a` in this scope │ - ├ help: The special form 'let' must be called directly with arguments. It cannot be used as a value expression or passed to other functions. Instead, use it in a direct function call syntax. - ╰ note: Special forms in HashQL are compile-time constructs that must be expanded during compilation. They can only be used in call position with their expected arguments, not as regular values, types, or function references. \ No newline at end of file + ╰ note: this could be a typo, a name used outside its scope, or a missing declaration; if it is a function or type from another module, you may need to import it first +help: a similar imported name exists + ╭╴ +7 - "a" +7 + "↑" + ├╴ +7 - "a" +7 + "√" + ├╴ +7 - "a" +7 + "∛" + ├╴ +7 │ "access" + ├╴ +++++ +7 │ "as" + ╰╴ + + +error[expander::unresolved-variable]: Unresolved variable + ╭▸ +4 │ "add", + │ ━━━ cannot find `add` in this scope + │ + ├ help: bring it into scope: `use ::core::math::add in` + ╰ note: this could be a typo, a name used outside its scope, or a missing declaration; if it is a function or type from another module, you may need to import it first +help: use one of these fully qualified paths + ╭╴ +4 │ "::core::math::add", + ╰╴ ++++++++++++++ \ No newline at end of file diff --git a/libs/@local/hashql/ast/tests/ui/lower/type-extractor/.spec.toml b/libs/@local/hashql/ast/tests/ui/lower/type-extractor/.spec.toml index 953a91550b6..5ff02c744b1 100644 --- a/libs/@local/hashql/ast/tests/ui/lower/type-extractor/.spec.toml +++ b/libs/@local/hashql/ast/tests/ui/lower/type-extractor/.spec.toml @@ -1 +1 @@ -suite = "ast/lowering/type-extractor" +suite = "ast/lower/type-extractor" diff --git a/libs/@local/hashql/ast/tests/ui/lower/type-extractor/complex-types.stdout b/libs/@local/hashql/ast/tests/ui/lower/type-extractor/complex-types.stdout index fb0021b0d74..99c40dd6ab2 100644 --- a/libs/@local/hashql/ast/tests/ui/lower/type-extractor/complex-types.stdout +++ b/libs/@local/hashql/ast/tests/ui/lower/type-extractor/complex-types.stdout @@ -16,9 +16,9 @@ Expr#0@38 LiteralExpr#9@31 Primitive (Integer) Integer (30) - Type#10@22 + Type#10@23 TypeKind (Struct) - StructType#11@22 + StructType#11@23 StructField#12@14 (name: name) Type#13@13 TypeKind (Path) diff --git a/libs/@local/hashql/ast/tests/ui/lower/type-extractor/definition/.spec.toml b/libs/@local/hashql/ast/tests/ui/lower/type-extractor/definition/.spec.toml index 5c274519246..c8863299236 100644 --- a/libs/@local/hashql/ast/tests/ui/lower/type-extractor/definition/.spec.toml +++ b/libs/@local/hashql/ast/tests/ui/lower/type-extractor/definition/.spec.toml @@ -1 +1 @@ -suite = "ast/lowering/type-definition-extractor" +suite = "ast/lower/type-definition-extractor" diff --git a/libs/@local/hashql/ast/tests/ui/lower/type-extractor/definition/global-generic-constraint-too-many.jsonc b/libs/@local/hashql/ast/tests/ui/lower/type-extractor/definition/global-generic-constraint-too-many.jsonc index 502719ad0fe..53aa1760686 100644 --- a/libs/@local/hashql/ast/tests/ui/lower/type-extractor/definition/global-generic-constraint-too-many.jsonc +++ b/libs/@local/hashql/ast/tests/ui/lower/type-extractor/definition/global-generic-constraint-too-many.jsonc @@ -4,6 +4,6 @@ "type", "Foo", "Some", - //~^ ERROR Remove this argument + //~^ ERROR unexpected argument "_" ] diff --git a/libs/@local/hashql/ast/tests/ui/lower/type-extractor/nested-type-nodes.stdout b/libs/@local/hashql/ast/tests/ui/lower/type-extractor/nested-type-nodes.stdout index 0fd15364ab1..fac2926bc88 100644 --- a/libs/@local/hashql/ast/tests/ui/lower/type-extractor/nested-type-nodes.stdout +++ b/libs/@local/hashql/ast/tests/ui/lower/type-extractor/nested-type-nodes.stdout @@ -28,9 +28,9 @@ Expr#0@47 LiteralExpr#18@35 Primitive (Integer) Integer (2) - Type#19@22 + Type#19@23 TypeKind (Struct) - StructType#20@22 + StructType#20@23 StructField#21@21 (name: data) Type#22@20 TypeKind (Path) diff --git a/libs/@local/hashql/compiletest/test-report.txt b/libs/@local/hashql/compiletest/test-report.txt new file mode 100644 index 00000000000..c3c084b00e4 --- /dev/null +++ b/libs/@local/hashql/compiletest/test-report.txt @@ -0,0 +1,7673 @@ +warning: unused import: `heap::Heap` + --> libs/@local/hashql/core/src/module/std_lib/core/mod.rs:3:5 + | +3 | heap::Heap, + | ^^^^^^^^^^ + | + = note: `#[warn(unused_imports)]` (part of `#[warn(unused)]`) on by default + +warning: unused import: `heap::Heap` + --> libs/@local/hashql/core/src/module/std_lib/core/bits.rs:3:5 + | +3 | heap::Heap, + | ^^^^^^^^^^ + +warning: unused import: `heap::Heap` + --> libs/@local/hashql/core/src/module/std_lib/core/bool.rs:3:5 + | +3 | heap::Heap, + | ^^^^^^^^^^ + +warning: unused import: `heap::Heap` + --> libs/@local/hashql/core/src/module/std_lib/core/cmp.rs:3:5 + | +3 | heap::Heap, + | ^^^^^^^^^^ + +warning: unused import: `heap::Heap` + --> libs/@local/hashql/core/src/module/std_lib/core/json.rs:2:5 + | +2 | heap::Heap, + | ^^^^^^^^^^ + +warning: unused import: `heap::Heap` + --> libs/@local/hashql/core/src/module/std_lib/core/math.rs:3:5 + | +3 | heap::Heap, + | ^^^^^^^^^^ + +warning: unused import: `heap::Heap` + --> libs/@local/hashql/core/src/module/std_lib/core/option.rs:2:5 + | +2 | heap::Heap, + | ^^^^^^^^^^ + +warning: unused import: `heap::Heap` + --> libs/@local/hashql/core/src/module/std_lib/core/url.rs:2:5 + | +2 | heap::Heap, + | ^^^^^^^^^^ + +warning: unused import: `heap::Heap` + --> libs/@local/hashql/core/src/module/std_lib/core/uuid.rs:2:5 + | +2 | heap::Heap, + | ^^^^^^^^^^ + +warning: unused import: `heap::Heap` + --> libs/@local/hashql/core/src/module/std_lib/graph/body.rs:2:5 + | +2 | heap::Heap, + | ^^^^^^^^^^ + +warning: unused import: `heap::Heap` + --> libs/@local/hashql/core/src/module/std_lib/graph/entity.rs:2:5 + | +2 | heap::Heap, + | ^^^^^^^^^^ + +warning: unused import: `heap::Heap` + --> libs/@local/hashql/core/src/module/std_lib/graph/head.rs:2:5 + | +2 | heap::Heap, + | ^^^^^^^^^^ + +warning: unused import: `heap::Heap` + --> libs/@local/hashql/core/src/module/std_lib/graph/tail.rs:2:5 + | +2 | heap::Heap, + | ^^^^^^^^^^ + +warning: unused import: `heap::Heap` + --> libs/@local/hashql/core/src/module/std_lib/graph/temporal.rs:2:5 + | +2 | heap::Heap, + | ^^^^^^^^^^ + +warning: unused import: `heap::Heap` + --> libs/@local/hashql/core/src/module/std_lib/graph/types/mod.rs:3:5 + | +3 | heap::Heap, + | ^^^^^^^^^^ + +warning: unused import: `heap::Heap` + --> libs/@local/hashql/core/src/module/std_lib/graph/types/knowledge/entity.rs:2:5 + | +2 | heap::Heap, + | ^^^^^^^^^^ + +warning: unused import: `heap::Heap` + --> libs/@local/hashql/core/src/module/std_lib/graph/types/ontology/mod.rs:2:5 + | +2 | heap::Heap, + | ^^^^^^^^^^ + +warning: unused import: `heap::Heap` + --> libs/@local/hashql/core/src/module/std_lib/graph/types/ontology/entity_type.rs:2:5 + | +2 | heap::Heap, + | ^^^^^^^^^^ + +warning: unused import: `heap::Heap` + --> libs/@local/hashql/core/src/module/std_lib/graph/types/principal/mod.rs:4:5 + | +4 | heap::Heap, + | ^^^^^^^^^^ + +warning: unused imports: `core` and `core` + --> libs/@local/hashql/core/src/symbol/sym.rs:315:9 + | +315 | core: { + | ^^^^ + +warning: unused imports: `graph` and `graph` + --> libs/@local/hashql/core/src/symbol/sym.rs:350:9 + | +350 | graph: { + | ^^^^^ + +warning: `hashql-core` (lib) generated 21 warnings (run `cargo fix --lib -p hashql-core` to apply 21 suggestions) +warning: method `matches_absolute_path` is never used + --> libs/@local/hashql/ast/src/node/path.rs:209:19 + | +108 | impl<'heap> Path<'heap> { + | ----------------------- method in this implementation +... +209 | pub(crate) fn matches_absolute_path( + | ^^^^^^^^^^^^^^^^^^^^^ + | + = note: `#[warn(dead_code)]` (part of `#[warn(unused)]`) on by default + +warning: `hashql-ast` (lib) generated 1 warning + Finished `dev` profile [unoptimized + debuginfo] target(s) in 0.28s + Running `/Users/bmahmoud/projects/hash/hash/target/debug/hashql-compiletest run --bless` +2026-06-15T11:12:38.429630Z  INFO hashql_compiletest::harness::test::discover: adding entry point path=/Users/bmahmoud/projects/hash/hash/libs/@local/hashql/hir tests=/Users/bmahmoud/projects/hash/hash/libs/@local/hashql/hir/tests/ui +2026-06-15T11:12:38.429794Z  INFO hashql_compiletest::harness::test::discover: adding entry point path=/Users/bmahmoud/projects/hash/hash/libs/@local/hashql/ast tests=/Users/bmahmoud/projects/hash/hash/libs/@local/hashql/ast/tests/ui +2026-06-15T11:12:38.429810Z  INFO hashql_compiletest::harness::test::discover: adding entry point path=/Users/bmahmoud/projects/hash/hash/libs/@local/hashql/eval tests=/Users/bmahmoud/projects/hash/hash/libs/@local/hashql/eval/tests/ui +2026-06-15T11:12:38.429823Z  INFO hashql_compiletest::harness::test::discover: adding entry point path=/Users/bmahmoud/projects/hash/hash/libs/@local/hashql/mir tests=/Users/bmahmoud/projects/hash/hash/libs/@local/hashql/mir/tests/ui +2026-06-15T11:12:38.432096Z  INFO hashql_compiletest::runner: found 4 test groups with 544 test cases, in 2.756208ms groups=4 cases=544 elapsed=2.771958ms +2026-06-15T11:12:38.438145Z  INFO hashql_compiletest::runner: converted 4 (544) test groups into 4 (544) trial groups, in 5.999834ms groups=4 cases=544 elapsed=6.010542ms +2026-06-15T11:12:38.438742Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "name-mangler"] +2026-06-15T11:12:38.438761Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-mir" trial=["pass", "cfg_simplify"] +2026-06-15T11:12:38.438760Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "name-mangler"] +2026-06-15T11:12:38.438775Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "name-mangler"] +2026-06-15T11:12:38.438745Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "import-resolver"] +2026-06-15T11:12:38.438762Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] +2026-06-15T11:12:38.438759Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "name-mangler"] +2026-06-15T11:12:38.438742Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "thunking"] +2026-06-15T11:12:38.438772Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "name-mangler"] +2026-06-15T11:12:38.438771Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "name-mangler"] +2026-06-15T11:12:38.438770Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "name-mangler"] +2026-06-15T11:12:38.438777Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-mir" trial=["pass", "post_inline"] +2026-06-15T11:12:38.438744Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "name-mangler"] +2026-06-15T11:12:38.438754Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "sanitizer"] +2026-06-15T11:12:38.438753Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] +2026-06-15T11:12:38.438752Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-mir" trial=["pass", "forward_substitution"] +2026-06-15T11:12:38.438752Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "import-resolver"] +2026-06-15T11:12:38.438744Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "import-resolver", "continue"] +2026-06-15T11:12:38.444248Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "name-mangler"] result=Ok(()) +2026-06-15T11:12:38.444196Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "import-resolver"] result=Ok(()) +2026-06-15T11:12:38.444279Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "import-resolver"] +2026-06-15T11:12:38.444181Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "name-mangler"] result=Err(Expected trial to pass, but it failed +├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:390:24 +╰╴1 additional opaque attachment) +2026-06-15T11:12:38.444083Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "name-mangler"] result=Err(Expected trial to pass, but it failed +├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:390:24 +╰╴1 additional opaque attachment) +2026-06-15T11:12:38.443961Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "name-mangler"] result=Err(Expected trial to pass, but it failed +├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:390:24 +╰╴1 additional opaque attachment) +2026-06-15T11:12:38.444326Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-mir" trial=["pass", "inst_simplify"] +2026-06-15T11:12:38.444336Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "name-mangler"] +2026-06-15T11:12:38.443996Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] result=Err(Expected trial to pass, but it failed +├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:390:24 +╰╴1 additional opaque attachment) +2026-06-15T11:12:38.444361Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] +2026-06-15T11:12:38.444066Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "name-mangler"] result=Err(Expected trial to pass, but it failed +├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:390:24 +╰╴1 additional opaque attachment) +2026-06-15T11:12:38.443963Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "name-mangler"] result=Err(Expected trial to pass, but it failed +├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:390:24 +╰╴1 additional opaque attachment) +2026-06-15T11:12:38.444320Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "name-mangler"] +2026-06-15T11:12:38.444417Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-mir" trial=["pass", "inst_simplify"] +2026-06-15T11:12:38.444231Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] result=Ok(()) +2026-06-15T11:12:38.444193Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "import-resolver"] result=Ok(()) +2026-06-15T11:12:38.444462Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] +2026-06-15T11:12:38.444265Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "name-mangler"] +2026-06-15T11:12:38.443985Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "name-mangler"] result=Err(Expected trial to pass, but it failed +├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:390:24 +╰╴1 additional opaque attachment) +2026-06-15T11:12:38.443963Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "name-mangler"] result=Err(Expected trial to pass, but it failed +├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:390:24 +╰╴1 additional opaque attachment) +2026-06-15T11:12:38.444511Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "name-mangler"] +2026-06-15T11:12:38.444516Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "inference", "intrinsics"] +2026-06-15T11:12:38.444396Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "name-mangler"] +2026-06-15T11:12:38.444470Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "import-resolver"] +2026-06-15T11:12:38.445098Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "thunking"] result=Ok(()) +2026-06-15T11:12:38.445108Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "thunking"] +2026-06-15T11:12:38.445048Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "sanitizer"] result=Err(Failed to verify annotation +├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:321:29 +├╴1 additional opaque attachment +│ +╰┬▶ unfulfilled annotation: DiagnosticAnnotation { category: None, severity: Error, message: "Special form cannot be used as a value", line: Some(5) } did not match any emitted diagnostics + │ ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:151:25 + │ + ├▶ unexpected diagnostic: + │ error[expander::unresolved-variable]: Unresolved variable + │ ╭▸ + │ 7 │ "a" + │ │ ━ cannot find `a` in this scope + │ │ + │ ╰ note: this could be a typo, a name used outside its scope, or a missing declaration; if it is a function or type from another module, you may need to import it first + │ help: a similar imported name exists + │ ╭╴ + │ 7 - "a" + │ 7 + "↑√∛ccesss" + │ ╰╴ + │ ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:171:21 + │ + ╰▶ unexpected diagnostic: + error[expander::unresolved-variable]: Unresolved variable + ╭▸ + 4 │ "add", + │ ━━━ cannot find `add` in this scope + │ + ├ help: bring it into scope: `use ::core::math::add in` + ╰ note: this could be a typo, a name used outside its scope, or a missing declaration; if it is a function or type from another module, you may need to import it first + help: use one of these fully qualified paths + ╭╴ + 4 │ "::core::math::add", + ╰╴ ++++++++++++++ + ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:171:21) +2026-06-15T11:12:38.445134Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "sanitizer"] +2026-06-15T11:12:38.445461Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "name-mangler"] result=Ok(()) +2026-06-15T11:12:38.445475Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "type-extractor", "definition"] +2026-06-15T11:12:38.445799Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "name-mangler"] result=Ok(()) +2026-06-15T11:12:38.445826Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "import-resolver"] +2026-06-15T11:12:38.445857Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "import-resolver"] result=Err(Failed to verify annotation +├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:321:29 +├╴1 additional opaque attachment +│ +╰┬▶ unfulfilled annotation: DiagnosticAnnotation { category: None, severity: Error, message: "Cannot find variable 'shl'", line: Some(7) } did not match any emitted diagnostics + │ ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:151:25 + │ + ╰▶ unexpected diagnostic: + error[expander::unresolved-variable]: Unresolved variable + ╭▸ + 7 │ "shl" + │ ━━━ cannot find `shl` in this scope + │ + ├ help: bring it into scope: `use ::core::bits::shl in` + ╰ note: this could be a typo, a name used outside its scope, or a missing declaration; if it is a function or type from another module, you may need to import it first + help: use one of these fully qualified paths + ╭╴ + 7 │ "::core::bits::shl" + ╰╴ ++++++++++++++ + ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:171:21) +2026-06-15T11:12:38.445946Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "import-resolver"] +2026-06-15T11:12:38.445917Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] result=Err(Failed to verify annotation +├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:321:29 +├╴1 additional opaque attachment +│ +╰┬▶ unfulfilled annotation: DiagnosticAnnotation { category: None, severity: Error, message: "Remove this argument", line: Some(8) } did not match any emitted diagnostics + │ ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:151:25 + │ + ╰▶ unexpected diagnostic: + error[expander::invalid-argument-count]: Invalid argument count + ╭▸ + 3 │ ┏ [ + 4 │ ┃ "::kernel::special_form::newtype", + 5 │ ┃ "x", + 6 │ ┃ "Boolean", + 7 │ ┃ ["+", "x", "x"], + 8 │ ┃ { "#literal": true } + │ ┃ ──────────────────── unexpected argument + 9 │ ┃ //~^ ERROR Remove this argument + 10 │ ┃ ] + │ ┗━┛ expected 3 arguments to `newtype`, found 4 + │ + ├ help: use `(newtype Name type-expr body)` + ╰ note: the arguments are, in order: the type name (optionally with generic parameters), the underlying type, and the body where the name is in scope + ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:171:21) +2026-06-15T11:12:38.445975Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] +2026-06-15T11:12:38.446026Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "import-resolver"] result=Ok(()) +2026-06-15T11:12:38.446043Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "import-resolver"] +2026-06-15T11:12:38.445982Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "import-resolver", "continue"] result=Err(Failed to verify annotation +├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:321:29 +├╴1 additional opaque attachment +│ +╰┬▶ unfulfilled annotation: DiagnosticAnnotation { category: None, severity: Error, message: "Cannot find variable 'T'", line: Some(7) } did not match any emitted diagnostics + │ ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:151:25 + │ + ╰▶ unexpected diagnostic: + error[expander::unresolved-variable]: Unresolved variable + ╭▸ + 7 │ "T", + │ ━ cannot find `T` in this scope + │ + ╰ note: this could be a typo, a name used outside its scope, or a missing declaration; if it is a function or type from another module, you may need to import it first + help: a similar local binding exists + ╭╴ + 7 - "T", + 7 + "Foo", + ╰╴ + help: a similar imported name exists + ╭╴ + 7 - "T", + 7 + "StringUnionUnknownUrl|", + ╰╴ + ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:171:21) +2026-06-15T11:12:38.446096Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "import-resolver", "continue"] +2026-06-15T11:12:38.446198Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "name-mangler"] result=Ok(()) +2026-06-15T11:12:38.446211Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "name-mangler"] +2026-06-15T11:12:38.446243Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] result=Err(Expected trial to pass, but it failed +├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:390:24 +╰╴1 additional opaque attachment) +2026-06-15T11:12:38.446269Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] +2026-06-15T11:12:38.446311Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-mir" trial=["pass", "inst_simplify"] result=Ok(()) +2026-06-15T11:12:38.446329Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-mir" trial=["pass", "inst_simplify"] +2026-06-15T11:12:38.446311Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-mir" trial=["pass", "inst_simplify"] result=Ok(()) +2026-06-15T11:12:38.446359Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-mir" trial=["pass", "inst_simplify"] +2026-06-15T11:12:38.446380Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "name-mangler"] result=Ok(()) +2026-06-15T11:12:38.446406Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-mir" trial=["pass", "pre_inline"] +2026-06-15T11:12:38.446475Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "thunking"] result=Ok(()) +2026-06-15T11:12:38.446488Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "normalization"] +2026-06-15T11:12:38.446531Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-mir" trial=["pass", "cfg_simplify"] result=Ok(()) +2026-06-15T11:12:38.446549Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-mir" trial=["reify"] +2026-06-15T11:12:38.446663Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "inference", "intrinsics"] result=Ok(()) +2026-06-15T11:12:38.446677Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "inference"] +2026-06-15T11:12:38.446754Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "sanitizer"] result=Err(Failed to verify annotation +├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:321:29 +├╴1 additional opaque attachment +│ +╰┬▶ unfulfilled annotation: DiagnosticAnnotation { category: None, severity: Error, message: "Special form cannot be used as a type", line: Some(6) } did not match any emitted diagnostics + │ ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:151:25 + │ + ╰▶ unexpected diagnostic: + error[expander::item-not-found]: Item not found + ╭▸ + 6 │ "::kernel::special_form::let", + │ ┬─────────── ━━━ cannot find `let` in module `::kernel::special_form` + │ │ + │ looked in this module + │ + ╰ help: check the spelling and ensure the item is exported + ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:171:21) +2026-06-15T11:12:38.446813Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "sanitizer"] +2026-06-15T11:12:38.446826Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "type-extractor", "definition"] result=Ok(()) +2026-06-15T11:12:38.446830Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-mir" trial=["pass", "post_inline"] result=Ok(()) +2026-06-15T11:12:38.446835Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "type-extractor", "definition"] +2026-06-15T11:12:38.446839Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-mir" trial=["pass", "post_inline"] +2026-06-15T11:12:38.447127Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "import-resolver"] result=Ok(()) +2026-06-15T11:12:38.447139Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "import-resolver"] +2026-06-15T11:12:38.447149Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "name-mangler"] result=Err(Expected trial to pass, but it failed +├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:390:24 +╰╴1 additional opaque attachment) +2026-06-15T11:12:38.447193Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "name-mangler"] +2026-06-15T11:12:38.447310Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "import-resolver"] result=Ok(()) +2026-06-15T11:12:38.447320Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "import-resolver"] +2026-06-15T11:12:38.447393Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "import-resolver"] result=Ok(()) +2026-06-15T11:12:38.447408Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "import-resolver"] +2026-06-15T11:12:38.447469Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] result=Err(Failed to verify annotation +├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:321:29 +├╴1 additional opaque attachment +│ +╰┬▶ unfulfilled annotation: DiagnosticAnnotation { category: None, severity: Error, message: "Use a simple identifier here", line: Some(6) } did not match any emitted diagnostics + │ ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:151:25 + │ + ╰▶ unexpected diagnostic: + error[expander::invalid-use-imports]: Invalid use imports + ╭▸ + 6 │ "::core::math::X", + │ ━━━━━━━━━━━━━━━ expected `*`, a tuple of names, or a struct of aliases + │ + ╰ help: use `*` to import everything, `(a, b)` to import specific names, or `(a: alias, b: _)` to import with aliases + ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:171:21) +2026-06-15T11:12:38.447509Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] +2026-06-15T11:12:38.447617Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "name-mangler"] result=Err(Expected trial to pass, but it failed +├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:390:24 +╰╴1 additional opaque attachment) +2026-06-15T11:12:38.447653Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "name-mangler"] +2026-06-15T11:12:38.447709Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] result=Err(Expected trial to pass, but it failed +├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:390:24 +╰╴1 additional opaque attachment) +2026-06-15T11:12:38.447748Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] +2026-06-15T11:12:38.448024Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-mir" trial=["pass", "inst_simplify"] result=Ok(()) +2026-06-15T11:12:38.448039Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-mir" trial=["pass", "inst_simplify"] +2026-06-15T11:12:38.448152Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "type-extractor", "definition"] result=Ok(()) +2026-06-15T11:12:38.448264Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "type-extractor", "definition"] +2026-06-15T11:12:38.448220Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "normalization"] result=Ok(()) +2026-06-15T11:12:38.448244Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-mir" trial=["pass", "inst_simplify"] result=Ok(()) +2026-06-15T11:12:38.448339Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-mir" trial=["pass", "inst_simplify"] +2026-06-15T11:12:38.448309Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "import-resolver", "continue"] result=Err(Failed to verify annotation +├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:321:29 +├╴1 additional opaque attachment +│ +╰┬▶ unfulfilled annotation: DiagnosticAnnotation { category: None, severity: Error, message: "Cannot find variable 'shl'", line: Some(5) } did not match any emitted diagnostics + │ ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:151:25 + │ + ╰▶ unexpected diagnostic: + error[expander::unresolved-variable]: Unresolved variable + ╭▸ + 5 │ "shl", + │ ━━━ cannot find `shl` in this scope + │ + ├ help: bring it into scope: `use ::core::bits::shl in` + ╰ note: this could be a typo, a name used outside its scope, or a missing declaration; if it is a function or type from another module, you may need to import it first + help: use one of these fully qualified paths + ╭╴ + 5 │ "::core::bits::shl", + ╰╴ ++++++++++++++ + ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:171:21) +2026-06-15T11:12:38.448360Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "import-resolver", "continue"] +2026-06-15T11:12:38.448168Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "inference"] result=Ok(()) +2026-06-15T11:12:38.448418Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "import-resolver"] result=Ok(()) +2026-06-15T11:12:38.448308Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "normalization"] +2026-06-15T11:12:38.448427Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "inference"] +2026-06-15T11:12:38.448437Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "import-resolver"] +2026-06-15T11:12:38.448505Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "import-resolver"] result=Ok(()) +2026-06-15T11:12:38.448522Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-mir" trial=["pass", "inline"] +2026-06-15T11:12:38.448590Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "name-mangler"] result=Ok(()) +2026-06-15T11:12:38.448601Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-mir" trial=["pass", "forward_substitution"] +2026-06-15T11:12:38.448717Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "import-resolver"] result=Err(Expected trial to pass, but it failed +├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:390:24 +╰╴1 additional opaque attachment) +2026-06-15T11:12:38.448762Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "import-resolver"] +2026-06-15T11:12:38.448870Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-mir" trial=["reify"] result=Ok(()) +2026-06-15T11:12:38.448887Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-mir" trial=["reify"] +2026-06-15T11:12:38.448940Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "name-mangler"] result=Ok(()) +2026-06-15T11:12:38.448957Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-mir" trial=["pass", "pre_inline"] +2026-06-15T11:12:38.449009Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-mir" trial=["pass", "pre_inline"] result=Ok(()) +2026-06-15T11:12:38.449025Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-mir" trial=["pass", "pre_inline"] +2026-06-15T11:12:38.448932Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "sanitizer"] result=Err(Failed to verify annotation +├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:321:29 +├╴1 additional opaque attachment +│ +╰┬▶ unfulfilled annotation: DiagnosticAnnotation { category: None, severity: Error, message: "Remove this constraint from 'T'", line: Some(4) } did not match any emitted diagnostics + │ ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:151:25 + │ + ├▶ unexpected diagnostic: + │ error[expander::unresolved-variable]: Unresolved variable + │ ╭▸ + │ 4 │ "add", + │ │ ━━━ cannot find `add` in this scope + │ │ + │ ├ help: bring it into scope: `use ::core::math::add in` + │ ╰ note: this could be a typo, a name used outside its scope, or a missing declaration; if it is a function or type from another module, you may need to import it first + │ help: use one of these fully qualified paths + │ ╭╴ + │ 4 │ "::core::math::add", + │ ╰╴ ++++++++++++++ + │ ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:171:21 + │ + ╰▶ unexpected diagnostic: + error[expander::unresolved-variable]: Unresolved variable + ╭▸ + 4 │ "add", + │ ━━━━━━ cannot find `Number` in this scope + │ + ├ help: check the spelling, or import the name with a `use` statement + ╰ note: this could be a typo, a name used outside its scope, or a missing declaration; if it is a function or type from another module, you may need to import it first + ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:171:21) +2026-06-15T11:12:38.449073Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "import-resolver"] +2026-06-15T11:12:38.449045Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] result=Err(Failed to verify annotation +├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:321:29 +├╴1 additional opaque attachment +│ +╰┬▶ unfulfilled annotation: DiagnosticAnnotation { category: None, severity: Error, message: "Remove this argument", line: Some(7) } did not match any emitted diagnostics + │ ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:151:25 + │ + ╰▶ unexpected diagnostic: + error[expander::invalid-argument-count]: Invalid argument count + ╭▸ + 3 │ ┏ [ + 4 │ ┃ "::kernel::special_form::as", + 5 │ ┃ { "#literal": true }, + 6 │ ┃ { "#literal": true }, + 7 │ ┃ { "#literal": true } + │ ┃ ──────────────────── unexpected argument + 8 │ ┃ //~^ ERROR Remove this argument + 9 │ ┃ ] + │ ┗━┛ expected 2 arguments to `as`, found 3 + │ + ├ help: use `(as value type)` + ╰ note: the first argument is the value to cast and the second is the target type + ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:171:21) +2026-06-15T11:12:38.449099Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] +2026-06-15T11:12:38.449226Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] result=Err(Failed to verify annotation +├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:321:29 +├╴1 additional opaque attachment +│ +╰┬▶ unfulfilled annotation: DiagnosticAnnotation { category: None, severity: Error, message: "Replace this with a simple identifier", line: Some(5) } did not match any emitted diagnostics + │ ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:151:25 + │ + ├▶ unfulfilled annotation: DiagnosticAnnotation { category: None, severity: Error, message: "Replace this with a simple identifier", line: Some(10) } did not match any emitted diagnostics + │ ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:151:25 + │ + ├▶ unfulfilled annotation: DiagnosticAnnotation { category: None, severity: Error, message: "Replace this with a simple identifier", line: Some(15) } did not match any emitted diagnostics + │ ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:151:25 + │ + ╰▶ unexpected diagnostic: + error[expander::invalid-binding-name]: Invalid binding name + ╭▸ + 5 │ "Int", + │ ━━━━━━ expected a simple identifier for the `let` binding name + │ + ├ help: write `(let name value body)` with a plain name such as `x` + ╰ note: the first argument to `let` introduces a new local binding and must be a plain identifier without path qualification or generic arguments + ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:171:21) +2026-06-15T11:12:38.449278Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] +2026-06-15T11:12:38.449549Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-mir" trial=["pass", "inst_simplify"] result=Ok(()) +2026-06-15T11:12:38.449560Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-mir" trial=["pass", "inst_simplify"] +2026-06-15T11:12:38.449621Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "type-extractor", "definition"] result=Ok(()) +2026-06-15T11:12:38.449641Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "type-extractor", "definition"] +2026-06-15T11:12:38.449857Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-mir" trial=["pass", "inst_simplify"] result=Ok(()) +2026-06-15T11:12:38.449870Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-mir" trial=["pass", "inst_simplify"] +2026-06-15T11:12:38.449954Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "import-resolver"] result=Ok(()) +2026-06-15T11:12:38.449970Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "inference"] result=Ok(()) +2026-06-15T11:12:38.449979Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "import-resolver"] +2026-06-15T11:12:38.449988Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "inference"] +2026-06-15T11:12:38.450260Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "import-resolver"] result=Ok(()) +2026-06-15T11:12:38.450270Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "import-resolver"] +2026-06-15T11:12:38.450323Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] result=Err(Expected trial to pass, but it failed +├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:390:24 +╰╴1 additional opaque attachment) +2026-06-15T11:12:38.450345Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] +2026-06-15T11:12:38.450438Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "normalization"] result=Ok(()) +2026-06-15T11:12:38.450461Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "normalization"] +2026-06-15T11:12:38.450527Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "import-resolver"] result=Err(Failed to verify annotation +├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:321:29 +├╴1 additional opaque attachment +│ +╰┬▶ unfulfilled annotation: DiagnosticAnnotation { category: None, severity: Error, message: "Cannot find variable 'föo'", line: Some(11) } did not match any emitted diagnostics + │ ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:151:25 + │ + ╰▶ unexpected diagnostic: + error[expander::unresolved-variable]: Unresolved variable + ╭▸ + 11 │ "föo" + │ ━━━ cannot find `föo` in this scope + │ + ╰ note: this could be a typo, a name used outside its scope, or a missing declaration; if it is a function or type from another module, you may need to import it first + help: a similar local binding exists + ╭╴ + 11 - "föo" + 11 + "foo" + ╰╴ + ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:171:21) +2026-06-15T11:12:38.450604Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "import-resolver"] +2026-06-15T11:12:38.450652Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-mir" trial=["reify"] result=Ok(()) +2026-06-15T11:12:38.450664Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-mir" trial=["reify"] +2026-06-15T11:12:38.450671Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-mir" trial=["pass", "pre_inline"] result=Ok(()) +2026-06-15T11:12:38.450687Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-mir" trial=["pass", "pre_inline"] +2026-06-15T11:12:38.450691Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-mir" trial=["pass", "pre_inline"] result=Ok(()) +2026-06-15T11:12:38.450707Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-mir" trial=["pass", "pre_inline"] +2026-06-15T11:12:38.450773Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-mir" trial=["pass", "forward_substitution"] result=Ok(()) +2026-06-15T11:12:38.450784Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-mir" trial=["pass", "forward_substitution"] +2026-06-15T11:12:38.450750Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "import-resolver", "continue"] result=Err(Failed to verify annotation +├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:321:29 +├╴1 additional opaque attachment +│ +╰┬▶ unfulfilled annotation: DiagnosticAnnotation { category: None, severity: Error, message: "Module 'foo' not found", line: Some(6) } did not match any emitted diagnostics + │ ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:151:25 + │ + ├▶ unexpected diagnostic: + │ error[expander::unresolved-variable]: Unresolved variable + │ ╭▸ + │ 9 │ ["add", { "#literal": 1 }, { "#literal": 2 }] + │ │ ━━━ cannot find `add` in this scope + │ │ + │ ├ help: bring it into scope: `use ::core::math::add in` + │ ╰ note: this could be a typo, a name used outside its scope, or a missing declaration; if it is a function or type from another module, you may need to import it first + │ help: use one of these fully qualified paths + │ ╭╴ + │ 9 │ ["::core::math::add", { "#literal": 1 }, { "#literal": 2 }] + │ ╰╴ ++++++++++++++ + │ ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:171:21 + │ + ╰▶ unexpected diagnostic: + error[expander::module-not-found]: Module not found + ╭▸ + 6 │ "kernel::foo", + │ ┬───── ━━━ cannot find module `foo` in `kernel` + │ │ + │ looked in this module + │ + ├ help: check the module name and ensure it is exported from its parent + ╰ note: only exported sub-modules are reachable via `::` + ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:171:21) +2026-06-15T11:12:38.450835Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "import-resolver", "continue"] +2026-06-15T11:12:38.450954Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-mir" trial=["pass", "inst_simplify"] result=Ok(()) +2026-06-15T11:12:38.450965Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-mir" trial=["pass", "inst_simplify"] +2026-06-15T11:12:38.451038Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] result=Err(Failed to verify annotation +├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:321:29 +├╴1 additional opaque attachment +│ +╰┬▶ unfulfilled annotation: DiagnosticAnnotation { category: None, severity: Error, message: "Remove this type annotation", line: Some(8) } did not match any emitted diagnostics + │ ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:151:25 + │ + ├▶ unexpected diagnostic: + │ error[expander::type-annotation-in-type-position]: Type annotation in type position + │ ╭▸ + │ 6 │ ┌ { + │ 7 │ │ "#struct": { "name": "String" }, + │ 8 │ │ "#type": "(name: String)" + │ │ │ ━━━━━━━━━━━━━━ type annotations are not allowed inside a type expression + │ 9 │ │ //~^ ERROR Remove this type annotation + │ 10 │ │ }, + │ │ └───┘ this struct is already being used as a type + │ │ + │ ├ help: remove the type annotation + │ ╰ note: in type position, `(name: String)` already defines a struct type + │ ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:171:21 + │ + ╰▶ unexpected diagnostic: + error[expander::unresolved-variable]: Unresolved variable + ╭▸ + 11 │ "x" + │ ━ cannot find `x` in this scope + │ + ╰ note: this could be a typo, a name used outside its scope, or a missing declaration; if it is a function or type from another module, you may need to import it first + help: a similar imported name exists + ╭╴ + 11 - "x" + 11 + "~↑√∛index" + ╰╴ + ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:171:21) +2026-06-15T11:12:38.451092Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] +2026-06-15T11:12:38.451294Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "type-extractor", "definition"] result=Ok(()) +2026-06-15T11:12:38.451311Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "type-extractor", "definition"] +2026-06-15T11:12:38.451325Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "import-resolver"] result=Ok(()) +2026-06-15T11:12:38.451337Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-mir" trial=["pass", "inline"] +2026-06-15T11:12:38.451367Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-mir" trial=["pass", "inst_simplify"] result=Ok(()) +2026-06-15T11:12:38.451381Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-mir" trial=["pass", "inst_simplify"] +2026-06-15T11:12:38.451567Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] result=Err(Expected trial to pass, but it failed +├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:390:24 +╰╴1 additional opaque attachment) +2026-06-15T11:12:38.451587Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] +2026-06-15T11:12:38.451592Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "import-resolver"] result=Ok(()) +2026-06-15T11:12:38.451601Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "import-resolver"] +2026-06-15T11:12:38.451980Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "import-resolver"] result=Ok(()) +2026-06-15T11:12:38.451994Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "import-resolver"] +2026-06-15T11:12:38.452165Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-mir" trial=["reify"] result=Ok(()) +2026-06-15T11:12:38.452178Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-mir" trial=["reify"] +2026-06-15T11:12:38.452282Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-mir" trial=["pass", "pre_inline"] result=Ok(()) +2026-06-15T11:12:38.452297Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-mir" trial=["pass", "pre_inline"] +2026-06-15T11:12:38.452323Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "normalization"] result=Ok(()) +2026-06-15T11:12:38.452349Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "normalization"] +2026-06-15T11:12:38.452352Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-mir" trial=["pass", "forward_substitution"] result=Ok(()) +2026-06-15T11:12:38.452423Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-mir" trial=["pass", "inst_simplify"] +2026-06-15T11:12:38.452463Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-mir" trial=["pass", "inst_simplify"] result=Ok(()) +2026-06-15T11:12:38.452475Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-mir" trial=["pass", "inst_simplify"] +2026-06-15T11:12:38.452584Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "import-resolver", "continue"] result=Err(Failed to verify annotation +├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:321:29 +├╴1 additional opaque attachment +│ +╰┬▶ unfulfilled annotation: DiagnosticAnnotation { category: None, severity: Error, message: "Cannot find variable 'Bar'", line: Some(6) } did not match any emitted diagnostics + │ ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:151:25 + │ + ╰▶ unexpected diagnostic: + error[expander::unresolved-variable]: Unresolved variable + ╭▸ + 6 │ "Foo", + │ ━━━ cannot find `Bar` in this scope + │ + ├ help: check the spelling, or import the name with a `use` statement + ╰ note: this could be a typo, a name used outside its scope, or a missing declaration; if it is a function or type from another module, you may need to import it first + ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:171:21) +2026-06-15T11:12:38.452649Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "import-resolver"] +2026-06-15T11:12:38.452660Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-mir" trial=["pass", "pre_inline"] result=Ok(()) +2026-06-15T11:12:38.452671Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-mir" trial=["pass", "pre_inline"] +2026-06-15T11:12:38.452728Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] result=Err(Failed to verify annotation +├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:321:29 +├╴1 additional opaque attachment +│ +╰┬▶ unfulfilled annotation: DiagnosticAnnotation { category: None, severity: Error, message: "Use an integer literal here", line: Some(3) } did not match any emitted diagnostics + │ ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:151:25 + │ + ╰▶ unexpected diagnostic: + error[expander::invalid-field-literal-type]: Invalid field literal type + ╭▸ + 3 │ ["::kernel::special_form::access", "data", { "#literal": true }] + │ ━━━━ expected an integer for field indexing + │ + ╰ help: use an integer index like `0` for tuple field access, or a name like `field` for named field access + ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:171:21) +2026-06-15T11:12:38.452768Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] +2026-06-15T11:12:38.452843Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] result=Err(Expected trial to pass, but it failed +├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:390:24 +╰╴1 additional opaque attachment) +2026-06-15T11:12:38.452860Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] +2026-06-15T11:12:38.453060Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "type-extractor", "definition"] result=Ok(()) +2026-06-15T11:12:38.453078Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "type-extractor", "definition"] +2026-06-15T11:12:38.453035Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "inference"] result=Err(Failed to verify annotation +├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:321:29 +├╴1 additional opaque attachment +│ +╰┬▶ unfulfilled annotation: DiagnosticAnnotation { category: None, severity: Error, message: "Type variable has incompatible upper and lower bounds", line: Some(3) } did not match any emitted diagnostics + │ ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:151:25 + │ + ├▶ unexpected diagnostic: + │ error[lowering::type-extractor::unbound-type-variable]: Unbound type variable + │ ╭▸ + │ 3 │ ["newtype", "Person", "T", ["Person", { "#literal": "2" }]] + │ │ ━━━━━━ Cannot find type 'Number' + │ │ + │ ├ note: This is likely a compiler bug in the name resolution system. The type checker has encountered a name that wasn't properly resolved earlier in compilation. The name resolution pass should have caught this error or provided a more specific error message. + │ ├ help: This is a bug in the compiler, not an issue with your code. + │ ├ help: Please report this issue along with a minimal code example that reproduces the error. + │ ╰ note: Internal compiler errors indicate a bug in the compiler itself that needs to be fixed. + │ + │ We would appreciate if you could file a GitHub or Linear issue and reference this error. + │ + │ When reporting this issue, please include your query, any relevant type definitions, and the complete error message shown above. + │ ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:171:21 + │ + ├▶ unexpected diagnostic: + │ error[lowering::type-extractor::unused-generic-parameter]: Generic parameter not used in type definition + │ ╭▸ + │ 1 │ //@ run: fail + │ │ ─ ...but never used in this type definition + │ 2 │ //@ description: Checks that type constructor bounded generic parameter (T: Number) violation is caught during type inference. + │ 3 │ ["newtype", "Person", "T", ["Person", { "#literal": "2" }]] + │ │ ━━━━━━━━━ Generic parameter `T` declared here... + │ │ + │ ├ help: Generic parameter `T` is declared but not referenced. Either remove the unused parameter or incorporate it into your type definition. + │ ╰ note: Each generic parameter should serve a purpose in parameterizing the type. Unused parameters can make code harder to understand and may indicate a design oversight or incomplete implementation. They are unconstrained variables, and therefore considered erroneous. + │ ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:171:21 + │ + ╰▶ unexpected diagnostic: + error[lowering::expander::unresolved-variable]: Unresolved variable + ╭▸ + 3 │ ["newtype", "Person", "T", ["Person", { "#literal": "2" }]] + │ ━━━━━━ cannot find `Number` in this scope + │ + ├ help: check the spelling, or import the name with a `use` statement + ╰ note: this could be a typo, a name used outside its scope, or a missing declaration; if it is a function or type from another module, you may need to import it first + ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:171:21) +2026-06-15T11:12:38.453126Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "inference"] +2026-06-15T11:12:38.453229Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "import-resolver"] result=Ok(()) +2026-06-15T11:12:38.453241Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "import-resolver"] +2026-06-15T11:12:38.453449Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-mir" trial=["pass", "inline"] result=Ok(()) +2026-06-15T11:12:38.453458Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-mir" trial=["pass", "inline"] +2026-06-15T11:12:38.453721Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "import-resolver"] result=Err(Failed to verify annotation +├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:321:29 +├╴1 additional opaque attachment +│ +╰┬▶ unfulfilled annotation: DiagnosticAnnotation { category: None, severity: Error, message: "Remove this generic argument", line: Some(3) } did not match any emitted diagnostics + │ ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:151:25 + │ + ├▶ unexpected diagnostic: + │ error[expander::generic-arguments-in-module]: Generic arguments in module path + │ ╭▸ + │ 3 │ ["::math::add", { "#literal": 2 }, { "#literal": 3 }] + │ │ ━ generic argument not allowed here + │ │ + │ ├ help: move the generic arguments to the final segment of the path, or remove them + │ ╰ note: modules are not generic; only the final item in a path can be parameterized + │ ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:171:21 + │ + ╰▶ unexpected diagnostic: + error[expander::unresolved-variable]: Unresolved variable + ╭▸ + 3 │ ["::math::add", { "#literal": 2 }, { "#literal": 3 }] + │ ━ cannot find `T` in this scope + │ + ╰ note: this could be a typo, a name used outside its scope, or a missing declaration; if it is a function or type from another module, you may need to import it first + help: a similar imported name exists + ╭╴ + 3 - ["::math::add", { "#literal": 2 }, { "#literal": 3 }] + 3 + ["::math<||~↑√∛>::add", { "#literal": 2 }, { "#literal": 3 }] + ╰╴ + ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:171:21) +2026-06-15T11:12:38.453825Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "import-resolver"] +2026-06-15T11:12:38.453879Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-mir" trial=["pass", "inline"] result=Ok(()) +2026-06-15T11:12:38.453919Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-mir" trial=["pass", "pre_inline"] result=Ok(()) +2026-06-15T11:12:38.453930Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-mir" trial=["pass", "inst_simplify"] result=Ok(()) +2026-06-15T11:12:38.453924Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-mir" trial=["pass", "inline"] +2026-06-15T11:12:38.453942Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-mir" trial=["pass", "inst_simplify"] +2026-06-15T11:12:38.453934Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-mir" trial=["pass", "pre_inline"] +2026-06-15T11:12:38.453988Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-mir" trial=["reify"] result=Ok(()) +2026-06-15T11:12:38.453999Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-mir" trial=["reify"] +2026-06-15T11:12:38.454076Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "normalization"] result=Ok(()) +2026-06-15T11:12:38.454097Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "normalization"] +2026-06-15T11:12:38.454114Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] result=Err(Expected trial to pass, but it failed +├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:390:24 +╰╴1 additional opaque attachment) +2026-06-15T11:12:38.454127Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-mir" trial=["pass", "pre_inline"] result=Ok(()) +2026-06-15T11:12:38.454156Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-mir" trial=["pass", "dse"] +2026-06-15T11:12:38.454162Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "import-resolver"] result=Err(Failed to verify annotation +├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:321:29 +├╴1 additional opaque attachment +│ +╰┬▶ unfulfilled annotation: DiagnosticAnnotation { category: None, severity: Error, message: "'lshift' not found in module 'core::bits'", line: Some(3) } did not match any emitted diagnostics + │ ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:151:25 + │ + ╰▶ unexpected diagnostic: + error[expander::item-not-found]: Item not found + ╭▸ + 3 │ ["use", "core::bits", { "#tuple": ["lshift"] }, "_"] + │ ┬─── ━━━━━━ cannot find `lshift` in module `core::bits` + │ │ + │ looked in this module + │ + ╰ help: check the spelling and ensure the item is exported + ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:171:21) +2026-06-15T11:12:38.454163Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] result=Err(Failed to verify annotation +├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:321:29 +├╴1 additional opaque attachment +│ +╰┬▶ unfulfilled annotation: DiagnosticAnnotation { category: None, severity: Error, message: "Replace this with a simple identifier", line: Some(5) } did not match any emitted diagnostics + │ ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:151:25 + │ + ├▶ unfulfilled annotation: DiagnosticAnnotation { category: None, severity: Error, message: "Replace this literal with a type name", line: Some(7) } did not match any emitted diagnostics + │ ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:151:25 + │ + ╰▶ unexpected diagnostic: + error[expander::invalid-binding-name]: Invalid binding name + ╭▸ + 5 │ "::x", + │ ━━━ expected a simple identifier for the `let` binding name + │ + ├ help: write `(let name value body)` with a plain name such as `x` + ╰ note: the first argument to `let` introduces a new local binding and must be a plain identifier without path qualification or generic arguments + ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:171:21) +2026-06-15T11:12:38.454138Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] +2026-06-15T11:12:38.454217Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "import-resolver"] +2026-06-15T11:12:38.454227Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] +2026-06-15T11:12:38.454415Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-mir" trial=["pass", "inst_simplify"] result=Ok(()) +2026-06-15T11:12:38.454433Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "type-extractor", "definition"] result=Ok(()) +2026-06-15T11:12:38.454452Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "type-extractor", "definition"] +2026-06-15T11:12:38.454470Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "inference"] result=Ok(()) +2026-06-15T11:12:38.454481Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "inference"] +2026-06-15T11:12:38.454495Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "import-resolver"] result=Ok(()) +2026-06-15T11:12:38.454441Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-mir" trial=["pass", "inst_simplify"] +2026-06-15T11:12:38.454507Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] +2026-06-15T11:12:38.455507Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-mir" trial=["pass", "inline"] result=Ok(()) +2026-06-15T11:12:38.455519Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "ctor"] +2026-06-15T11:12:38.455520Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] result=Err(Expected trial to pass, but it failed +├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:390:24 +╰╴1 additional opaque attachment) +2026-06-15T11:12:38.455551Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] +2026-06-15T11:12:38.455637Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-mir" trial=["pass", "inst_simplify"] result=Ok(()) +2026-06-15T11:12:38.455660Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "import-resolver"] +2026-06-15T11:12:38.455662Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-mir" trial=["pass", "dse"] result=Ok(()) +2026-06-15T11:12:38.455685Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-mir" trial=["pass", "dse"] +2026-06-15T11:12:38.455901Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-mir" trial=["pass", "inst_simplify"] result=Ok(()) +2026-06-15T11:12:38.455909Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "normalization"] result=Ok(()) +2026-06-15T11:12:38.455911Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-mir" trial=["pass", "inst_simplify"] +2026-06-15T11:12:38.455921Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "normalization"] +2026-06-15T11:12:38.455886Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] result=Err(Failed to verify annotation +├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:321:29 +├╴1 additional opaque attachment +│ +╰┬▶ unfulfilled annotation: DiagnosticAnnotation { category: None, severity: Error, message: "Replace this qualified path with a simple identifier", line: Some(3) } did not match any emitted diagnostics + │ ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:151:25 + │ + ├▶ unfulfilled annotation: DiagnosticAnnotation { category: None, severity: Error, message: "Replace this literal with a type name", line: Some(3) } did not match any emitted diagnostics + │ ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:151:25 + │ + ╰▶ unexpected diagnostic: + error[expander::invalid-binding-name]: Invalid binding name + ╭▸ + 3 │ ["::kernel::special_form::type", "::x", { "#literal": 1 }, "x"] + │ ━━━ expected a type name for the `type` binding + │ + ├ help: write `(type Name type-expr body)` with a name like `MyType` or `Pair` + ╰ note: the first argument to `type` introduces a new type alias and must be a simple identifier, optionally with generic parameters + ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:171:21) +2026-06-15T11:12:38.455978Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] +2026-06-15T11:12:38.455985Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "type-extractor", "definition"] result=Ok(()) +2026-06-15T11:12:38.456021Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "type-extractor", "definition"] +2026-06-15T11:12:38.456038Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "inference"] result=Ok(()) +2026-06-15T11:12:38.456041Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-mir" trial=["reify"] result=Ok(()) +2026-06-15T11:12:38.456060Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-mir" trial=["reify"] +2026-06-15T11:12:38.456052Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "inference"] +2026-06-15T11:12:38.456207Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-mir" trial=["pass", "pre_inline"] result=Ok(()) +2026-06-15T11:12:38.456225Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] +2026-06-15T11:12:38.456207Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "import-resolver"] result=Err(Failed to verify annotation +├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:321:29 +├╴1 additional opaque attachment +│ +╰┬▶ unfulfilled annotation: DiagnosticAnnotation { category: None, severity: Error, message: "Generic arguments are not allowed here", line: Some(3) } did not match any emitted diagnostics + │ ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:151:25 + │ + ├▶ unexpected diagnostic: + │ error[expander::item-not-found]: Item not found + │ ╭▸ + │ 3 │ ["use", "kernel::type", { "#tuple": ["T"] }, "_"] + │ │ ┬─── ━ cannot find `T` in module `kernel::type` + │ │ │ + │ │ looked in this module + │ ╰╴ + │ help: a similar item exists in this module + │ ╭╴ + │ 3 - ["use", "kernel::type", { "#tuple": ["T"] }, "_"] + │ 3 + ["use", "kernel::type", { "#tuple": ["NumberStringUnionUnknown|"] }, "_"] + │ ╰╴ + │ ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:171:21 + │ + ╰▶ unexpected diagnostic: + error[expander::use-path-generic-arguments]: Generic arguments in use path + ╭▸ + 3 │ ["use", "kernel::type", { "#tuple": ["T"] }, "_"] + │ ━━━━━━━━━━━━━━━ generic arguments are not allowed in `use` paths + │ + ╰ help: remove the generic arguments; `use` imports modules and items, which do not take type parameters at the import site + ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:171:21) +2026-06-15T11:12:38.456270Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "import-resolver"] +2026-06-15T11:12:38.456230Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "import-resolver"] result=Err(Failed to verify annotation +├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:321:29 +├╴1 additional opaque attachment +│ +╰┬▶ unfulfilled annotation: DiagnosticAnnotation { category: None, severity: Error, message: "Module 'foo' not found", line: Some(3) } did not match any emitted diagnostics + │ ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:151:25 + │ + ╰▶ unexpected diagnostic: + error[expander::module-not-found]: Module not found + ╭▸ + 3 │ ["use", "kernel::foo", "*", "_"] + │ ┬───── ━━━ cannot find module `foo` in `kernel` + │ │ + │ looked in this module + │ + ├ help: check the module name and ensure it is exported from its parent + ╰ note: only exported sub-modules are reachable via `::` + ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:171:21) +2026-06-15T11:12:38.456292Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "import-resolver"] +2026-06-15T11:12:38.456803Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] result=Err(Failed to verify annotation +├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:321:29 +├╴1 additional opaque attachment +│ +╰┬▶ unfulfilled annotation: DiagnosticAnnotation { category: None, severity: Error, message: "Replace this literal with a type name", line: Some(7) } did not match any emitted diagnostics + │ ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:151:25 + │ + ├▶ unexpected diagnostic: + │ error[expander::unresolved-variable]: Unresolved variable + │ ╭▸ + │ 13 │ ["+", "a", "b"] + │ │ ━ cannot find `b` in this scope + │ │ + │ ╰ note: this could be a typo, a name used outside its scope, or a missing declaration; if it is a function or type from another module, you may need to import it first + │ help: a similar imported name exists + │ ╭╴ + │ 13 - ["+", "a", "b"] + │ 13 + ["+", "a", "~↑√∛cbrt"] + │ ╰╴ + │ ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:171:21 + │ + ├▶ unexpected diagnostic: + │ error[expander::unresolved-variable]: Unresolved variable + │ ╭▸ + │ 13 │ ["+", "a", "b"] + │ │ ━ cannot find `a` in this scope + │ │ + │ ╰ note: this could be a typo, a name used outside its scope, or a missing declaration; if it is a function or type from another module, you may need to import it first + │ help: a similar imported name exists + │ ╭╴ + │ 13 - ["+", "a", "b"] + │ 13 + ["+", "↑√∛ccesss", "b"] + │ ╰╴ + │ ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:171:21 + │ + ╰▶ unexpected diagnostic: + error[expander::invalid-expression-in-type-position]: Invalid expression in type position + ╭▸ + 7 │ "T": { "#literal": 2 } + │ ━━━━━━━━━━━━━━━━━ cannot use a literal value as a type + │ + ├ help: replace this with a type path, tuple type, struct type, `_`, `(| ...)`, or `(& ...)` + ╰ note: valid type forms are: type paths like `String`, tuple types like `(Int, String)`, struct types like `(name: String)`, `_` for inference, unions `(| ...)`, and intersections `(& ...)` + ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:171:21) +2026-06-15T11:12:38.456884Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] +2026-06-15T11:12:38.456916Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "import-resolver"] result=Ok(()) +2026-06-15T11:12:38.456928Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "import-resolver"] +2026-06-15T11:12:38.456953Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] result=Err(Failed to verify annotation +├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:321:29 +├╴1 additional opaque attachment +│ +╰┬▶ unfulfilled annotation: DiagnosticAnnotation { category: None, severity: Error, message: "Replace with a valid import expression", line: Some(6) } did not match any emitted diagnostics + │ ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:151:25 + │ + ╰▶ unexpected diagnostic: + error[expander::invalid-use-imports]: Invalid use imports + ╭▸ + 6 │ { "#literal": 1 }, + │ ━━━━━━━━━━━━━━━━━ expected `*`, a tuple of names, or a struct of aliases + │ + ╰ help: use `*` to import everything, `(a, b)` to import specific names, or `(a: alias, b: _)` to import with aliases + ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:171:21) +2026-06-15T11:12:38.456993Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] +2026-06-15T11:12:38.457157Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "ctor"] result=Ok(()) +2026-06-15T11:12:38.457182Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "ctor"] +2026-06-15T11:12:38.457203Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] result=Err(Expected trial to pass, but it failed +├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:390:24 +╰╴1 additional opaque attachment) +2026-06-15T11:12:38.457226Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] +2026-06-15T11:12:38.457217Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "normalization"] result=Ok(()) +2026-06-15T11:12:38.457442Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "normalization"] +2026-06-15T11:12:38.457463Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "type-extractor", "definition"] result=Ok(()) +2026-06-15T11:12:38.457478Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "type-extractor", "definition"] +2026-06-15T11:12:38.457564Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] result=Err(Expected trial to pass, but it failed +├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:390:24 +╰╴1 additional opaque attachment) +2026-06-15T11:12:38.457430Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-mir" trial=["pass", "dse"] result=Ok(()) +2026-06-15T11:12:38.457607Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-mir" trial=["pass", "dse"] +2026-06-15T11:12:38.457597Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] +2026-06-15T11:12:38.457578Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "import-resolver"] result=Ok(()) +2026-06-15T11:12:38.457664Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "import-resolver"] +2026-06-15T11:12:38.457683Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-mir" trial=["pass", "inst_simplify"] result=Ok(()) +2026-06-15T11:12:38.457696Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "normalization"] +2026-06-15T11:12:38.457676Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "import-resolver"] result=Err(Failed to verify annotation +├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:321:29 +├╴1 additional opaque attachment +│ +╰┬▶ unfulfilled annotation: DiagnosticAnnotation { category: None, severity: Error, message: "Module 'foo' not found", line: Some(3) } did not match any emitted diagnostics + │ ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:151:25 + │ + ╰▶ unexpected diagnostic: + error[expander::module-not-found]: Module not found + ╭▸ + 3 │ ["use", "kernel::foo", { "#tuple": ["baz"] }, "_"] + │ ┬───── ━━━ cannot find module `foo` in `kernel` + │ │ + │ looked in this module + │ + ├ help: check the module name and ensure it is exported from its parent + ╰ note: only exported sub-modules are reachable via `::` + ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:171:21) +2026-06-15T11:12:38.457715Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "import-resolver"] +2026-06-15T11:12:38.457716Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-mir" trial=["reify"] result=Ok(()) +2026-06-15T11:12:38.457727Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-mir" trial=["reify"] +2026-06-15T11:12:38.457903Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "inference"] result=Err(Expected trial to pass, but it failed +├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:390:24 +╰╴1 additional opaque attachment) +2026-06-15T11:12:38.457927Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "inference"] +2026-06-15T11:12:38.458164Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "import-resolver"] result=Ok(()) +2026-06-15T11:12:38.458177Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "import-resolver"] +2026-06-15T11:12:38.458292Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] result=Err(Failed to verify annotation +├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:321:29 +├╴1 additional opaque attachment +│ +╰┬▶ unfulfilled annotation: DiagnosticAnnotation { category: None, severity: Error, message: "Add missing arguments", line: Some(3) } did not match any emitted diagnostics + │ ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:151:25 + │ + ╰▶ unexpected diagnostic: + error[expander::invalid-argument-count]: Invalid argument count + ╭▸ + 3 │ ["::kernel::special_form::index", "x"] + │ ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ expected 2 arguments to `[]`, found 1 + │ + ├ help: use `([] collection index)` + ╰ note: the first argument is the collection and the second is the index + ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:171:21) +2026-06-15T11:12:38.458340Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] +2026-06-15T11:12:38.458767Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "type-extractor", "definition"] result=Ok(()) +2026-06-15T11:12:38.458783Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "type-extractor", "definition"] +2026-06-15T11:12:38.458801Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "import-resolver"] result=Ok(()) +2026-06-15T11:12:38.458815Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-mir" trial=["pass", "inst_simplify"] +2026-06-15T11:12:38.458817Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "ctor"] result=Err(Expected trial to pass, but it failed +├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:390:24 +╰╴1 additional opaque attachment) +2026-06-15T11:12:38.458840Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "ctor"] +2026-06-15T11:12:38.458852Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "import-resolver"] result=Ok(()) +2026-06-15T11:12:38.458861Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "import-resolver"] +2026-06-15T11:12:38.459049Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] result=Err(Failed to verify annotation +├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:321:29 +├╴1 additional opaque attachment +│ +╰┬▶ unfulfilled annotation: DiagnosticAnnotation { category: None, severity: Error, message: "Did you mean to use 'newtype' instead?", line: Some(3) } did not match any emitted diagnostics + │ ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:151:25 + │ + ╰▶ unexpected diagnostic: + error[expander::item-not-found]: Item not found + ╭▸ + 3 │ ["::kernel::special_form::nuwtype"] + │ ┬─────────── ━━━━━━━ cannot find `nuwtype` in module `::kernel::special_form` + │ │ + │ looked in this module + ╰╴ + help: a similar item exists in this module + ╭╴ + 3 - ["::kernel::special_form::nuwtype"] + 3 + ["::kernel::special_form::newtype"] + ╰╴ + ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:171:21) +2026-06-15T11:12:38.459137Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] +2026-06-15T11:12:38.459165Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "normalization"] result=Ok(()) +2026-06-15T11:12:38.459179Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "normalization"] +2026-06-15T11:12:38.459259Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-mir" trial=["pass", "dse"] result=Ok(()) +2026-06-15T11:12:38.459271Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-mir" trial=["pass", "dse"] +2026-06-15T11:12:38.459285Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "inference"] result=Ok(()) +2026-06-15T11:12:38.459302Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "inference"] +2026-06-15T11:12:38.459367Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-mir" trial=["reify"] result=Ok(()) +2026-06-15T11:12:38.459381Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-mir" trial=["reify"] +2026-06-15T11:12:38.459213Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] result=Err(Failed to verify annotation +├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:321:29 +├╴1 additional opaque attachment +│ +╰┬▶ unfulfilled annotation: DiagnosticAnnotation { category: None, severity: Error, message: "Use a valid generics expression", line: Some(7) } did not match any emitted diagnostics + │ ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:151:25 + │ + ├▶ unexpected diagnostic: + │ error[expander::unresolved-variable]: Unresolved variable + │ ╭▸ + │ 13 │ ["+", "a", "b"] + │ │ ━ cannot find `b` in this scope + │ │ + │ ╰ note: this could be a typo, a name used outside its scope, or a missing declaration; if it is a function or type from another module, you may need to import it first + │ help: a similar imported name exists + │ ╭╴ + │ 13 - ["+", "a", "b"] + │ 13 + ["+", "a", "~↑√∛cbrt"] + │ ╰╴ + │ ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:171:21 + │ + ├▶ unexpected diagnostic: + │ error[expander::unresolved-variable]: Unresolved variable + │ ╭▸ + │ 13 │ ["+", "a", "b"] + │ │ ━ cannot find `a` in this scope + │ │ + │ ╰ note: this could be a typo, a name used outside its scope, or a missing declaration; if it is a function or type from another module, you may need to import it first + │ help: a similar imported name exists + │ ╭╴ + │ 13 - ["+", "a", "b"] + │ 13 + ["+", "↑√∛ccesss", "b"] + │ ╰╴ + │ ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:171:21 + │ + ╰▶ unexpected diagnostic: + error[expander::invalid-fn-generic-param]: Invalid generic parameter + ╭▸ + 7 │ { "#literal": 1 } + │ ━━━━━━━━━━━━━━━━━ expected a simple type parameter name + │ + ╰ help: each generic parameter must be a plain identifier like `T`, not a qualified path or expression + ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:171:21) +2026-06-15T11:12:38.459446Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] +2026-06-15T11:12:38.459442Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] result=Err(Failed to verify annotation +├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:321:29 +├╴1 additional opaque attachment +│ +╰┬▶ unfulfilled annotation: DiagnosticAnnotation { category: None, severity: Error, message: "Add missing arguments", line: Some(3) } did not match any emitted diagnostics + │ ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:151:25 + │ + ╰▶ unexpected diagnostic: + error[expander::invalid-argument-count]: Invalid argument count + ╭▸ + 3 │ ["::kernel::special_form::if", { "#literal": true }] + │ ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ expected 2 or 3 arguments to `if`, found 1 + │ + ├ help: use `(if condition then)` or `(if condition then else)` + ╰ note: the arguments are, in order: the condition, the then branch, and an optional else branch + ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:171:21) +2026-06-15T11:12:38.459507Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "import-resolver"] result=Ok(()) +2026-06-15T11:12:38.459524Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] +2026-06-15T11:12:38.459526Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "import-resolver"] +2026-06-15T11:12:38.459582Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] result=Ok(()) +2026-06-15T11:12:38.459593Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] +2026-06-15T11:12:38.460009Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "import-resolver"] result=Ok(()) +2026-06-15T11:12:38.460024Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] +2026-06-15T11:12:38.460060Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "type-extractor", "definition"] result=Ok(()) +2026-06-15T11:12:38.460074Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "type-extractor", "definition"] +2026-06-15T11:12:38.460192Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "ctor"] result=Ok(()) +2026-06-15T11:12:38.460204Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "ctor"] +2026-06-15T11:12:38.460299Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-mir" trial=["pass", "inst_simplify"] result=Ok(()) +2026-06-15T11:12:38.460309Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-mir" trial=["pass", "administrative_reduction"] +2026-06-15T11:12:38.460734Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "normalization"] result=Ok(()) +2026-06-15T11:12:38.460747Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "normalization"] +2026-06-15T11:12:38.460760Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "inference"] result=Ok(()) +2026-06-15T11:12:38.460771Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "inference"] +2026-06-15T11:12:38.460840Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "import-resolver"] result=Ok(()) +2026-06-15T11:12:38.460851Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "import-resolver"] +2026-06-15T11:12:38.460944Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] result=Err(Expected trial to pass, but it failed +├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:390:24 +╰╴1 additional opaque attachment) +2026-06-15T11:12:38.461002Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] +2026-06-15T11:12:38.461060Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] result=Err(Failed to verify annotation +├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:321:29 +├╴1 additional opaque attachment +│ +╰┬▶ unfulfilled annotation: DiagnosticAnnotation { category: None, severity: Error, message: "Add missing arguments", line: Some(3) } did not match any emitted diagnostics + │ ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:151:25 + │ + ╰▶ unexpected diagnostic: + error[expander::invalid-argument-count]: Invalid argument count + ╭▸ + 3 │ ["::kernel::special_form::type", "x", "Integer"] + │ ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ expected 3 arguments to `type`, found 2 + │ + ├ help: use `(type Name type-expr body)` + ╰ note: the arguments are, in order: the type name (optionally with generic parameters), the type definition, and the body where the name is in scope + ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:171:21) +2026-06-15T11:12:38.461101Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] +2026-06-15T11:12:38.461154Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] result=Err(Expected trial to pass, but it failed +├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:390:24 +╰╴1 additional opaque attachment) +2026-06-15T11:12:38.461172Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] +2026-06-15T11:12:38.461159Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] result=Err(Failed to verify annotation +├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:321:29 +├╴1 additional opaque attachment +│ +╰┬▶ unfulfilled annotation: DiagnosticAnnotation { category: None, severity: Error, message: "This function cannot be used as a type constructor", line: Some(6) } did not match any emitted diagnostics + │ ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:151:25 + │ + ├▶ unexpected diagnostic: + │ error[expander::unresolved-variable]: Unresolved variable + │ ╭▸ + │ 6 │ ["::core::math::headpat", "Int", "Float"] + │ │ ━━━━━ cannot find `Float` in this scope + │ │ + │ ├ help: check the spelling, or import the name with a `use` statement + │ ╰ note: this could be a typo, a name used outside its scope, or a missing declaration; if it is a function or type from another module, you may need to import it first + │ ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:171:21 + │ + ├▶ unexpected diagnostic: + │ error[expander::unresolved-variable]: Unresolved variable + │ ╭▸ + │ 6 │ ["::core::math::headpat", "Int", "Float"] + │ │ ━━━ cannot find `Int` in this scope + │ │ + │ ├ help: check the spelling, or import the name with a `use` statement + │ ╰ note: this could be a typo, a name used outside its scope, or a missing declaration; if it is a function or type from another module, you may need to import it first + │ ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:171:21 + │ + ╰▶ unexpected diagnostic: + error[expander::item-not-found]: Item not found + ╭▸ + 6 │ ["::core::math::headpat", "Int", "Float"] + │ ┬─── ━━━━━━━ cannot find `headpat` in module `::core::math` + │ │ + │ looked in this module + │ + ╰ help: check the spelling and ensure the item is exported + ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:171:21) +2026-06-15T11:12:38.461225Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] +2026-06-15T11:12:38.461933Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-mir" trial=["reify"] result=Ok(()) +2026-06-15T11:12:38.461944Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-mir" trial=["reify"] +2026-06-15T11:12:38.461952Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "ctor"] result=Ok(()) +2026-06-15T11:12:38.461959Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-mir" trial=["pass", "administrative_reduction"] result=Ok(()) +2026-06-15T11:12:38.461963Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "ctor"] +2026-06-15T11:12:38.461969Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-mir" trial=["pass", "administrative_reduction"] +2026-06-15T11:12:38.461935Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "type-extractor", "definition"] result=Ok(()) +2026-06-15T11:12:38.462002Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "type-extractor", "definition"] +2026-06-15T11:12:38.462218Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "normalization"] result=Ok(()) +2026-06-15T11:12:38.462218Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "import-resolver"] result=Ok(()) +2026-06-15T11:12:38.462235Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "normalization"] +2026-06-15T11:12:38.462245Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "import-resolver"] +2026-06-15T11:12:38.462310Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "inference"] result=Ok(()) +2026-06-15T11:12:38.462326Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "inference"] +2026-06-15T11:12:38.462375Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] result=Err(Failed to verify annotation +├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:321:29 +├╴1 additional opaque attachment +│ +╰┬▶ unfulfilled annotation: DiagnosticAnnotation { category: None, severity: Error, message: "Remove this type annotation", line: Some(8) } did not match any emitted diagnostics + │ ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:151:25 + │ + ├▶ unexpected diagnostic: + │ error[expander::type-annotation-in-type-position]: Type annotation in type position + │ ╭▸ + │ 6 │ ┌ { + │ 7 │ │ "#tuple": ["Int"], + │ 8 │ │ "#type": "(Int)" + │ │ │ ━━━━━ type annotations are not allowed inside a type expression + │ 9 │ │ //~^ ERROR Remove this type annotation + │ 10 │ │ }, + │ │ └───┘ this tuple is already being used as a type + │ │ + │ ├ help: remove the type annotation + │ ╰ note: in type position, `(Int, String)` already defines a tuple type + │ ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:171:21 + │ + ├▶ unexpected diagnostic: + │ error[expander::unresolved-variable]: Unresolved variable + │ ╭▸ + │ 7 │ "#tuple": ["Int"], + │ │ ━━━ cannot find `Int` in this scope + │ │ + │ ├ help: check the spelling, or import the name with a `use` statement + │ ╰ note: this could be a typo, a name used outside its scope, or a missing declaration; if it is a function or type from another module, you may need to import it first + │ ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:171:21 + │ + ├▶ unexpected diagnostic: + │ error[expander::unresolved-variable]: Unresolved variable + │ ╭▸ + │ 11 │ "x" + │ │ ━ cannot find `x` in this scope + │ │ + │ ╰ note: this could be a typo, a name used outside its scope, or a missing declaration; if it is a function or type from another module, you may need to import it first + │ help: a similar imported name exists + │ ╭╴ + │ 11 - "x" + │ 11 + "~↑√∛index" + │ ╰╴ + │ ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:171:21 + │ + ╰▶ unexpected diagnostic: + error[expander::unresolved-variable]: Unresolved variable + ╭▸ + 8 │ "#type": "(Int)" + │ ━━━ cannot find `Int` in this scope + │ + ├ help: check the spelling, or import the name with a `use` statement + ╰ note: this could be a typo, a name used outside its scope, or a missing declaration; if it is a function or type from another module, you may need to import it first + ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:171:21) +2026-06-15T11:12:38.462456Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] +2026-06-15T11:12:38.462458Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] result=Err(Expected trial to pass, but it failed +├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:390:24 +╰╴1 additional opaque attachment) +2026-06-15T11:12:38.462499Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] +2026-06-15T11:12:38.462501Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] result=Err(Failed to verify annotation +├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:321:29 +├╴1 additional opaque attachment +│ +╰┬▶ unfulfilled annotation: DiagnosticAnnotation { category: None, severity: Error, message: "exactly 3 segments", line: Some(4) } did not match any emitted diagnostics + │ ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:151:25 + │ + ╰▶ unexpected diagnostic: + error[expander::item-not-found]: Item not found + ╭▸ + 4 │ "::kernel::special_form", + │ ┬───── ━━━━━━━━━━━━ cannot find `special_form` in module `::kernel` + │ │ + │ looked in this module + │ + ╰ help: check the spelling and ensure the item is exported + ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:171:21) +2026-06-15T11:12:38.462550Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] +2026-06-15T11:12:38.462661Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] result=Err(Failed to verify annotation +├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:321:29 +├╴1 additional opaque attachment +│ +╰┬▶ unfulfilled annotation: DiagnosticAnnotation { category: None, severity: Error, message: "Add missing arguments", line: Some(3) } did not match any emitted diagnostics + │ ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:151:25 + │ + ╰▶ unexpected diagnostic: + error[expander::invalid-argument-count]: Invalid argument count + ╭▸ + 3 │ ["::kernel::special_form::as", { "#literal": true }] + │ ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ expected 2 arguments to `as`, found 1 + │ + ├ help: use `(as value type)` + ╰ note: the first argument is the value to cast and the second is the target type + ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:171:21) +2026-06-15T11:12:38.462803Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] +2026-06-15T11:12:38.463277Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "type-extractor", "definition"] result=Ok(()) +2026-06-15T11:12:38.463286Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "type-extractor", "definition"] +2026-06-15T11:12:38.463240Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] result=Err(Failed to verify annotation +├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:321:29 +├╴1 additional opaque attachment +│ +╰┬▶ unfulfilled annotation: DiagnosticAnnotation { category: None, severity: Error, message: "Replace with a valid import expression", line: Some(8) } did not match any emitted diagnostics + │ ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:151:25 + │ + ├▶ unexpected diagnostic: + │ error[expander::unresolved-variable]: Unresolved variable + │ ╭▸ + │ 12 │ "x" + │ │ ━ cannot find `x` in this scope + │ │ + │ ╰ note: this could be a typo, a name used outside its scope, or a missing declaration; if it is a function or type from another module, you may need to import it first + │ help: a similar imported name exists + │ ╭╴ + │ 12 - "x" + │ 12 + "~↑√∛index" + │ ╰╴ + │ ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:171:21 + │ + ├▶ unexpected diagnostic: + │ error[expander::package-not-found]: Package not found + │ ╭▸ + │ 5 │ "::math", + │ │ ┬─┯━━━ + │ │ │ │ + │ │ │ cannot find package `math` + │ │ in this path + │ │ + │ ├ help: check the package name, or add it to the project dependencies + │ ╰ note: absolute paths start from an installed package + │ ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:171:21 + │ + ╰▶ unexpected diagnostic: + error[expander::invalid-use-alias]: Invalid use alias + ╭▸ + 8 │ "x": { "#literal": 1 } + │ ━━━━━━━━━━━━━━━━━ expected `_` or a simple identifier as the alias + │ + ╰ help: use `_` to keep the original name or a simple identifier to rename: `(name: alias)` or `(name: _)` + ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:171:21) +2026-06-15T11:12:38.463338Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] +2026-06-15T11:12:38.463609Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "import-resolver"] result=Ok(()) +2026-06-15T11:12:38.463624Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "import-resolver"] +2026-06-15T11:12:38.463707Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] result=Err(Failed to verify annotation +├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:321:29 +├╴1 additional opaque attachment +│ +╰┬▶ unfulfilled annotation: DiagnosticAnnotation { category: None, severity: Error, message: "Replace with a valid import expression", line: Some(6) } did not match any emitted diagnostics + │ ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:151:25 + │ + ╰▶ unexpected diagnostic: + error[expander::invalid-use-imports]: Invalid use imports + ╭▸ + 6 │ "X", + │ ━ expected `*`, a tuple of names, or a struct of aliases + │ + ╰ help: use `*` to import everything, `(a, b)` to import specific names, or `(a: alias, b: _)` to import with aliases + ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:171:21) +2026-06-15T11:12:38.463745Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] +2026-06-15T11:12:38.463763Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "normalization"] result=Ok(()) +2026-06-15T11:12:38.463778Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "normalization"] +2026-06-15T11:12:38.463803Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "inference"] result=Ok(()) +2026-06-15T11:12:38.463814Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "inference"] +2026-06-15T11:12:38.464330Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] result=Err(Failed to verify annotation +├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:321:29 +├╴1 additional opaque attachment +│ +╰┬▶ unfulfilled annotation: DiagnosticAnnotation { category: None, severity: Error, message: "Replace with a valid import expression", line: Some(6) } did not match any emitted diagnostics + │ ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:151:25 + │ + ├▶ unexpected diagnostic: + │ error[expander::unresolved-variable]: Unresolved variable + │ ╭▸ + │ 8 │ "x" + │ │ ━ cannot find `x` in this scope + │ │ + │ ╰ note: this could be a typo, a name used outside its scope, or a missing declaration; if it is a function or type from another module, you may need to import it first + │ help: a similar imported name exists + │ ╭╴ + │ 8 - "x" + │ 8 + "~↑√∛index" + │ ╰╴ + │ ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:171:21 + │ + ╰▶ unexpected diagnostic: + error[expander::invalid-use-import-binding]: Invalid use import binding + ╭▸ + 6 │ { "#tuple": [{ "#literal": 1 }] }, + │ ━━━━━━━━━━━━━━━━━ expected a simple name to import + │ + ╰ help: each import must be a plain identifier like `foo`, not a qualified path or expression + ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:171:21) +2026-06-15T11:12:38.464402Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "type-extractor", "definition"] result=Ok(()) +2026-06-15T11:12:38.464414Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] +2026-06-15T11:12:38.464423Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "type-extractor", "definition"] +2026-06-15T11:12:38.464578Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-mir" trial=["pass", "administrative_reduction"] result=Ok(()) +2026-06-15T11:12:38.464587Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-mir" trial=["pass", "administrative_reduction"] +2026-06-15T11:12:38.464577Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "ctor"] result=Err(Failed to verify annotation +├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:321:29 +├╴1 additional opaque attachment +│ +╰┬▶ unfulfilled annotation: DiagnosticAnnotation { category: None, severity: Error, message: "Remove this argument", line: Some(8) } did not match any emitted diagnostics + │ ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:151:25 + │ + ├▶ unexpected diagnostic: + │ error[lowering::expander::unresolved-variable]: Unresolved variable + │ ╭▸ + │ 8 │ "Person", + │ │ ━━━━━━━ cannot find `Integer` in this scope + │ │ + │ ├ help: check the spelling, or import the name with a `use` statement + │ ╰ note: this could be a typo, a name used outside its scope, or a missing declaration; if it is a function or type from another module, you may need to import it first + │ ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:171:21 + │ + ├▶ unexpected diagnostic: + │ error[lowering::expander::unresolved-variable]: Unresolved variable + │ ╭▸ + │ 8 │ "Person", + │ │ ━━━━━━ cannot find `String` in this scope + │ │ + │ ├ help: check the spelling, or import the name with a `use` statement + │ ╰ note: this could be a typo, a name used outside its scope, or a missing declaration; if it is a function or type from another module, you may need to import it first + │ ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:171:21 + │ + ╰▶ unexpected diagnostic: + error[lowering::expander::unresolved-variable]: Unresolved variable + ╭▸ + 8 │ "Person", + │ ━━━━━━ cannot find `Number` in this scope + │ + ├ help: check the spelling, or import the name with a `use` statement + ╰ note: this could be a typo, a name used outside its scope, or a missing declaration; if it is a function or type from another module, you may need to import it first + ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:171:21) +2026-06-15T11:12:38.464638Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "ctor"] +2026-06-15T11:12:38.464754Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] result=Err(Failed to verify annotation +├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:321:29 +├╴1 additional opaque attachment +│ +╰┬▶ unfulfilled annotation: DiagnosticAnnotation { category: None, severity: Error, message: "Remove these generic arguments", line: Some(3) } did not match any emitted diagnostics + │ ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:151:25 + │ + ├▶ unexpected diagnostic: + │ error[expander::generic-arguments-in-module]: Generic arguments in module path + │ ╭▸ + │ 3 │ ["::kernel::special_form::if"] + │ │ ━ generic argument not allowed here + │ │ + │ ├ help: move the generic arguments to the final segment of the path, or remove them + │ ╰ note: modules are not generic; only the final item in a path can be parameterized + │ ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:171:21 + │ + ├▶ unexpected diagnostic: + │ error[expander::unresolved-variable]: Unresolved variable + │ ╭▸ + │ 3 │ ["::kernel::special_form::if"] + │ │ ━ cannot find `U` in this scope + │ │ + │ ╰ note: this could be a typo, a name used outside its scope, or a missing declaration; if it is a function or type from another module, you may need to import it first + │ help: a similar imported name exists + │ ╭╴ + │ 3 - ["::kernel::special_form::if"] + │ 3 + ["::kernel::special_form::if<~↑√∛rl>"] + │ ╰╴ + │ ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:171:21 + │ + ╰▶ unexpected diagnostic: + error[expander::unresolved-variable]: Unresolved variable + ╭▸ + 3 │ ["::kernel::special_form::if"] + │ ━ cannot find `T` in this scope + │ + ╰ note: this could be a typo, a name used outside its scope, or a missing declaration; if it is a function or type from another module, you may need to import it first + help: a similar imported name exists + ╭╴ + 3 - ["::kernel::special_form::if"] + 3 + ["::kernel::special_form<||~↑√∛>::if"] + ╰╴ + ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:171:21) +2026-06-15T11:12:38.464817Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] +2026-06-15T11:12:38.464860Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] result=Err(Expected trial to pass, but it failed +├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:390:24 +╰╴1 additional opaque attachment) +2026-06-15T11:12:38.464907Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] +2026-06-15T11:12:38.464930Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "import-resolver"] result=Ok(()) +2026-06-15T11:12:38.464943Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "import-resolver"] +2026-06-15T11:12:38.465070Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] result=Err(Failed to verify annotation +├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:321:29 +├╴1 additional opaque attachment +│ +╰┬▶ unfulfilled annotation: DiagnosticAnnotation { category: None, severity: Error, message: "Replace this expression with a simple identifier", line: Some(5) } did not match any emitted diagnostics + │ ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:151:25 + │ + ╰▶ unexpected diagnostic: + error[expander::invalid-binding-name]: Invalid binding name + ╭▸ + 5 │ { "#literal": true }, + │ ━━━━━━━━━━━━━━━━━━━━ expected a simple identifier for the `let` binding name + │ + ├ help: write `(let name value body)` with a plain name such as `x` + ╰ note: the first argument to `let` introduces a new local binding and must be a plain identifier without path qualification or generic arguments + ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:171:21) +2026-06-15T11:12:38.465110Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] +2026-06-15T11:12:38.465329Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "normalization"] result=Ok(()) +2026-06-15T11:12:38.465345Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "normalization"] +2026-06-15T11:12:38.465357Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "inference"] result=Ok(()) +2026-06-15T11:12:38.465370Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "checking"] +2026-06-15T11:12:38.465457Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] result=Err(Failed to verify annotation +├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:321:29 +├╴1 additional opaque attachment +│ +╰┬▶ unfulfilled annotation: DiagnosticAnnotation { category: None, severity: Error, message: "Remove this type annotation", line: Some(8) } did not match any emitted diagnostics + │ ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:151:25 + │ + ├▶ unexpected diagnostic: + │ error[expander::unresolved-variable]: Unresolved variable + │ ╭▸ + │ 12 │ ["+", "a", "b"] + │ │ ━ cannot find `b` in this scope + │ │ + │ ╰ note: this could be a typo, a name used outside its scope, or a missing declaration; if it is a function or type from another module, you may need to import it first + │ help: a similar imported name exists + │ ╭╴ + │ 12 - ["+", "a", "b"] + │ 12 + ["+", "a", "~↑√∛cbrt"] + │ ╰╴ + │ ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:171:21 + │ + ├▶ unexpected diagnostic: + │ error[expander::unresolved-variable]: Unresolved variable + │ ╭▸ + │ 12 │ ["+", "a", "b"] + │ │ ━ cannot find `a` in this scope + │ │ + │ ╰ note: this could be a typo, a name used outside its scope, or a missing declaration; if it is a function or type from another module, you may need to import it first + │ help: a similar imported name exists + │ ╭╴ + │ 12 - ["+", "a", "b"] + │ 12 + ["+", "↑√∛ccesss", "b"] + │ ╰╴ + │ ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:171:21 + │ + ╰▶ unexpected diagnostic: + error[expander::fn-params-type-annotation]: Type annotation on parameter list + ╭▸ + 8 │ "#type": "Int" + │ ━━━ type annotation is not allowed on the parameter list + │ + ╰ help: remove the type annotation; each parameter already declares its type individually as `(name: type)` + ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:171:21) +2026-06-15T11:12:38.465577Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] +2026-06-15T11:12:38.465805Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "ctor"] result=Ok(()) +2026-06-15T11:12:38.465817Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "ctor"] +2026-06-15T11:12:38.465823Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "type-extractor", "definition"] result=Ok(()) +2026-06-15T11:12:38.465843Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "type-extractor", "definition"] +2026-06-15T11:12:38.465915Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] result=Err(Failed to verify annotation +├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:321:29 +├╴1 additional opaque attachment +│ +╰┬▶ unfulfilled annotation: DiagnosticAnnotation { category: None, severity: Error, message: "Add missing arguments", line: Some(3) } did not match any emitted diagnostics + │ ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:151:25 + │ + ╰▶ unexpected diagnostic: + error[expander::invalid-argument-count]: Invalid argument count + ╭▸ + 3 │ ["::kernel::special_form::input", "x"] + │ ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ expected 2 or 3 arguments to `input`, found 1 + │ + ├ help: use `(input name type)` or `(input name type default)` + ╰ note: the arguments are, in order: the input name, its type, and an optional default value + ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:171:21) +2026-06-15T11:12:38.465969Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] +2026-06-15T11:12:38.466239Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "import-resolver"] result=Ok(()) +2026-06-15T11:12:38.466251Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "import-resolver"] +2026-06-15T11:12:38.466217Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] result=Err(Failed to verify annotation +├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:321:29 +├╴1 additional opaque attachment +│ +╰┬▶ unfulfilled annotation: DiagnosticAnnotation { category: None, severity: Error, message: "Add missing arguments", line: Some(3) } did not match any emitted diagnostics + │ ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:151:25 + │ + ╰▶ unexpected diagnostic: + error[expander::invalid-argument-count]: Invalid argument count + ╭▸ + 3 │ ["::kernel::special_form::use", "::math", { "#tuple": ["pi"] }] + │ ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ expected 3 arguments to `use`, found 2 + │ + ├ help: use `(use path imports body)` + ╰ note: the arguments are, in order: the module path to import from, the import specifier (`*`, a tuple of names, or a struct of aliases), and the body where the imports are in scope + ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:171:21) +2026-06-15T11:12:38.466267Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] +2026-06-15T11:12:38.466348Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] result=Err(Expected trial to pass, but it failed +├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:390:24 +╰╴1 additional opaque attachment) +2026-06-15T11:12:38.466406Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] +2026-06-15T11:12:38.466434Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-mir" trial=["pass", "administrative_reduction"] result=Ok(()) +2026-06-15T11:12:38.466445Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-mir" trial=["pass", "administrative_reduction"] +2026-06-15T11:12:38.466600Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "normalization"] result=Ok(()) +2026-06-15T11:12:38.466609Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "normalization"] +2026-06-15T11:12:38.466760Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] result=Err(Failed to verify annotation +├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:321:29 +├╴1 additional opaque attachment +│ +╰┬▶ unfulfilled annotation: DiagnosticAnnotation { category: None, severity: Error, message: "Generic arguments must be simple identifiers", line: Some(5) } did not match any emitted diagnostics + │ ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:151:25 + │ + ├▶ unexpected diagnostic: + │ error[expander::unresolved-variable]: Unresolved variable + │ ╭▸ + │ 7 │ { "#struct": { "foo": "Bar" } }, + │ │ ━━━ cannot find `Bar` in this scope + │ │ + │ ├ help: check the spelling, or import the name with a `use` statement + │ ╰ note: this could be a typo, a name used outside its scope, or a missing declaration; if it is a function or type from another module, you may need to import it first + │ ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:171:21 + │ + ╰▶ unexpected diagnostic: + error[expander::invalid-generic-argument]: Invalid generic argument + ╭▸ + 5 │ "Foo", + │ ━━━━━━━━ expected a simple type parameter + │ + ├ help: use a simple identifier like `T`, not a qualified path + ╰ note: generic parameters are declared as `Name` for unconstrained or `Name` for constrained parameters + ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:171:21) +2026-06-15T11:12:38.466826Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] +2026-06-15T11:12:38.467341Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "type-extractor", "definition"] result=Ok(()) +2026-06-15T11:12:38.467356Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "type-extractor", "definition"] +2026-06-15T11:12:38.467368Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "ctor"] result=Err(Failed to verify annotation +├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:321:29 +├╴1 additional opaque attachment +│ +╰┬▶ unfulfilled annotation: DiagnosticAnnotation { category: None, severity: Error, message: "Add missing parameter `U`", line: Some(8) } did not match any emitted diagnostics + │ ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:151:25 + │ + ╰▶ unexpected diagnostic: + error[lowering::expander::unresolved-variable]: Unresolved variable + ╭▸ + 8 │ "Person", + │ ━━━━━━ cannot find `Number` in this scope + │ + ├ help: check the spelling, or import the name with a `use` statement + ╰ note: this could be a typo, a name used outside its scope, or a missing declaration; if it is a function or type from another module, you may need to import it first + ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:171:21) +2026-06-15T11:12:38.467408Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "inference"] +2026-06-15T11:12:38.467481Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "import-resolver"] result=Ok(()) +2026-06-15T11:12:38.467504Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-mir" trial=["pass", "inline"] +2026-06-15T11:12:38.467735Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] result=Err(Failed to verify annotation +├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:321:29 +├╴1 additional opaque attachment +│ +╰┬▶ unfulfilled annotation: DiagnosticAnnotation { category: None, severity: Error, message: "Remove this type annotation", line: Some(8) } did not match any emitted diagnostics + │ ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:151:25 + │ + ├▶ unexpected diagnostic: + │ error[expander::unresolved-variable]: Unresolved variable + │ ╭▸ + │ 11 │ "x" + │ │ ━ cannot find `x` in this scope + │ │ + │ ╰ note: this could be a typo, a name used outside its scope, or a missing declaration; if it is a function or type from another module, you may need to import it first + │ help: a similar imported name exists + │ ╭╴ + │ 11 - "x" + │ 11 + "~↑√∛index" + │ ╰╴ + │ ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:171:21 + │ + ╰▶ unexpected diagnostic: + error[expander::package-not-found]: Package not found + ╭▸ + 5 │ "::math", + │ ┬─┯━━━ + │ │ │ + │ │ cannot find package `math` + │ in this path + │ + ├ help: check the package name, or add it to the project dependencies + ╰ note: absolute paths start from an installed package + ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:171:21) +2026-06-15T11:12:38.467791Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] +2026-06-15T11:12:38.467772Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] result=Err(Failed to verify annotation +├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:321:29 +├╴1 additional opaque attachment +│ +╰┬▶ unfulfilled annotation: DiagnosticAnnotation { category: None, severity: Error, message: "Add missing arguments", line: Some(3) } did not match any emitted diagnostics + │ ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:151:25 + │ + ╰▶ unexpected diagnostic: + error[expander::invalid-argument-count]: Invalid argument count + ╭▸ + 3 │ ["::kernel::special_form::let", "x", { "#literal": true }] + │ ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ expected 3 or 4 arguments to `let`, found 2 + │ + ├ help: use `(let name value body)` or `(let name type value body)` + ╰ note: the arguments are, in order: the binding name, an optional type annotation, the bound value, and the body expression where the name is in scope + ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:171:21) +2026-06-15T11:12:38.467825Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] +2026-06-15T11:12:38.467874Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] result=Err(Expected trial to pass, but it failed +├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:390:24 +╰╴1 additional opaque attachment) +2026-06-15T11:12:38.467936Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "normalization"] result=Ok(()) +2026-06-15T11:12:38.467940Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] +2026-06-15T11:12:38.467948Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "normalization"] +2026-06-15T11:12:38.468125Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-mir" trial=["pass", "administrative_reduction"] result=Ok(()) +2026-06-15T11:12:38.468134Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-mir" trial=["pass", "administrative_reduction"] +2026-06-15T11:12:38.468221Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] result=Err(Failed to verify annotation +├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:321:29 +├╴1 additional opaque attachment +│ +╰┬▶ unfulfilled annotation: DiagnosticAnnotation { category: None, severity: Error, message: "Use a simple identifier here", line: Some(7) } did not match any emitted diagnostics + │ ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:151:25 + │ + ├▶ unexpected diagnostic: + │ error[expander::unresolved-variable]: Unresolved variable + │ ╭▸ + │ 13 │ ["+", "a", "b"] + │ │ ━ cannot find `b` in this scope + │ │ + │ ╰ note: this could be a typo, a name used outside its scope, or a missing declaration; if it is a function or type from another module, you may need to import it first + │ help: a similar imported name exists + │ ╭╴ + │ 13 - ["+", "a", "b"] + │ 13 + ["+", "a", "~↑√∛cbrt"] + │ ╰╴ + │ ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:171:21 + │ + ├▶ unexpected diagnostic: + │ error[expander::unresolved-variable]: Unresolved variable + │ ╭▸ + │ 13 │ ["+", "a", "b"] + │ │ ━ cannot find `a` in this scope + │ │ + │ ╰ note: this could be a typo, a name used outside its scope, or a missing declaration; if it is a function or type from another module, you may need to import it first + │ help: a similar imported name exists + │ ╭╴ + │ 13 - ["+", "a", "b"] + │ 13 + ["+", "↑√∛ccesss", "b"] + │ ╰╴ + │ ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:171:21 + │ + ╰▶ unexpected diagnostic: + error[expander::invalid-fn-generic-param]: Invalid generic parameter + ╭▸ + 7 │ "::core::math::add" + │ ━━━━━━━━━━━━━━━━━ expected a simple type parameter name + │ + ╰ help: each generic parameter must be a plain identifier like `T`, not a qualified path or expression + ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:171:21) +2026-06-15T11:12:38.468300Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] +2026-06-15T11:12:38.468711Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "type-extractor", "definition"] result=Ok(()) +2026-06-15T11:12:38.468723Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "type-extractor", "definition"] +2026-06-15T11:12:38.468868Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] result=Err(Failed to verify annotation +├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:321:29 +├╴1 additional opaque attachment +│ +╰┬▶ unfulfilled annotation: DiagnosticAnnotation { category: None, severity: Error, message: "Remove this duplicate declaration of 'T'", line: Some(5) } did not match any emitted diagnostics + │ ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:151:25 + │ + ├▶ unexpected diagnostic: + │ error[expander::unresolved-variable]: Unresolved variable + │ ╭▸ + │ 7 │ { "#struct": { "foo": "Bar" } }, + │ │ ━━━ cannot find `Bar` in this scope + │ │ + │ ├ help: check the spelling, or import the name with a `use` statement + │ ╰ note: this could be a typo, a name used outside its scope, or a missing declaration; if it is a function or type from another module, you may need to import it first + │ ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:171:21 + │ + ├▶ unexpected diagnostic: + │ error[expander::unresolved-variable]: Unresolved variable + │ ╭▸ + │ 5 │ "Foo", + │ │ ━━━ cannot find `Bar` in this scope + │ │ + │ ├ help: check the spelling, or import the name with a `use` statement + │ ╰ note: this could be a typo, a name used outside its scope, or a missing declaration; if it is a function or type from another module, you may need to import it first + │ ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:171:21 + │ + ╰▶ unexpected diagnostic: + error[expander::duplicate-generic-constraint]: Duplicate generic constraint + ╭▸ + 5 │ "Foo", + │ ┬ ━ duplicate generic parameter `T` + │ │ + │ `T` was first declared here + │ + ╰ help: remove the duplicate declaration or use a different name + ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:171:21) +2026-06-15T11:12:38.468939Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] +2026-06-15T11:12:38.469288Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] result=Ok(()) +2026-06-15T11:12:38.469299Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] +2026-06-15T11:12:38.469329Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] result=Err(Failed to verify annotation +├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:321:29 +├╴1 additional opaque attachment +│ +╰┬▶ unfulfilled annotation: DiagnosticAnnotation { category: None, severity: Error, message: "Use a valid field index within usize bounds", line: Some(3) } did not match any emitted diagnostics + │ ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:151:25 + │ + ╰▶ unexpected diagnostic: + error[expander::field-index-out-of-bounds]: Field index out of bounds + ╭▸ + 3 │ ["::kernel::special_form::access", "data", { "#literal": 18446744073709551616 }] + │ ━━━━━━━━━━━━━━━━━━━━ field index is out of bounds + │ + ╰ help: use a non-negative integer that fits within platform bounds + ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:171:21) +2026-06-15T11:12:38.469374Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] +2026-06-15T11:12:38.469333Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "inference"] result=Err(Failed to verify annotation +├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:321:29 +├╴1 additional opaque attachment +│ +╰┬▶ unfulfilled annotation: DiagnosticAnnotation { category: None, severity: Error, message: "Type variable has incompatible upper and lower bounds", line: Some(4) } did not match any emitted diagnostics + │ ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:151:25 + │ + ├▶ unexpected diagnostic: + │ error[lowering::expander::intrinsic-generic-arguments]: Generic arguments on intrinsic + │ ╭▸ + │ 4 │ "`+`", + │ │ ━━━━━━━━━━━━━━━━━━━ `+` does not accept generic arguments + │ │ + │ ╰ help: remove the generic arguments from `+` + │ ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:171:21 + │ + ├▶ unexpected diagnostic: + │ error[lowering::expander::unresolved-variable]: Unresolved variable + │ ╭▸ + │ 4 │ "`+`", + │ │ ━━━━━━ cannot find `Number` in this scope + │ │ + │ ├ help: check the spelling, or import the name with a `use` statement + │ ╰ note: this could be a typo, a name used outside its scope, or a missing declaration; if it is a function or type from another module, you may need to import it first + │ ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:171:21 + │ + ╰▶ unexpected diagnostic: + error[lowering::expander::unresolved-variable]: Unresolved variable + ╭▸ + 4 │ "`+`", + │ ━━━━━━ cannot find `Number` in this scope + │ + ├ help: check the spelling, or import the name with a `use` statement + ╰ note: this could be a typo, a name used outside its scope, or a missing declaration; if it is a function or type from another module, you may need to import it first + ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:171:21) +2026-06-15T11:12:38.469401Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "inference"] +2026-06-15T11:12:38.469551Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-mir" trial=["pass", "administrative_reduction"] result=Ok(()) +2026-06-15T11:12:38.469563Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-mir" trial=["pass", "administrative_reduction"] +2026-06-15T11:12:38.469642Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "normalization"] result=Ok(()) +2026-06-15T11:12:38.469686Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] +2026-06-15T11:12:38.469806Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] result=Err(Failed to verify annotation +├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:321:29 +├╴1 additional opaque attachment +│ +╰┬▶ unfulfilled annotation: DiagnosticAnnotation { category: None, severity: Error, message: "Add missing arguments", line: Some(3) } did not match any emitted diagnostics + │ ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:151:25 + │ + ╰▶ unexpected diagnostic: + error[expander::invalid-argument-count]: Invalid argument count + ╭▸ + 3 │ ["::kernel::special_form::newtype", "x", "Integer"] + │ ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ expected 3 arguments to `newtype`, found 2 + │ + ├ help: use `(newtype Name type-expr body)` + ╰ note: the arguments are, in order: the type name (optionally with generic parameters), the underlying type, and the body where the name is in scope + ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:171:21) +2026-06-15T11:12:38.469853Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] +2026-06-15T11:12:38.470074Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "type-extractor", "definition"] result=Ok(()) +2026-06-15T11:12:38.470084Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "type-extractor", "definition"] +2026-06-15T11:12:38.470441Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] result=Ok(()) +2026-06-15T11:12:38.470450Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] +2026-06-15T11:12:38.470627Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] result=Err(Failed to verify annotation +├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:321:29 +├╴1 additional opaque attachment +│ +╰┬▶ unfulfilled annotation: DiagnosticAnnotation { category: None, severity: Error, message: "Generic argument types must be simple path identifiers", line: Some(5) } did not match any emitted diagnostics + │ ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:151:25 + │ + ├▶ unexpected diagnostic: + │ error[expander::unresolved-variable]: Unresolved variable + │ ╭▸ + │ 7 │ { "#struct": { "foo": "Bar" } }, + │ │ ━━━ cannot find `Bar` in this scope + │ │ + │ ├ help: check the spelling, or import the name with a `use` statement + │ ╰ note: this could be a typo, a name used outside its scope, or a missing declaration; if it is a function or type from another module, you may need to import it first + │ ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:171:21 + │ + ╰▶ unexpected diagnostic: + error[expander::invalid-generic-argument]: Invalid generic argument + ╭▸ + 5 │ "Foo<(a: String)>", + │ ━━━━━━━━━━━ expected a simple type parameter + │ + ├ help: use a simple identifier like `T` or a constraint like `T: Bound` + ╰ note: generic parameters are declared as `Name` for unconstrained or `Name` for constrained parameters + ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:171:21) +2026-06-15T11:12:38.470680Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] +2026-06-15T11:12:38.470808Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "inference"] result=Ok(()) +2026-06-15T11:12:38.470817Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "inference"] +2026-06-15T11:12:38.470911Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] result=Err(Failed to verify annotation +├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:321:29 +├╴1 additional opaque attachment +│ +╰┬▶ unfulfilled annotation: DiagnosticAnnotation { category: None, severity: Error, message: "Generic arguments must be simple identifiers", line: Some(5) } did not match any emitted diagnostics + │ ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:151:25 + │ + ├▶ unexpected diagnostic: + │ error[expander::unresolved-variable]: Unresolved variable + │ ╭▸ + │ 7 │ { "#struct": { "foo": "Bar" } }, + │ │ ━━━ cannot find `Bar` in this scope + │ │ + │ ├ help: check the spelling, or import the name with a `use` statement + │ ╰ note: this could be a typo, a name used outside its scope, or a missing declaration; if it is a function or type from another module, you may need to import it first + │ ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:171:21 + │ + ╰▶ unexpected diagnostic: + error[expander::invalid-generic-argument]: Invalid generic argument + ╭▸ + 5 │ "Foo<::foo::Bar>", + │ ━━━━━━━━━━ expected a simple type parameter + │ + ├ help: use a simple identifier like `T`, not a qualified path + ╰ note: generic parameters are declared as `Name` for unconstrained or `Name` for constrained parameters + ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:171:21) +2026-06-15T11:12:38.470960Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] +2026-06-15T11:12:38.471224Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] result=Err(Failed to verify annotation +├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:321:29 +├╴1 additional opaque attachment +│ +╰┬▶ unfulfilled annotation: DiagnosticAnnotation { category: None, severity: Error, message: "Remove this argument", line: Some(8) } did not match any emitted diagnostics + │ ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:151:25 + │ + ╰▶ unexpected diagnostic: + error[expander::invalid-argument-count]: Invalid argument count + ╭▸ + 3 │ ┏ [ + 4 │ ┃ "::kernel::special_form::type", + 5 │ ┃ "x", + 6 │ ┃ "Boolean", + 7 │ ┃ ["+", "x", "x"], + 8 │ ┃ { "#literal": true } + │ ┃ ──────────────────── unexpected argument + 9 │ ┃ //~^ ERROR Remove this argument + 10 │ ┃ ] + │ ┗━┛ expected 3 arguments to `type`, found 4 + │ + ├ help: use `(type Name type-expr body)` + ╰ note: the arguments are, in order: the type name (optionally with generic parameters), the type definition, and the body where the name is in scope + ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:171:21) +2026-06-15T11:12:38.471275Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] +2026-06-15T11:12:38.471228Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] result=Err(Failed to verify annotation +├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:321:29 +├╴1 additional opaque attachment +│ +╰┬▶ unfulfilled annotation: DiagnosticAnnotation { category: None, severity: Error, message: "Use a valid generics expression", line: Some(5) } did not match any emitted diagnostics + │ ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:151:25 + │ + ├▶ unexpected diagnostic: + │ error[expander::unresolved-variable]: Unresolved variable + │ ╭▸ + │ 9 │ ["+", "a", "b"] + │ │ ━ cannot find `b` in this scope + │ │ + │ ╰ note: this could be a typo, a name used outside its scope, or a missing declaration; if it is a function or type from another module, you may need to import it first + │ help: a similar imported name exists + │ ╭╴ + │ 9 - ["+", "a", "b"] + │ 9 + ["+", "a", "~↑√∛cbrt"] + │ ╰╴ + │ ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:171:21 + │ + ├▶ unexpected diagnostic: + │ error[expander::unresolved-variable]: Unresolved variable + │ ╭▸ + │ 9 │ ["+", "a", "b"] + │ │ ━ cannot find `a` in this scope + │ │ + │ ╰ note: this could be a typo, a name used outside its scope, or a missing declaration; if it is a function or type from another module, you may need to import it first + │ help: a similar imported name exists + │ ╭╴ + │ 9 - ["+", "a", "b"] + │ 9 + ["+", "↑√∛ccesss", "b"] + │ ╰╴ + │ ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:171:21 + │ + ╰▶ unexpected diagnostic: + error[expander::invalid-fn-generics]: Invalid generic parameter list + ╭▸ + 5 │ { "#literal": 2 }, + │ ━━━━━━━━━━━━━━━━━ expected a tuple or struct for generic parameters + │ + ╰ help: use a tuple like `(T, U)` for unbounded generics or a struct like `(T: bound, U: _)` for bounded generics + ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:171:21) +2026-06-15T11:12:38.471327Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] +2026-06-15T11:12:38.471775Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-mir" trial=["pass", "administrative_reduction"] result=Ok(()) +2026-06-15T11:12:38.471781Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "type-extractor", "definition"] result=Ok(()) +2026-06-15T11:12:38.471792Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-mir" trial=["pass", "post_inline"] +2026-06-15T11:12:38.471796Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "type-extractor", "definition"] +2026-06-15T11:12:38.472111Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] result=Err(Failed to verify annotation +├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:321:29 +├╴1 additional opaque attachment +│ +╰┬▶ unfulfilled annotation: DiagnosticAnnotation { category: None, severity: Error, message: "Remove this argument", line: Some(9) } did not match any emitted diagnostics + │ ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:151:25 + │ + ╰▶ unexpected diagnostic: + error[expander::invalid-argument-count]: Invalid argument count + ╭▸ + 3 │ ┏ [ + 4 │ ┃ "::kernel::special_form::fn", + 5 │ ┃ { "#tuple": [] }, + 6 │ ┃ { "#struct": {} }, + ‡ ┃ + 9 │ ┃ ["*", "c", "d"] + │ ┃ ─────────────── unexpected argument + 10 │ ┃ //~^ ERROR Remove this argument + 11 │ ┃ ] + │ ┗━┛ expected 4 arguments to `fn`, found 5 + │ + ├ help: use `(fn generics params return-type body)` + ╰ note: the arguments are, in order: the generic parameters (a tuple or struct), the function parameters (a struct), the return type, and the body expression + ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:171:21) +2026-06-15T11:12:38.472159Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] +2026-06-15T11:12:38.472255Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "inference"] result=Ok(()) +2026-06-15T11:12:38.472284Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "inference"] +2026-06-15T11:12:38.472451Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] result=Err(Failed to verify annotation +├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:321:29 +├╴1 additional opaque attachment +│ +╰┬▶ unfulfilled annotation: DiagnosticAnnotation { category: None, severity: Error, message: "Remove this type annotation", line: Some(7) } did not match any emitted diagnostics + │ ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:151:25 + │ + ├▶ unexpected diagnostic: + │ error[expander::unresolved-variable]: Unresolved variable + │ ╭▸ + │ 12 │ ["+", "a", "b"] + │ │ ━ cannot find `b` in this scope + │ │ + │ ╰ note: this could be a typo, a name used outside its scope, or a missing declaration; if it is a function or type from another module, you may need to import it first + │ help: a similar imported name exists + │ ╭╴ + │ 12 - ["+", "a", "b"] + │ 12 + ["+", "a", "~↑√∛cbrt"] + │ ╰╴ + │ ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:171:21 + │ + ├▶ unexpected diagnostic: + │ error[expander::unresolved-variable]: Unresolved variable + │ ╭▸ + │ 6 │ "#struct": { "T": "Int" }, + │ │ ━━━ cannot find `Int` in this scope + │ │ + │ ├ help: check the spelling, or import the name with a `use` statement + │ ╰ note: this could be a typo, a name used outside its scope, or a missing declaration; if it is a function or type from another module, you may need to import it first + │ ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:171:21 + │ + ├▶ unexpected diagnostic: + │ error[expander::unresolved-variable]: Unresolved variable + │ ╭▸ + │ 12 │ ["+", "a", "b"] + │ │ ━ cannot find `a` in this scope + │ │ + │ ╰ note: this could be a typo, a name used outside its scope, or a missing declaration; if it is a function or type from another module, you may need to import it first + │ help: a similar imported name exists + │ ╭╴ + │ 12 - ["+", "a", "b"] + │ 12 + ["+", "↑√∛ccesss", "b"] + │ ╰╴ + │ ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:171:21 + │ + ╰▶ unexpected diagnostic: + error[expander::fn-generics-type-annotation]: Type annotation on generic parameter list + ╭▸ + 7 │ "#type": "Int" + │ ━━━ type annotation is not allowed on the generic parameter list + │ + ├ help: remove the type annotation; the generic parameter list declares type variables, not a typed value + ╰ note: write `(fn (T, U) ...)` for unbounded generics or `(fn (T: bound, U: _) ...)` for bounded generics + ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:171:21) +2026-06-15T11:12:38.472563Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] +2026-06-15T11:12:38.472793Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] result=Err(Failed to verify annotation +├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:321:29 +├╴1 additional opaque attachment +│ +╰┬▶ unfulfilled annotation: DiagnosticAnnotation { category: None, severity: Error, message: "Use an integer literal here", line: Some(3) } did not match any emitted diagnostics + │ ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:151:25 + │ + ╰▶ unexpected diagnostic: + error[expander::invalid-field-literal-type]: Invalid field literal type + ╭▸ + 3 │ ["::kernel::special_form::access", "data", { "#literal": "field_name" }] + │ ━━━━━━━━━━━━ expected an integer for field indexing + │ + ╰ help: use an integer index like `0` for tuple field access, or a name like `field` for named field access + ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:171:21) +2026-06-15T11:12:38.472833Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] +2026-06-15T11:12:38.472905Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] result=Err(Failed to verify annotation +├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:321:29 +├╴1 additional opaque attachment +│ +╰┬▶ unfulfilled annotation: DiagnosticAnnotation { category: None, severity: Error, message: "Remove this type annotation", line: Some(7) } did not match any emitted diagnostics + │ ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:151:25 + │ + ├▶ unexpected diagnostic: + │ error[expander::unresolved-variable]: Unresolved variable + │ ╭▸ + │ 12 │ ["+", "a", "b"] + │ │ ━ cannot find `b` in this scope + │ │ + │ ╰ note: this could be a typo, a name used outside its scope, or a missing declaration; if it is a function or type from another module, you may need to import it first + │ help: a similar imported name exists + │ ╭╴ + │ 12 - ["+", "a", "b"] + │ 12 + ["+", "a", "~↑√∛cbrt"] + │ ╰╴ + │ ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:171:21 + │ + ├▶ unexpected diagnostic: + │ error[expander::unresolved-variable]: Unresolved variable + │ ╭▸ + │ 12 │ ["+", "a", "b"] + │ │ ━ cannot find `a` in this scope + │ │ + │ ╰ note: this could be a typo, a name used outside its scope, or a missing declaration; if it is a function or type from another module, you may need to import it first + │ help: a similar imported name exists + │ ╭╴ + │ 12 - ["+", "a", "b"] + │ 12 + ["+", "↑√∛ccesss", "b"] + │ ╰╴ + │ ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:171:21 + │ + ╰▶ unexpected diagnostic: + error[expander::fn-generics-type-annotation]: Type annotation on generic parameter list + ╭▸ + 7 │ "#type": "Int" + │ ━━━ type annotation is not allowed on the generic parameter list + │ + ├ help: remove the type annotation; the generic parameter list declares type variables, not a typed value + ╰ note: write `(fn (T, U) ...)` for unbounded generics or `(fn (T: bound, U: _) ...)` for bounded generics + ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:171:21) +2026-06-15T11:12:38.472979Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] +2026-06-15T11:12:38.473148Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "type-extractor", "definition"] result=Ok(()) +2026-06-15T11:12:38.473159Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "type-extractor", "definition"] +2026-06-15T11:12:38.473559Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] result=Err(Failed to verify annotation +├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:321:29 +├╴1 additional opaque attachment +│ +╰┬▶ unfulfilled annotation: DiagnosticAnnotation { category: None, severity: Error, message: "Remove this argument", line: Some(7) } did not match any emitted diagnostics + │ ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:151:25 + │ + ╰▶ unexpected diagnostic: + error[expander::invalid-argument-count]: Invalid argument count + ╭▸ + 3 │ ┏ [ + 4 │ ┃ "::kernel::special_form::index", + 5 │ ┃ "x", + 6 │ ┃ "y", + 7 │ ┃ "z" + │ ┃ ─ unexpected argument + 8 │ ┃ //~^ ERROR Remove this argument + 9 │ ┃ ] + │ ┗━┛ expected 2 arguments to `[]`, found 3 + │ + ├ help: use `([] collection index)` + ╰ note: the first argument is the collection and the second is the index + ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:171:21) +2026-06-15T11:12:38.473602Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] +2026-06-15T11:12:38.474072Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] result=Ok(()) +2026-06-15T11:12:38.474087Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] +2026-06-15T11:12:38.474014Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] result=Err(Failed to verify annotation +├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:321:29 +├╴1 additional opaque attachment +│ +╰┬▶ unfulfilled annotation: DiagnosticAnnotation { category: None, severity: Error, message: "Function call with non-path callee cannot be used as a type", line: Some(7) } did not match any emitted diagnostics + │ ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:151:25 + │ + ├▶ unexpected diagnostic: + │ error[expander::invalid-type-constructor-call]: Invalid type constructor call + │ ╭▸ + │ 6 │ ┌ [ + │ 7 │ │ ["+", { "#literal": 1 }, { "#literal": 2 }], + │ │ │ ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ cannot use this as a type constructor + │ 8 │ │ //~^ ERROR Function call with non-path callee cannot be used as a type + │ 9 │ │ "Int", + │ 10 │ │ "Float" + │ 11 │ │ ] + │ │ └───┘ this call appears in a type position + │ │ + │ ├ help: use a type path directly, or use `(| ...)` / `(& ...)` for unions and intersections + │ ╰ note: generic type arguments belong on the type path itself, for example `Foo`, not `(Foo T)` + │ ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:171:21 + │ + ├▶ unexpected diagnostic: + │ error[expander::unresolved-variable]: Unresolved variable + │ ╭▸ + │ 9 │ "Int", + │ │ ━━━ cannot find `Int` in this scope + │ │ + │ ├ help: check the spelling, or import the name with a `use` statement + │ ╰ note: this could be a typo, a name used outside its scope, or a missing declaration; if it is a function or type from another module, you may need to import it first + │ ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:171:21 + │ + ├▶ unexpected diagnostic: + │ error[expander::unresolved-variable]: Unresolved variable + │ ╭▸ + │ 10 │ "Float" + │ │ ━━━━━ cannot find `Float` in this scope + │ │ + │ ├ help: check the spelling, or import the name with a `use` statement + │ ╰ note: this could be a typo, a name used outside its scope, or a missing declaration; if it is a function or type from another module, you may need to import it first + │ ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:171:21 + │ + ╰▶ unexpected diagnostic: + error[expander::unresolved-variable]: Unresolved variable + ╭▸ + 7 │ ["+", { "#literal": 1 }, { "#literal": 2 }], + │ ━ cannot find `+` in this scope + │ + ╰ note: this could be a typo, a name used outside its scope, or a missing declaration; if it is a function or type from another module, you may need to import it first + help: a similar imported name exists + ╭╴ + 7 - ["+", { "#literal": 1 }, { "#literal": 2 }], + 7 + ["StringUnionUnknownUrl|", { "#literal": 1 }, { "#literal": 2 }], + ╰╴ + ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:171:21) +2026-06-15T11:12:38.474143Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "inference"] result=Ok(()) +2026-06-15T11:12:38.474176Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] +2026-06-15T11:12:38.474181Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "inference"] +2026-06-15T11:12:38.474361Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] result=Err(Expected trial to pass, but it failed +├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:390:24 +╰╴1 additional opaque attachment) +2026-06-15T11:12:38.474381Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] +2026-06-15T11:12:38.474546Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "type-extractor", "definition"] result=Ok(()) +2026-06-15T11:12:38.474560Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "type-extractor", "definition"] +2026-06-15T11:12:38.474846Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-mir" trial=["pass", "post_inline"] result=Ok(()) +2026-06-15T11:12:38.474859Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-mir" trial=["pass", "post_inline"] +2026-06-15T11:12:38.474839Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] result=Err(Failed to verify annotation +├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:321:29 +├╴1 additional opaque attachment +│ +╰┬▶ unfulfilled annotation: DiagnosticAnnotation { category: None, severity: Error, message: "Use a struct expression for parameters", line: Some(6) } did not match any emitted diagnostics + │ ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:151:25 + │ + ├▶ unexpected diagnostic: + │ error[expander::unresolved-variable]: Unresolved variable + │ ╭▸ + │ 9 │ ["+", "a", "b"] + │ │ ━ cannot find `b` in this scope + │ │ + │ ╰ note: this could be a typo, a name used outside its scope, or a missing declaration; if it is a function or type from another module, you may need to import it first + │ help: a similar imported name exists + │ ╭╴ + │ 9 - ["+", "a", "b"] + │ 9 + ["+", "a", "~↑√∛cbrt"] + │ ╰╴ + │ ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:171:21 + │ + ├▶ unexpected diagnostic: + │ error[expander::unresolved-variable]: Unresolved variable + │ ╭▸ + │ 9 │ ["+", "a", "b"] + │ │ ━ cannot find `a` in this scope + │ │ + │ ╰ note: this could be a typo, a name used outside its scope, or a missing declaration; if it is a function or type from another module, you may need to import it first + │ help: a similar imported name exists + │ ╭╴ + │ 9 - ["+", "a", "b"] + │ 9 + ["+", "↑√∛ccesss", "b"] + │ ╰╴ + │ ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:171:21 + │ + ╰▶ unexpected diagnostic: + error[expander::invalid-fn-params]: Invalid parameter list + ╭▸ + 6 │ { "#tuple": [] }, + │ ━━━━━━━━━━━━━━━━ expected a struct for function parameters + │ + ╰ help: write parameters as `(x: int, y: string)` where each field declares a parameter and its type + ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:171:21) +2026-06-15T11:12:38.474916Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] +2026-06-15T11:12:38.475182Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] result=Err(Failed to verify annotation +├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:321:29 +├╴1 additional opaque attachment +│ +╰┬▶ unfulfilled annotation: DiagnosticAnnotation { category: None, severity: Error, message: "Use a simple identifier here", line: Some(6) } did not match any emitted diagnostics + │ ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:151:25 + │ + ├▶ unexpected diagnostic: + │ error[expander::unresolved-variable]: Unresolved variable + │ ╭▸ + │ 8 │ "x" + │ │ ━ cannot find `x` in this scope + │ │ + │ ╰ note: this could be a typo, a name used outside its scope, or a missing declaration; if it is a function or type from another module, you may need to import it first + │ help: a similar imported name exists + │ ╭╴ + │ 8 - "x" + │ 8 + "~↑√∛index" + │ ╰╴ + │ ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:171:21 + │ + ╰▶ unexpected diagnostic: + error[expander::invalid-use-import-binding]: Invalid use import binding + ╭▸ + 6 │ { "#tuple": ["::core::math::sub"] }, + │ ━━━━━━━━━━━━━━━━━ expected a simple name to import + │ + ╰ help: each import must be a plain identifier like `foo`, not a qualified path or expression + ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:171:21) +2026-06-15T11:12:38.475238Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "pre-expansion-name-resolver"] +2026-06-15T11:12:38.475641Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] result=Err(Failed to verify annotation +├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:321:29 +├╴1 additional opaque attachment +│ +╰┬▶ unfulfilled annotation: DiagnosticAnnotation { category: None, severity: Error, message: "this labeled argument", line: Some(6) } did not match any emitted diagnostics + │ ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:151:25 + │ + ╰▶ unexpected diagnostic: + error[expander::labeled-arguments-not-supported]: Labeled arguments not supported + ╭▸ + 6 │ ":test": { "#literal": true } + │ ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ labeled arguments are not allowed in `if` + │ + ╰ help: pass the arguments positionally: `(if condition then)` or `(if condition then else)` + ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:171:21) +2026-06-15T11:12:38.475678Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] +2026-06-15T11:12:38.475826Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "type-extractor", "definition"] result=Ok(()) +2026-06-15T11:12:38.475838Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "type-extractor", "definition"] +2026-06-15T11:12:38.475930Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] result=Err(Failed to verify annotation +├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:321:29 +├╴1 additional opaque attachment +│ +╰┬▶ unfulfilled annotation: DiagnosticAnnotation { category: None, severity: Error, message: "Generic arguments must be simple identifiers", line: Some(5) } did not match any emitted diagnostics + │ ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:151:25 + │ + ├▶ unexpected diagnostic: + │ error[expander::unresolved-variable]: Unresolved variable + │ ╭▸ + │ 7 │ { "#struct": { "foo": "Bar" } }, + │ │ ━━━ cannot find `Bar` in this scope + │ │ + │ ├ help: check the spelling, or import the name with a `use` statement + │ ╰ note: this could be a typo, a name used outside its scope, or a missing declaration; if it is a function or type from another module, you may need to import it first + │ ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:171:21 + │ + ╰▶ unexpected diagnostic: + error[expander::invalid-generic-argument]: Invalid generic argument + ╭▸ + 5 │ "Foo>", + │ ━━━━━━━━ expected a simple type parameter + │ + ├ help: use a simple identifier like `T`, not a qualified path + ╰ note: generic parameters are declared as `Name` for unconstrained or `Name` for constrained parameters + ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:171:21) +2026-06-15T11:12:38.476000Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] +2026-06-15T11:12:38.476009Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "inference"] result=Ok(()) +2026-06-15T11:12:38.476071Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "inference"] +2026-06-15T11:12:38.476008Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] result=Err(Failed to verify annotation +├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:321:29 +├╴1 additional opaque attachment +│ +╰┬▶ unfulfilled annotation: DiagnosticAnnotation { category: None, severity: Error, message: "This special form path is invalid", line: Some(3) } did not match any emitted diagnostics + │ ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:151:25 + │ + ╰▶ unexpected diagnostic: + error[expander::item-not-found]: Item not found + ╭▸ + 3 │ ["::kernel::special_form::headpat"] + │ ┬─────────── ━━━━━━━ cannot find `headpat` in module `::kernel::special_form` + │ │ + │ looked in this module + │ + ╰ help: check the spelling and ensure the item is exported + ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:171:21) +2026-06-15T11:12:38.476140Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] +2026-06-15T11:12:38.476462Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "normalization"] result=Ok(()) +2026-06-15T11:12:38.476471Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "normalization"] +2026-06-15T11:12:38.476480Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "pre-expansion-name-resolver"] result=Err(Expected trial to pass, but it failed +├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:390:24 +╰╴1 additional opaque attachment) +2026-06-15T11:12:38.476498Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "pre-expansion-name-resolver"] +2026-06-15T11:12:38.476519Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] result=Err(Failed to verify annotation +├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:321:29 +├╴1 additional opaque attachment +│ +╰┬▶ unfulfilled annotation: DiagnosticAnnotation { category: None, severity: Error, message: "Remove this type annotation", line: Some(6) } did not match any emitted diagnostics + │ ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:151:25 + │ + ├▶ unexpected diagnostic: + │ error[expander::unresolved-variable]: Unresolved variable + │ ╭▸ + │ 8 │ "x" + │ │ ━ cannot find `x` in this scope + │ │ + │ ╰ note: this could be a typo, a name used outside its scope, or a missing declaration; if it is a function or type from another module, you may need to import it first + │ help: a similar imported name exists + │ ╭╴ + │ 8 - "x" + │ 8 + "~↑√∛index" + │ ╰╴ + │ ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:171:21 + │ + ╰▶ unexpected diagnostic: + error[expander::invalid-use-import-binding]: Invalid use import binding + ╭▸ + 6 │ { "#tuple": ["::core::math::sub"], "#type": "Number" }, + │ ━━━━━━━━━━━━━━━━━ expected a simple name to import + │ + ╰ help: each import must be a plain identifier like `foo`, not a qualified path or expression + ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:171:21) +2026-06-15T11:12:38.476369Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] result=Err(Failed to verify annotation +├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:321:29 +├╴1 additional opaque attachment +│ +╰┬▶ unfulfilled annotation: DiagnosticAnnotation { category: None, severity: Error, message: "Replace this as with a proper type expression", line: Some(13) } did not match any emitted diagnostics + │ ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:151:25 + │ + ├▶ unfulfilled annotation: DiagnosticAnnotation { category: None, severity: Error, message: "Replace this literal with a type name", line: Some(16) } did not match any emitted diagnostics + │ ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:151:25 + │ + ├▶ unfulfilled annotation: DiagnosticAnnotation { category: None, severity: Error, message: "Replace this list with a proper type expression", line: Some(19) } did not match any emitted diagnostics + │ ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:151:25 + │ + ├▶ unfulfilled annotation: DiagnosticAnnotation { category: None, severity: Error, message: "Replace this dictionary with a proper type expression", line: Some(22) } did not match any emitted diagnostics + │ ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:151:25 + │ + ├▶ unexpected diagnostic: + │ error[expander::invalid-expression-in-type-position]: Invalid expression in type position + │ ╭▸ + │ 22 │ { "#dict": { "a": "b" } } + │ │ ━━━━━━━━━━━━━━━━━━━━━━━━━ cannot use a dictionary expression as a type + │ │ + │ ├ help: replace this with a type path, tuple type, struct type, `_`, `(| ...)`, or `(& ...)` + │ ╰ note: valid type forms are: type paths like `String`, tuple types like `(Int, String)`, struct types like `(name: String)`, `_` for inference, unions `(| ...)`, and intersections `(& ...)` + │ ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:171:21 + │ + ├▶ unexpected diagnostic: + │ error[expander::item-not-found]: Item not found + │ ╭▸ + │ 13 │ ["::kernel::special_form::as", "x", "X"] + │ │ ┬─────────── ━━ cannot find `as` in module `::kernel::special_form` + │ │ │ + │ │ looked in this module + │ │ + │ ╰ help: check the spelling and ensure the item is exported + │ ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:171:21 + │ + ├▶ unexpected diagnostic: + │ error[expander::unresolved-variable]: Unresolved variable + │ ╭▸ + │ 13 │ ["::kernel::special_form::as", "x", "X"] + │ │ ━ cannot find `x` in this scope + │ │ + │ ╰ note: this could be a typo, a name used outside its scope, or a missing declaration; if it is a function or type from another module, you may need to import it first + │ help: a similar imported name exists + │ ╭╴ + │ 13 - ["::kernel::special_form::as", "x", "X"] + │ 13 + ["::kernel::special_form::as", "StringUnionUnknownUrl|", "X"] + │ ╰╴ + │ ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:171:21 + │ + ├▶ unexpected diagnostic: + │ error[expander::unresolved-variable]: Unresolved variable + │ ╭▸ + │ 13 │ ["::kernel::special_form::as", "x", "X"] + │ │ ━ cannot find `X` in this scope + │ │ + │ ╰ note: this could be a typo, a name used outside its scope, or a missing declaration; if it is a function or type from another module, you may need to import it first + │ help: a similar imported name exists + │ ╭╴ + │ 13 - ["::kernel::special_form::as", "x", "X"] + │ 13 + ["::kernel::special_form::as", "x", "StringUnionUnknownUrl|"] + │ ╰╴ + │ ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:171:21 + │ + ├▶ unexpected diagnostic: + │ error[expander::invalid-expression-in-type-position]: Invalid expression in type position + │ ╭▸ + │ 16 │ { "#literal": 1 } + │ │ ━━━━━━━━━━━━━━━━━ cannot use a literal value as a type + │ │ + │ ├ help: replace this with a type path, tuple type, struct type, `_`, `(| ...)`, or `(& ...)` + │ ╰ note: valid type forms are: type paths like `String`, tuple types like `(Int, String)`, struct types like `(name: String)`, `_` for inference, unions `(| ...)`, and intersections `(& ...)` + │ ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:171:21 + │ + ├▶ unexpected diagnostic: + │ error[expander::unresolved-variable]: Unresolved variable + │ ╭▸ + │ 19 │ { "#list": ["a", "b"] } + │ │ ━ cannot find `a` in this scope + │ │ + │ ╰ note: this could be a typo, a name used outside its scope, or a missing declaration; if it is a function or type from another module, you may need to import it first + │ help: a similar imported name exists + │ ╭╴ + │ 19 - { "#list": ["a", "b"] } + │ 19 + { "#list": ["UnionUnknownUrl|Boolean", "b"] } + │ ╰╴ + │ ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:171:21 + │ + ├▶ unexpected diagnostic: + │ error[expander::unresolved-variable]: Unresolved variable + │ ╭▸ + │ 19 │ { "#list": ["a", "b"] } + │ │ ━ cannot find `b` in this scope + │ │ + │ ╰ note: this could be a typo, a name used outside its scope, or a missing declaration; if it is a function or type from another module, you may need to import it first + │ help: a similar imported name exists + │ ╭╴ + │ 19 - { "#list": ["a", "b"] } + │ 19 + { "#list": ["a", "UnionUnknownUrl|Number"] } + │ ╰╴ + │ ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:171:21 + │ + ├▶ unexpected diagnostic: + │ error[expander::invalid-expression-in-type-position]: Invalid expression in type position + │ ╭▸ + │ 19 │ { "#list": ["a", "b"] } + │ │ ━━━━━━━━━━━━━━━━━━━━━━━ cannot use a list expression as a type + │ │ + │ ├ help: replace this with a type path, tuple type, struct type, `_`, `(| ...)`, or `(& ...)` + │ ╰ note: valid type forms are: type paths like `String`, tuple types like `(Int, String)`, struct types like `(name: String)`, `_` for inference, unions `(| ...)`, and intersections `(& ...)` + │ ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:171:21 + │ + ├▶ unexpected diagnostic: + │ error[expander::unresolved-variable]: Unresolved variable + │ ╭▸ + │ 22 │ { "#dict": { "a": "b" } } + │ │ ━ cannot find `b` in this scope + │ │ + │ ╰ note: this could be a typo, a name used outside its scope, or a missing declaration; if it is a function or type from another module, you may need to import it first + │ help: a similar imported name exists + │ ╭╴ + │ 22 - { "#dict": { "a": "b" } } + │ 22 + { "#dict": { "a": "UnionUnknownUrl|Number" } } + │ ╰╴ + │ ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:171:21 + │ + ╰▶ unexpected diagnostic: + error[expander::unresolved-variable]: Unresolved variable + ╭▸ + 11 │ "x", + │ ━ cannot find `x` in this scope + │ + ╰ note: this could be a typo, a name used outside its scope, or a missing declaration; if it is a function or type from another module, you may need to import it first + help: a similar imported name exists + ╭╴ + 11 - "x", + 11 + "~↑√∛index", + ╰╴ + ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:171:21) +2026-06-15T11:12:38.476577Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] +2026-06-15T11:12:38.476602Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-mir" trial=["pass", "inst_simplify"] +2026-06-15T11:12:38.476792Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] result=Err(Expected trial to pass, but it failed +├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:390:24 +╰╴1 additional opaque attachment) +2026-06-15T11:12:38.476811Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "pre-expansion-name-resolver"] +2026-06-15T11:12:38.477162Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "type-extractor", "definition"] result=Ok(()) +2026-06-15T11:12:38.477171Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "type-extractor"] +2026-06-15T11:12:38.477260Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] result=Ok(()) +2026-06-15T11:12:38.477274Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] +2026-06-15T11:12:38.477509Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "pre-expansion-name-resolver"] result=Err(Expected trial to pass, but it failed +├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:390:24 +╰╴1 additional opaque attachment) +2026-06-15T11:12:38.477529Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "pre-expansion-name-resolver"] +2026-06-15T11:12:38.477656Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] result=Err(Failed to verify annotation +├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:321:29 +├╴1 additional opaque attachment +│ +╰┬▶ unfulfilled annotation: DiagnosticAnnotation { category: None, severity: Error, message: "Remove this argument", line: Some(9) } did not match any emitted diagnostics + │ ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:151:25 + │ + ╰▶ unexpected diagnostic: + error[expander::invalid-argument-count]: Invalid argument count + ╭▸ + 3 │ ┏ [ + 4 │ ┃ "::kernel::special_form::let", + 5 │ ┃ "x", + 6 │ ┃ "Boolean", + ‡ ┃ + 9 │ ┃ { "#literal": true } + │ ┃ ──────────────────── unexpected argument + 10 │ ┃ //~^ ERROR Remove this argument + 11 │ ┃ ] + │ ┗━┛ expected 3 or 4 arguments to `let`, found 5 + │ + ├ help: use `(let name value body)` or `(let name type value body)` + ╰ note: the arguments are, in order: the binding name, an optional type annotation, the bound value, and the body expression where the name is in scope + ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:171:21) +2026-06-15T11:12:38.477696Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] +2026-06-15T11:12:38.477710Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "normalization"] result=Ok(()) +2026-06-15T11:12:38.477719Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "normalization"] +2026-06-15T11:12:38.477880Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-mir" trial=["pass", "post_inline"] result=Ok(()) +2026-06-15T11:12:38.477899Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-mir" trial=["pass", "post_inline"] +2026-06-15T11:12:38.478044Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "inference"] result=Ok(()) +2026-06-15T11:12:38.478067Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "inference"] +2026-06-15T11:12:38.478074Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "pre-expansion-name-resolver"] result=Err(Expected trial to pass, but it failed +├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:390:24 +╰╴1 additional opaque attachment) +2026-06-15T11:12:38.478094Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "pre-expansion-name-resolver"] +2026-06-15T11:12:38.478189Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-mir" trial=["pass", "inst_simplify"] result=Ok(()) +2026-06-15T11:12:38.478202Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-mir" trial=["pass", "inst_simplify"] +2026-06-15T11:12:38.478419Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] result=Err(Failed to verify annotation +├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:321:29 +├╴1 additional opaque attachment +│ +╰┬▶ unfulfilled annotation: DiagnosticAnnotation { category: None, severity: Error, message: "Remove this extra segment", line: Some(4) } did not match any emitted diagnostics + │ ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:151:25 + │ + ╰▶ unexpected diagnostic: + error[expander::module-required]: Module required + ╭▸ + 4 │ "::kernel::special_form::if::extra", + │ ┯━ ───── cannot access items inside a non-module + │ │ + │ `::kernel::special_form::if` is a value, not a module + │ + ├ help: if you meant to access a field, use `.` instead of `::` + ╰ note: the `::` separator navigates into modules; values and types do not contain sub-items + ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:171:21) +2026-06-15T11:12:38.478497Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "type-extractor"] result=Ok(()) +2026-06-15T11:12:38.478524Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] +2026-06-15T11:12:38.478536Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "type-extractor"] +2026-06-15T11:12:38.478769Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "pre-expansion-name-resolver"] result=Err(Expected trial to pass, but it failed +├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:390:24 +╰╴1 additional opaque attachment) +2026-06-15T11:12:38.478788Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "pre-expansion-name-resolver"] +2026-06-15T11:12:38.478865Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] result=Err(Failed to verify annotation +├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:321:29 +├╴1 additional opaque attachment +│ +╰┬▶ unfulfilled annotation: DiagnosticAnnotation { category: None, severity: Error, message: "Remove this argument", line: Some(8) } did not match any emitted diagnostics + │ ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:151:25 + │ + ╰▶ unexpected diagnostic: + error[expander::invalid-argument-count]: Invalid argument count + ╭▸ + 3 │ ┏ [ + 4 │ ┃ "::kernel::special_form::use", + 5 │ ┃ "::math", + 6 │ ┃ { "#tuple": ["pi"] }, + 7 │ ┃ "x", + 8 │ ┃ "y" + │ ┃ ─ unexpected argument + 9 │ ┃ //~^ ERROR Remove this argument + 10 │ ┃ ] + │ ┗━┛ expected 3 arguments to `use`, found 4 + │ + ├ help: use `(use path imports body)` + ╰ note: the arguments are, in order: the module path to import from, the import specifier (`*`, a tuple of names, or a struct of aliases), and the body where the imports are in scope + ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:171:21) +2026-06-15T11:12:38.478907Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] result=Err(Expected trial to pass, but it failed +├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:390:24 +╰╴1 additional opaque attachment) +2026-06-15T11:12:38.478927Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] +2026-06-15T11:12:38.478942Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "type-extractor"] +2026-06-15T11:12:38.479053Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "normalization"] result=Ok(()) +2026-06-15T11:12:38.479066Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "normalization"] +2026-06-15T11:12:38.479133Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "pre-expansion-name-resolver"] result=Err(Expected trial to pass, but it failed +├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:390:24 +╰╴1 additional opaque attachment) +2026-06-15T11:12:38.479152Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "pre-expansion-name-resolver"] +2026-06-15T11:12:38.479648Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "inference"] result=Ok(()) +2026-06-15T11:12:38.479657Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "inference"] +2026-06-15T11:12:38.479771Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-mir" trial=["pass", "post_inline"] result=Ok(()) +2026-06-15T11:12:38.479782Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-mir" trial=["pass", "post_inline"] +2026-06-15T11:12:38.479850Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-mir" trial=["pass", "inst_simplify"] result=Ok(()) +2026-06-15T11:12:38.479870Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "checking"] +2026-06-15T11:12:38.480080Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "type-extractor"] result=Ok(()) +2026-06-15T11:12:38.480108Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "type-extractor"] +2026-06-15T11:12:38.480150Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "type-extractor"] result=Ok(()) +2026-06-15T11:12:38.480160Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "type-extractor"] +2026-06-15T11:12:38.480146Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] result=Err(Expected trial to pass, but it failed +├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:390:24 +╰╴1 additional opaque attachment) +2026-06-15T11:12:38.480193Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] +2026-06-15T11:12:38.480218Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "pre-expansion-name-resolver"] result=Err(Expected trial to pass, but it failed +├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:390:24 +╰╴1 additional opaque attachment) +2026-06-15T11:12:38.480239Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "pre-expansion-name-resolver"] +2026-06-15T11:12:38.480384Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "pre-expansion-name-resolver"] result=Err(Expected trial to pass, but it failed +├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:390:24 +╰╴1 additional opaque attachment) +2026-06-15T11:12:38.480414Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "pre-expansion-name-resolver"] +2026-06-15T11:12:38.480536Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "normalization"] result=Ok(()) +2026-06-15T11:12:38.480548Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "normalization"] +2026-06-15T11:12:38.480823Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "inference"] result=Ok(()) +2026-06-15T11:12:38.480833Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "inference"] +2026-06-15T11:12:38.480917Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] result=Err(Failed to verify annotation +├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:321:29 +├╴1 additional opaque attachment +│ +╰┬▶ unfulfilled annotation: DiagnosticAnnotation { category: None, severity: Error, message: "Use a simple identifier here", line: Some(8) } did not match any emitted diagnostics + │ ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:151:25 + │ + ├▶ unexpected diagnostic: + │ error[expander::unresolved-variable]: Unresolved variable + │ ╭▸ + │ 12 │ "x" + │ │ ━ cannot find `x` in this scope + │ │ + │ ╰ note: this could be a typo, a name used outside its scope, or a missing declaration; if it is a function or type from another module, you may need to import it first + │ help: a similar imported name exists + │ ╭╴ + │ 12 - "x" + │ 12 + "~↑√∛index" + │ ╰╴ + │ ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:171:21 + │ + ├▶ unexpected diagnostic: + │ error[expander::item-not-found]: Item not found + │ ╭▸ + │ 5 │ "::core", + │ │ ──── looked in this module + │ ‡ + │ 8 │ "x": "::core::math::sub" + │ │ ━ cannot find `x` in module `::core` + │ ╰╴ + │ help: a similar item exists in this module + │ ╭╴ + │ 8 - "x": "::core::math::sub" + │ 8 + "mathoptionresulturluuid": "::core::math::sub" + │ ╰╴ + │ ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:171:21 + │ + ╰▶ unexpected diagnostic: + error[expander::invalid-use-alias]: Invalid use alias + ╭▸ + 8 │ "x": "::core::math::sub" + │ ━━━━━━━━━━━━━━━━━ expected `_` or a simple identifier as the alias + │ + ╰ help: use `_` to keep the original name or a simple identifier to rename: `(name: alias)` or `(name: _)` + ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:171:21) +2026-06-15T11:12:38.480980Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] +2026-06-15T11:12:38.481242Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "pre-expansion-name-resolver"] result=Err(Expected trial to pass, but it failed +├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:390:24 +╰╴1 additional opaque attachment) +2026-06-15T11:12:38.481258Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "pre-expansion-name-resolver"] +2026-06-15T11:12:38.481443Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-mir" trial=["pass", "post_inline"] result=Ok(()) +2026-06-15T11:12:38.481456Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-eval" trial=["postgres"] +2026-06-15T11:12:38.481595Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "type-extractor"] result=Err(Expected trial to pass, but it failed +├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:390:24 +╰╴1 additional opaque attachment) +2026-06-15T11:12:38.481629Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "type-extractor"] +2026-06-15T11:12:38.481655Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] result=Err(Expected trial to pass, but it failed +├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:390:24 +╰╴1 additional opaque attachment) +2026-06-15T11:12:38.481704Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] +2026-06-15T11:12:38.481725Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "type-extractor"] result=Ok(()) +2026-06-15T11:12:38.481740Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "type-extractor"] +2026-06-15T11:12:38.481788Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "checking"] result=Ok(()) +2026-06-15T11:12:38.481802Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "checking"] +2026-06-15T11:12:38.481894Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "pre-expansion-name-resolver"] result=Err(Expected trial to pass, but it failed +├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:390:24 +╰╴1 additional opaque attachment) +2026-06-15T11:12:38.481914Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "pre-expansion-name-resolver"] +2026-06-15T11:12:38.482130Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "normalization"] result=Ok(()) +2026-06-15T11:12:38.482141Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "normalization"] +2026-06-15T11:12:38.482284Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "pre-expansion-name-resolver"] result=Err(Expected trial to pass, but it failed +├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:390:24 +╰╴1 additional opaque attachment) +2026-06-15T11:12:38.482303Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "pre-expansion-name-resolver"] +2026-06-15T11:12:38.482382Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] result=Err(Failed to verify annotation +├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:321:29 +├╴1 additional opaque attachment +│ +╰┬▶ unfulfilled annotation: DiagnosticAnnotation { category: None, severity: Error, message: "Remove this argument", line: Some(8) } did not match any emitted diagnostics + │ ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:151:25 + │ + ╰▶ unexpected diagnostic: + error[expander::invalid-argument-count]: Invalid argument count + ╭▸ + 3 │ ┏ [ + 4 │ ┃ "::kernel::special_form::if", + 5 │ ┃ { "#literal": true }, + 6 │ ┃ { "#literal": true }, + 7 │ ┃ { "#literal": true }, + 8 │ ┃ { "#literal": true } + │ ┃ ──────────────────── unexpected argument + 9 │ ┃ //~^ ERROR Remove this argument + 10 │ ┃ ] + │ ┗━┛ expected 2 or 3 arguments to `if`, found 4 + │ + ├ help: use `(if condition then)` or `(if condition then else)` + ╰ note: the arguments are, in order: the condition, the then branch, and an optional else branch + ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:171:21) +2026-06-15T11:12:38.482424Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] +2026-06-15T11:12:38.482682Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "inference"] result=Ok(()) +2026-06-15T11:12:38.482690Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "inference"] +2026-06-15T11:12:38.483159Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] result=Err(Expected trial to pass, but it failed +├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:390:24 +╰╴1 additional opaque attachment) +2026-06-15T11:12:38.483182Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] +2026-06-15T11:12:38.483286Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "type-extractor"] result=Ok(()) +2026-06-15T11:12:38.483303Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "type-extractor"] +2026-06-15T11:12:38.483351Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "type-extractor"] result=Ok(()) +2026-06-15T11:12:38.483379Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-eval" trial=["postgres"] +2026-06-15T11:12:38.483425Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "pre-expansion-name-resolver"] result=Err(Expected trial to pass, but it failed +├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:390:24 +╰╴1 additional opaque attachment) +2026-06-15T11:12:38.483454Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "pre-expansion-name-resolver"] +2026-06-15T11:12:38.483513Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "checking"] result=Ok(()) +2026-06-15T11:12:38.483546Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "checking"] +2026-06-15T11:12:38.483562Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "normalization"] result=Ok(()) +2026-06-15T11:12:38.483556Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "pre-expansion-name-resolver"] result=Err(Expected trial to pass, but it failed +├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:390:24 +╰╴1 additional opaque attachment) +2026-06-15T11:12:38.483577Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "normalization"] +2026-06-15T11:12:38.483583Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "pre-expansion-name-resolver"] +2026-06-15T11:12:38.483678Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] result=Err(Expected trial to pass, but it failed +├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:390:24 +╰╴1 additional opaque attachment) +2026-06-15T11:12:38.483729Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] +2026-06-15T11:12:38.483893Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "inference"] result=Ok(()) +2026-06-15T11:12:38.483904Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "inference"] +2026-06-15T11:12:38.484594Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "pre-expansion-name-resolver"] result=Err(Expected trial to pass, but it failed +├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:390:24 +╰╴1 additional opaque attachment) +2026-06-15T11:12:38.484616Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "pre-expansion-name-resolver"] +2026-06-15T11:12:38.484650Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "type-extractor"] result=Ok(()) +2026-06-15T11:12:38.484665Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "type-extractor"] +2026-06-15T11:12:38.484704Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] result=Err(Failed to verify annotation +├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:321:29 +├╴1 additional opaque attachment +│ +╰┬▶ unfulfilled annotation: DiagnosticAnnotation { category: None, severity: Error, message: "Remove this type annotation", line: Some(6) } did not match any emitted diagnostics + │ ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:151:25 + │ + ├▶ unexpected diagnostic: + │ error[expander::unresolved-variable]: Unresolved variable + │ ╭▸ + │ 5 │ "tuple", + │ │ ━━━━━ cannot find `tuple` in this scope + │ │ + │ ├ help: check the spelling, or import the name with a `use` statement + │ ╰ note: this could be a typo, a name used outside its scope, or a missing declaration; if it is a function or type from another module, you may need to import it first + │ ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:171:21 + │ + ╰▶ unexpected diagnostic: + error[expander::field-literal-type-annotation]: Field literal with type annotation + ╭▸ + 6 │ { "#literal": 0, "#type": "Integer" } + │ ━ type annotations are not allowed on field index literals + │ + ╰ help: remove the type annotation and use a plain integer like `0` + ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:171:21) +2026-06-15T11:12:38.484754Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] +2026-06-15T11:12:38.485023Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "normalization"] result=Ok(()) +2026-06-15T11:12:38.485037Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "alias-replacement"] +2026-06-15T11:12:38.485050Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "pre-expansion-name-resolver"] result=Err(Expected trial to pass, but it failed +├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:390:24 +╰╴1 additional opaque attachment) +2026-06-15T11:12:38.485076Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "pre-expansion-name-resolver"] +2026-06-15T11:12:38.485097Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] result=Ok(()) +2026-06-15T11:12:38.485135Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-eval" trial=["postgres"] +2026-06-15T11:12:38.485148Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "inference"] result=Err(Expected trial to pass, but it failed +├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:390:24 +╰╴1 additional opaque attachment) +2026-06-15T11:12:38.485170Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "inference"] +2026-06-15T11:12:38.485862Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "pre-expansion-name-resolver"] result=Ok(()) +2026-06-15T11:12:38.485875Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "pre-expansion-name-resolver"] +2026-06-15T11:12:38.486014Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "type-extractor"] result=Ok(()) +2026-06-15T11:12:38.486024Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "type-extractor", "definition"] +2026-06-15T11:12:38.486345Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "alias-replacement"] result=Ok(()) +2026-06-15T11:12:38.486357Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "alias-replacement"] +2026-06-15T11:12:38.486419Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "pre-expansion-name-resolver"] result=Err(Expected trial to pass, but it failed +├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:390:24 +╰╴1 additional opaque attachment) +2026-06-15T11:12:38.486444Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "pre-expansion-name-resolver"] +2026-06-15T11:12:38.486524Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] result=Err(Failed to verify annotation +├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:321:29 +├╴1 additional opaque attachment +│ +╰┬▶ unfulfilled annotation: DiagnosticAnnotation { category: None, severity: Error, message: "Add missing arguments", line: Some(3) } did not match any emitted diagnostics + │ ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:151:25 + │ + ╰▶ unexpected diagnostic: + error[expander::invalid-argument-count]: Invalid argument count + ╭▸ + 3 │ ["::kernel::special_form::access", "x"] + │ ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ expected 2 arguments to `.`, found 1 + │ + ├ help: use `(. value field)` + ╰ note: the first argument is the value and the second is the field name or index + ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:171:21) +2026-06-15T11:12:38.486609Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] +2026-06-15T11:12:38.486928Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "inference"] result=Ok(()) +2026-06-15T11:12:38.486939Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "inference"] +2026-06-15T11:12:38.487234Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "type-extractor", "definition"] result=Ok(()) +2026-06-15T11:12:38.487246Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "type-extractor", "definition"] +2026-06-15T11:12:38.487287Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "pre-expansion-name-resolver"] result=Err(Expected trial to pass, but it failed +├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:390:24 +╰╴1 additional opaque attachment) +2026-06-15T11:12:38.487306Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "pre-expansion-name-resolver"] +2026-06-15T11:12:38.487591Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "alias-replacement"] result=Ok(()) +2026-06-15T11:12:38.487601Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "alias-replacement"] +2026-06-15T11:12:38.487811Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "pre-expansion-name-resolver"] result=Err(Expected trial to pass, but it failed +├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:390:24 +╰╴1 additional opaque attachment) +2026-06-15T11:12:38.487832Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "pre-expansion-name-resolver"] +2026-06-15T11:12:38.488401Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "inference"] result=Ok(()) +2026-06-15T11:12:38.488412Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "inference"] +2026-06-15T11:12:38.488741Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "type-extractor", "definition"] result=Ok(()) +2026-06-15T11:12:38.488754Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "type-extractor", "definition"] +2026-06-15T11:12:38.488809Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "pre-expansion-name-resolver"] result=Err(Expected trial to pass, but it failed +├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:390:24 +╰╴1 additional opaque attachment) +2026-06-15T11:12:38.488830Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "pre-expansion-name-resolver"] +2026-06-15T11:12:38.488966Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "pre-expansion-name-resolver"] result=Err(Expected trial to pass, but it failed +├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:390:24 +╰╴1 additional opaque attachment) +2026-06-15T11:12:38.488987Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "pre-expansion-name-resolver"] +2026-06-15T11:12:38.489541Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] result=Err(Failed to verify annotation +├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:321:29 +├╴1 additional opaque attachment +│ +╰┬▶ unfulfilled annotation: DiagnosticAnnotation { category: None, severity: Error, message: "Remove this duplicate generic parameter 'T'", line: Some(5) } did not match any emitted diagnostics + │ ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:151:25 + │ + ├▶ unexpected diagnostic: + │ error[expander::unresolved-variable]: Unresolved variable + │ ╭▸ + │ 9 │ ["+", "a", "b"] + │ │ ━ cannot find `b` in this scope + │ │ + │ ╰ note: this could be a typo, a name used outside its scope, or a missing declaration; if it is a function or type from another module, you may need to import it first + │ help: a similar imported name exists + │ ╭╴ + │ 9 - ["+", "a", "b"] + │ 9 + ["+", "a", "~↑√∛cbrt"] + │ ╰╴ + │ ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:171:21 + │ + ├▶ unexpected diagnostic: + │ error[expander::unresolved-variable]: Unresolved variable + │ ╭▸ + │ 9 │ ["+", "a", "b"] + │ │ ━ cannot find `a` in this scope + │ │ + │ ╰ note: this could be a typo, a name used outside its scope, or a missing declaration; if it is a function or type from another module, you may need to import it first + │ help: a similar imported name exists + │ ╭╴ + │ 9 - ["+", "a", "b"] + │ 9 + ["+", "↑√∛ccesss", "b"] + │ ╰╴ + │ ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:171:21 + │ + ╰▶ unexpected diagnostic: + error[expander::duplicate-fn-generic]: Duplicate generic parameter + ╭▸ + 5 │ { "#tuple": ["T", "T"] }, + │ ┬ ━ duplicate generic parameter `T` + │ │ + │ `T` was first declared here + │ + ╰ help: remove the duplicate declaration or use a different name + ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:171:21) +2026-06-15T11:12:38.489657Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] +2026-06-15T11:12:38.489876Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "inference"] result=Ok(()) +2026-06-15T11:12:38.489891Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "inference"] +2026-06-15T11:12:38.489824Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "alias-replacement"] result=Err(Failed to verify annotation +├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:321:29 +├╴1 additional opaque attachment +│ +╰┬▶ unfulfilled annotation: DiagnosticAnnotation { category: None, severity: Error, message: "additional type arguments are provided here", line: Some(10) } did not match any emitted diagnostics + │ ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:151:25 + │ + ├▶ unexpected diagnostic: + │ error[lowering::expander::intrinsic-generic-arguments]: Generic arguments on intrinsic + │ ╭▸ + │ 10 │ "foo", + │ │ ━━━━━━━━━━━ `foo` does not accept generic arguments + │ │ + │ ╰ help: remove the generic arguments from `foo` + │ ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:171:21 + │ + ├▶ unexpected diagnostic: + │ error[lowering::expander::intrinsic-generic-arguments]: Generic arguments on intrinsic + │ ╭▸ + │ 6 │ "core::math::add", + │ │ ━━━━━━━━━━━━ `add` does not accept generic arguments + │ │ + │ ╰ help: remove the generic arguments from `add` + │ ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:171:21 + │ + ├▶ unexpected diagnostic: + │ error[lowering::expander::unresolved-variable]: Unresolved variable + │ ╭▸ + │ 10 │ "foo", + │ │ ━━━━━━ cannot find `Number` in this scope + │ │ + │ ├ help: check the spelling, or import the name with a `use` statement + │ ╰ note: this could be a typo, a name used outside its scope, or a missing declaration; if it is a function or type from another module, you may need to import it first + │ ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:171:21 + │ + ╰▶ unexpected diagnostic: + error[lowering::expander::unresolved-variable]: Unresolved variable + ╭▸ + 6 │ "core::math::add", + │ ━━━━━━━ cannot find `Integer` in this scope + │ + ├ help: check the spelling, or import the name with a `use` statement + ╰ note: this could be a typo, a name used outside its scope, or a missing declaration; if it is a function or type from another module, you may need to import it first + ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:171:21) +2026-06-15T11:12:38.489910Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "alias-replacement"] +2026-06-15T11:12:38.489925Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "pre-expansion-name-resolver"] result=Err(Expected trial to pass, but it failed +├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:390:24 +╰╴1 additional opaque attachment) +2026-06-15T11:12:38.489943Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "pre-expansion-name-resolver"] +2026-06-15T11:12:38.489989Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "type-extractor", "definition"] result=Ok(()) +2026-06-15T11:12:38.490000Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "type-extractor", "definition"] +2026-06-15T11:12:38.490181Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "pre-expansion-name-resolver"] result=Err(Expected trial to pass, but it failed +├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:390:24 +╰╴1 additional opaque attachment) +2026-06-15T11:12:38.490202Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "node-renumberer"] +2026-06-15T11:12:38.491244Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "type-extractor", "definition"] result=Ok(()) +2026-06-15T11:12:38.491254Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "type-extractor", "definition"] +2026-06-15T11:12:38.491396Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "alias-replacement"] result=Ok(()) +2026-06-15T11:12:38.491394Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "pre-expansion-name-resolver"] result=Err(Expected trial to pass, but it failed +├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:390:24 +╰╴1 additional opaque attachment) +2026-06-15T11:12:38.491406Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "alias-replacement"] +2026-06-15T11:12:38.491413Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "pre-expansion-name-resolver"] +2026-06-15T11:12:38.491490Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "node-renumberer"] result=Ok(()) +2026-06-15T11:12:38.491500Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "node-renumberer"] +2026-06-15T11:12:38.491637Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] result=Err(Failed to verify annotation +├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:321:29 +├╴1 additional opaque attachment +│ +╰┬▶ unfulfilled annotation: DiagnosticAnnotation { category: None, severity: Error, message: "Remove this argument", line: Some(7) } did not match any emitted diagnostics + │ ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:151:25 + │ + ╰▶ unexpected diagnostic: + error[expander::invalid-argument-count]: Invalid argument count + ╭▸ + 3 │ ┏ [ + 4 │ ┃ "::kernel::special_form::access", + 5 │ ┃ "x", + 6 │ ┃ "y", + 7 │ ┃ "z" + │ ┃ ─ unexpected argument + 8 │ ┃ //~^ ERROR Remove this argument + 9 │ ┃ ] + │ ┗━┛ expected 2 arguments to `.`, found 3 + │ + ├ help: use `(. value field)` + ╰ note: the first argument is the value and the second is the field name or index + ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:171:21) +2026-06-15T11:12:38.491724Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] +2026-06-15T11:12:38.491861Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "inference"] result=Ok(()) +2026-06-15T11:12:38.491876Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "inference"] +2026-06-15T11:12:38.492511Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "type-extractor", "definition"] result=Err(Expected trial to pass, but it failed +├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:390:24 +╰╴1 additional opaque attachment) +2026-06-15T11:12:38.492536Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "type-extractor", "definition"] +2026-06-15T11:12:38.492598Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "pre-expansion-name-resolver"] result=Err(Expected trial to pass, but it failed +├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:390:24 +╰╴1 additional opaque attachment) +2026-06-15T11:12:38.492624Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "inference"] +2026-06-15T11:12:38.492730Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "alias-replacement"] result=Ok(()) +2026-06-15T11:12:38.492741Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "alias-replacement"] +2026-06-15T11:12:38.492817Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "node-renumberer"] result=Ok(()) +2026-06-15T11:12:38.492836Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "node-renumberer"] +2026-06-15T11:12:38.493675Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] result=Err(Failed to verify annotation +├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:321:29 +├╴1 additional opaque attachment +│ +╰┬▶ unfulfilled annotation: DiagnosticAnnotation { category: None, severity: Error, message: "Remove this argument", line: Some(8) } did not match any emitted diagnostics + │ ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:151:25 + │ + ╰▶ unexpected diagnostic: + error[expander::invalid-argument-count]: Invalid argument count + ╭▸ + 3 │ ┏ [ + 4 │ ┃ "::kernel::special_form::input", + 5 │ ┃ "x", + 6 │ ┃ "Y", + 7 │ ┃ "z", + 8 │ ┃ "w" + │ ┃ ─ unexpected argument + 9 │ ┃ //~^ ERROR Remove this argument + 10 │ ┃ ] + │ ┗━┛ expected 2 or 3 arguments to `input`, found 4 + │ + ├ help: use `(input name type)` or `(input name type default)` + ╰ note: the arguments are, in order: the input name, its type, and an optional default value + ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:171:21) +2026-06-15T11:12:38.493768Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] +2026-06-15T11:12:38.493827Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "type-extractor", "definition"] result=Ok(()) +2026-06-15T11:12:38.493842Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "type-extractor", "definition"] +2026-06-15T11:12:38.493892Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "inference"] result=Ok(()) +2026-06-15T11:12:38.493904Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "inference"] +2026-06-15T11:12:38.493913Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "inference"] result=Ok(()) +2026-06-15T11:12:38.493932Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "inference"] +2026-06-15T11:12:38.494044Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "alias-replacement"] result=Ok(()) +2026-06-15T11:12:38.494061Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "alias-replacement"] +2026-06-15T11:12:38.494046Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "node-renumberer"] result=Ok(()) +2026-06-15T11:12:38.494122Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "type-extractor"] +2026-06-15T11:12:38.495265Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "type-extractor", "definition"] result=Ok(()) +2026-06-15T11:12:38.495277Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "type-extractor", "definition"] +2026-06-15T11:12:38.495360Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "alias-replacement"] result=Ok(()) +2026-06-15T11:12:38.495353Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "inference"] result=Err(Expected trial to pass, but it failed +├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:390:24 +╰╴1 additional opaque attachment) +2026-06-15T11:12:38.495381Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "inference"] +2026-06-15T11:12:38.495370Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "alias-replacement"] +2026-06-15T11:12:38.495548Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "type-extractor"] result=Ok(()) +2026-06-15T11:12:38.495560Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "type-extractor"] +2026-06-15T11:12:38.495691Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] result=Err(Failed to verify annotation +├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:321:29 +├╴1 additional opaque attachment +│ +╰┬▶ unfulfilled annotation: DiagnosticAnnotation { category: None, severity: Error, message: "Replace this qualified path with a simple identifier", line: Some(3) } did not match any emitted diagnostics + │ ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:151:25 + │ + ├▶ unfulfilled annotation: DiagnosticAnnotation { category: None, severity: Error, message: "Replace this literal with a type name", line: Some(3) } did not match any emitted diagnostics + │ ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:151:25 + │ + ╰▶ unexpected diagnostic: + error[expander::invalid-binding-name]: Invalid binding name + ╭▸ + 3 │ ["::kernel::special_form::newtype", "::x", { "#literal": 1 }, "x"] + │ ━━━ expected a type name for the `newtype` binding + │ + ├ help: write `(newtype Name type-expr body)` with a name like `UserId` or `Pair` + ╰ note: the first argument to `newtype` introduces a new distinct type and must be a simple identifier, optionally with generic parameters + ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:171:21) +2026-06-15T11:12:38.495775Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] +2026-06-15T11:12:38.496210Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "inference"] result=Ok(()) +2026-06-15T11:12:38.496223Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "inference"] +2026-06-15T11:12:38.496523Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "type-extractor", "definition"] result=Ok(()) +2026-06-15T11:12:38.496537Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "type-extractor", "definition"] +2026-06-15T11:12:38.496662Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "inference"] result=Ok(()) +2026-06-15T11:12:38.496672Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "inference"] +2026-06-15T11:12:38.496859Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "type-extractor"] result=Ok(()) +2026-06-15T11:12:38.496863Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "alias-replacement"] result=Ok(()) +2026-06-15T11:12:38.496877Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "alias-replacement"] +2026-06-15T11:12:38.496878Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-eval" trial=["postgres"] +2026-06-15T11:12:38.497413Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "inference"] result=Ok(()) +2026-06-15T11:12:38.497430Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "type-extractor", "definition"] +2026-06-15T11:12:38.497839Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "type-extractor", "definition"] result=Ok(()) +2026-06-15T11:12:38.497856Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "alias-replacement"] +2026-06-15T11:12:38.498062Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "inference"] result=Ok(()) +2026-06-15T11:12:38.498079Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "inference"] +2026-06-15T11:12:38.498102Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "alias-replacement"] result=Ok(()) +2026-06-15T11:12:38.498116Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-mir" trial=["pass", "dse"] +2026-06-15T11:12:38.498645Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "type-extractor", "definition"] result=Ok(()) +2026-06-15T11:12:38.498653Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "type-extractor", "definition"] +2026-06-15T11:12:38.498866Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] result=Err(Failed to verify annotation +├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:321:29 +├╴1 additional opaque attachment +│ +╰┬▶ unfulfilled annotation: DiagnosticAnnotation { category: None, severity: Error, message: "Remove this duplicate parameter 'a'", line: Some(6) } did not match any emitted diagnostics + │ ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:151:25 + │ + ├▶ unexpected diagnostic: + │ error[expander::unresolved-variable]: Unresolved variable + │ ╭▸ + │ 9 │ ["+", "a", "b"] + │ │ ━ cannot find `b` in this scope + │ │ + │ ╰ note: this could be a typo, a name used outside its scope, or a missing declaration; if it is a function or type from another module, you may need to import it first + │ help: a similar local binding exists + │ ╭╴ + │ 9 - ["+", "a", "b"] + │ 9 + ["+", "a", "a"] + │ ╰╴ + │ help: a similar imported name exists + │ ╭╴ + │ 9 - ["+", "a", "b"] + │ 9 + ["+", "a", "~↑√∛cbrt"] + │ ╰╴ + │ ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:171:21 + │ + ├▶ unexpected diagnostic: + │ error[expander::unresolved-variable]: Unresolved variable + │ ╭▸ + │ 6 │ { "#struct": { "a": "Int", "a": "Int" } }, + │ │ ━━━ cannot find `Int` in this scope + │ │ + │ ├ help: check the spelling, or import the name with a `use` statement + │ ╰ note: this could be a typo, a name used outside its scope, or a missing declaration; if it is a function or type from another module, you may need to import it first + │ ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:171:21 + │ + ├▶ unexpected diagnostic: + │ error[expander::duplicate-fn-parameter]: Duplicate function parameter + │ ╭▸ + │ 6 │ { "#struct": { "a": "Int", "a": "Int" } }, + │ │ ┬───────── ━━━━━━━━━━ duplicate parameter `a` + │ │ │ + │ │ `a` was first declared here + │ │ + │ ╰ help: remove the duplicate parameter or use a different name + │ ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:171:21 + │ + ╰▶ unexpected diagnostic: + error[expander::unresolved-variable]: Unresolved variable + ╭▸ + 6 │ { "#struct": { "a": "Int", "a": "Int" } }, + │ ━━━ cannot find `Int` in this scope + │ + ├ help: check the spelling, or import the name with a `use` statement + ╰ note: this could be a typo, a name used outside its scope, or a missing declaration; if it is a function or type from another module, you may need to import it first + ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:171:21) +2026-06-15T11:12:38.498955Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] +2026-06-15T11:12:38.499201Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "alias-replacement"] result=Err(Expected trial to pass, but it failed +├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:390:24 +╰╴1 additional opaque attachment) +2026-06-15T11:12:38.499259Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "checking"] +2026-06-15T11:12:38.499487Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "inference"] result=Ok(()) +2026-06-15T11:12:38.499499Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "inference"] +2026-06-15T11:12:38.499589Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-mir" trial=["pass", "dse"] result=Ok(()) +2026-06-15T11:12:38.499598Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-mir" trial=["pass", "cfg_simplify"] +2026-06-15T11:12:38.499937Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "type-extractor", "definition"] result=Ok(()) +2026-06-15T11:12:38.499951Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "type-extractor", "definition"] +2026-06-15T11:12:38.500395Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] result=Err(Expected trial to pass, but it failed +├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:390:24 +╰╴1 additional opaque attachment) +2026-06-15T11:12:38.500452Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] +2026-06-15T11:12:38.500776Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "checking"] result=Ok(()) +2026-06-15T11:12:38.500788Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "checking"] +2026-06-15T11:12:38.500869Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "inference"] result=Ok(()) +2026-06-15T11:12:38.500881Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "inference", "intrinsics"] +2026-06-15T11:12:38.501340Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "type-extractor", "definition"] result=Ok(()) +2026-06-15T11:12:38.501356Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "checking"] +2026-06-15T11:12:38.501379Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-mir" trial=["pass", "cfg_simplify"] result=Ok(()) +2026-06-15T11:12:38.501394Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-mir" trial=["pass", "cfg_simplify"] +2026-06-15T11:12:38.502200Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "inference", "intrinsics"] result=Ok(()) +2026-06-15T11:12:38.502214Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "inference", "intrinsics"] +2026-06-15T11:12:38.502307Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "checking"] result=Err(Expected trial to pass, but it failed +├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:390:24 +╰╴1 additional opaque attachment) +2026-06-15T11:12:38.502340Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "checking"] +2026-06-15T11:12:38.502369Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] result=Err(Failed to verify annotation +├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:321:29 +├╴1 additional opaque attachment +│ +╰┬▶ unfulfilled annotation: DiagnosticAnnotation { category: None, severity: Error, message: "Add missing arguments", line: Some(3) } did not match any emitted diagnostics + │ ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:151:25 + │ + ╰▶ unexpected diagnostic: + error[expander::invalid-argument-count]: Invalid argument count + ╭▸ + 3 │ ["::kernel::special_form::fn", { "#tuple": [] }, { "#struct": {} }, "_"] + │ ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ expected 4 arguments to `fn`, found 3 + │ + ├ help: use `(fn generics params return-type body)` + ╰ note: the arguments are, in order: the generic parameters (a tuple or struct), the function parameters (a struct), the return type, and the body expression + ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:171:21) +2026-06-15T11:12:38.502457Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-eval" trial=["postgres"] +2026-06-15T11:12:38.502809Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "checking"] result=Ok(()) +2026-06-15T11:12:38.502821Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "checking"] +2026-06-15T11:12:38.503282Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-mir" trial=["pass", "cfg_simplify"] result=Ok(()) +2026-06-15T11:12:38.503309Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-mir" trial=["pass", "cfg_simplify"] +2026-06-15T11:12:38.503544Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "inference", "intrinsics"] result=Ok(()) +2026-06-15T11:12:38.503554Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "inference", "intrinsics"] +2026-06-15T11:12:38.503805Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "checking"] result=Ok(()) +2026-06-15T11:12:38.503818Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "checking"] +2026-06-15T11:12:38.504680Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "inference", "intrinsics"] result=Ok(()) +2026-06-15T11:12:38.504696Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-mir" trial=["pass", "cfg_simplify"] +2026-06-15T11:12:38.505335Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "checking"] result=Ok(()) +2026-06-15T11:12:38.505353Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "checking"] +2026-06-15T11:12:38.505945Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-mir" trial=["pass", "cfg_simplify"] result=Ok(()) +2026-06-15T11:12:38.505978Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "checking"] +2026-06-15T11:12:38.506082Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-mir" trial=["pass", "cfg_simplify"] result=Ok(()) +2026-06-15T11:12:38.506092Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-mir" trial=["pass", "cfg_simplify"] +2026-06-15T11:12:38.506232Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "checking"] result=Ok(()) +2026-06-15T11:12:38.506250Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "checking"] +2026-06-15T11:12:38.506640Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "checking"] result=Ok(()) +2026-06-15T11:12:38.506650Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "checking"] +2026-06-15T11:12:38.507591Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-mir" trial=["pass", "inline"] result=Ok(()) +2026-06-15T11:12:38.507606Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-eval" trial=["postgres"] +2026-06-15T11:12:38.507816Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "checking"] result=Ok(()) +2026-06-15T11:12:38.507847Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "checking"] +2026-06-15T11:12:38.507931Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-mir" trial=["pass", "cfg_simplify"] result=Ok(()) +2026-06-15T11:12:38.507952Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "checking"] result=Ok(()) +2026-06-15T11:12:38.507968Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "checking"] +2026-06-15T11:12:38.507956Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-mir" trial=["pass", "cfg_simplify"] +2026-06-15T11:12:38.508222Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "checking"] result=Ok(()) +2026-06-15T11:12:38.508232Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "checking"] +2026-06-15T11:12:38.509311Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "checking"] result=Ok(()) +2026-06-15T11:12:38.509325Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "checking"] +2026-06-15T11:12:38.509455Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "checking"] result=Err(Expected trial to pass, but it failed +├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:390:24 +╰╴1 additional opaque attachment) +2026-06-15T11:12:38.509493Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "checking"] +2026-06-15T11:12:38.509470Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "checking"] result=Err(Expected trial to pass, but it failed +├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:390:24 +╰╴1 additional opaque attachment) +2026-06-15T11:12:38.509673Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "checking"] +2026-06-15T11:12:38.510767Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "checking"] result=Ok(()) +2026-06-15T11:12:38.510782Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "checking"] +2026-06-15T11:12:38.510989Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "checking"] result=Ok(()) +2026-06-15T11:12:38.510998Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "checking"] +2026-06-15T11:12:38.511244Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "checking"] result=Ok(()) +2026-06-15T11:12:38.511259Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "checking"] +2026-06-15T11:12:38.512169Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "checking"] result=Err(Expected trial to pass, but it failed +├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:390:24 +╰╴1 additional opaque attachment) +2026-06-15T11:12:38.512212Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "checking"] +2026-06-15T11:12:38.512238Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "checking"] result=Err(Expected trial to pass, but it failed +├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:390:24 +╰╴1 additional opaque attachment) +2026-06-15T11:12:38.512264Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "checking"] +2026-06-15T11:12:38.512492Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "checking"] result=Ok(()) +2026-06-15T11:12:38.512500Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "graph-hoisting"] +2026-06-15T11:12:38.513528Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "checking"] result=Ok(()) +2026-06-15T11:12:38.513536Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "checking"] +2026-06-15T11:12:38.513729Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "checking"] result=Ok(()) +2026-06-15T11:12:38.513747Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "checking"] +2026-06-15T11:12:38.515022Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "checking"] result=Ok(()) +2026-06-15T11:12:38.515036Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "checking"] +2026-06-15T11:12:38.516032Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "checking"] result=Ok(()) +2026-06-15T11:12:38.516058Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "checking"] +2026-06-15T11:12:38.516660Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "checking"] result=Err(Expected trial to pass, but it failed +├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:390:24 +╰╴1 additional opaque attachment) +2026-06-15T11:12:38.516722Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "checking"] +2026-06-15T11:12:38.517272Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "checking"] result=Ok(()) +2026-06-15T11:12:38.517282Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "checking"] +2026-06-15T11:12:38.518423Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "checking"] result=Ok(()) +2026-06-15T11:12:38.518431Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "checking"] +2026-06-15T11:12:38.519765Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "checking"] result=Ok(()) +2026-06-15T11:12:38.519783Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-mir" trial=["pass", "inst_simplify"] +2026-06-15T11:12:38.519832Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "checking"] result=Err(Failed to verify annotation +├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:321:29 +├╴1 additional opaque attachment +│ +╰┬▶ unfulfilled annotation: DiagnosticAnnotation { category: None, severity: Error, message: "Type variable has incompatible upper and lower bounds", line: Some(3) } did not match any emitted diagnostics + │ ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:151:25 + │ + ├▶ unexpected diagnostic: + │ error[lowering::type-extractor::unbound-type-variable]: Unbound type variable + │ ╭▸ + │ 3 │ ["newtype", "Person", "T", ["Person", { "#literal": "2" }]] + │ │ ━━━━━━ Cannot find type 'Number' + │ │ + │ ├ note: This is likely a compiler bug in the name resolution system. The type checker has encountered a name that wasn't properly resolved earlier in compilation. The name resolution pass should have caught this error or provided a more specific error message. + │ ├ help: This is a bug in the compiler, not an issue with your code. + │ ├ help: Please report this issue along with a minimal code example that reproduces the error. + │ ╰ note: Internal compiler errors indicate a bug in the compiler itself that needs to be fixed. + │ + │ We would appreciate if you could file a GitHub or Linear issue and reference this error. + │ + │ When reporting this issue, please include your query, any relevant type definitions, and the complete error message shown above. + │ ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:171:21 + │ + ├▶ unexpected diagnostic: + │ error[lowering::type-extractor::unused-generic-parameter]: Generic parameter not used in type definition + │ ╭▸ + │ 1 │ //@ run: fail + │ │ ─ ...but never used in this type definition + │ 2 │ //@ description: Checks that type constructor bounded generic parameter (T: Number) violation is caught during type checking. + │ 3 │ ["newtype", "Person", "T", ["Person", { "#literal": "2" }]] + │ │ ━━━━━━━━━ Generic parameter `T` declared here... + │ │ + │ ├ help: Generic parameter `T` is declared but not referenced. Either remove the unused parameter or incorporate it into your type definition. + │ ╰ note: Each generic parameter should serve a purpose in parameterizing the type. Unused parameters can make code harder to understand and may indicate a design oversight or incomplete implementation. They are unconstrained variables, and therefore considered erroneous. + │ ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:171:21 + │ + ╰▶ unexpected diagnostic: + error[lowering::expander::unresolved-variable]: Unresolved variable + ╭▸ + 3 │ ["newtype", "Person", "T", ["Person", { "#literal": "2" }]] + │ ━━━━━━ cannot find `Number` in this scope + │ + ├ help: check the spelling, or import the name with a `use` statement + ╰ note: this could be a typo, a name used outside its scope, or a missing declaration; if it is a function or type from another module, you may need to import it first + ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:171:21) +2026-06-15T11:12:38.519939Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "checking"] +2026-06-15T11:12:38.520257Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-mir" trial=["pass", "inline"] result=Ok(()) +2026-06-15T11:12:38.520269Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-mir" trial=["pass", "inline"] +2026-06-15T11:12:38.521259Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-mir" trial=["pass", "inst_simplify"] result=Ok(()) +2026-06-15T11:12:38.521274Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-mir" trial=["pass", "data-dependency"] +2026-06-15T11:12:38.521423Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-eval" trial=["postgres"] result=Ok(()) +2026-06-15T11:12:38.521452Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "checking"] +2026-06-15T11:12:38.521778Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "checking"] result=Err(Failed to verify annotation +├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:321:29 +├╴1 additional opaque attachment +│ +╰┬▶ unfulfilled annotation: DiagnosticAnnotation { category: None, severity: Error, message: "This closure requires exactly 2 generic arguments", line: Some(14) } did not match any emitted diagnostics + │ ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:151:25 + │ + ╰▶ unexpected diagnostic: + error[lowering::expander::unresolved-variable]: Unresolved variable + ╭▸ + 14 │ "foo", + │ ━━━━━━━ cannot find `Integer` in this scope + │ + ├ help: check the spelling, or import the name with a `use` statement + ╰ note: this could be a typo, a name used outside its scope, or a missing declaration; if it is a function or type from another module, you may need to import it first + ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:171:21) +2026-06-15T11:12:38.521833Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["reify"] +2026-06-15T11:12:38.522421Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-mir" trial=["pass", "data-dependency"] result=Ok(()) +2026-06-15T11:12:38.522430Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-mir" trial=["pass", "data-dependency"] +2026-06-15T11:12:38.523089Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["reify"] result=Ok(()) +2026-06-15T11:12:38.523080Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "checking"] result=Err(Expected trial to pass, but it failed +├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:390:24 +╰╴1 additional opaque attachment) +2026-06-15T11:12:38.523101Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["reify"] +2026-06-15T11:12:38.523110Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "checking"] +2026-06-15T11:12:38.524345Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["reify"] result=Err(Expected trial to pass, but it failed +├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:390:24 +╰╴1 additional opaque attachment) +2026-06-15T11:12:38.524373Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["reify"] +2026-06-15T11:12:38.524641Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "checking"] result=Ok(()) +2026-06-15T11:12:38.524654Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "checking"] +2026-06-15T11:12:38.526240Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["reify"] result=Ok(()) +2026-06-15T11:12:38.526261Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["reify"] +2026-06-15T11:12:38.526273Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "checking"] result=Err(Expected trial to pass, but it failed +├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:390:24 +╰╴1 additional opaque attachment) +2026-06-15T11:12:38.526311Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "checking"] +2026-06-15T11:12:38.527529Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["reify"] result=Ok(()) +2026-06-15T11:12:38.527543Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["reify"] +2026-06-15T11:12:38.527633Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "checking"] result=Err(Expected trial to pass, but it failed +├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:390:24 +╰╴1 additional opaque attachment) +2026-06-15T11:12:38.527665Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "checking"] +2026-06-15T11:12:38.528804Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["reify"] result=Ok(()) +2026-06-15T11:12:38.528813Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["reify"] +2026-06-15T11:12:38.529437Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "checking"] result=Ok(()) +2026-06-15T11:12:38.529454Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-eval" trial=["postgres"] +2026-06-15T11:12:38.529865Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["reify"] result=Ok(()) +2026-06-15T11:12:38.529873Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["reify"] +2026-06-15T11:12:38.530060Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "checking"] result=Ok(()) +2026-06-15T11:12:38.530080Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "checking"] +2026-06-15T11:12:38.530936Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["reify"] result=Ok(()) +2026-06-15T11:12:38.530945Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["reify"] +2026-06-15T11:12:38.531990Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["reify"] result=Ok(()) +2026-06-15T11:12:38.531999Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["reify"] +2026-06-15T11:12:38.532259Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "checking"] result=Ok(()) +2026-06-15T11:12:38.532287Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-eval" trial=["postgres"] +2026-06-15T11:12:38.533084Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["reify"] result=Ok(()) +2026-06-15T11:12:38.533093Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["reify"] +2026-06-15T11:12:38.534169Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["reify"] result=Ok(()) +2026-06-15T11:12:38.534178Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["reify"] +2026-06-15T11:12:38.536540Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["reify"] result=Ok(()) +2026-06-15T11:12:38.536570Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["reify"] +2026-06-15T11:12:38.538194Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["reify"] result=Ok(()) +2026-06-15T11:12:38.538222Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["reify"] +2026-06-15T11:12:38.539807Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["reify"] result=Err(Expected trial to pass, but it failed +├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:390:24 +╰╴1 additional opaque attachment) +2026-06-15T11:12:38.539869Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["reify"] +2026-06-15T11:12:38.541402Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["reify"] result=Ok(()) +2026-06-15T11:12:38.541434Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["reify"] +2026-06-15T11:12:38.542861Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["reify"] result=Ok(()) +2026-06-15T11:12:38.542881Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["reify"] +2026-06-15T11:12:38.544411Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["reify"] result=Ok(()) +2026-06-15T11:12:38.544434Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["reify"] +2026-06-15T11:12:38.545977Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["reify"] result=Ok(()) +2026-06-15T11:12:38.546005Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["reify"] +2026-06-15T11:12:38.547408Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["reify"] result=Ok(()) +2026-06-15T11:12:38.547433Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["reify"] +2026-06-15T11:12:38.550066Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["reify"] result=Ok(()) +2026-06-15T11:12:38.550091Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["reify"] +2026-06-15T11:12:38.551344Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["reify"] result=Ok(()) +2026-06-15T11:12:38.551354Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "specialization"] +2026-06-15T11:12:38.572933Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-mir" trial=["pass", "data-dependency"] result=Ok(()) +2026-06-15T11:12:38.572966Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-mir" trial=["pass", "data-dependency"] +2026-06-15T11:12:38.573080Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-eval" trial=["postgres"] result=Ok(()) +2026-06-15T11:12:38.573116Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-mir" trial=["pass", "data-dependency"] +2026-06-15T11:12:38.574854Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-mir" trial=["pass", "data-dependency"] result=Ok(()) +2026-06-15T11:12:38.574870Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-mir" trial=["pass", "data-dependency"] +2026-06-15T11:12:38.575941Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-mir" trial=["pass", "data-dependency"] result=Ok(()) +2026-06-15T11:12:38.575960Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-mir" trial=["pass", "data-dependency"] +2026-06-15T11:12:38.576337Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-eval" trial=["postgres"] result=Ok(()) +2026-06-15T11:12:38.576359Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-eval" trial=["postgres"] +2026-06-15T11:12:38.576730Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-mir" trial=["pass", "data-dependency"] result=Ok(()) +2026-06-15T11:12:38.576749Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-mir" trial=["pass", "data-dependency"] +2026-06-15T11:12:38.577418Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-mir" trial=["pass", "data-dependency"] result=Ok(()) +2026-06-15T11:12:38.577431Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-mir" trial=["pass", "data-dependency"] +2026-06-15T11:12:38.578854Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-mir" trial=["pass", "data-dependency"] result=Ok(()) +2026-06-15T11:12:38.578875Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-mir" trial=["pass", "data-dependency"] +2026-06-15T11:12:38.579033Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-mir" trial=["pass", "data-dependency"] result=Ok(()) +2026-06-15T11:12:38.579047Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-mir" trial=["pass", "data-dependency"] +2026-06-15T11:12:38.580677Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-mir" trial=["pass", "data-dependency"] result=Ok(()) +2026-06-15T11:12:38.580696Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-mir" trial=["pass", "data-dependency"] +2026-06-15T11:12:38.580751Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-mir" trial=["pass", "data-dependency"] result=Ok(()) +2026-06-15T11:12:38.580775Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-mir" trial=["pass", "data-dependency"] +2026-06-15T11:12:38.582146Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-mir" trial=["pass", "data-dependency"] result=Ok(()) +2026-06-15T11:12:38.582156Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-mir" trial=["pass", "data-dependency"] +2026-06-15T11:12:38.582515Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-mir" trial=["pass", "data-dependency"] result=Ok(()) +2026-06-15T11:12:38.582535Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-mir" trial=["pass", "data-dependency"] +2026-06-15T11:12:38.584320Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-mir" trial=["pass", "data-dependency"] result=Ok(()) +2026-06-15T11:12:38.584349Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-eval" trial=["postgres"] +2026-06-15T11:12:38.603749Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-mir" trial=["pass", "data-dependency"] result=Ok(()) +2026-06-15T11:12:38.603784Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-mir" trial=["pass", "data-dependency"] +2026-06-15T11:12:38.606454Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-mir" trial=["pass", "data-dependency"] result=Ok(()) +2026-06-15T11:12:38.606482Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-mir" trial=["pass", "data-dependency"] +2026-06-15T11:12:38.608405Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-mir" trial=["pass", "data-dependency"] result=Ok(()) +2026-06-15T11:12:38.608430Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-mir" trial=["interpret"] +2026-06-15T11:12:38.611737Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-mir" trial=["interpret"] result=Ok(()) +2026-06-15T11:12:38.611772Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-eval" trial=["postgres"] +2026-06-15T11:12:38.614972Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "checking"] result=Ok(()) +2026-06-15T11:12:38.615095Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-mir" trial=["pass", "cfg_simplify"] +2026-06-15T11:12:38.621887Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-mir" trial=["pass", "cfg_simplify"] result=Ok(()) +2026-06-15T11:12:38.621912Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-mir" trial=["pass", "cfg_simplify"] +2026-06-15T11:12:38.623875Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-mir" trial=["pass", "cfg_simplify"] result=Ok(()) +2026-06-15T11:12:38.623908Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-eval" trial=["postgres"] +2026-06-15T11:12:38.641710Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-eval" trial=["postgres"] result=Ok(()) +2026-06-15T11:12:38.641737Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-eval" trial=["postgres"] +2026-06-15T11:12:38.644930Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "specialization"] result=Ok(()) +2026-06-15T11:12:38.644960Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "specialization"] +2026-06-15T11:12:38.646841Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "specialization"] result=Ok(()) +2026-06-15T11:12:38.646855Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "specialization"] +2026-06-15T11:12:38.648302Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-eval" trial=["postgres"] result=Ok(()) +2026-06-15T11:12:38.648325Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-eval" trial=["postgres"] +2026-06-15T11:12:38.648633Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "specialization"] result=Err(Failed to verify annotation +├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:321:29 +├╴1 additional opaque attachment +│ +╰┬▶ unfulfilled annotation: DiagnosticAnnotation { category: None, severity: Error, message: "This is not a graph intrinsic operation", line: Some(6) } did not match any emitted diagnostics + │ ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:151:25 + │ + ╰▶ unexpected diagnostic: + error[lowering::expander::unresolved-variable]: Unresolved variable + ╭▸ + 6 │ ["fn", { "#tuple": [] }, { "#struct": { "graph": "_" } }, "_", "graph"], + │ ━━━━━ cannot find `graph` in this scope + │ + ├ help: check the spelling, or import the name with a `use` statement + ╰ note: this could be a typo, a name used outside its scope, or a missing declaration; if it is a function or type from another module, you may need to import it first + ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:171:21) +2026-06-15T11:12:38.648703Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "specialization"] +2026-06-15T11:12:38.651853Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-mir" trial=["pass", "inline"] result=Ok(()) +2026-06-15T11:12:38.651878Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-mir" trial=["pass", "inline"] +2026-06-15T11:12:38.654346Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-mir" trial=["pass", "inline"] result=Ok(()) +2026-06-15T11:12:38.654365Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-mir" trial=["pass", "inline"] +2026-06-15T11:12:38.654976Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-eval" trial=["postgres"] result=Ok(()) +2026-06-15T11:12:38.654995Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-eval" trial=["postgres"] +2026-06-15T11:12:38.656252Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-mir" trial=["pass", "inline"] result=Ok(()) +2026-06-15T11:12:38.656278Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-eval" trial=["postgres"] +2026-06-15T11:12:38.660270Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-eval" trial=["postgres"] result=Ok(()) +2026-06-15T11:12:38.660294Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-eval" trial=["postgres"] +2026-06-15T11:12:38.675560Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-eval" trial=["postgres"] result=Ok(()) +2026-06-15T11:12:38.675591Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-eval" trial=["postgres"] +2026-06-15T11:12:38.685793Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-eval" trial=["postgres"] result=Ok(()) +2026-06-15T11:12:38.685834Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-mir" trial=["pass", "data-dependency"] +2026-06-15T11:12:38.688218Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-mir" trial=["pass", "data-dependency"] result=Ok(()) +2026-06-15T11:12:38.688248Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-mir" trial=["pass", "data-dependency"] +2026-06-15T11:12:38.690214Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-mir" trial=["pass", "data-dependency"] result=Ok(()) +2026-06-15T11:12:38.690246Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-eval" trial=["postgres"] +2026-06-15T11:12:38.715894Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-eval" trial=["postgres"] result=Ok(()) +2026-06-15T11:12:38.717571Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-eval" trial=["postgres"] result=Ok(()) +2026-06-15T11:12:38.717670Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "specialization"] +2026-06-15T11:12:38.720441Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-eval" trial=["postgres"] +2026-06-15T11:12:38.720767Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "specialization"] result=Ok(()) +2026-06-15T11:12:38.720804Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "specialization"] +2026-06-15T11:12:38.722784Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "specialization"] result=Ok(()) +2026-06-15T11:12:38.722811Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "specialization"] +2026-06-15T11:12:38.723597Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "graph-hoisting"] result=Ok(()) +2026-06-15T11:12:38.723900Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "graph-hoisting"] +2026-06-15T11:12:38.728623Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-eval" trial=["postgres"] result=Ok(()) +2026-06-15T11:12:38.728651Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-eval" trial=["postgres"] +2026-06-15T11:12:38.737636Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-eval" trial=["postgres"] result=Ok(()) +2026-06-15T11:12:38.737673Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-mir" trial=["reify"] +2026-06-15T11:12:38.737636Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-eval" trial=["postgres"] result=Ok(()) +2026-06-15T11:12:38.737927Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-mir" trial=["reify"] +2026-06-15T11:12:38.739652Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-mir" trial=["reify"] result=Ok(()) +2026-06-15T11:12:38.739668Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-mir" trial=["reify"] +2026-06-15T11:12:38.741160Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-mir" trial=["reify"] result=Ok(()) +2026-06-15T11:12:38.741178Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-mir" trial=["reify"] +2026-06-15T11:12:38.742799Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-mir" trial=["reify"] result=Ok(()) +2026-06-15T11:12:38.742810Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-mir" trial=["reify"] +2026-06-15T11:12:38.743943Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-mir" trial=["reify"] result=Ok(()) +2026-06-15T11:12:38.743955Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["reify"] +2026-06-15T11:12:38.745094Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["reify"] result=Err(Expected trial to pass, but it failed +├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:390:24 +╰╴1 additional opaque attachment) +2026-06-15T11:12:38.745136Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["reify"] +2026-06-15T11:12:38.745620Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "specialization"] result=Ok(()) +2026-06-15T11:12:38.745647Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "specialization"] +2026-06-15T11:12:38.746217Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["reify"] result=Ok(()) +2026-06-15T11:12:38.746227Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["reify"] +2026-06-15T11:12:38.747395Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "specialization"] result=Ok(()) +2026-06-15T11:12:38.747411Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "specialization"] +2026-06-15T11:12:38.747434Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-eval" trial=["postgres"] result=Ok(()) +2026-06-15T11:12:38.747454Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-eval" trial=["postgres"] +2026-06-15T11:12:38.747395Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["reify"] result=Ok(()) +2026-06-15T11:12:38.747513Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["reify"] +2026-06-15T11:12:38.752709Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-eval" trial=["postgres"] result=Ok(()) +2026-06-15T11:12:38.752740Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "specialization"] +2026-06-15T11:12:38.753349Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["reify"] result=Ok(()) +2026-06-15T11:12:38.753436Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["reify"] +2026-06-15T11:12:38.754204Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-eval" trial=["postgres"] result=Ok(()) +2026-06-15T11:12:38.754229Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-mir" trial=["reify"] +2026-06-15T11:12:38.754585Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-mir" trial=["reify"] result=Ok(()) +2026-06-15T11:12:38.754606Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-mir" trial=["reify"] +2026-06-15T11:12:38.754776Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "specialization"] result=Ok(()) +2026-06-15T11:12:38.754790Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "thunking"] +2026-06-15T11:12:38.755034Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "specialization"] result=Ok(()) +2026-06-15T11:12:38.755054Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "graph-hoisting"] +2026-06-15T11:12:38.755338Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["reify"] result=Ok(()) +2026-06-15T11:12:38.755388Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "graph-hoisting"] +2026-06-15T11:12:38.755994Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "thunking"] result=Ok(()) +2026-06-15T11:12:38.756006Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "thunking"] +2026-06-15T11:12:38.756092Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-mir" trial=["reify"] result=Ok(()) +2026-06-15T11:12:38.756103Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-mir" trial=["reify"] +2026-06-15T11:12:38.756145Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-mir" trial=["reify"] result=Ok(()) +2026-06-15T11:12:38.756160Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-mir" trial=["reify"] +2026-06-15T11:12:38.757623Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-mir" trial=["reify"] result=Ok(()) +2026-06-15T11:12:38.757637Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-mir" trial=["reify"] +2026-06-15T11:12:38.757954Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-mir" trial=["reify"] result=Ok(()) +2026-06-15T11:12:38.757968Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-mir" trial=["reify"] +2026-06-15T11:12:38.757968Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "thunking"] result=Ok(()) +2026-06-15T11:12:38.758045Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "thunking"] +2026-06-15T11:12:38.759282Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-mir" trial=["reify"] result=Err(Expected trial to pass, but it failed +├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:390:24 +╰╴1 additional opaque attachment) +2026-06-15T11:12:38.759325Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-mir" trial=["reify"] +2026-06-15T11:12:38.759395Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-mir" trial=["reify"] result=Ok(()) +2026-06-15T11:12:38.759409Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-mir" trial=["reify"] +2026-06-15T11:12:38.759534Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "thunking"] result=Ok(()) +2026-06-15T11:12:38.759545Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "thunking"] +2026-06-15T11:12:38.761044Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "thunking"] result=Ok(()) +2026-06-15T11:12:38.761059Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-mir" trial=["reify"] result=Ok(()) +2026-06-15T11:12:38.761080Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "name-mangler"] +2026-06-15T11:12:38.762328Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-mir" trial=["reify"] result=Ok(()) +2026-06-15T11:12:38.762343Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-mir" trial=["reify"] +2026-06-15T11:12:38.761064Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "graph-hoisting"] +2026-06-15T11:12:38.765652Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-eval" trial=["postgres"] result=Ok(()) +2026-06-15T11:12:38.765673Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "graph-hoisting"] +2026-06-15T11:12:38.766185Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "name-mangler"] result=Err(Expected trial to pass, but it failed +├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:390:24 +╰╴1 additional opaque attachment) +2026-06-15T11:12:38.768751Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "graph-hoisting"] result=Ok(()) +2026-06-15T11:12:38.768781Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "graph-hoisting"] +2026-06-15T11:12:38.770006Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "name-mangler"] +2026-06-15T11:12:38.771869Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "name-mangler"] result=Ok(()) +2026-06-15T11:12:38.771896Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "name-mangler"] +2026-06-15T11:12:38.776160Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "name-mangler"] result=Err(Expected trial to pass, but it failed +├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:390:24 +╰╴1 additional opaque attachment) +2026-06-15T11:12:38.776230Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "name-mangler"] +2026-06-15T11:12:38.777492Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "name-mangler"] result=Err(Expected trial to pass, but it failed +├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:390:24 +╰╴1 additional opaque attachment) +2026-06-15T11:12:38.777521Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "name-mangler"] +2026-06-15T11:12:38.780694Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "specialization"] result=Ok(()) +2026-06-15T11:12:38.780716Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-mir" trial=["reify"] +2026-06-15T11:12:38.782154Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-mir" trial=["reify"] result=Ok(()) +2026-06-15T11:12:38.782162Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-mir" trial=["reify"] +2026-06-15T11:12:38.782930Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "name-mangler"] result=Ok(()) +2026-06-15T11:12:38.782963Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-mir" trial=["reify"] +2026-06-15T11:12:38.783281Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-mir" trial=["reify"] result=Ok(()) +2026-06-15T11:12:38.783295Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "graph-hoisting"] +2026-06-15T11:12:38.785176Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-mir" trial=["reify"] result=Ok(()) +2026-06-15T11:12:38.785199Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-mir" trial=["reify"] +2026-06-15T11:12:38.787210Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-mir" trial=["reify"] result=Ok(()) +2026-06-15T11:12:38.787238Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "graph-hoisting"] +2026-06-15T11:12:38.788956Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-eval" trial=["postgres"] result=Ok(()) +2026-06-15T11:12:38.788976Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "name-mangler"] +2026-06-15T11:12:38.790226Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "name-mangler"] result=Err(Expected trial to pass, but it failed +├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:390:24 +╰╴1 additional opaque attachment) +2026-06-15T11:12:38.790278Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "graph-hoisting"] +2026-06-15T11:12:38.792121Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "graph-hoisting"] result=Ok(()) +2026-06-15T11:12:38.796829Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-eval" trial=["postgres"] result=Ok(()) +2026-06-15T11:12:38.799285Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "graph-hoisting"] result=Ok(()) +2026-06-15T11:12:38.799594Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "graph-hoisting"] result=Ok(()) +2026-06-15T11:12:38.801740Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-eval" trial=["postgres"] result=Ok(()) +2026-06-15T11:12:38.812871Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "graph-hoisting"] result=Ok(()) +2026-06-15T11:12:38.816183Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "graph-hoisting"] result=Ok(()) +2026-06-15T11:12:38.829313Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "graph-hoisting"] result=Ok(()) +2026-06-15T11:12:38.831402Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-eval" trial=["postgres"] result=Ok(()) +2026-06-15T11:12:38.844445Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "graph-hoisting"] result=Ok(()) +2026-06-15T11:12:38.845257Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-mir" trial=["reify"] result=Ok(()) +2026-06-15T11:12:38.861509Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "graph-hoisting"] result=Ok(()) +2026-06-15T11:12:39.277419Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-mir" trial=["pass", "inst_simplify"] result=Ok(()) +2026-06-15T11:12:39.331580Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-mir" trial=["pass", "dse"] result=Ok(()) +2026-06-15T11:12:39.345206Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-mir" trial=["pass", "cfg_simplify"] result=Ok(()) +2026-06-15T11:12:39.546104Z  INFO run{namespace="reify" name="nested-if"}: hashql_compiletest::suite::mir_reify: time taken to generate diagram: 1.082437583s +2026-06-15T11:12:39.546460Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-mir" trial=["reify"] result=Ok(()) +2026-06-15T11:12:39.662257Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-mir" trial=["pass", "forward_substitution"] result=Ok(()) +2026-06-15T11:12:39.662280Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-mir" trial=["pass", "forward_substitution"] +2026-06-15T11:12:39.664519Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-mir" trial=["pass", "forward_substitution"] result=Ok(()) +2026-06-15T11:12:39.664537Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-mir" trial=["pass", "forward_substitution"] +2026-06-15T11:12:39.666354Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-mir" trial=["pass", "forward_substitution"] result=Ok(()) +2026-06-15T11:12:39.666374Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-mir" trial=["pass", "forward_substitution"] +2026-06-15T11:12:39.668496Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-mir" trial=["pass", "forward_substitution"] result=Ok(()) +2026-06-15T11:12:43.973382Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-mir" trial=["pass", "post_inline"] result=Ok(()) +[FAIL] hashql-ast::lower::name-mangler::diverging +[FAIL] hashql-ast::lower::name-mangler::path +[FAIL] hashql-ast::lower::name-mangler::newtype +[FAIL] hashql-ast::lower::name-mangler::fn-args +[FAIL] hashql-ast::lower::expander::special-form-expander::fn-generics-tuple +[FAIL] hashql-ast::lower::name-mangler::type-generics-nested +[FAIL] hashql-ast::lower::name-mangler::type-generics-interdependent-generics +[FAIL] hashql-ast::lower::name-mangler::newtype-generics +[PASS] hashql-ast::lower::expander::import-resolver::closure-generic-not-resolved +[PASS] hashql-ast::lower::expander::import-resolver::universe-ambiguity-resolution +[PASS] hashql-ast::lower::expander::special-form-expander::let-4 +[PASS] hashql-ast::lower::name-mangler::fn-types-of-ret +[FAIL] hashql-ast::lower::sanitizer::special-form-value +[PASS] hashql-hir::lower::thunking::nested-call +[PASS] hashql-ast::lower::name-mangler::simple +[PASS] hashql-ast::lower::name-mangler::fn-types-of-args +[FAIL] hashql-ast::lower::expander::import-resolver::rollback +[FAIL] hashql-ast::lower::expander::special-form-expander::newtype-4 +[FAIL] hashql-ast::lower::expander::import-resolver::continue::unresolved-type +[PASS] hashql-ast::lower::expander::import-resolver::nested-resolution +[PASS] hashql-ast::lower::name-mangler::overwrite +[FAIL] hashql-ast::lower::expander::special-form-expander::type-expr-tuple +[PASS] hashql-mir::pass::inst_simplify::identity-and-true +[PASS] hashql-mir::pass::inst_simplify::const-fold-ne +[PASS] hashql-ast::lower::name-mangler::let +[PASS] hashql-hir::lower::thunking::return-primitive +[PASS] hashql-mir::pass::cfg_simplify::closure-with-const-branch +[PASS] hashql-hir::lower::inference::intrinsics::unrelated +[FAIL] hashql-ast::lower::sanitizer::special-form-type-position +[PASS] hashql-ast::lower::type-extractor::definition::contractive-union +[PASS] hashql-mir::pass::post_inline::closure-env-cleanup +[PASS] hashql-ast::lower::expander::import-resolver::local-binding-recursive-value +[FAIL] hashql-ast::lower::name-mangler::fn-types +[PASS] hashql-ast::lower::expander::import-resolver::use-shadowing-let +[PASS] hashql-ast::lower::expander::import-resolver::closure-mixed-resolution +[FAIL] hashql-ast::lower::expander::special-form-expander::use-glob-not-ident +[FAIL] hashql-ast::lower::name-mangler::type +[FAIL] hashql-ast::lower::expander::special-form-expander::use-tuple +[PASS] hashql-mir::pass::inst_simplify::chained-const-fold +[PASS] hashql-ast::lower::type-extractor::definition::translation-intersection +[PASS] hashql-hir::lower::inference::literal +[PASS] hashql-hir::lower::normalization::binary-operation-left +[PASS] hashql-mir::pass::inst_simplify::identical-operand-eq +[FAIL] hashql-ast::lower::expander::import-resolver::continue::unresolved-value +[PASS] hashql-ast::lower::expander::import-resolver::local-binding-value +[PASS] hashql-ast::lower::expander::import-resolver::use-shadowing-use +[PASS] hashql-ast::lower::name-mangler::type-generics +[FAIL] hashql-ast::lower::expander::import-resolver::generic-arguments-in-final-segment +[PASS] hashql-mir::reify::closure-captured-var +[FAIL] hashql-ast::lower::sanitizer::constraint +[PASS] hashql-ast::lower::name-mangler::overwrite-body +[PASS] hashql-mir::pass::pre_inline::thunk-with-dead-code +[FAIL] hashql-ast::lower::expander::special-form-expander::as-3 +[FAIL] hashql-ast::lower::expander::special-form-expander::let-argument-not-ident +[PASS] hashql-mir::pass::inst_simplify::const-fold-gt +[PASS] hashql-ast::lower::type-extractor::definition::translation-tuple +[PASS] hashql-mir::pass::inst_simplify::const-propagation-locals +[PASS] hashql-ast::lower::expander::import-resolver::local-binding-recursive-type +[PASS] hashql-hir::lower::inference::tuple +[PASS] hashql-ast::lower::expander::import-resolver::generic-constraints.newtype +[FAIL] hashql-ast::lower::expander::special-form-expander::type-expr-call-union +[PASS] hashql-hir::lower::normalization::let-nested +[FAIL] hashql-ast::lower::expander::import-resolver::unresolver-variable +[PASS] hashql-mir::reify::dict-index +[PASS] hashql-mir::pass::pre_inline::nested-if-constant +[PASS] hashql-mir::pass::pre_inline::nested-let-cleanup +[FAIL] hashql-ast::lower::expander::import-resolver::continue::use-not-found +[PASS] hashql-mir::pass::forward_substitution::param-const-agree +[PASS] hashql-mir::pass::inst_simplify::identical-operand-lte +[FAIL] hashql-ast::lower::expander::special-form-expander::type-struct-has-type +[PASS] hashql-ast::lower::type-extractor::definition::result +[PASS] hashql-ast::lower::expander::import-resolver::basic-glob-import +[PASS] hashql-mir::pass::inst_simplify::annihilator-or-true +[FAIL] hashql-ast::lower::expander::special-form-expander::input-3 +[PASS] hashql-ast::lower::expander::import-resolver::local-binding-type +[PASS] hashql-ast::lower::expander::import-resolver::multiple-named-imports +[PASS] hashql-mir::reify::ctor +[PASS] hashql-mir::pass::pre_inline::inst-simplify-with-propagation +[PASS] hashql-hir::lower::normalization::closure +[PASS] hashql-mir::pass::forward_substitution::chained-projection +[PASS] hashql-mir::pass::inst_simplify::identity-or-false +[FAIL] hashql-ast::lower::expander::import-resolver::continue::unresolved-nested +[PASS] hashql-mir::pass::pre_inline::chain-simplification +[FAIL] hashql-ast::lower::expander::special-form-expander::access-field-literal-boolean +[FAIL] hashql-ast::lower::expander::special-form-expander::index-2 +[FAIL] hashql-hir::lower::inference::ctor-bounded-invalid +[PASS] hashql-ast::lower::type-extractor::definition::unused-generic-parameter +[PASS] hashql-ast::lower::expander::import-resolver::newtype-scope +[PASS] hashql-mir::pass::inline::too-large-to-inline +[FAIL] hashql-ast::lower::expander::import-resolver::generic-argument-absolute-path +[PASS] hashql-mir::pass::inline::closure-inline +[PASS] hashql-mir::pass::pre_inline::dead-code-after-propagation +[PASS] hashql-mir::pass::inst_simplify::const-fold-lte +[PASS] hashql-mir::reify::nested-let +[PASS] hashql-hir::lower::normalization::field-access +[FAIL] hashql-ast::lower::expander::special-form-expander::fn-4 +[PASS] hashql-mir::pass::pre_inline::basic-constant-folding +[FAIL] hashql-ast::lower::expander::import-resolver::item-not-found +[FAIL] hashql-ast::lower::expander::special-form-expander::let-collect-all-errors +[PASS] hashql-mir::pass::inst_simplify::identical-operand-gte +[PASS] hashql-ast::lower::type-extractor::definition::generics-with-params +[PASS] hashql-hir::lower::inference::if-test +[PASS] hashql-ast::lower::expander::import-resolver::substitution +[PASS] hashql-mir::pass::inline::simple-ctor +[FAIL] hashql-ast::lower::expander::special-form-expander::use-glob +[PASS] hashql-mir::pass::inst_simplify::identical-operand-lt +[PASS] hashql-mir::pass::dse::used-local-preserved +[FAIL] hashql-ast::lower::expander::special-form-expander::type-collect-all-errors +[PASS] hashql-mir::pass::inst_simplify::const-fold-gte +[PASS] hashql-hir::lower::normalization::dict +[PASS] hashql-ast::lower::type-extractor::definition::non-contractive-type +[PASS] hashql-hir::lower::inference::collect-variable +[PASS] hashql-mir::reify::ctor-cached-closure +[PASS] hashql-mir::pass::pre_inline::closure-with-dead-branch +[FAIL] hashql-ast::lower::expander::import-resolver::generic-argument-use-path +[FAIL] hashql-ast::lower::expander::import-resolver::glob-not-found +[FAIL] hashql-ast::lower::expander::special-form-expander::fn-generics-struct-literal +[PASS] hashql-ast::lower::expander::import-resolver::path-normalization +[FAIL] hashql-ast::lower::expander::special-form-expander::use-literal +[PASS] hashql-hir::lower::ctor::local +[FAIL] hashql-ast::lower::expander::special-form-expander::access-field-literal-valid +[PASS] hashql-hir::lower::normalization::if-then +[PASS] hashql-mir::pass::dse::nested-tuple-projection +[PASS] hashql-ast::lower::type-extractor::definition::dict-parameter-count-mismatch-too-many +[FAIL] hashql-ast::lower::expander::special-form-expander::use-struct +[PASS] hashql-ast::lower::expander::import-resolver::basic-relative-import +[FAIL] hashql-ast::lower::expander::import-resolver::module-not-found +[PASS] hashql-mir::pass::inst_simplify::const-fold-eq +[PASS] hashql-mir::reify::closure +[FAIL] hashql-hir::lower::inference::closure-call-unconstrained-direct +[PASS] hashql-ast::lower::expander::import-resolver::shadowed-imports +[FAIL] hashql-ast::lower::expander::special-form-expander::index-1 +[PASS] hashql-ast::lower::type-extractor::definition::locals-generic-params +[PASS] hashql-ast::lower::expander::import-resolver::basic-renamed-import +[FAIL] hashql-hir::lower::ctor::explicit-type +[PASS] hashql-ast::lower::expander::import-resolver::complex-path-resolution +[FAIL] hashql-ast::lower::expander::special-form-expander::unknown-special-form-typo +[PASS] hashql-hir::lower::normalization::binary-operation +[FAIL] hashql-ast::lower::expander::special-form-expander::fn-generics-tuple-literal +[PASS] hashql-mir::pass::dse::live-in-branch +[PASS] hashql-hir::lower::inference::dict-multi-value +[PASS] hashql-mir::reify::extermal-module-export +[FAIL] hashql-ast::lower::expander::special-form-expander::if-1 +[PASS] hashql-ast::lower::expander::import-resolver::shadowed-prelude +[PASS] hashql-ast::lower::expander::special-form-expander::newtype-3 +[PASS] hashql-ast::lower::expander::import-resolver::closure-param-not-resolved +[PASS] hashql-ast::lower::type-extractor::definition::path-global-resolution +[PASS] hashql-hir::lower::ctor::null +[PASS] hashql-mir::pass::inst_simplify::annihilator-and-false +[PASS] hashql-hir::lower::normalization::binding-value +[PASS] hashql-hir::lower::inference::call +[PASS] hashql-ast::lower::expander::import-resolver::closure-complex-return-type +[FAIL] hashql-ast::lower::expander::special-form-expander::type-expr-struct +[FAIL] hashql-ast::lower::expander::special-form-expander::type-2 +[FAIL] hashql-ast::lower::expander::special-form-expander::access-2 +[FAIL] hashql-ast::lower::expander::special-form-expander::type-expr-call-arbitrary +[PASS] hashql-mir::reify::tuple-index +[PASS] hashql-ast::lower::type-extractor::definition::list-parameter-count-mismatch-too-many +[PASS] hashql-hir::lower::ctor::absolute +[PASS] hashql-mir::pass::administrative_reduction::thunk-aggregate +[PASS] hashql-hir::lower::normalization::index-access +[PASS] hashql-ast::lower::expander::import-resolver::basic-absolute-imports +[PASS] hashql-hir::lower::inference::struct +[FAIL] hashql-ast::lower::expander::special-form-expander::type-tuple-has-type +[FAIL] hashql-ast::lower::expander::special-form-expander::type-generic-constraint +[FAIL] hashql-ast::lower::expander::special-form-expander::not-enough-segments +[FAIL] hashql-ast::lower::expander::special-form-expander::as-1 +[FAIL] hashql-ast::lower::expander::special-form-expander::use-struct-literal +[PASS] hashql-ast::lower::type-extractor::definition::env-type-interning +[PASS] hashql-ast::lower::expander::import-resolver::complex-nested-type-parameters +[FAIL] hashql-ast::lower::expander::special-form-expander::use-glob-not-star +[PASS] hashql-hir::lower::normalization::list +[PASS] hashql-hir::lower::inference::list-empty +[FAIL] hashql-ast::lower::expander::special-form-expander::use-tuple-literal +[PASS] hashql-ast::lower::type-extractor::definition::path-local-resolution +[FAIL] hashql-hir::lower::ctor::too-many-arguments +[PASS] hashql-mir::pass::administrative_reduction::closure-chain +[FAIL] hashql-ast::lower::expander::special-form-expander::generics +[FAIL] hashql-ast::lower::expander::special-form-expander::use-3 +[PASS] hashql-ast::lower::expander::import-resolver::prelude +[FAIL] hashql-ast::lower::expander::special-form-expander::let-argument-not-path +[PASS] hashql-hir::lower::normalization::input +[PASS] hashql-hir::lower::inference::qualified-variable +[FAIL] hashql-ast::lower::expander::special-form-expander::fn-params-type +[PASS] hashql-hir::lower::ctor::imported-item-not-a-constructor +[PASS] hashql-ast::lower::type-extractor::definition::translation-struct +[FAIL] hashql-ast::lower::expander::special-form-expander::input-1 +[FAIL] hashql-ast::lower::expander::special-form-expander::use-2 +[PASS] hashql-ast::lower::expander::import-resolver::regression-generic-arguments-identifier +[FAIL] hashql-ast::lower::expander::special-form-expander::input-2 +[PASS] hashql-mir::pass::administrative_reduction::forwarding-closure +[PASS] hashql-hir::lower::normalization::type-assertion-erase +[FAIL] hashql-ast::lower::expander::special-form-expander::type-generic-relative-path +[PASS] hashql-ast::lower::type-extractor::definition::global-generic-constraint-too-many +[FAIL] hashql-hir::lower::ctor::not-enough-arguments +[PASS] hashql-ast::lower::expander::import-resolver::generic-constraints-type +[FAIL] hashql-ast::lower::expander::special-form-expander::use-struct-type +[FAIL] hashql-ast::lower::expander::special-form-expander::let-2 +[FAIL] hashql-ast::lower::expander::special-form-expander::type-unknown +[PASS] hashql-hir::lower::normalization::binding-body +[PASS] hashql-mir::pass::administrative_reduction::non-reducible-computation +[FAIL] hashql-ast::lower::expander::special-form-expander::fn-generics-tuple-path +[PASS] hashql-ast::lower::type-extractor::definition::constraints-invalid-location +[FAIL] hashql-ast::lower::expander::special-form-expander::type-generic-duplicate +[PASS] hashql-ast::lower::expander::special-form-expander::type-generic +[FAIL] hashql-ast::lower::expander::special-form-expander::access-field-index-out-of-bounds +[FAIL] hashql-hir::lower::inference::bind-arguments-explicit +[PASS] hashql-mir::pass::administrative_reduction::thunk-simple +[PASS] hashql-hir::lower::normalization::binary-operation-right +[FAIL] hashql-ast::lower::expander::special-form-expander::newtype-2 +[PASS] hashql-ast::lower::type-extractor::definition::global-generic-constraint-not-enough +[PASS] hashql-ast::lower::expander::special-form-expander::if-2 +[FAIL] hashql-ast::lower::expander::special-form-expander::type-generic-struct +[PASS] hashql-hir::lower::inference::unsatisfiable-upper-constraint +[FAIL] hashql-ast::lower::expander::special-form-expander::type-generic-absolute-path +[FAIL] hashql-ast::lower::expander::special-form-expander::type-4 +[FAIL] hashql-ast::lower::expander::special-form-expander::fn-generics-literal +[PASS] hashql-mir::pass::administrative_reduction::multiple-thunks +[PASS] hashql-ast::lower::type-extractor::definition::duplicate-fields +[FAIL] hashql-ast::lower::expander::special-form-expander::fn-5 +[PASS] hashql-hir::lower::inference::if +[FAIL] hashql-ast::lower::expander::special-form-expander::fn-generics-struct-type +[FAIL] hashql-ast::lower::expander::special-form-expander::access-field-literal-string +[FAIL] hashql-ast::lower::expander::special-form-expander::fn-generics-tuple-type +[PASS] hashql-ast::lower::type-extractor::definition::dict-parameter-count-mismatch +[FAIL] hashql-ast::lower::expander::special-form-expander::index-3 +[FAIL] hashql-ast::lower::expander::special-form-expander::type-expr-call-not-path +[PASS] hashql-ast::lower::expander::special-form-expander::if-3 +[PASS] hashql-hir::lower::inference::closure-constrained +[FAIL] hashql-ast::lower::expander::special-form-expander::fn-generics-struct +[PASS] hashql-ast::lower::type-extractor::definition::generics-apply-params +[FAIL] hashql-ast::lower::expander::special-form-expander::fn-params-tuple +[PASS] hashql-mir::pass::post_inline::cascading-simplification +[FAIL] hashql-ast::lower::expander::special-form-expander::use-tuple-path +[FAIL] hashql-ast::lower::expander::special-form-expander::labeled-argument +[PASS] hashql-ast::lower::type-extractor::definition::locals-type-extraction +[FAIL] hashql-ast::lower::expander::special-form-expander::type-generic-generic-ident +[FAIL] hashql-ast::lower::expander::special-form-expander::unknown-special-form +[PASS] hashql-hir::lower::inference::ctor +[FAIL] hashql-ast::lower::expander::special-form-expander::type-expr-invalid +[PASS] hashql-hir::lower::normalization::graph-read-head +[FAIL] hashql-ast::lower::expander::pre-expansion-name-resolver::resolve-symbol +[FAIL] hashql-ast::lower::expander::special-form-expander::use-tuple-type +[FAIL] hashql-ast::lower::expander::special-form-expander::type-3 +[PASS] hashql-ast::lower::type-extractor::definition::generics-param-count-mismatch +[PASS] hashql-ast::lower::expander::special-form-expander::let-3 +[FAIL] hashql-ast::lower::expander::pre-expansion-name-resolver::type-4 +[FAIL] hashql-ast::lower::expander::special-form-expander::let-5 +[PASS] hashql-hir::lower::normalization::tuple +[PASS] hashql-mir::pass::post_inline::nested-branch-elimination +[PASS] hashql-hir::lower::inference::field-access +[FAIL] hashql-ast::lower::expander::pre-expansion-name-resolver::re-assign-prelude +[PASS] hashql-mir::pass::inst_simplify::const-fold-lt +[FAIL] hashql-ast::lower::expander::special-form-expander::too-many-segments +[PASS] hashql-ast::lower::type-extractor::graph-pipeline-inferred-closure +[FAIL] hashql-ast::lower::expander::pre-expansion-name-resolver::alias-symbol +[FAIL] hashql-ast::lower::expander::special-form-expander::use-4 +[FAIL] hashql-ast::lower::expander::special-form-expander::type-expr-call-intersection +[PASS] hashql-hir::lower::normalization::if-test +[FAIL] hashql-ast::lower::expander::pre-expansion-name-resolver::newtype-4 +[PASS] hashql-hir::lower::inference::input-default-invalid +[PASS] hashql-mir::pass::post_inline::dead-code-from-inline +[PASS] hashql-mir::pass::inst_simplify::identical-operand-ne +[PASS] hashql-ast::lower::type-extractor::let-binding-type +[FAIL] hashql-ast::lower::expander::special-form-expander::fn-generics-struct-underscore +[PASS] hashql-ast::lower::type-extractor::closure +[FAIL] hashql-ast::lower::expander::pre-expansion-name-resolver::let-4-alias +[FAIL] hashql-ast::lower::expander::pre-expansion-name-resolver::re-assign +[PASS] hashql-hir::lower::normalization::nested-and-or +[PASS] hashql-hir::lower::inference::local-variable +[FAIL] hashql-ast::lower::expander::special-form-expander::use-struct-path +[FAIL] hashql-ast::lower::expander::pre-expansion-name-resolver::resolve-generics +[PASS] hashql-mir::pass::post_inline::constant-propagation-after-inline +[FAIL] hashql-ast::lower::type-extractor::generic-type-resolution +[FAIL] hashql-ast::lower::expander::special-form-expander::type-infer +[PASS] hashql-ast::lower::type-extractor::union-type +[PASS] hashql-hir::lower::checking::closure-not-generic +[FAIL] hashql-ast::lower::expander::pre-expansion-name-resolver::let-absolute +[PASS] hashql-hir::lower::normalization::call +[FAIL] hashql-ast::lower::expander::pre-expansion-name-resolver::invalid-let-expr +[FAIL] hashql-ast::lower::expander::special-form-expander::if-4 +[PASS] hashql-hir::lower::inference::dict-multi-key +[FAIL] hashql-ast::lower::expander::special-form-expander::as-2 +[PASS] hashql-ast::lower::type-extractor::closure-unused-generic +[PASS] hashql-ast::lower::type-extractor::closure-generics +[FAIL] hashql-ast::lower::expander::pre-expansion-name-resolver::nested-let +[PASS] hashql-hir::lower::checking::input-default +[FAIL] hashql-ast::lower::expander::pre-expansion-name-resolver::let-3 +[PASS] hashql-hir::lower::normalization::if-else +[FAIL] hashql-ast::lower::expander::special-form-expander::type-never +[PASS] hashql-hir::lower::inference::dict-single +[FAIL] hashql-ast::lower::expander::pre-expansion-name-resolver::absolute-path +[PASS] hashql-ast::lower::type-extractor::global-type-resolution +[FAIL] hashql-ast::lower::expander::special-form-expander::access-field-literal-type-annotation +[PASS] hashql-hir::lower::normalization::struct +[FAIL] hashql-ast::lower::expander::pre-expansion-name-resolver::re-assign-prelude-diverging +[PASS] hashql-ast::lower::expander::special-form-expander::does-not-touch-non-kernel +[FAIL] hashql-hir::lower::inference::bind-arguments +[PASS] hashql-ast::lower::expander::pre-expansion-name-resolver::alias-absolute-path +[PASS] hashql-ast::lower::type-extractor::nested-type-nodes +[PASS] hashql-hir::lower::alias-replacement::replace-alias +[FAIL] hashql-ast::lower::expander::pre-expansion-name-resolver::let-4 +[FAIL] hashql-ast::lower::expander::special-form-expander::access-1 +[PASS] hashql-hir::lower::inference::closure-unconstrained +[PASS] hashql-ast::lower::type-extractor::definition::translation-infer +[FAIL] hashql-ast::lower::expander::pre-expansion-name-resolver::newtype-3-alias +[PASS] hashql-hir::lower::alias-replacement::immediate-usage +[FAIL] hashql-ast::lower::expander::pre-expansion-name-resolver::restoration-bindings +[PASS] hashql-hir::lower::inference::dict-key-var +[PASS] hashql-ast::lower::type-extractor::definition::non-contractive-self +[FAIL] hashql-ast::lower::expander::pre-expansion-name-resolver::type-3-alias +[FAIL] hashql-ast::lower::expander::pre-expansion-name-resolver::let-ident-generic +[FAIL] hashql-ast::lower::expander::special-form-expander::fn-generics-duplicates +[FAIL] hashql-hir::lower::alias-replacement::generic-reassignment +[PASS] hashql-hir::lower::inference::dict-empty +[FAIL] hashql-ast::lower::expander::pre-expansion-name-resolver::multi-segment-resolution +[PASS] hashql-ast::lower::type-extractor::definition::identity-nominal +[FAIL] hashql-ast::lower::expander::pre-expansion-name-resolver::type-3 +[PASS] hashql-ast::lower::type-extractor::definition::intrinsic-dict-translation +[FAIL] hashql-ast::lower::expander::pre-expansion-name-resolver::let-3-alias +[PASS] hashql-hir::lower::alias-replacement::complex-mixed +[PASS] hashql-ast::lower::node-renumberer::nested +[FAIL] hashql-ast::lower::expander::special-form-expander::access-3 +[PASS] hashql-hir::lower::inference::index-access +[FAIL] hashql-ast::lower::type-extractor::definition::constraints-parsing +[FAIL] hashql-ast::lower::expander::pre-expansion-name-resolver::newtype-3 +[PASS] hashql-hir::lower::alias-replacement::preserve-non-alias +[PASS] hashql-ast::lower::node-renumberer::diverging +[FAIL] hashql-ast::lower::expander::special-form-expander::input-4 +[PASS] hashql-ast::lower::type-extractor::definition::locals-generic-params-struct +[PASS] hashql-hir::lower::inference::input +[PASS] hashql-hir::lower::inference::closure-integer +[PASS] hashql-hir::lower::alias-replacement::unused-alias +[PASS] hashql-ast::lower::node-renumberer::basic +[PASS] hashql-ast::lower::type-extractor::definition::infer-with-arguments +[FAIL] hashql-hir::lower::inference::infer-argument +[PASS] hashql-hir::lower::alias-replacement::nested-aliases +[PASS] hashql-ast::lower::type-extractor::local-type-resolution +[FAIL] hashql-ast::lower::expander::special-form-expander::newtype-collect-all-errors +[PASS] hashql-hir::lower::inference::closure-call-unconstrained +[PASS] hashql-ast::lower::type-extractor::definition::intrinsic-list-translation +[PASS] hashql-hir::lower::inference::as +[PASS] hashql-ast::lower::type-extractor::complex-types +[PASS] hashql-hir::lower::alias-replacement::multiple-aliases +[PASS] hashql-hir::lower::inference::list-single +[PASS] hashql-ast::lower::type-extractor::definition::translation-union +[PASS] hashql-hir::lower::inference::input-default +[PASS] hashql-hir::lower::alias-replacement::qualified-variable-alias +[PASS] hashql-ast::lower::type-extractor::definition::list-parameter-count-mismatch +[FAIL] hashql-ast::lower::expander::special-form-expander::fn-params-duplicates +[FAIL] hashql-hir::lower::alias-replacement::generics +[PASS] hashql-hir::lower::inference::let +[PASS] hashql-mir::pass::dse::simple-dead-local +[PASS] hashql-ast::lower::type-extractor::definition::identity-structural +[FAIL] hashql-ast::lower::expander::special-form-expander::newtype-constraints +[PASS] hashql-hir::lower::checking::field-access +[PASS] hashql-hir::lower::inference::list-multi +[PASS] hashql-ast::lower::type-extractor::definition::contractive-guarded +[PASS] hashql-mir::pass::cfg_simplify::diamond-cfg-no-merge +[PASS] hashql-hir::lower::inference::intrinsics::assignment +[FAIL] hashql-hir::lower::checking::dict +[FAIL] hashql-ast::lower::expander::special-form-expander::fn-3 +[PASS] hashql-hir::lower::checking::ctor +[PASS] hashql-mir::pass::cfg_simplify::const-if-false +[PASS] hashql-hir::lower::inference::intrinsics::re-assignment +[PASS] hashql-hir::lower::checking::if-non-boolean +[PASS] hashql-hir::lower::inference::intrinsics::simple +[PASS] hashql-hir::lower::checking::input-default-invalid +[PASS] hashql-mir::pass::cfg_simplify::cascade-switch-then-goto +[PASS] hashql-mir::pass::cfg_simplify::let-in-branch +[PASS] hashql-hir::lower::checking::minimal-graph +[PASS] hashql-hir::lower::checking::local-variable +[PASS] hashql-mir::pass::inline::excessive-depth +[PASS] hashql-hir::lower::checking::let +[PASS] hashql-mir::pass::cfg_simplify::const-nested-if +[PASS] hashql-hir::lower::checking::closure-invalid-return-type +[PASS] hashql-hir::lower::checking::call-invalid +[PASS] hashql-hir::lower::checking::type-assertion +[FAIL] hashql-hir::lower::checking::bind-arguments +[FAIL] hashql-hir::lower::checking::dict-empty +[PASS] hashql-hir::lower::checking::input-multiple +[PASS] hashql-hir::lower::checking::index-access +[PASS] hashql-hir::lower::checking::closure-unconstrained +[FAIL] hashql-hir::lower::checking::ctor-bounded +[FAIL] hashql-hir::lower::checking::list +[PASS] hashql-hir::lower::checking::qualified-variable +[PASS] hashql-hir::lower::checking::type-assertion-smaller +[PASS] hashql-hir::lower::checking::field-access-tuple +[PASS] hashql-hir::lower::checking::literal +[PASS] hashql-hir::lower::checking::closure-call-unconstrained +[FAIL] hashql-hir::lower::checking::tuple +[PASS] hashql-hir::lower::checking::input +[PASS] hashql-hir::lower::checking::if-simplify +[PASS] hashql-hir::lower::checking::type-assertion-unrelated +[FAIL] hashql-hir::lower::checking::ctor-bounded-invalid +[PASS] hashql-mir::pass::inline::filter-aggressive +[PASS] hashql-mir::pass::inst_simplify::identical-operand-gt +[PASS] hashql-eval::postgres::input-parameter-exists +[FAIL] hashql-hir::lower::checking::argument-count-mismatch +[PASS] hashql-mir::pass::data-dependency::input-no-deps +[FAIL] hashql-hir::lower::checking::closure-call-unconstrained-direct +[PASS] hashql-hir::reify::local-variable +[FAIL] hashql-hir::reify::variable-generics +[PASS] hashql-hir::lower::checking::call +[PASS] hashql-hir::reify::binding-type-assertion +[FAIL] hashql-hir::lower::checking::struct +[PASS] hashql-hir::reify::field +[FAIL] hashql-hir::lower::checking::list-empty +[PASS] hashql-hir::reify::closure-multiple-inputs +[PASS] hashql-hir::lower::checking::closure-call-constrained +[PASS] hashql-hir::reify::list +[PASS] hashql-hir::lower::checking::filter-graph +[PASS] hashql-hir::reify::input +[PASS] hashql-hir::reify::as +[PASS] hashql-hir::lower::checking::closure-constrained +[PASS] hashql-hir::reify::let-type-annotation +[PASS] hashql-hir::reify::input-default +[PASS] hashql-hir::reify::if-partial +[PASS] hashql-hir::reify::let +[FAIL] hashql-hir::reify::nested-expressions +[PASS] hashql-hir::reify::literal +[PASS] hashql-hir::reify::tuple +[PASS] hashql-hir::reify::call +[PASS] hashql-hir::reify::struct +[PASS] hashql-hir::reify::qualified-variable +[PASS] hashql-hir::reify::call-multiple-arguments +[PASS] hashql-hir::reify::underscore +[PASS] hashql-mir::pass::data-dependency::graph-read-filter +[PASS] hashql-eval::postgres::tuple-construction +[PASS] hashql-mir::pass::data-dependency::block-params +[PASS] hashql-mir::pass::data-dependency::deeply-nested-tuple +[PASS] hashql-eval::postgres::entity-uuid-equality +[PASS] hashql-mir::pass::data-dependency::mixed-projection-chain +[PASS] hashql-mir::pass::data-dependency::binary-operation +[PASS] hashql-mir::pass::data-dependency::function-apply +[PASS] hashql-mir::pass::data-dependency::nested-tuple-projection +[PASS] hashql-mir::pass::data-dependency::struct-projection +[PASS] hashql-mir::pass::data-dependency::comparison-operators +[PASS] hashql-mir::pass::data-dependency::list-construction +[PASS] hashql-mir::pass::data-dependency::multiple-uses +[PASS] hashql-mir::pass::data-dependency::tuple-projection +[PASS] hashql-mir::pass::data-dependency::graph-read-head +[PASS] hashql-mir::pass::data-dependency::function-multiple-args +[PASS] hashql-mir::pass::data-dependency::struct-construction +[PASS] hashql-mir::interpret::access-struct-through-opaque +[PASS] hashql-hir::lower::checking::collect-filter-graph +[PASS] hashql-mir::pass::cfg_simplify::mixed-const-runtime-if +[PASS] hashql-mir::pass::cfg_simplify::const-if-true +[PASS] hashql-eval::postgres::dict-construction +[PASS] hashql-hir::lower::specialization::filter-graph +[PASS] hashql-hir::lower::specialization::math +[PASS] hashql-eval::postgres::comparison-no-cast +[FAIL] hashql-hir::lower::specialization::collect-custom-collect +[PASS] hashql-mir::pass::inline::filter-with-ctor +[PASS] hashql-mir::pass::inline::heuristic-inline +[PASS] hashql-eval::postgres::multiple-filters +[PASS] hashql-mir::pass::inline::nested-ctor +[PASS] hashql-eval::postgres::constant-true-filter +[PASS] hashql-eval::postgres::entity-draft-id-equality +[PASS] hashql-eval::postgres::entity-web-id-equality +[PASS] hashql-mir::pass::data-dependency::closure-construction +[PASS] hashql-mir::pass::data-dependency::tuple-construction +[PASS] hashql-eval::postgres::logical-and-inputs +[PASS] hashql-eval::postgres::env-captured-variable +[PASS] hashql-hir::lower::specialization::complex +[PASS] hashql-hir::lower::specialization::unary +[PASS] hashql-hir::lower::graph-hoisting::double-hoist-deny +[PASS] hashql-eval::postgres::opaque-passthrough +[PASS] hashql-eval::postgres::input-parameter-load +[PASS] hashql-eval::postgres::mixed-sources-filter +[PASS] hashql-mir::reify::input-required +[PASS] hashql-mir::reify::if-else +[PASS] hashql-mir::reify::top-level-external-module +[PASS] hashql-mir::reify::empty-tuple +[FAIL] hashql-hir::reify::literal-type-annotation +[PASS] hashql-hir::lower::specialization::minimal-graph +[PASS] hashql-hir::reify::if +[PASS] hashql-hir::reify::index +[PASS] hashql-hir::lower::specialization::bool +[PASS] hashql-eval::postgres::entity-type-ids-lateral +[PASS] hashql-eval::postgres::struct-construction +[PASS] hashql-hir::reify::closure +[PASS] hashql-eval::postgres::entity-archived-check +[PASS] hashql-mir::reify::binary +[PASS] hashql-hir::lower::specialization::bits +[PASS] hashql-hir::lower::specialization::cmp +[PASS] hashql-hir::reify::dict +[PASS] hashql-hir::lower::thunking::return-local +[PASS] hashql-mir::reify::null-value-in-binary +[PASS] hashql-mir::reify::input-default +[PASS] hashql-mir::reify::list-index +[PASS] hashql-mir::reify::nested-tuple-index +[PASS] hashql-hir::lower::thunking::closure +[FAIL] hashql-mir::reify::monomorphized-closure +[PASS] hashql-mir::reify::ctor-empty +[PASS] hashql-hir::lower::thunking::dependent-call +[PASS] hashql-hir::lower::thunking::tuple-index +[PASS] hashql-mir::reify::null-value +[PASS] hashql-mir::reify::external-module +[PASS] hashql-eval::postgres::minimal-select-no-extra-joins +[FAIL] hashql-ast::lower::name-mangler::onion +[PASS] hashql-hir::lower::graph-hoisting::nested-boolean-expression +[PASS] hashql-ast::lower::name-mangler::type-generics-recursive +[FAIL] hashql-ast::lower::name-mangler::absolute-path +[FAIL] hashql-ast::lower::name-mangler::type-generics-constraints +[PASS] hashql-hir::lower::specialization::collect-filter-graph +[PASS] hashql-mir::reify::struct-index +[PASS] hashql-ast::lower::name-mangler::scopes-no-include +[PASS] hashql-mir::reify::literal +[PASS] hashql-mir::reify::reassign +[PASS] hashql-mir::reify::dict-computed-key +[PASS] hashql-eval::postgres::nested-if-input-branches +[FAIL] hashql-ast::lower::name-mangler::path-arguments +[PASS] hashql-hir::lower::graph-hoisting::no-hoist-closure +[PASS] hashql-eval::postgres::list-construction +[PASS] hashql-hir::lower::graph-hoisting::no-hoist-closure-inside-read +[PASS] hashql-hir::lower::graph-hoisting::hoist +[PASS] hashql-eval::postgres::let-binding-propagation +[PASS] hashql-hir::lower::graph-hoisting::hoist-inside-boundary +[PASS] hashql-hir::lower::graph-hoisting::sequential-filter +[PASS] hashql-hir::lower::graph-hoisting::nested-boolean-expression-outer-let +[PASS] hashql-eval::postgres::if-input-branches +[PASS] hashql-hir::lower::graph-hoisting::partial +[PASS] hashql-mir::reify::graph-read +[PASS] hashql-hir::lower::graph-hoisting::double-hoist +[PASS] hashql-mir::pass::inst_simplify::showcase +[PASS] hashql-mir::pass::dse::showcase +[PASS] hashql-mir::pass::cfg_simplify::dead-block-elimination +[PASS] hashql-mir::reify::nested-if +[PASS] hashql-mir::pass::forward_substitution::closure-env-capture +[PASS] hashql-mir::pass::forward_substitution::nested +[PASS] hashql-mir::pass::forward_substitution::tuple-projection +[PASS] hashql-mir::pass::forward_substitution::param-const-diverge +[PASS] hashql-mir::pass::post_inline::showcase + +═════════════════════════════ Test Results Summary ═════════════════════════════ + +Results: + ✓ Passed: 367 + ✗ Failed: 167 + Total: 534 + +Timing: + Elapsed: 5.54s + Throughput: 96.4 tests/sec + Avg/test: 28.14ms + +Phase Breakdown: + Run: 27.71ms avg ( 98.5%) + Parse: 95.24µs avg ( 0.3%) + Read: 43.10µs avg ( 0.2%) + Verify: 48.01µs avg ( 0.2%) + Assert: 127.46µs avg ( 0.5%) + Render: 47.43µs avg ( 0.2%) + +I/O Statistics: + Files read: 534 (134.2 KiB total) + Files written: 487 (1.0 MiB total) + +Slowest Tests: + 5.53s hashql-mir::pass::post_inline::showcase + 1.22s hashql-mir::pass::forward_substitution::closure-env-capture + 1.08s hashql-mir::reify::nested-if + 872.26ms hashql-mir::pass::dse::showcase + 837.09ms hashql-mir::pass::cfg_simplify::dead-block-elimination + +Failed Tests: + ✗ hashql-mir::reify::monomorphized-closure + ✗ hashql-hir::reify::literal-type-annotation + ✗ hashql-hir::reify::variable-generics + ✗ hashql-hir::reify::nested-expressions + ✗ hashql-hir::lower::specialization::collect-custom-collect + ✗ hashql-hir::lower::alias-replacement::generic-reassignment + ✗ hashql-hir::lower::alias-replacement::generics + ✗ hashql-hir::lower::ctor::explicit-type + ✗ hashql-hir::lower::ctor::too-many-arguments + ✗ hashql-hir::lower::ctor::not-enough-arguments + ✗ hashql-hir::lower::inference::bind-arguments-explicit + ✗ hashql-hir::lower::inference::bind-arguments + ✗ hashql-hir::lower::inference::infer-argument + ✗ hashql-hir::lower::inference::ctor-bounded-invalid + ✗ hashql-hir::lower::inference::closure-call-unconstrained-direct + ✗ hashql-hir::lower::checking::dict + ✗ hashql-hir::lower::checking::bind-arguments + ✗ hashql-hir::lower::checking::dict-empty + ✗ hashql-hir::lower::checking::list + ✗ hashql-hir::lower::checking::ctor-bounded + ✗ hashql-hir::lower::checking::tuple + ✗ hashql-hir::lower::checking::ctor-bounded-invalid + ✗ hashql-hir::lower::checking::argument-count-mismatch + ✗ hashql-hir::lower::checking::closure-call-unconstrained-direct + ✗ hashql-hir::lower::checking::struct + ✗ hashql-hir::lower::checking::list-empty + ✗ hashql-ast::lower::name-mangler::path-arguments + ✗ hashql-ast::lower::name-mangler::onion + ✗ hashql-ast::lower::name-mangler::absolute-path + ✗ hashql-ast::lower::name-mangler::type-generics-constraints + ✗ hashql-ast::lower::name-mangler::type-generics-nested + ✗ hashql-ast::lower::name-mangler::type + ✗ hashql-ast::lower::name-mangler::newtype + ✗ hashql-ast::lower::name-mangler::diverging + ✗ hashql-ast::lower::name-mangler::newtype-generics + ✗ hashql-ast::lower::name-mangler::fn-args + ✗ hashql-ast::lower::name-mangler::type-generics-interdependent-generics + ✗ hashql-ast::lower::name-mangler::path + ✗ hashql-ast::lower::name-mangler::fn-types + ✗ hashql-ast::lower::sanitizer::special-form-value + ✗ hashql-ast::lower::sanitizer::special-form-type-position + ✗ hashql-ast::lower::sanitizer::constraint + ✗ hashql-ast::lower::expander::import-resolver::generic-argument-absolute-path + ✗ hashql-ast::lower::expander::import-resolver::generic-argument-use-path + ✗ hashql-ast::lower::expander::import-resolver::module-not-found + ✗ hashql-ast::lower::expander::import-resolver::generic-arguments-in-final-segment + ✗ hashql-ast::lower::expander::import-resolver::unresolver-variable + ✗ hashql-ast::lower::expander::import-resolver::rollback + ✗ hashql-ast::lower::expander::import-resolver::continue::unresolved-type + ✗ hashql-ast::lower::expander::import-resolver::continue::unresolved-value + ✗ hashql-ast::lower::expander::import-resolver::continue::use-not-found + ✗ hashql-ast::lower::expander::import-resolver::continue::unresolved-nested + ✗ hashql-ast::lower::expander::import-resolver::item-not-found + ✗ hashql-ast::lower::expander::import-resolver::glob-not-found + ✗ hashql-ast::lower::expander::special-form-expander::access-2 + ✗ hashql-ast::lower::expander::special-form-expander::as-1 + ✗ hashql-ast::lower::expander::special-form-expander::fn-params-type + ✗ hashql-ast::lower::expander::special-form-expander::use-struct-type + ✗ hashql-ast::lower::expander::special-form-expander::type-generic-absolute-path + ✗ hashql-ast::lower::expander::special-form-expander::type-expr-invalid + ✗ hashql-ast::lower::expander::special-form-expander::fn-generics-tuple + ✗ hashql-ast::lower::expander::special-form-expander::newtype-4 + ✗ hashql-ast::lower::expander::special-form-expander::use-glob-not-ident + ✗ hashql-ast::lower::expander::special-form-expander::as-3 + ✗ hashql-ast::lower::expander::special-form-expander::type-expr-call-union + ✗ hashql-ast::lower::expander::special-form-expander::input-3 + ✗ hashql-ast::lower::expander::special-form-expander::index-2 + ✗ hashql-ast::lower::expander::special-form-expander::fn-4 + ✗ hashql-ast::lower::expander::special-form-expander::use-glob + ✗ hashql-ast::lower::expander::special-form-expander::use-literal + ✗ hashql-ast::lower::expander::special-form-expander::fn-generics-tuple-literal + ✗ hashql-ast::lower::expander::special-form-expander::type-expr-struct + ✗ hashql-ast::lower::expander::special-form-expander::type-generic-constraint + ✗ hashql-ast::lower::expander::special-form-expander::use-tuple-literal + ✗ hashql-ast::lower::expander::special-form-expander::input-1 + ✗ hashql-ast::lower::expander::special-form-expander::fn-generics-tuple-path + ✗ hashql-ast::lower::expander::special-form-expander::newtype-2 + ✗ hashql-ast::lower::expander::special-form-expander::fn-generics-struct-type + ✗ hashql-ast::lower::expander::special-form-expander::fn-params-tuple + ✗ hashql-ast::lower::expander::special-form-expander::use-tuple-type + ✗ hashql-ast::lower::expander::special-form-expander::too-many-segments + ✗ hashql-ast::lower::expander::special-form-expander::fn-generics-struct-underscore + ✗ hashql-ast::lower::expander::special-form-expander::type-infer + ✗ hashql-ast::lower::expander::special-form-expander::as-2 + ✗ hashql-ast::lower::expander::special-form-expander::access-field-literal-type-annotation + ✗ hashql-ast::lower::expander::special-form-expander::access-1 + ✗ hashql-ast::lower::expander::special-form-expander::fn-generics-duplicates + ✗ hashql-ast::lower::expander::special-form-expander::access-3 + ✗ hashql-ast::lower::expander::special-form-expander::input-4 + ✗ hashql-ast::lower::expander::special-form-expander::newtype-collect-all-errors + ✗ hashql-ast::lower::expander::special-form-expander::fn-params-duplicates + ✗ hashql-ast::lower::expander::special-form-expander::newtype-constraints + ✗ hashql-ast::lower::expander::special-form-expander::fn-3 + ✗ hashql-ast::lower::expander::special-form-expander::fn-generics-struct-literal + ✗ hashql-ast::lower::expander::special-form-expander::index-1 + ✗ hashql-ast::lower::expander::special-form-expander::type-tuple-has-type + ✗ hashql-ast::lower::expander::special-form-expander::use-glob-not-star + ✗ hashql-ast::lower::expander::special-form-expander::let-argument-not-path + ✗ hashql-ast::lower::expander::special-form-expander::input-2 + ✗ hashql-ast::lower::expander::special-form-expander::type-unknown + ✗ hashql-ast::lower::expander::special-form-expander::type-generic-struct + ✗ hashql-ast::lower::expander::special-form-expander::fn-5 + ✗ hashql-ast::lower::expander::special-form-expander::index-3 + ✗ hashql-ast::lower::expander::special-form-expander::use-tuple-path + ✗ hashql-ast::lower::expander::special-form-expander::type-4 + ✗ hashql-ast::lower::expander::special-form-expander::type-expr-call-not-path + ✗ hashql-ast::lower::expander::special-form-expander::unknown-special-form + ✗ hashql-ast::lower::expander::special-form-expander::let-5 + ✗ hashql-ast::lower::expander::special-form-expander::type-expr-call-intersection + ✗ hashql-ast::lower::expander::special-form-expander::use-struct + ✗ hashql-ast::lower::expander::special-form-expander::if-1 + ✗ hashql-ast::lower::expander::special-form-expander::type-2 + ✗ hashql-ast::lower::expander::special-form-expander::use-struct-literal + ✗ hashql-ast::lower::expander::special-form-expander::use-3 + ✗ hashql-ast::lower::expander::special-form-expander::type-generic-relative-path + ✗ hashql-ast::lower::expander::special-form-expander::type-generic-duplicate + ✗ hashql-ast::lower::expander::special-form-expander::fn-generics-literal + ✗ hashql-ast::lower::expander::special-form-expander::access-field-literal-string + ✗ hashql-ast::lower::expander::special-form-expander::type-generic-generic-ident + ✗ hashql-ast::lower::expander::special-form-expander::use-4 + ✗ hashql-ast::lower::expander::special-form-expander::use-struct-path + ✗ hashql-ast::lower::expander::special-form-expander::if-4 + ✗ hashql-ast::lower::expander::special-form-expander::type-never + ✗ hashql-ast::lower::expander::special-form-expander::type-expr-tuple + ✗ hashql-ast::lower::expander::special-form-expander::use-tuple + ✗ hashql-ast::lower::expander::special-form-expander::let-argument-not-ident + ✗ hashql-ast::lower::expander::special-form-expander::type-struct-has-type + ✗ hashql-ast::lower::expander::special-form-expander::access-field-literal-boolean + ✗ hashql-ast::lower::expander::special-form-expander::let-collect-all-errors + ✗ hashql-ast::lower::expander::special-form-expander::type-collect-all-errors + ✗ hashql-ast::lower::expander::special-form-expander::access-field-literal-valid + ✗ hashql-ast::lower::expander::special-form-expander::unknown-special-form-typo + ✗ hashql-ast::lower::expander::special-form-expander::type-expr-call-arbitrary + ✗ hashql-ast::lower::expander::special-form-expander::not-enough-segments + ✗ hashql-ast::lower::expander::special-form-expander::generics + ✗ hashql-ast::lower::expander::special-form-expander::use-2 + ✗ hashql-ast::lower::expander::special-form-expander::let-2 + ✗ hashql-ast::lower::expander::special-form-expander::access-field-index-out-of-bounds + ✗ hashql-ast::lower::expander::special-form-expander::fn-generics-tuple-type + ✗ hashql-ast::lower::expander::special-form-expander::fn-generics-struct + ✗ hashql-ast::lower::expander::special-form-expander::labeled-argument + ✗ hashql-ast::lower::expander::special-form-expander::type-3 + ✗ hashql-ast::lower::expander::pre-expansion-name-resolver::re-assign-prelude + ✗ hashql-ast::lower::expander::pre-expansion-name-resolver::newtype-4 + ✗ hashql-ast::lower::expander::pre-expansion-name-resolver::re-assign + ✗ hashql-ast::lower::expander::pre-expansion-name-resolver::let-absolute + ✗ hashql-ast::lower::expander::pre-expansion-name-resolver::nested-let + ✗ hashql-ast::lower::expander::pre-expansion-name-resolver::absolute-path + ✗ hashql-ast::lower::expander::pre-expansion-name-resolver::newtype-3-alias + ✗ hashql-ast::lower::expander::pre-expansion-name-resolver::type-3-alias + ✗ hashql-ast::lower::expander::pre-expansion-name-resolver::multi-segment-resolution + ✗ hashql-ast::lower::expander::pre-expansion-name-resolver::let-3-alias + ✗ hashql-ast::lower::expander::pre-expansion-name-resolver::newtype-3 + ✗ hashql-ast::lower::expander::pre-expansion-name-resolver::resolve-symbol + ✗ hashql-ast::lower::expander::pre-expansion-name-resolver::type-4 + ✗ hashql-ast::lower::expander::pre-expansion-name-resolver::alias-symbol + ✗ hashql-ast::lower::expander::pre-expansion-name-resolver::let-4-alias + ✗ hashql-ast::lower::expander::pre-expansion-name-resolver::resolve-generics + ✗ hashql-ast::lower::expander::pre-expansion-name-resolver::invalid-let-expr + ✗ hashql-ast::lower::expander::pre-expansion-name-resolver::let-3 + ✗ hashql-ast::lower::expander::pre-expansion-name-resolver::re-assign-prelude-diverging + ✗ hashql-ast::lower::expander::pre-expansion-name-resolver::let-4 + ✗ hashql-ast::lower::expander::pre-expansion-name-resolver::restoration-bindings + ✗ hashql-ast::lower::expander::pre-expansion-name-resolver::let-ident-generic + ✗ hashql-ast::lower::expander::pre-expansion-name-resolver::type-3 + ✗ hashql-ast::lower::type-extractor::generic-type-resolution + ✗ hashql-ast::lower::type-extractor::definition::constraints-parsing + +167 of 534 tests failed. + + +━━━━━━━━━━━━━━━━━━━━━━━━ FAILURES (167 of 544) ━━━━━━━━━━━━━━━━━━━━━━━━ + +[1/167] hashql-mir reify::monomorphized-closure +──────────────────────────────────────────────────────────────────────────────── +Expected trial to pass, but it failed +├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:390:24 +╰╴1 additional opaque attachment + +[2/167] hashql-hir reify::literal-type-annotation +──────────────────────────────────────────────────────────────────────────────── +Expected trial to pass, but it failed +├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:390:24 +╰╴1 additional opaque attachment + +[3/167] hashql-hir reify::variable-generics +──────────────────────────────────────────────────────────────────────────────── +Expected trial to pass, but it failed +├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:390:24 +╰╴1 additional opaque attachment + +[4/167] hashql-hir reify::nested-expressions +──────────────────────────────────────────────────────────────────────────────── +Expected trial to pass, but it failed +├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:390:24 +╰╴1 additional opaque attachment + +[5/167] hashql-hir lower::specialization::collect-custom-collect +──────────────────────────────────────────────────────────────────────────────── +Failed to verify annotation +├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:321:29 +├╴1 additional opaque attachment +│ +╰┬▶ unfulfilled annotation: DiagnosticAnnotation { category: None, severity: Error, message: "This is not a graph intrinsic operation", line: Some(6) } did not match any emitted diagnostics + │ ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:151:25 + │ + ╰▶ unexpected diagnostic: + error[lowering::expander::unresolved-variable]: Unresolved variable + ╭▸ + 6 │ ["fn", { "#tuple": [] }, { "#struct": { "graph": "_" } }, "_", "graph"], + │ ━━━━━ cannot find `graph` in this scope + │ + ├ help: check the spelling, or import the name with a `use` statement + ╰ note: this could be a typo, a name used outside its scope, or a missing declaration; if it is a function or type from another module, you may need to import it first + ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:171:21 + +[6/167] hashql-hir lower::alias-replacement::generic-reassignment +──────────────────────────────────────────────────────────────────────────────── +Failed to verify annotation +├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:321:29 +├╴1 additional opaque attachment +│ +╰┬▶ unfulfilled annotation: DiagnosticAnnotation { category: None, severity: Error, message: "additional type arguments are provided here", line: Some(10) } did not match any emitted diagnostics + │ ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:151:25 + │ + ├▶ unexpected diagnostic: + │ error[lowering::expander::intrinsic-generic-arguments]: Generic arguments on intrinsic + │ ╭▸ + │ 10 │ "foo", + │ │ ━━━━━━━━━━━ `foo` does not accept generic arguments + │ │ + │ ╰ help: remove the generic arguments from `foo` + │ ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:171:21 + │ + ├▶ unexpected diagnostic: + │ error[lowering::expander::intrinsic-generic-arguments]: Generic arguments on intrinsic + │ ╭▸ + │ 6 │ "core::math::add", + │ │ ━━━━━━━━━━━━ `add` does not accept generic arguments + │ │ + │ ╰ help: remove the generic arguments from `add` + │ ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:171:21 + │ + ├▶ unexpected diagnostic: + │ error[lowering::expander::unresolved-variable]: Unresolved variable + │ ╭▸ + │ 10 │ "foo", + │ │ ━━━━━━ cannot find `Number` in this scope + │ │ + │ ├ help: check the spelling, or import the name with a `use` statement + │ ╰ note: this could be a typo, a name used outside its scope, or a missing declaration; if it is a function or type from another module, you may need to import it first + │ ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:171:21 + │ + ╰▶ unexpected diagnostic: + error[lowering::expander::unresolved-variable]: Unresolved variable + ╭▸ + 6 │ "core::math::add", + │ ━━━━━━━ cannot find `Integer` in this scope + │ + ├ help: check the spelling, or import the name with a `use` statement + ╰ note: this could be a typo, a name used outside its scope, or a missing declaration; if it is a function or type from another module, you may need to import it first + ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:171:21 + +[7/167] hashql-hir lower::alias-replacement::generics +──────────────────────────────────────────────────────────────────────────────── +Expected trial to pass, but it failed +├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:390:24 +╰╴1 additional opaque attachment + +[8/167] hashql-hir lower::ctor::explicit-type +──────────────────────────────────────────────────────────────────────────────── +Expected trial to pass, but it failed +├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:390:24 +╰╴1 additional opaque attachment + +[9/167] hashql-hir lower::ctor::too-many-arguments +──────────────────────────────────────────────────────────────────────────────── +Failed to verify annotation +├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:321:29 +├╴1 additional opaque attachment +│ +╰┬▶ unfulfilled annotation: DiagnosticAnnotation { category: None, severity: Error, message: "Remove this argument", line: Some(8) } did not match any emitted diagnostics + │ ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:151:25 + │ + ├▶ unexpected diagnostic: + │ error[lowering::expander::unresolved-variable]: Unresolved variable + │ ╭▸ + │ 8 │ "Person", + │ │ ━━━━━━━ cannot find `Integer` in this scope + │ │ + │ ├ help: check the spelling, or import the name with a `use` statement + │ ╰ note: this could be a typo, a name used outside its scope, or a missing declaration; if it is a function or type from another module, you may need to import it first + │ ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:171:21 + │ + ├▶ unexpected diagnostic: + │ error[lowering::expander::unresolved-variable]: Unresolved variable + │ ╭▸ + │ 8 │ "Person", + │ │ ━━━━━━ cannot find `String` in this scope + │ │ + │ ├ help: check the spelling, or import the name with a `use` statement + │ ╰ note: this could be a typo, a name used outside its scope, or a missing declaration; if it is a function or type from another module, you may need to import it first + │ ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:171:21 + │ + ╰▶ unexpected diagnostic: + error[lowering::expander::unresolved-variable]: Unresolved variable + ╭▸ + 8 │ "Person", + │ ━━━━━━ cannot find `Number` in this scope + │ + ├ help: check the spelling, or import the name with a `use` statement + ╰ note: this could be a typo, a name used outside its scope, or a missing declaration; if it is a function or type from another module, you may need to import it first + ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:171:21 + +[10/167] hashql-hir lower::ctor::not-enough-arguments +──────────────────────────────────────────────────────────────────────────────── +Failed to verify annotation +├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:321:29 +├╴1 additional opaque attachment +│ +╰┬▶ unfulfilled annotation: DiagnosticAnnotation { category: None, severity: Error, message: "Add missing parameter `U`", line: Some(8) } did not match any emitted diagnostics + │ ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:151:25 + │ + ╰▶ unexpected diagnostic: + error[lowering::expander::unresolved-variable]: Unresolved variable + ╭▸ + 8 │ "Person", + │ ━━━━━━ cannot find `Number` in this scope + │ + ├ help: check the spelling, or import the name with a `use` statement + ╰ note: this could be a typo, a name used outside its scope, or a missing declaration; if it is a function or type from another module, you may need to import it first + ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:171:21 + +[11/167] hashql-hir lower::inference::bind-arguments-explicit +──────────────────────────────────────────────────────────────────────────────── +Failed to verify annotation +├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:321:29 +├╴1 additional opaque attachment +│ +╰┬▶ unfulfilled annotation: DiagnosticAnnotation { category: None, severity: Error, message: "Type variable has incompatible upper and lower bounds", line: Some(4) } did not match any emitted diagnostics + │ ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:151:25 + │ + ├▶ unexpected diagnostic: + │ error[lowering::expander::intrinsic-generic-arguments]: Generic arguments on intrinsic + │ ╭▸ + │ 4 │ "`+`", + │ │ ━━━━━━━━━━━━━━━━━━━ `+` does not accept generic arguments + │ │ + │ ╰ help: remove the generic arguments from `+` + │ ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:171:21 + │ + ├▶ unexpected diagnostic: + │ error[lowering::expander::unresolved-variable]: Unresolved variable + │ ╭▸ + │ 4 │ "`+`", + │ │ ━━━━━━ cannot find `Number` in this scope + │ │ + │ ├ help: check the spelling, or import the name with a `use` statement + │ ╰ note: this could be a typo, a name used outside its scope, or a missing declaration; if it is a function or type from another module, you may need to import it first + │ ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:171:21 + │ + ╰▶ unexpected diagnostic: + error[lowering::expander::unresolved-variable]: Unresolved variable + ╭▸ + 4 │ "`+`", + │ ━━━━━━ cannot find `Number` in this scope + │ + ├ help: check the spelling, or import the name with a `use` statement + ╰ note: this could be a typo, a name used outside its scope, or a missing declaration; if it is a function or type from another module, you may need to import it first + ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:171:21 + +[12/167] hashql-hir lower::inference::bind-arguments +──────────────────────────────────────────────────────────────────────────────── +Expected trial to pass, but it failed +├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:390:24 +╰╴1 additional opaque attachment + +[13/167] hashql-hir lower::inference::infer-argument +──────────────────────────────────────────────────────────────────────────────── +Expected trial to pass, but it failed +├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:390:24 +╰╴1 additional opaque attachment + +[14/167] hashql-hir lower::inference::ctor-bounded-invalid +──────────────────────────────────────────────────────────────────────────────── +Failed to verify annotation +├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:321:29 +├╴1 additional opaque attachment +│ +╰┬▶ unfulfilled annotation: DiagnosticAnnotation { category: None, severity: Error, message: "Type variable has incompatible upper and lower bounds", line: Some(3) } did not match any emitted diagnostics + │ ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:151:25 + │ + ├▶ unexpected diagnostic: + │ error[lowering::type-extractor::unbound-type-variable]: Unbound type variable + │ ╭▸ + │ 3 │ ["newtype", "Person", "T", ["Person", { "#literal": "2" }]] + │ │ ━━━━━━ Cannot find type 'Number' + │ │ + │ ├ note: This is likely a compiler bug in the name resolution system. The type checker has encountered a name that wasn't properly resolved earlier in compilation. The name resolution pass should have caught this error or provided a more specific error message. + │ ├ help: This is a bug in the compiler, not an issue with your code. + │ ├ help: Please report this issue along with a minimal code example that reproduces the error. + │ ╰ note: Internal compiler errors indicate a bug in the compiler itself that needs to be fixed. + │ + │ We would appreciate if you could file a GitHub or Linear issue and reference this error. + │ + │ When reporting this issue, please include your query, any relevant type definitions, and the complete error message shown above. + │ ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:171:21 + │ + ├▶ unexpected diagnostic: + │ error[lowering::type-extractor::unused-generic-parameter]: Generic parameter not used in type definition + │ ╭▸ + │ 1 │ //@ run: fail + │ │ ─ ...but never used in this type definition + │ 2 │ //@ description: Checks that type constructor bounded generic parameter (T: Number) violation is caught during type inference. + │ 3 │ ["newtype", "Person", "T", ["Person", { "#literal": "2" }]] + │ │ ━━━━━━━━━ Generic parameter `T` declared here... + │ │ + │ ├ help: Generic parameter `T` is declared but not referenced. Either remove the unused parameter or incorporate it into your type definition. + │ ╰ note: Each generic parameter should serve a purpose in parameterizing the type. Unused parameters can make code harder to understand and may indicate a design oversight or incomplete implementation. They are unconstrained variables, and therefore considered erroneous. + │ ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:171:21 + │ + ╰▶ unexpected diagnostic: + error[lowering::expander::unresolved-variable]: Unresolved variable + ╭▸ + 3 │ ["newtype", "Person", "T", ["Person", { "#literal": "2" }]] + │ ━━━━━━ cannot find `Number` in this scope + │ + ├ help: check the spelling, or import the name with a `use` statement + ╰ note: this could be a typo, a name used outside its scope, or a missing declaration; if it is a function or type from another module, you may need to import it first + ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:171:21 + +[15/167] hashql-hir lower::inference::closure-call-unconstrained-direct +──────────────────────────────────────────────────────────────────────────────── +Expected trial to pass, but it failed +├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:390:24 +╰╴1 additional opaque attachment + +[16/167] hashql-hir lower::checking::dict +──────────────────────────────────────────────────────────────────────────────── +Expected trial to pass, but it failed +├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:390:24 +╰╴1 additional opaque attachment + +[17/167] hashql-hir lower::checking::bind-arguments +──────────────────────────────────────────────────────────────────────────────── +Expected trial to pass, but it failed +├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:390:24 +╰╴1 additional opaque attachment + +[18/167] hashql-hir lower::checking::dict-empty +──────────────────────────────────────────────────────────────────────────────── +Expected trial to pass, but it failed +├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:390:24 +╰╴1 additional opaque attachment + +[19/167] hashql-hir lower::checking::list +──────────────────────────────────────────────────────────────────────────────── +Expected trial to pass, but it failed +├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:390:24 +╰╴1 additional opaque attachment + +[20/167] hashql-hir lower::checking::ctor-bounded +──────────────────────────────────────────────────────────────────────────────── +Expected trial to pass, but it failed +├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:390:24 +╰╴1 additional opaque attachment + +[21/167] hashql-hir lower::checking::tuple +──────────────────────────────────────────────────────────────────────────────── +Expected trial to pass, but it failed +├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:390:24 +╰╴1 additional opaque attachment + +[22/167] hashql-hir lower::checking::ctor-bounded-invalid +──────────────────────────────────────────────────────────────────────────────── +Failed to verify annotation +├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:321:29 +├╴1 additional opaque attachment +│ +╰┬▶ unfulfilled annotation: DiagnosticAnnotation { category: None, severity: Error, message: "Type variable has incompatible upper and lower bounds", line: Some(3) } did not match any emitted diagnostics + │ ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:151:25 + │ + ├▶ unexpected diagnostic: + │ error[lowering::type-extractor::unbound-type-variable]: Unbound type variable + │ ╭▸ + │ 3 │ ["newtype", "Person", "T", ["Person", { "#literal": "2" }]] + │ │ ━━━━━━ Cannot find type 'Number' + │ │ + │ ├ note: This is likely a compiler bug in the name resolution system. The type checker has encountered a name that wasn't properly resolved earlier in compilation. The name resolution pass should have caught this error or provided a more specific error message. + │ ├ help: This is a bug in the compiler, not an issue with your code. + │ ├ help: Please report this issue along with a minimal code example that reproduces the error. + │ ╰ note: Internal compiler errors indicate a bug in the compiler itself that needs to be fixed. + │ + │ We would appreciate if you could file a GitHub or Linear issue and reference this error. + │ + │ When reporting this issue, please include your query, any relevant type definitions, and the complete error message shown above. + │ ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:171:21 + │ + ├▶ unexpected diagnostic: + │ error[lowering::type-extractor::unused-generic-parameter]: Generic parameter not used in type definition + │ ╭▸ + │ 1 │ //@ run: fail + │ │ ─ ...but never used in this type definition + │ 2 │ //@ description: Checks that type constructor bounded generic parameter (T: Number) violation is caught during type checking. + │ 3 │ ["newtype", "Person", "T", ["Person", { "#literal": "2" }]] + │ │ ━━━━━━━━━ Generic parameter `T` declared here... + │ │ + │ ├ help: Generic parameter `T` is declared but not referenced. Either remove the unused parameter or incorporate it into your type definition. + │ ╰ note: Each generic parameter should serve a purpose in parameterizing the type. Unused parameters can make code harder to understand and may indicate a design oversight or incomplete implementation. They are unconstrained variables, and therefore considered erroneous. + │ ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:171:21 + │ + ╰▶ unexpected diagnostic: + error[lowering::expander::unresolved-variable]: Unresolved variable + ╭▸ + 3 │ ["newtype", "Person", "T", ["Person", { "#literal": "2" }]] + │ ━━━━━━ cannot find `Number` in this scope + │ + ├ help: check the spelling, or import the name with a `use` statement + ╰ note: this could be a typo, a name used outside its scope, or a missing declaration; if it is a function or type from another module, you may need to import it first + ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:171:21 + +[23/167] hashql-hir lower::checking::argument-count-mismatch +──────────────────────────────────────────────────────────────────────────────── +Failed to verify annotation +├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:321:29 +├╴1 additional opaque attachment +│ +╰┬▶ unfulfilled annotation: DiagnosticAnnotation { category: None, severity: Error, message: "This closure requires exactly 2 generic arguments", line: Some(14) } did not match any emitted diagnostics + │ ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:151:25 + │ + ╰▶ unexpected diagnostic: + error[lowering::expander::unresolved-variable]: Unresolved variable + ╭▸ + 14 │ "foo", + │ ━━━━━━━ cannot find `Integer` in this scope + │ + ├ help: check the spelling, or import the name with a `use` statement + ╰ note: this could be a typo, a name used outside its scope, or a missing declaration; if it is a function or type from another module, you may need to import it first + ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:171:21 + +[24/167] hashql-hir lower::checking::closure-call-unconstrained-direct +──────────────────────────────────────────────────────────────────────────────── +Expected trial to pass, but it failed +├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:390:24 +╰╴1 additional opaque attachment + +[25/167] hashql-hir lower::checking::struct +──────────────────────────────────────────────────────────────────────────────── +Expected trial to pass, but it failed +├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:390:24 +╰╴1 additional opaque attachment + +[26/167] hashql-hir lower::checking::list-empty +──────────────────────────────────────────────────────────────────────────────── +Expected trial to pass, but it failed +├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:390:24 +╰╴1 additional opaque attachment + +[27/167] hashql-ast lower::name-mangler::path-arguments +──────────────────────────────────────────────────────────────────────────────── +Expected trial to pass, but it failed +├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:390:24 +╰╴1 additional opaque attachment + +[28/167] hashql-ast lower::name-mangler::onion +──────────────────────────────────────────────────────────────────────────────── +Expected trial to pass, but it failed +├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:390:24 +╰╴1 additional opaque attachment + +[29/167] hashql-ast lower::name-mangler::absolute-path +──────────────────────────────────────────────────────────────────────────────── +Expected trial to pass, but it failed +├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:390:24 +╰╴1 additional opaque attachment + +[30/167] hashql-ast lower::name-mangler::type-generics-constraints +──────────────────────────────────────────────────────────────────────────────── +Expected trial to pass, but it failed +├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:390:24 +╰╴1 additional opaque attachment + +[31/167] hashql-ast lower::name-mangler::type-generics-nested +──────────────────────────────────────────────────────────────────────────────── +Expected trial to pass, but it failed +├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:390:24 +╰╴1 additional opaque attachment + +[32/167] hashql-ast lower::name-mangler::type +──────────────────────────────────────────────────────────────────────────────── +Expected trial to pass, but it failed +├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:390:24 +╰╴1 additional opaque attachment + +[33/167] hashql-ast lower::name-mangler::newtype +──────────────────────────────────────────────────────────────────────────────── +Expected trial to pass, but it failed +├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:390:24 +╰╴1 additional opaque attachment + +[34/167] hashql-ast lower::name-mangler::diverging +──────────────────────────────────────────────────────────────────────────────── +Expected trial to pass, but it failed +├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:390:24 +╰╴1 additional opaque attachment + +[35/167] hashql-ast lower::name-mangler::newtype-generics +──────────────────────────────────────────────────────────────────────────────── +Expected trial to pass, but it failed +├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:390:24 +╰╴1 additional opaque attachment + +[36/167] hashql-ast lower::name-mangler::fn-args +──────────────────────────────────────────────────────────────────────────────── +Expected trial to pass, but it failed +├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:390:24 +╰╴1 additional opaque attachment + +[37/167] hashql-ast lower::name-mangler::type-generics-interdependent-generics +──────────────────────────────────────────────────────────────────────────────── +Expected trial to pass, but it failed +├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:390:24 +╰╴1 additional opaque attachment + +[38/167] hashql-ast lower::name-mangler::path +──────────────────────────────────────────────────────────────────────────────── +Expected trial to pass, but it failed +├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:390:24 +╰╴1 additional opaque attachment + +[39/167] hashql-ast lower::name-mangler::fn-types +──────────────────────────────────────────────────────────────────────────────── +Expected trial to pass, but it failed +├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:390:24 +╰╴1 additional opaque attachment + +[40/167] hashql-ast lower::sanitizer::special-form-value +──────────────────────────────────────────────────────────────────────────────── +Failed to verify annotation +├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:321:29 +├╴1 additional opaque attachment +│ +╰┬▶ unfulfilled annotation: DiagnosticAnnotation { category: None, severity: Error, message: "Special form cannot be used as a value", line: Some(5) } did not match any emitted diagnostics + │ ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:151:25 + │ + ├▶ unexpected diagnostic: + │ error[expander::unresolved-variable]: Unresolved variable + │ ╭▸ + │ 7 │ "a" + │ │ ━ cannot find `a` in this scope + │ │ + │ ╰ note: this could be a typo, a name used outside its scope, or a missing declaration; if it is a function or type from another module, you may need to import it first + │ help: a similar imported name exists + │ ╭╴ + │ 7 - "a" + │ 7 + "↑√∛ccesss" + │ ╰╴ + │ ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:171:21 + │ + ╰▶ unexpected diagnostic: + error[expander::unresolved-variable]: Unresolved variable + ╭▸ + 4 │ "add", + │ ━━━ cannot find `add` in this scope + │ + ├ help: bring it into scope: `use ::core::math::add in` + ╰ note: this could be a typo, a name used outside its scope, or a missing declaration; if it is a function or type from another module, you may need to import it first + help: use one of these fully qualified paths + ╭╴ + 4 │ "::core::math::add", + ╰╴ ++++++++++++++ + ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:171:21 + +[41/167] hashql-ast lower::sanitizer::special-form-type-position +──────────────────────────────────────────────────────────────────────────────── +Failed to verify annotation +├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:321:29 +├╴1 additional opaque attachment +│ +╰┬▶ unfulfilled annotation: DiagnosticAnnotation { category: None, severity: Error, message: "Special form cannot be used as a type", line: Some(6) } did not match any emitted diagnostics + │ ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:151:25 + │ + ╰▶ unexpected diagnostic: + error[expander::item-not-found]: Item not found + ╭▸ + 6 │ "::kernel::special_form::let", + │ ┬─────────── ━━━ cannot find `let` in module `::kernel::special_form` + │ │ + │ looked in this module + │ + ╰ help: check the spelling and ensure the item is exported + ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:171:21 + +[42/167] hashql-ast lower::sanitizer::constraint +──────────────────────────────────────────────────────────────────────────────── +Failed to verify annotation +├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:321:29 +├╴1 additional opaque attachment +│ +╰┬▶ unfulfilled annotation: DiagnosticAnnotation { category: None, severity: Error, message: "Remove this constraint from 'T'", line: Some(4) } did not match any emitted diagnostics + │ ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:151:25 + │ + ├▶ unexpected diagnostic: + │ error[expander::unresolved-variable]: Unresolved variable + │ ╭▸ + │ 4 │ "add", + │ │ ━━━ cannot find `add` in this scope + │ │ + │ ├ help: bring it into scope: `use ::core::math::add in` + │ ╰ note: this could be a typo, a name used outside its scope, or a missing declaration; if it is a function or type from another module, you may need to import it first + │ help: use one of these fully qualified paths + │ ╭╴ + │ 4 │ "::core::math::add", + │ ╰╴ ++++++++++++++ + │ ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:171:21 + │ + ╰▶ unexpected diagnostic: + error[expander::unresolved-variable]: Unresolved variable + ╭▸ + 4 │ "add", + │ ━━━━━━ cannot find `Number` in this scope + │ + ├ help: check the spelling, or import the name with a `use` statement + ╰ note: this could be a typo, a name used outside its scope, or a missing declaration; if it is a function or type from another module, you may need to import it first + ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:171:21 + +[43/167] hashql-ast lower::expander::import-resolver::generic-argument-absolute-path +──────────────────────────────────────────────────────────────────────────────── +Failed to verify annotation +├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:321:29 +├╴1 additional opaque attachment +│ +╰┬▶ unfulfilled annotation: DiagnosticAnnotation { category: None, severity: Error, message: "Remove this generic argument", line: Some(3) } did not match any emitted diagnostics + │ ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:151:25 + │ + ├▶ unexpected diagnostic: + │ error[expander::generic-arguments-in-module]: Generic arguments in module path + │ ╭▸ + │ 3 │ ["::math::add", { "#literal": 2 }, { "#literal": 3 }] + │ │ ━ generic argument not allowed here + │ │ + │ ├ help: move the generic arguments to the final segment of the path, or remove them + │ ╰ note: modules are not generic; only the final item in a path can be parameterized + │ ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:171:21 + │ + ╰▶ unexpected diagnostic: + error[expander::unresolved-variable]: Unresolved variable + ╭▸ + 3 │ ["::math::add", { "#literal": 2 }, { "#literal": 3 }] + │ ━ cannot find `T` in this scope + │ + ╰ note: this could be a typo, a name used outside its scope, or a missing declaration; if it is a function or type from another module, you may need to import it first + help: a similar imported name exists + ╭╴ + 3 - ["::math::add", { "#literal": 2 }, { "#literal": 3 }] + 3 + ["::math<||~↑√∛>::add", { "#literal": 2 }, { "#literal": 3 }] + ╰╴ + ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:171:21 + +[44/167] hashql-ast lower::expander::import-resolver::generic-argument-use-path +──────────────────────────────────────────────────────────────────────────────── +Failed to verify annotation +├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:321:29 +├╴1 additional opaque attachment +│ +╰┬▶ unfulfilled annotation: DiagnosticAnnotation { category: None, severity: Error, message: "Generic arguments are not allowed here", line: Some(3) } did not match any emitted diagnostics + │ ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:151:25 + │ + ├▶ unexpected diagnostic: + │ error[expander::item-not-found]: Item not found + │ ╭▸ + │ 3 │ ["use", "kernel::type", { "#tuple": ["T"] }, "_"] + │ │ ┬─── ━ cannot find `T` in module `kernel::type` + │ │ │ + │ │ looked in this module + │ ╰╴ + │ help: a similar item exists in this module + │ ╭╴ + │ 3 - ["use", "kernel::type", { "#tuple": ["T"] }, "_"] + │ 3 + ["use", "kernel::type", { "#tuple": ["NumberStringUnionUnknown|"] }, "_"] + │ ╰╴ + │ ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:171:21 + │ + ╰▶ unexpected diagnostic: + error[expander::use-path-generic-arguments]: Generic arguments in use path + ╭▸ + 3 │ ["use", "kernel::type", { "#tuple": ["T"] }, "_"] + │ ━━━━━━━━━━━━━━━ generic arguments are not allowed in `use` paths + │ + ╰ help: remove the generic arguments; `use` imports modules and items, which do not take type parameters at the import site + ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:171:21 + +[45/167] hashql-ast lower::expander::import-resolver::module-not-found +──────────────────────────────────────────────────────────────────────────────── +Failed to verify annotation +├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:321:29 +├╴1 additional opaque attachment +│ +╰┬▶ unfulfilled annotation: DiagnosticAnnotation { category: None, severity: Error, message: "Module 'foo' not found", line: Some(3) } did not match any emitted diagnostics + │ ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:151:25 + │ + ╰▶ unexpected diagnostic: + error[expander::module-not-found]: Module not found + ╭▸ + 3 │ ["use", "kernel::foo", { "#tuple": ["baz"] }, "_"] + │ ┬───── ━━━ cannot find module `foo` in `kernel` + │ │ + │ looked in this module + │ + ├ help: check the module name and ensure it is exported from its parent + ╰ note: only exported sub-modules are reachable via `::` + ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:171:21 + +[46/167] hashql-ast lower::expander::import-resolver::generic-arguments-in-final-segment +──────────────────────────────────────────────────────────────────────────────── +Expected trial to pass, but it failed +├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:390:24 +╰╴1 additional opaque attachment + +[47/167] hashql-ast lower::expander::import-resolver::unresolver-variable +──────────────────────────────────────────────────────────────────────────────── +Failed to verify annotation +├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:321:29 +├╴1 additional opaque attachment +│ +╰┬▶ unfulfilled annotation: DiagnosticAnnotation { category: None, severity: Error, message: "Cannot find variable 'föo'", line: Some(11) } did not match any emitted diagnostics + │ ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:151:25 + │ + ╰▶ unexpected diagnostic: + error[expander::unresolved-variable]: Unresolved variable + ╭▸ + 11 │ "föo" + │ ━━━ cannot find `föo` in this scope + │ + ╰ note: this could be a typo, a name used outside its scope, or a missing declaration; if it is a function or type from another module, you may need to import it first + help: a similar local binding exists + ╭╴ + 11 - "föo" + 11 + "foo" + ╰╴ + ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:171:21 + +[48/167] hashql-ast lower::expander::import-resolver::rollback +──────────────────────────────────────────────────────────────────────────────── +Failed to verify annotation +├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:321:29 +├╴1 additional opaque attachment +│ +╰┬▶ unfulfilled annotation: DiagnosticAnnotation { category: None, severity: Error, message: "Cannot find variable 'shl'", line: Some(7) } did not match any emitted diagnostics + │ ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:151:25 + │ + ╰▶ unexpected diagnostic: + error[expander::unresolved-variable]: Unresolved variable + ╭▸ + 7 │ "shl" + │ ━━━ cannot find `shl` in this scope + │ + ├ help: bring it into scope: `use ::core::bits::shl in` + ╰ note: this could be a typo, a name used outside its scope, or a missing declaration; if it is a function or type from another module, you may need to import it first + help: use one of these fully qualified paths + ╭╴ + 7 │ "::core::bits::shl" + ╰╴ ++++++++++++++ + ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:171:21 + +[49/167] hashql-ast lower::expander::import-resolver::continue::unresolved-type +──────────────────────────────────────────────────────────────────────────────── +Failed to verify annotation +├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:321:29 +├╴1 additional opaque attachment +│ +╰┬▶ unfulfilled annotation: DiagnosticAnnotation { category: None, severity: Error, message: "Cannot find variable 'T'", line: Some(7) } did not match any emitted diagnostics + │ ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:151:25 + │ + ╰▶ unexpected diagnostic: + error[expander::unresolved-variable]: Unresolved variable + ╭▸ + 7 │ "T", + │ ━ cannot find `T` in this scope + │ + ╰ note: this could be a typo, a name used outside its scope, or a missing declaration; if it is a function or type from another module, you may need to import it first + help: a similar local binding exists + ╭╴ + 7 - "T", + 7 + "Foo", + ╰╴ + help: a similar imported name exists + ╭╴ + 7 - "T", + 7 + "StringUnionUnknownUrl|", + ╰╴ + ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:171:21 + +[50/167] hashql-ast lower::expander::import-resolver::continue::unresolved-value +──────────────────────────────────────────────────────────────────────────────── +Failed to verify annotation +├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:321:29 +├╴1 additional opaque attachment +│ +╰┬▶ unfulfilled annotation: DiagnosticAnnotation { category: None, severity: Error, message: "Cannot find variable 'shl'", line: Some(5) } did not match any emitted diagnostics + │ ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:151:25 + │ + ╰▶ unexpected diagnostic: + error[expander::unresolved-variable]: Unresolved variable + ╭▸ + 5 │ "shl", + │ ━━━ cannot find `shl` in this scope + │ + ├ help: bring it into scope: `use ::core::bits::shl in` + ╰ note: this could be a typo, a name used outside its scope, or a missing declaration; if it is a function or type from another module, you may need to import it first + help: use one of these fully qualified paths + ╭╴ + 5 │ "::core::bits::shl", + ╰╴ ++++++++++++++ + ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:171:21 + +[51/167] hashql-ast lower::expander::import-resolver::continue::use-not-found +──────────────────────────────────────────────────────────────────────────────── +Failed to verify annotation +├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:321:29 +├╴1 additional opaque attachment +│ +╰┬▶ unfulfilled annotation: DiagnosticAnnotation { category: None, severity: Error, message: "Module 'foo' not found", line: Some(6) } did not match any emitted diagnostics + │ ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:151:25 + │ + ├▶ unexpected diagnostic: + │ error[expander::unresolved-variable]: Unresolved variable + │ ╭▸ + │ 9 │ ["add", { "#literal": 1 }, { "#literal": 2 }] + │ │ ━━━ cannot find `add` in this scope + │ │ + │ ├ help: bring it into scope: `use ::core::math::add in` + │ ╰ note: this could be a typo, a name used outside its scope, or a missing declaration; if it is a function or type from another module, you may need to import it first + │ help: use one of these fully qualified paths + │ ╭╴ + │ 9 │ ["::core::math::add", { "#literal": 1 }, { "#literal": 2 }] + │ ╰╴ ++++++++++++++ + │ ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:171:21 + │ + ╰▶ unexpected diagnostic: + error[expander::module-not-found]: Module not found + ╭▸ + 6 │ "kernel::foo", + │ ┬───── ━━━ cannot find module `foo` in `kernel` + │ │ + │ looked in this module + │ + ├ help: check the module name and ensure it is exported from its parent + ╰ note: only exported sub-modules are reachable via `::` + ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:171:21 + +[52/167] hashql-ast lower::expander::import-resolver::continue::unresolved-nested +──────────────────────────────────────────────────────────────────────────────── +Failed to verify annotation +├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:321:29 +├╴1 additional opaque attachment +│ +╰┬▶ unfulfilled annotation: DiagnosticAnnotation { category: None, severity: Error, message: "Cannot find variable 'Bar'", line: Some(6) } did not match any emitted diagnostics + │ ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:151:25 + │ + ╰▶ unexpected diagnostic: + error[expander::unresolved-variable]: Unresolved variable + ╭▸ + 6 │ "Foo", + │ ━━━ cannot find `Bar` in this scope + │ + ├ help: check the spelling, or import the name with a `use` statement + ╰ note: this could be a typo, a name used outside its scope, or a missing declaration; if it is a function or type from another module, you may need to import it first + ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:171:21 + +[53/167] hashql-ast lower::expander::import-resolver::item-not-found +──────────────────────────────────────────────────────────────────────────────── +Failed to verify annotation +├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:321:29 +├╴1 additional opaque attachment +│ +╰┬▶ unfulfilled annotation: DiagnosticAnnotation { category: None, severity: Error, message: "'lshift' not found in module 'core::bits'", line: Some(3) } did not match any emitted diagnostics + │ ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:151:25 + │ + ╰▶ unexpected diagnostic: + error[expander::item-not-found]: Item not found + ╭▸ + 3 │ ["use", "core::bits", { "#tuple": ["lshift"] }, "_"] + │ ┬─── ━━━━━━ cannot find `lshift` in module `core::bits` + │ │ + │ looked in this module + │ + ╰ help: check the spelling and ensure the item is exported + ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:171:21 + +[54/167] hashql-ast lower::expander::import-resolver::glob-not-found +──────────────────────────────────────────────────────────────────────────────── +Failed to verify annotation +├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:321:29 +├╴1 additional opaque attachment +│ +╰┬▶ unfulfilled annotation: DiagnosticAnnotation { category: None, severity: Error, message: "Module 'foo' not found", line: Some(3) } did not match any emitted diagnostics + │ ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:151:25 + │ + ╰▶ unexpected diagnostic: + error[expander::module-not-found]: Module not found + ╭▸ + 3 │ ["use", "kernel::foo", "*", "_"] + │ ┬───── ━━━ cannot find module `foo` in `kernel` + │ │ + │ looked in this module + │ + ├ help: check the module name and ensure it is exported from its parent + ╰ note: only exported sub-modules are reachable via `::` + ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:171:21 + +[55/167] hashql-ast lower::expander::special-form-expander::access-2 +──────────────────────────────────────────────────────────────────────────────── +Expected trial to pass, but it failed +├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:390:24 +╰╴1 additional opaque attachment + +[56/167] hashql-ast lower::expander::special-form-expander::as-1 +──────────────────────────────────────────────────────────────────────────────── +Failed to verify annotation +├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:321:29 +├╴1 additional opaque attachment +│ +╰┬▶ unfulfilled annotation: DiagnosticAnnotation { category: None, severity: Error, message: "Add missing arguments", line: Some(3) } did not match any emitted diagnostics + │ ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:151:25 + │ + ╰▶ unexpected diagnostic: + error[expander::invalid-argument-count]: Invalid argument count + ╭▸ + 3 │ ["::kernel::special_form::as", { "#literal": true }] + │ ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ expected 2 arguments to `as`, found 1 + │ + ├ help: use `(as value type)` + ╰ note: the first argument is the value to cast and the second is the target type + ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:171:21 + +[57/167] hashql-ast lower::expander::special-form-expander::fn-params-type +──────────────────────────────────────────────────────────────────────────────── +Failed to verify annotation +├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:321:29 +├╴1 additional opaque attachment +│ +╰┬▶ unfulfilled annotation: DiagnosticAnnotation { category: None, severity: Error, message: "Remove this type annotation", line: Some(8) } did not match any emitted diagnostics + │ ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:151:25 + │ + ├▶ unexpected diagnostic: + │ error[expander::unresolved-variable]: Unresolved variable + │ ╭▸ + │ 12 │ ["+", "a", "b"] + │ │ ━ cannot find `b` in this scope + │ │ + │ ╰ note: this could be a typo, a name used outside its scope, or a missing declaration; if it is a function or type from another module, you may need to import it first + │ help: a similar imported name exists + │ ╭╴ + │ 12 - ["+", "a", "b"] + │ 12 + ["+", "a", "~↑√∛cbrt"] + │ ╰╴ + │ ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:171:21 + │ + ├▶ unexpected diagnostic: + │ error[expander::unresolved-variable]: Unresolved variable + │ ╭▸ + │ 12 │ ["+", "a", "b"] + │ │ ━ cannot find `a` in this scope + │ │ + │ ╰ note: this could be a typo, a name used outside its scope, or a missing declaration; if it is a function or type from another module, you may need to import it first + │ help: a similar imported name exists + │ ╭╴ + │ 12 - ["+", "a", "b"] + │ 12 + ["+", "↑√∛ccesss", "b"] + │ ╰╴ + │ ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:171:21 + │ + ╰▶ unexpected diagnostic: + error[expander::fn-params-type-annotation]: Type annotation on parameter list + ╭▸ + 8 │ "#type": "Int" + │ ━━━ type annotation is not allowed on the parameter list + │ + ╰ help: remove the type annotation; each parameter already declares its type individually as `(name: type)` + ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:171:21 + +[58/167] hashql-ast lower::expander::special-form-expander::use-struct-type +──────────────────────────────────────────────────────────────────────────────── +Failed to verify annotation +├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:321:29 +├╴1 additional opaque attachment +│ +╰┬▶ unfulfilled annotation: DiagnosticAnnotation { category: None, severity: Error, message: "Remove this type annotation", line: Some(8) } did not match any emitted diagnostics + │ ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:151:25 + │ + ├▶ unexpected diagnostic: + │ error[expander::unresolved-variable]: Unresolved variable + │ ╭▸ + │ 11 │ "x" + │ │ ━ cannot find `x` in this scope + │ │ + │ ╰ note: this could be a typo, a name used outside its scope, or a missing declaration; if it is a function or type from another module, you may need to import it first + │ help: a similar imported name exists + │ ╭╴ + │ 11 - "x" + │ 11 + "~↑√∛index" + │ ╰╴ + │ ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:171:21 + │ + ╰▶ unexpected diagnostic: + error[expander::package-not-found]: Package not found + ╭▸ + 5 │ "::math", + │ ┬─┯━━━ + │ │ │ + │ │ cannot find package `math` + │ in this path + │ + ├ help: check the package name, or add it to the project dependencies + ╰ note: absolute paths start from an installed package + ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:171:21 + +[59/167] hashql-ast lower::expander::special-form-expander::type-generic-absolute-path +──────────────────────────────────────────────────────────────────────────────── +Failed to verify annotation +├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:321:29 +├╴1 additional opaque attachment +│ +╰┬▶ unfulfilled annotation: DiagnosticAnnotation { category: None, severity: Error, message: "Generic arguments must be simple identifiers", line: Some(5) } did not match any emitted diagnostics + │ ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:151:25 + │ + ├▶ unexpected diagnostic: + │ error[expander::unresolved-variable]: Unresolved variable + │ ╭▸ + │ 7 │ { "#struct": { "foo": "Bar" } }, + │ │ ━━━ cannot find `Bar` in this scope + │ │ + │ ├ help: check the spelling, or import the name with a `use` statement + │ ╰ note: this could be a typo, a name used outside its scope, or a missing declaration; if it is a function or type from another module, you may need to import it first + │ ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:171:21 + │ + ╰▶ unexpected diagnostic: + error[expander::invalid-generic-argument]: Invalid generic argument + ╭▸ + 5 │ "Foo<::foo::Bar>", + │ ━━━━━━━━━━ expected a simple type parameter + │ + ├ help: use a simple identifier like `T`, not a qualified path + ╰ note: generic parameters are declared as `Name` for unconstrained or `Name` for constrained parameters + ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:171:21 + +[60/167] hashql-ast lower::expander::special-form-expander::type-expr-invalid +──────────────────────────────────────────────────────────────────────────────── +Failed to verify annotation +├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:321:29 +├╴1 additional opaque attachment +│ +╰┬▶ unfulfilled annotation: DiagnosticAnnotation { category: None, severity: Error, message: "Replace this as with a proper type expression", line: Some(13) } did not match any emitted diagnostics + │ ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:151:25 + │ + ├▶ unfulfilled annotation: DiagnosticAnnotation { category: None, severity: Error, message: "Replace this literal with a type name", line: Some(16) } did not match any emitted diagnostics + │ ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:151:25 + │ + ├▶ unfulfilled annotation: DiagnosticAnnotation { category: None, severity: Error, message: "Replace this list with a proper type expression", line: Some(19) } did not match any emitted diagnostics + │ ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:151:25 + │ + ├▶ unfulfilled annotation: DiagnosticAnnotation { category: None, severity: Error, message: "Replace this dictionary with a proper type expression", line: Some(22) } did not match any emitted diagnostics + │ ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:151:25 + │ + ├▶ unexpected diagnostic: + │ error[expander::invalid-expression-in-type-position]: Invalid expression in type position + │ ╭▸ + │ 22 │ { "#dict": { "a": "b" } } + │ │ ━━━━━━━━━━━━━━━━━━━━━━━━━ cannot use a dictionary expression as a type + │ │ + │ ├ help: replace this with a type path, tuple type, struct type, `_`, `(| ...)`, or `(& ...)` + │ ╰ note: valid type forms are: type paths like `String`, tuple types like `(Int, String)`, struct types like `(name: String)`, `_` for inference, unions `(| ...)`, and intersections `(& ...)` + │ ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:171:21 + │ + ├▶ unexpected diagnostic: + │ error[expander::item-not-found]: Item not found + │ ╭▸ + │ 13 │ ["::kernel::special_form::as", "x", "X"] + │ │ ┬─────────── ━━ cannot find `as` in module `::kernel::special_form` + │ │ │ + │ │ looked in this module + │ │ + │ ╰ help: check the spelling and ensure the item is exported + │ ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:171:21 + │ + ├▶ unexpected diagnostic: + │ error[expander::unresolved-variable]: Unresolved variable + │ ╭▸ + │ 13 │ ["::kernel::special_form::as", "x", "X"] + │ │ ━ cannot find `x` in this scope + │ │ + │ ╰ note: this could be a typo, a name used outside its scope, or a missing declaration; if it is a function or type from another module, you may need to import it first + │ help: a similar imported name exists + │ ╭╴ + │ 13 - ["::kernel::special_form::as", "x", "X"] + │ 13 + ["::kernel::special_form::as", "StringUnionUnknownUrl|", "X"] + │ ╰╴ + │ ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:171:21 + │ + ├▶ unexpected diagnostic: + │ error[expander::unresolved-variable]: Unresolved variable + │ ╭▸ + │ 13 │ ["::kernel::special_form::as", "x", "X"] + │ │ ━ cannot find `X` in this scope + │ │ + │ ╰ note: this could be a typo, a name used outside its scope, or a missing declaration; if it is a function or type from another module, you may need to import it first + │ help: a similar imported name exists + │ ╭╴ + │ 13 - ["::kernel::special_form::as", "x", "X"] + │ 13 + ["::kernel::special_form::as", "x", "StringUnionUnknownUrl|"] + │ ╰╴ + │ ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:171:21 + │ + ├▶ unexpected diagnostic: + │ error[expander::invalid-expression-in-type-position]: Invalid expression in type position + │ ╭▸ + │ 16 │ { "#literal": 1 } + │ │ ━━━━━━━━━━━━━━━━━ cannot use a literal value as a type + │ │ + │ ├ help: replace this with a type path, tuple type, struct type, `_`, `(| ...)`, or `(& ...)` + │ ╰ note: valid type forms are: type paths like `String`, tuple types like `(Int, String)`, struct types like `(name: String)`, `_` for inference, unions `(| ...)`, and intersections `(& ...)` + │ ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:171:21 + │ + ├▶ unexpected diagnostic: + │ error[expander::unresolved-variable]: Unresolved variable + │ ╭▸ + │ 19 │ { "#list": ["a", "b"] } + │ │ ━ cannot find `a` in this scope + │ │ + │ ╰ note: this could be a typo, a name used outside its scope, or a missing declaration; if it is a function or type from another module, you may need to import it first + │ help: a similar imported name exists + │ ╭╴ + │ 19 - { "#list": ["a", "b"] } + │ 19 + { "#list": ["UnionUnknownUrl|Boolean", "b"] } + │ ╰╴ + │ ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:171:21 + │ + ├▶ unexpected diagnostic: + │ error[expander::unresolved-variable]: Unresolved variable + │ ╭▸ + │ 19 │ { "#list": ["a", "b"] } + │ │ ━ cannot find `b` in this scope + │ │ + │ ╰ note: this could be a typo, a name used outside its scope, or a missing declaration; if it is a function or type from another module, you may need to import it first + │ help: a similar imported name exists + │ ╭╴ + │ 19 - { "#list": ["a", "b"] } + │ 19 + { "#list": ["a", "UnionUnknownUrl|Number"] } + │ ╰╴ + │ ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:171:21 + │ + ├▶ unexpected diagnostic: + │ error[expander::invalid-expression-in-type-position]: Invalid expression in type position + │ ╭▸ + │ 19 │ { "#list": ["a", "b"] } + │ │ ━━━━━━━━━━━━━━━━━━━━━━━ cannot use a list expression as a type + │ │ + │ ├ help: replace this with a type path, tuple type, struct type, `_`, `(| ...)`, or `(& ...)` + │ ╰ note: valid type forms are: type paths like `String`, tuple types like `(Int, String)`, struct types like `(name: String)`, `_` for inference, unions `(| ...)`, and intersections `(& ...)` + │ ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:171:21 + │ + ├▶ unexpected diagnostic: + │ error[expander::unresolved-variable]: Unresolved variable + │ ╭▸ + │ 22 │ { "#dict": { "a": "b" } } + │ │ ━ cannot find `b` in this scope + │ │ + │ ╰ note: this could be a typo, a name used outside its scope, or a missing declaration; if it is a function or type from another module, you may need to import it first + │ help: a similar imported name exists + │ ╭╴ + │ 22 - { "#dict": { "a": "b" } } + │ 22 + { "#dict": { "a": "UnionUnknownUrl|Number" } } + │ ╰╴ + │ ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:171:21 + │ + ╰▶ unexpected diagnostic: + error[expander::unresolved-variable]: Unresolved variable + ╭▸ + 11 │ "x", + │ ━ cannot find `x` in this scope + │ + ╰ note: this could be a typo, a name used outside its scope, or a missing declaration; if it is a function or type from another module, you may need to import it first + help: a similar imported name exists + ╭╴ + 11 - "x", + 11 + "~↑√∛index", + ╰╴ + ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:171:21 + +[61/167] hashql-ast lower::expander::special-form-expander::fn-generics-tuple +──────────────────────────────────────────────────────────────────────────────── +Expected trial to pass, but it failed +├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:390:24 +╰╴1 additional opaque attachment + +[62/167] hashql-ast lower::expander::special-form-expander::newtype-4 +──────────────────────────────────────────────────────────────────────────────── +Failed to verify annotation +├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:321:29 +├╴1 additional opaque attachment +│ +╰┬▶ unfulfilled annotation: DiagnosticAnnotation { category: None, severity: Error, message: "Remove this argument", line: Some(8) } did not match any emitted diagnostics + │ ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:151:25 + │ + ╰▶ unexpected diagnostic: + error[expander::invalid-argument-count]: Invalid argument count + ╭▸ + 3 │ ┏ [ + 4 │ ┃ "::kernel::special_form::newtype", + 5 │ ┃ "x", + 6 │ ┃ "Boolean", + 7 │ ┃ ["+", "x", "x"], + 8 │ ┃ { "#literal": true } + │ ┃ ──────────────────── unexpected argument + 9 │ ┃ //~^ ERROR Remove this argument + 10 │ ┃ ] + │ ┗━┛ expected 3 arguments to `newtype`, found 4 + │ + ├ help: use `(newtype Name type-expr body)` + ╰ note: the arguments are, in order: the type name (optionally with generic parameters), the underlying type, and the body where the name is in scope + ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:171:21 + +[63/167] hashql-ast lower::expander::special-form-expander::use-glob-not-ident +──────────────────────────────────────────────────────────────────────────────── +Failed to verify annotation +├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:321:29 +├╴1 additional opaque attachment +│ +╰┬▶ unfulfilled annotation: DiagnosticAnnotation { category: None, severity: Error, message: "Use a simple identifier here", line: Some(6) } did not match any emitted diagnostics + │ ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:151:25 + │ + ╰▶ unexpected diagnostic: + error[expander::invalid-use-imports]: Invalid use imports + ╭▸ + 6 │ "::core::math::X", + │ ━━━━━━━━━━━━━━━ expected `*`, a tuple of names, or a struct of aliases + │ + ╰ help: use `*` to import everything, `(a, b)` to import specific names, or `(a: alias, b: _)` to import with aliases + ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:171:21 + +[64/167] hashql-ast lower::expander::special-form-expander::as-3 +──────────────────────────────────────────────────────────────────────────────── +Failed to verify annotation +├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:321:29 +├╴1 additional opaque attachment +│ +╰┬▶ unfulfilled annotation: DiagnosticAnnotation { category: None, severity: Error, message: "Remove this argument", line: Some(7) } did not match any emitted diagnostics + │ ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:151:25 + │ + ╰▶ unexpected diagnostic: + error[expander::invalid-argument-count]: Invalid argument count + ╭▸ + 3 │ ┏ [ + 4 │ ┃ "::kernel::special_form::as", + 5 │ ┃ { "#literal": true }, + 6 │ ┃ { "#literal": true }, + 7 │ ┃ { "#literal": true } + │ ┃ ──────────────────── unexpected argument + 8 │ ┃ //~^ ERROR Remove this argument + 9 │ ┃ ] + │ ┗━┛ expected 2 arguments to `as`, found 3 + │ + ├ help: use `(as value type)` + ╰ note: the first argument is the value to cast and the second is the target type + ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:171:21 + +[65/167] hashql-ast lower::expander::special-form-expander::type-expr-call-union +──────────────────────────────────────────────────────────────────────────────── +Expected trial to pass, but it failed +├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:390:24 +╰╴1 additional opaque attachment + +[66/167] hashql-ast lower::expander::special-form-expander::input-3 +──────────────────────────────────────────────────────────────────────────────── +Expected trial to pass, but it failed +├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:390:24 +╰╴1 additional opaque attachment + +[67/167] hashql-ast lower::expander::special-form-expander::index-2 +──────────────────────────────────────────────────────────────────────────────── +Expected trial to pass, but it failed +├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:390:24 +╰╴1 additional opaque attachment + +[68/167] hashql-ast lower::expander::special-form-expander::fn-4 +──────────────────────────────────────────────────────────────────────────────── +Expected trial to pass, but it failed +├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:390:24 +╰╴1 additional opaque attachment + +[69/167] hashql-ast lower::expander::special-form-expander::use-glob +──────────────────────────────────────────────────────────────────────────────── +Expected trial to pass, but it failed +├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:390:24 +╰╴1 additional opaque attachment + +[70/167] hashql-ast lower::expander::special-form-expander::use-literal +──────────────────────────────────────────────────────────────────────────────── +Failed to verify annotation +├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:321:29 +├╴1 additional opaque attachment +│ +╰┬▶ unfulfilled annotation: DiagnosticAnnotation { category: None, severity: Error, message: "Replace with a valid import expression", line: Some(6) } did not match any emitted diagnostics + │ ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:151:25 + │ + ╰▶ unexpected diagnostic: + error[expander::invalid-use-imports]: Invalid use imports + ╭▸ + 6 │ { "#literal": 1 }, + │ ━━━━━━━━━━━━━━━━━ expected `*`, a tuple of names, or a struct of aliases + │ + ╰ help: use `*` to import everything, `(a, b)` to import specific names, or `(a: alias, b: _)` to import with aliases + ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:171:21 + +[71/167] hashql-ast lower::expander::special-form-expander::fn-generics-tuple-literal +──────────────────────────────────────────────────────────────────────────────── +Failed to verify annotation +├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:321:29 +├╴1 additional opaque attachment +│ +╰┬▶ unfulfilled annotation: DiagnosticAnnotation { category: None, severity: Error, message: "Use a valid generics expression", line: Some(7) } did not match any emitted diagnostics + │ ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:151:25 + │ + ├▶ unexpected diagnostic: + │ error[expander::unresolved-variable]: Unresolved variable + │ ╭▸ + │ 13 │ ["+", "a", "b"] + │ │ ━ cannot find `b` in this scope + │ │ + │ ╰ note: this could be a typo, a name used outside its scope, or a missing declaration; if it is a function or type from another module, you may need to import it first + │ help: a similar imported name exists + │ ╭╴ + │ 13 - ["+", "a", "b"] + │ 13 + ["+", "a", "~↑√∛cbrt"] + │ ╰╴ + │ ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:171:21 + │ + ├▶ unexpected diagnostic: + │ error[expander::unresolved-variable]: Unresolved variable + │ ╭▸ + │ 13 │ ["+", "a", "b"] + │ │ ━ cannot find `a` in this scope + │ │ + │ ╰ note: this could be a typo, a name used outside its scope, or a missing declaration; if it is a function or type from another module, you may need to import it first + │ help: a similar imported name exists + │ ╭╴ + │ 13 - ["+", "a", "b"] + │ 13 + ["+", "↑√∛ccesss", "b"] + │ ╰╴ + │ ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:171:21 + │ + ╰▶ unexpected diagnostic: + error[expander::invalid-fn-generic-param]: Invalid generic parameter + ╭▸ + 7 │ { "#literal": 1 } + │ ━━━━━━━━━━━━━━━━━ expected a simple type parameter name + │ + ╰ help: each generic parameter must be a plain identifier like `T`, not a qualified path or expression + ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:171:21 + +[72/167] hashql-ast lower::expander::special-form-expander::type-expr-struct +──────────────────────────────────────────────────────────────────────────────── +Expected trial to pass, but it failed +├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:390:24 +╰╴1 additional opaque attachment + +[73/167] hashql-ast lower::expander::special-form-expander::type-generic-constraint +──────────────────────────────────────────────────────────────────────────────── +Expected trial to pass, but it failed +├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:390:24 +╰╴1 additional opaque attachment + +[74/167] hashql-ast lower::expander::special-form-expander::use-tuple-literal +──────────────────────────────────────────────────────────────────────────────── +Failed to verify annotation +├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:321:29 +├╴1 additional opaque attachment +│ +╰┬▶ unfulfilled annotation: DiagnosticAnnotation { category: None, severity: Error, message: "Replace with a valid import expression", line: Some(6) } did not match any emitted diagnostics + │ ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:151:25 + │ + ├▶ unexpected diagnostic: + │ error[expander::unresolved-variable]: Unresolved variable + │ ╭▸ + │ 8 │ "x" + │ │ ━ cannot find `x` in this scope + │ │ + │ ╰ note: this could be a typo, a name used outside its scope, or a missing declaration; if it is a function or type from another module, you may need to import it first + │ help: a similar imported name exists + │ ╭╴ + │ 8 - "x" + │ 8 + "~↑√∛index" + │ ╰╴ + │ ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:171:21 + │ + ╰▶ unexpected diagnostic: + error[expander::invalid-use-import-binding]: Invalid use import binding + ╭▸ + 6 │ { "#tuple": [{ "#literal": 1 }] }, + │ ━━━━━━━━━━━━━━━━━ expected a simple name to import + │ + ╰ help: each import must be a plain identifier like `foo`, not a qualified path or expression + ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:171:21 + +[75/167] hashql-ast lower::expander::special-form-expander::input-1 +──────────────────────────────────────────────────────────────────────────────── +Failed to verify annotation +├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:321:29 +├╴1 additional opaque attachment +│ +╰┬▶ unfulfilled annotation: DiagnosticAnnotation { category: None, severity: Error, message: "Add missing arguments", line: Some(3) } did not match any emitted diagnostics + │ ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:151:25 + │ + ╰▶ unexpected diagnostic: + error[expander::invalid-argument-count]: Invalid argument count + ╭▸ + 3 │ ["::kernel::special_form::input", "x"] + │ ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ expected 2 or 3 arguments to `input`, found 1 + │ + ├ help: use `(input name type)` or `(input name type default)` + ╰ note: the arguments are, in order: the input name, its type, and an optional default value + ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:171:21 + +[76/167] hashql-ast lower::expander::special-form-expander::fn-generics-tuple-path +──────────────────────────────────────────────────────────────────────────────── +Failed to verify annotation +├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:321:29 +├╴1 additional opaque attachment +│ +╰┬▶ unfulfilled annotation: DiagnosticAnnotation { category: None, severity: Error, message: "Use a simple identifier here", line: Some(7) } did not match any emitted diagnostics + │ ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:151:25 + │ + ├▶ unexpected diagnostic: + │ error[expander::unresolved-variable]: Unresolved variable + │ ╭▸ + │ 13 │ ["+", "a", "b"] + │ │ ━ cannot find `b` in this scope + │ │ + │ ╰ note: this could be a typo, a name used outside its scope, or a missing declaration; if it is a function or type from another module, you may need to import it first + │ help: a similar imported name exists + │ ╭╴ + │ 13 - ["+", "a", "b"] + │ 13 + ["+", "a", "~↑√∛cbrt"] + │ ╰╴ + │ ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:171:21 + │ + ├▶ unexpected diagnostic: + │ error[expander::unresolved-variable]: Unresolved variable + │ ╭▸ + │ 13 │ ["+", "a", "b"] + │ │ ━ cannot find `a` in this scope + │ │ + │ ╰ note: this could be a typo, a name used outside its scope, or a missing declaration; if it is a function or type from another module, you may need to import it first + │ help: a similar imported name exists + │ ╭╴ + │ 13 - ["+", "a", "b"] + │ 13 + ["+", "↑√∛ccesss", "b"] + │ ╰╴ + │ ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:171:21 + │ + ╰▶ unexpected diagnostic: + error[expander::invalid-fn-generic-param]: Invalid generic parameter + ╭▸ + 7 │ "::core::math::add" + │ ━━━━━━━━━━━━━━━━━ expected a simple type parameter name + │ + ╰ help: each generic parameter must be a plain identifier like `T`, not a qualified path or expression + ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:171:21 + +[77/167] hashql-ast lower::expander::special-form-expander::newtype-2 +──────────────────────────────────────────────────────────────────────────────── +Failed to verify annotation +├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:321:29 +├╴1 additional opaque attachment +│ +╰┬▶ unfulfilled annotation: DiagnosticAnnotation { category: None, severity: Error, message: "Add missing arguments", line: Some(3) } did not match any emitted diagnostics + │ ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:151:25 + │ + ╰▶ unexpected diagnostic: + error[expander::invalid-argument-count]: Invalid argument count + ╭▸ + 3 │ ["::kernel::special_form::newtype", "x", "Integer"] + │ ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ expected 3 arguments to `newtype`, found 2 + │ + ├ help: use `(newtype Name type-expr body)` + ╰ note: the arguments are, in order: the type name (optionally with generic parameters), the underlying type, and the body where the name is in scope + ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:171:21 + +[78/167] hashql-ast lower::expander::special-form-expander::fn-generics-struct-type +──────────────────────────────────────────────────────────────────────────────── +Failed to verify annotation +├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:321:29 +├╴1 additional opaque attachment +│ +╰┬▶ unfulfilled annotation: DiagnosticAnnotation { category: None, severity: Error, message: "Remove this type annotation", line: Some(7) } did not match any emitted diagnostics + │ ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:151:25 + │ + ├▶ unexpected diagnostic: + │ error[expander::unresolved-variable]: Unresolved variable + │ ╭▸ + │ 12 │ ["+", "a", "b"] + │ │ ━ cannot find `b` in this scope + │ │ + │ ╰ note: this could be a typo, a name used outside its scope, or a missing declaration; if it is a function or type from another module, you may need to import it first + │ help: a similar imported name exists + │ ╭╴ + │ 12 - ["+", "a", "b"] + │ 12 + ["+", "a", "~↑√∛cbrt"] + │ ╰╴ + │ ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:171:21 + │ + ├▶ unexpected diagnostic: + │ error[expander::unresolved-variable]: Unresolved variable + │ ╭▸ + │ 6 │ "#struct": { "T": "Int" }, + │ │ ━━━ cannot find `Int` in this scope + │ │ + │ ├ help: check the spelling, or import the name with a `use` statement + │ ╰ note: this could be a typo, a name used outside its scope, or a missing declaration; if it is a function or type from another module, you may need to import it first + │ ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:171:21 + │ + ├▶ unexpected diagnostic: + │ error[expander::unresolved-variable]: Unresolved variable + │ ╭▸ + │ 12 │ ["+", "a", "b"] + │ │ ━ cannot find `a` in this scope + │ │ + │ ╰ note: this could be a typo, a name used outside its scope, or a missing declaration; if it is a function or type from another module, you may need to import it first + │ help: a similar imported name exists + │ ╭╴ + │ 12 - ["+", "a", "b"] + │ 12 + ["+", "↑√∛ccesss", "b"] + │ ╰╴ + │ ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:171:21 + │ + ╰▶ unexpected diagnostic: + error[expander::fn-generics-type-annotation]: Type annotation on generic parameter list + ╭▸ + 7 │ "#type": "Int" + │ ━━━ type annotation is not allowed on the generic parameter list + │ + ├ help: remove the type annotation; the generic parameter list declares type variables, not a typed value + ╰ note: write `(fn (T, U) ...)` for unbounded generics or `(fn (T: bound, U: _) ...)` for bounded generics + ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:171:21 + +[79/167] hashql-ast lower::expander::special-form-expander::fn-params-tuple +──────────────────────────────────────────────────────────────────────────────── +Failed to verify annotation +├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:321:29 +├╴1 additional opaque attachment +│ +╰┬▶ unfulfilled annotation: DiagnosticAnnotation { category: None, severity: Error, message: "Use a struct expression for parameters", line: Some(6) } did not match any emitted diagnostics + │ ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:151:25 + │ + ├▶ unexpected diagnostic: + │ error[expander::unresolved-variable]: Unresolved variable + │ ╭▸ + │ 9 │ ["+", "a", "b"] + │ │ ━ cannot find `b` in this scope + │ │ + │ ╰ note: this could be a typo, a name used outside its scope, or a missing declaration; if it is a function or type from another module, you may need to import it first + │ help: a similar imported name exists + │ ╭╴ + │ 9 - ["+", "a", "b"] + │ 9 + ["+", "a", "~↑√∛cbrt"] + │ ╰╴ + │ ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:171:21 + │ + ├▶ unexpected diagnostic: + │ error[expander::unresolved-variable]: Unresolved variable + │ ╭▸ + │ 9 │ ["+", "a", "b"] + │ │ ━ cannot find `a` in this scope + │ │ + │ ╰ note: this could be a typo, a name used outside its scope, or a missing declaration; if it is a function or type from another module, you may need to import it first + │ help: a similar imported name exists + │ ╭╴ + │ 9 - ["+", "a", "b"] + │ 9 + ["+", "↑√∛ccesss", "b"] + │ ╰╴ + │ ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:171:21 + │ + ╰▶ unexpected diagnostic: + error[expander::invalid-fn-params]: Invalid parameter list + ╭▸ + 6 │ { "#tuple": [] }, + │ ━━━━━━━━━━━━━━━━ expected a struct for function parameters + │ + ╰ help: write parameters as `(x: int, y: string)` where each field declares a parameter and its type + ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:171:21 + +[80/167] hashql-ast lower::expander::special-form-expander::use-tuple-type +──────────────────────────────────────────────────────────────────────────────── +Failed to verify annotation +├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:321:29 +├╴1 additional opaque attachment +│ +╰┬▶ unfulfilled annotation: DiagnosticAnnotation { category: None, severity: Error, message: "Remove this type annotation", line: Some(6) } did not match any emitted diagnostics + │ ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:151:25 + │ + ├▶ unexpected diagnostic: + │ error[expander::unresolved-variable]: Unresolved variable + │ ╭▸ + │ 8 │ "x" + │ │ ━ cannot find `x` in this scope + │ │ + │ ╰ note: this could be a typo, a name used outside its scope, or a missing declaration; if it is a function or type from another module, you may need to import it first + │ help: a similar imported name exists + │ ╭╴ + │ 8 - "x" + │ 8 + "~↑√∛index" + │ ╰╴ + │ ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:171:21 + │ + ╰▶ unexpected diagnostic: + error[expander::invalid-use-import-binding]: Invalid use import binding + ╭▸ + 6 │ { "#tuple": ["::core::math::sub"], "#type": "Number" }, + │ ━━━━━━━━━━━━━━━━━ expected a simple name to import + │ + ╰ help: each import must be a plain identifier like `foo`, not a qualified path or expression + ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:171:21 + +[81/167] hashql-ast lower::expander::special-form-expander::too-many-segments +──────────────────────────────────────────────────────────────────────────────── +Failed to verify annotation +├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:321:29 +├╴1 additional opaque attachment +│ +╰┬▶ unfulfilled annotation: DiagnosticAnnotation { category: None, severity: Error, message: "Remove this extra segment", line: Some(4) } did not match any emitted diagnostics + │ ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:151:25 + │ + ╰▶ unexpected diagnostic: + error[expander::module-required]: Module required + ╭▸ + 4 │ "::kernel::special_form::if::extra", + │ ┯━ ───── cannot access items inside a non-module + │ │ + │ `::kernel::special_form::if` is a value, not a module + │ + ├ help: if you meant to access a field, use `.` instead of `::` + ╰ note: the `::` separator navigates into modules; values and types do not contain sub-items + ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:171:21 + +[82/167] hashql-ast lower::expander::special-form-expander::fn-generics-struct-underscore +──────────────────────────────────────────────────────────────────────────────── +Expected trial to pass, but it failed +├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:390:24 +╰╴1 additional opaque attachment + +[83/167] hashql-ast lower::expander::special-form-expander::type-infer +──────────────────────────────────────────────────────────────────────────────── +Expected trial to pass, but it failed +├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:390:24 +╰╴1 additional opaque attachment + +[84/167] hashql-ast lower::expander::special-form-expander::as-2 +──────────────────────────────────────────────────────────────────────────────── +Expected trial to pass, but it failed +├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:390:24 +╰╴1 additional opaque attachment + +[85/167] hashql-ast lower::expander::special-form-expander::access-field-literal-type-annotation +──────────────────────────────────────────────────────────────────────────────── +Failed to verify annotation +├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:321:29 +├╴1 additional opaque attachment +│ +╰┬▶ unfulfilled annotation: DiagnosticAnnotation { category: None, severity: Error, message: "Remove this type annotation", line: Some(6) } did not match any emitted diagnostics + │ ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:151:25 + │ + ├▶ unexpected diagnostic: + │ error[expander::unresolved-variable]: Unresolved variable + │ ╭▸ + │ 5 │ "tuple", + │ │ ━━━━━ cannot find `tuple` in this scope + │ │ + │ ├ help: check the spelling, or import the name with a `use` statement + │ ╰ note: this could be a typo, a name used outside its scope, or a missing declaration; if it is a function or type from another module, you may need to import it first + │ ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:171:21 + │ + ╰▶ unexpected diagnostic: + error[expander::field-literal-type-annotation]: Field literal with type annotation + ╭▸ + 6 │ { "#literal": 0, "#type": "Integer" } + │ ━ type annotations are not allowed on field index literals + │ + ╰ help: remove the type annotation and use a plain integer like `0` + ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:171:21 + +[86/167] hashql-ast lower::expander::special-form-expander::access-1 +──────────────────────────────────────────────────────────────────────────────── +Failed to verify annotation +├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:321:29 +├╴1 additional opaque attachment +│ +╰┬▶ unfulfilled annotation: DiagnosticAnnotation { category: None, severity: Error, message: "Add missing arguments", line: Some(3) } did not match any emitted diagnostics + │ ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:151:25 + │ + ╰▶ unexpected diagnostic: + error[expander::invalid-argument-count]: Invalid argument count + ╭▸ + 3 │ ["::kernel::special_form::access", "x"] + │ ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ expected 2 arguments to `.`, found 1 + │ + ├ help: use `(. value field)` + ╰ note: the first argument is the value and the second is the field name or index + ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:171:21 + +[87/167] hashql-ast lower::expander::special-form-expander::fn-generics-duplicates +──────────────────────────────────────────────────────────────────────────────── +Failed to verify annotation +├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:321:29 +├╴1 additional opaque attachment +│ +╰┬▶ unfulfilled annotation: DiagnosticAnnotation { category: None, severity: Error, message: "Remove this duplicate generic parameter 'T'", line: Some(5) } did not match any emitted diagnostics + │ ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:151:25 + │ + ├▶ unexpected diagnostic: + │ error[expander::unresolved-variable]: Unresolved variable + │ ╭▸ + │ 9 │ ["+", "a", "b"] + │ │ ━ cannot find `b` in this scope + │ │ + │ ╰ note: this could be a typo, a name used outside its scope, or a missing declaration; if it is a function or type from another module, you may need to import it first + │ help: a similar imported name exists + │ ╭╴ + │ 9 - ["+", "a", "b"] + │ 9 + ["+", "a", "~↑√∛cbrt"] + │ ╰╴ + │ ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:171:21 + │ + ├▶ unexpected diagnostic: + │ error[expander::unresolved-variable]: Unresolved variable + │ ╭▸ + │ 9 │ ["+", "a", "b"] + │ │ ━ cannot find `a` in this scope + │ │ + │ ╰ note: this could be a typo, a name used outside its scope, or a missing declaration; if it is a function or type from another module, you may need to import it first + │ help: a similar imported name exists + │ ╭╴ + │ 9 - ["+", "a", "b"] + │ 9 + ["+", "↑√∛ccesss", "b"] + │ ╰╴ + │ ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:171:21 + │ + ╰▶ unexpected diagnostic: + error[expander::duplicate-fn-generic]: Duplicate generic parameter + ╭▸ + 5 │ { "#tuple": ["T", "T"] }, + │ ┬ ━ duplicate generic parameter `T` + │ │ + │ `T` was first declared here + │ + ╰ help: remove the duplicate declaration or use a different name + ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:171:21 + +[88/167] hashql-ast lower::expander::special-form-expander::access-3 +──────────────────────────────────────────────────────────────────────────────── +Failed to verify annotation +├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:321:29 +├╴1 additional opaque attachment +│ +╰┬▶ unfulfilled annotation: DiagnosticAnnotation { category: None, severity: Error, message: "Remove this argument", line: Some(7) } did not match any emitted diagnostics + │ ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:151:25 + │ + ╰▶ unexpected diagnostic: + error[expander::invalid-argument-count]: Invalid argument count + ╭▸ + 3 │ ┏ [ + 4 │ ┃ "::kernel::special_form::access", + 5 │ ┃ "x", + 6 │ ┃ "y", + 7 │ ┃ "z" + │ ┃ ─ unexpected argument + 8 │ ┃ //~^ ERROR Remove this argument + 9 │ ┃ ] + │ ┗━┛ expected 2 arguments to `.`, found 3 + │ + ├ help: use `(. value field)` + ╰ note: the first argument is the value and the second is the field name or index + ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:171:21 + +[89/167] hashql-ast lower::expander::special-form-expander::input-4 +──────────────────────────────────────────────────────────────────────────────── +Failed to verify annotation +├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:321:29 +├╴1 additional opaque attachment +│ +╰┬▶ unfulfilled annotation: DiagnosticAnnotation { category: None, severity: Error, message: "Remove this argument", line: Some(8) } did not match any emitted diagnostics + │ ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:151:25 + │ + ╰▶ unexpected diagnostic: + error[expander::invalid-argument-count]: Invalid argument count + ╭▸ + 3 │ ┏ [ + 4 │ ┃ "::kernel::special_form::input", + 5 │ ┃ "x", + 6 │ ┃ "Y", + 7 │ ┃ "z", + 8 │ ┃ "w" + │ ┃ ─ unexpected argument + 9 │ ┃ //~^ ERROR Remove this argument + 10 │ ┃ ] + │ ┗━┛ expected 2 or 3 arguments to `input`, found 4 + │ + ├ help: use `(input name type)` or `(input name type default)` + ╰ note: the arguments are, in order: the input name, its type, and an optional default value + ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:171:21 + +[90/167] hashql-ast lower::expander::special-form-expander::newtype-collect-all-errors +──────────────────────────────────────────────────────────────────────────────── +Failed to verify annotation +├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:321:29 +├╴1 additional opaque attachment +│ +╰┬▶ unfulfilled annotation: DiagnosticAnnotation { category: None, severity: Error, message: "Replace this qualified path with a simple identifier", line: Some(3) } did not match any emitted diagnostics + │ ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:151:25 + │ + ├▶ unfulfilled annotation: DiagnosticAnnotation { category: None, severity: Error, message: "Replace this literal with a type name", line: Some(3) } did not match any emitted diagnostics + │ ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:151:25 + │ + ╰▶ unexpected diagnostic: + error[expander::invalid-binding-name]: Invalid binding name + ╭▸ + 3 │ ["::kernel::special_form::newtype", "::x", { "#literal": 1 }, "x"] + │ ━━━ expected a type name for the `newtype` binding + │ + ├ help: write `(newtype Name type-expr body)` with a name like `UserId` or `Pair` + ╰ note: the first argument to `newtype` introduces a new distinct type and must be a simple identifier, optionally with generic parameters + ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:171:21 + +[91/167] hashql-ast lower::expander::special-form-expander::fn-params-duplicates +──────────────────────────────────────────────────────────────────────────────── +Failed to verify annotation +├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:321:29 +├╴1 additional opaque attachment +│ +╰┬▶ unfulfilled annotation: DiagnosticAnnotation { category: None, severity: Error, message: "Remove this duplicate parameter 'a'", line: Some(6) } did not match any emitted diagnostics + │ ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:151:25 + │ + ├▶ unexpected diagnostic: + │ error[expander::unresolved-variable]: Unresolved variable + │ ╭▸ + │ 9 │ ["+", "a", "b"] + │ │ ━ cannot find `b` in this scope + │ │ + │ ╰ note: this could be a typo, a name used outside its scope, or a missing declaration; if it is a function or type from another module, you may need to import it first + │ help: a similar local binding exists + │ ╭╴ + │ 9 - ["+", "a", "b"] + │ 9 + ["+", "a", "a"] + │ ╰╴ + │ help: a similar imported name exists + │ ╭╴ + │ 9 - ["+", "a", "b"] + │ 9 + ["+", "a", "~↑√∛cbrt"] + │ ╰╴ + │ ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:171:21 + │ + ├▶ unexpected diagnostic: + │ error[expander::unresolved-variable]: Unresolved variable + │ ╭▸ + │ 6 │ { "#struct": { "a": "Int", "a": "Int" } }, + │ │ ━━━ cannot find `Int` in this scope + │ │ + │ ├ help: check the spelling, or import the name with a `use` statement + │ ╰ note: this could be a typo, a name used outside its scope, or a missing declaration; if it is a function or type from another module, you may need to import it first + │ ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:171:21 + │ + ├▶ unexpected diagnostic: + │ error[expander::duplicate-fn-parameter]: Duplicate function parameter + │ ╭▸ + │ 6 │ { "#struct": { "a": "Int", "a": "Int" } }, + │ │ ┬───────── ━━━━━━━━━━ duplicate parameter `a` + │ │ │ + │ │ `a` was first declared here + │ │ + │ ╰ help: remove the duplicate parameter or use a different name + │ ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:171:21 + │ + ╰▶ unexpected diagnostic: + error[expander::unresolved-variable]: Unresolved variable + ╭▸ + 6 │ { "#struct": { "a": "Int", "a": "Int" } }, + │ ━━━ cannot find `Int` in this scope + │ + ├ help: check the spelling, or import the name with a `use` statement + ╰ note: this could be a typo, a name used outside its scope, or a missing declaration; if it is a function or type from another module, you may need to import it first + ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:171:21 + +[92/167] hashql-ast lower::expander::special-form-expander::newtype-constraints +──────────────────────────────────────────────────────────────────────────────── +Expected trial to pass, but it failed +├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:390:24 +╰╴1 additional opaque attachment + +[93/167] hashql-ast lower::expander::special-form-expander::fn-3 +──────────────────────────────────────────────────────────────────────────────── +Failed to verify annotation +├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:321:29 +├╴1 additional opaque attachment +│ +╰┬▶ unfulfilled annotation: DiagnosticAnnotation { category: None, severity: Error, message: "Add missing arguments", line: Some(3) } did not match any emitted diagnostics + │ ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:151:25 + │ + ╰▶ unexpected diagnostic: + error[expander::invalid-argument-count]: Invalid argument count + ╭▸ + 3 │ ["::kernel::special_form::fn", { "#tuple": [] }, { "#struct": {} }, "_"] + │ ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ expected 4 arguments to `fn`, found 3 + │ + ├ help: use `(fn generics params return-type body)` + ╰ note: the arguments are, in order: the generic parameters (a tuple or struct), the function parameters (a struct), the return type, and the body expression + ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:171:21 + +[94/167] hashql-ast lower::expander::special-form-expander::fn-generics-struct-literal +──────────────────────────────────────────────────────────────────────────────── +Failed to verify annotation +├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:321:29 +├╴1 additional opaque attachment +│ +╰┬▶ unfulfilled annotation: DiagnosticAnnotation { category: None, severity: Error, message: "Replace this literal with a type name", line: Some(7) } did not match any emitted diagnostics + │ ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:151:25 + │ + ├▶ unexpected diagnostic: + │ error[expander::unresolved-variable]: Unresolved variable + │ ╭▸ + │ 13 │ ["+", "a", "b"] + │ │ ━ cannot find `b` in this scope + │ │ + │ ╰ note: this could be a typo, a name used outside its scope, or a missing declaration; if it is a function or type from another module, you may need to import it first + │ help: a similar imported name exists + │ ╭╴ + │ 13 - ["+", "a", "b"] + │ 13 + ["+", "a", "~↑√∛cbrt"] + │ ╰╴ + │ ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:171:21 + │ + ├▶ unexpected diagnostic: + │ error[expander::unresolved-variable]: Unresolved variable + │ ╭▸ + │ 13 │ ["+", "a", "b"] + │ │ ━ cannot find `a` in this scope + │ │ + │ ╰ note: this could be a typo, a name used outside its scope, or a missing declaration; if it is a function or type from another module, you may need to import it first + │ help: a similar imported name exists + │ ╭╴ + │ 13 - ["+", "a", "b"] + │ 13 + ["+", "↑√∛ccesss", "b"] + │ ╰╴ + │ ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:171:21 + │ + ╰▶ unexpected diagnostic: + error[expander::invalid-expression-in-type-position]: Invalid expression in type position + ╭▸ + 7 │ "T": { "#literal": 2 } + │ ━━━━━━━━━━━━━━━━━ cannot use a literal value as a type + │ + ├ help: replace this with a type path, tuple type, struct type, `_`, `(| ...)`, or `(& ...)` + ╰ note: valid type forms are: type paths like `String`, tuple types like `(Int, String)`, struct types like `(name: String)`, `_` for inference, unions `(| ...)`, and intersections `(& ...)` + ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:171:21 + +[95/167] hashql-ast lower::expander::special-form-expander::index-1 +──────────────────────────────────────────────────────────────────────────────── +Failed to verify annotation +├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:321:29 +├╴1 additional opaque attachment +│ +╰┬▶ unfulfilled annotation: DiagnosticAnnotation { category: None, severity: Error, message: "Add missing arguments", line: Some(3) } did not match any emitted diagnostics + │ ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:151:25 + │ + ╰▶ unexpected diagnostic: + error[expander::invalid-argument-count]: Invalid argument count + ╭▸ + 3 │ ["::kernel::special_form::index", "x"] + │ ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ expected 2 arguments to `[]`, found 1 + │ + ├ help: use `([] collection index)` + ╰ note: the first argument is the collection and the second is the index + ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:171:21 + +[96/167] hashql-ast lower::expander::special-form-expander::type-tuple-has-type +──────────────────────────────────────────────────────────────────────────────── +Failed to verify annotation +├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:321:29 +├╴1 additional opaque attachment +│ +╰┬▶ unfulfilled annotation: DiagnosticAnnotation { category: None, severity: Error, message: "Remove this type annotation", line: Some(8) } did not match any emitted diagnostics + │ ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:151:25 + │ + ├▶ unexpected diagnostic: + │ error[expander::type-annotation-in-type-position]: Type annotation in type position + │ ╭▸ + │ 6 │ ┌ { + │ 7 │ │ "#tuple": ["Int"], + │ 8 │ │ "#type": "(Int)" + │ │ │ ━━━━━ type annotations are not allowed inside a type expression + │ 9 │ │ //~^ ERROR Remove this type annotation + │ 10 │ │ }, + │ │ └───┘ this tuple is already being used as a type + │ │ + │ ├ help: remove the type annotation + │ ╰ note: in type position, `(Int, String)` already defines a tuple type + │ ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:171:21 + │ + ├▶ unexpected diagnostic: + │ error[expander::unresolved-variable]: Unresolved variable + │ ╭▸ + │ 7 │ "#tuple": ["Int"], + │ │ ━━━ cannot find `Int` in this scope + │ │ + │ ├ help: check the spelling, or import the name with a `use` statement + │ ╰ note: this could be a typo, a name used outside its scope, or a missing declaration; if it is a function or type from another module, you may need to import it first + │ ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:171:21 + │ + ├▶ unexpected diagnostic: + │ error[expander::unresolved-variable]: Unresolved variable + │ ╭▸ + │ 11 │ "x" + │ │ ━ cannot find `x` in this scope + │ │ + │ ╰ note: this could be a typo, a name used outside its scope, or a missing declaration; if it is a function or type from another module, you may need to import it first + │ help: a similar imported name exists + │ ╭╴ + │ 11 - "x" + │ 11 + "~↑√∛index" + │ ╰╴ + │ ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:171:21 + │ + ╰▶ unexpected diagnostic: + error[expander::unresolved-variable]: Unresolved variable + ╭▸ + 8 │ "#type": "(Int)" + │ ━━━ cannot find `Int` in this scope + │ + ├ help: check the spelling, or import the name with a `use` statement + ╰ note: this could be a typo, a name used outside its scope, or a missing declaration; if it is a function or type from another module, you may need to import it first + ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:171:21 + +[97/167] hashql-ast lower::expander::special-form-expander::use-glob-not-star +──────────────────────────────────────────────────────────────────────────────── +Failed to verify annotation +├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:321:29 +├╴1 additional opaque attachment +│ +╰┬▶ unfulfilled annotation: DiagnosticAnnotation { category: None, severity: Error, message: "Replace with a valid import expression", line: Some(6) } did not match any emitted diagnostics + │ ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:151:25 + │ + ╰▶ unexpected diagnostic: + error[expander::invalid-use-imports]: Invalid use imports + ╭▸ + 6 │ "X", + │ ━ expected `*`, a tuple of names, or a struct of aliases + │ + ╰ help: use `*` to import everything, `(a, b)` to import specific names, or `(a: alias, b: _)` to import with aliases + ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:171:21 + +[98/167] hashql-ast lower::expander::special-form-expander::let-argument-not-path +──────────────────────────────────────────────────────────────────────────────── +Failed to verify annotation +├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:321:29 +├╴1 additional opaque attachment +│ +╰┬▶ unfulfilled annotation: DiagnosticAnnotation { category: None, severity: Error, message: "Replace this expression with a simple identifier", line: Some(5) } did not match any emitted diagnostics + │ ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:151:25 + │ + ╰▶ unexpected diagnostic: + error[expander::invalid-binding-name]: Invalid binding name + ╭▸ + 5 │ { "#literal": true }, + │ ━━━━━━━━━━━━━━━━━━━━ expected a simple identifier for the `let` binding name + │ + ├ help: write `(let name value body)` with a plain name such as `x` + ╰ note: the first argument to `let` introduces a new local binding and must be a plain identifier without path qualification or generic arguments + ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:171:21 + +[99/167] hashql-ast lower::expander::special-form-expander::input-2 +──────────────────────────────────────────────────────────────────────────────── +Expected trial to pass, but it failed +├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:390:24 +╰╴1 additional opaque attachment + +[100/167] hashql-ast lower::expander::special-form-expander::type-unknown +──────────────────────────────────────────────────────────────────────────────── +Expected trial to pass, but it failed +├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:390:24 +╰╴1 additional opaque attachment + +[101/167] hashql-ast lower::expander::special-form-expander::type-generic-struct +──────────────────────────────────────────────────────────────────────────────── +Failed to verify annotation +├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:321:29 +├╴1 additional opaque attachment +│ +╰┬▶ unfulfilled annotation: DiagnosticAnnotation { category: None, severity: Error, message: "Generic argument types must be simple path identifiers", line: Some(5) } did not match any emitted diagnostics + │ ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:151:25 + │ + ├▶ unexpected diagnostic: + │ error[expander::unresolved-variable]: Unresolved variable + │ ╭▸ + │ 7 │ { "#struct": { "foo": "Bar" } }, + │ │ ━━━ cannot find `Bar` in this scope + │ │ + │ ├ help: check the spelling, or import the name with a `use` statement + │ ╰ note: this could be a typo, a name used outside its scope, or a missing declaration; if it is a function or type from another module, you may need to import it first + │ ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:171:21 + │ + ╰▶ unexpected diagnostic: + error[expander::invalid-generic-argument]: Invalid generic argument + ╭▸ + 5 │ "Foo<(a: String)>", + │ ━━━━━━━━━━━ expected a simple type parameter + │ + ├ help: use a simple identifier like `T` or a constraint like `T: Bound` + ╰ note: generic parameters are declared as `Name` for unconstrained or `Name` for constrained parameters + ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:171:21 + +[102/167] hashql-ast lower::expander::special-form-expander::fn-5 +──────────────────────────────────────────────────────────────────────────────── +Failed to verify annotation +├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:321:29 +├╴1 additional opaque attachment +│ +╰┬▶ unfulfilled annotation: DiagnosticAnnotation { category: None, severity: Error, message: "Remove this argument", line: Some(9) } did not match any emitted diagnostics + │ ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:151:25 + │ + ╰▶ unexpected diagnostic: + error[expander::invalid-argument-count]: Invalid argument count + ╭▸ + 3 │ ┏ [ + 4 │ ┃ "::kernel::special_form::fn", + 5 │ ┃ { "#tuple": [] }, + 6 │ ┃ { "#struct": {} }, + ‡ ┃ + 9 │ ┃ ["*", "c", "d"] + │ ┃ ─────────────── unexpected argument + 10 │ ┃ //~^ ERROR Remove this argument + 11 │ ┃ ] + │ ┗━┛ expected 4 arguments to `fn`, found 5 + │ + ├ help: use `(fn generics params return-type body)` + ╰ note: the arguments are, in order: the generic parameters (a tuple or struct), the function parameters (a struct), the return type, and the body expression + ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:171:21 + +[103/167] hashql-ast lower::expander::special-form-expander::index-3 +──────────────────────────────────────────────────────────────────────────────── +Failed to verify annotation +├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:321:29 +├╴1 additional opaque attachment +│ +╰┬▶ unfulfilled annotation: DiagnosticAnnotation { category: None, severity: Error, message: "Remove this argument", line: Some(7) } did not match any emitted diagnostics + │ ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:151:25 + │ + ╰▶ unexpected diagnostic: + error[expander::invalid-argument-count]: Invalid argument count + ╭▸ + 3 │ ┏ [ + 4 │ ┃ "::kernel::special_form::index", + 5 │ ┃ "x", + 6 │ ┃ "y", + 7 │ ┃ "z" + │ ┃ ─ unexpected argument + 8 │ ┃ //~^ ERROR Remove this argument + 9 │ ┃ ] + │ ┗━┛ expected 2 arguments to `[]`, found 3 + │ + ├ help: use `([] collection index)` + ╰ note: the first argument is the collection and the second is the index + ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:171:21 + +[104/167] hashql-ast lower::expander::special-form-expander::use-tuple-path +──────────────────────────────────────────────────────────────────────────────── +Failed to verify annotation +├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:321:29 +├╴1 additional opaque attachment +│ +╰┬▶ unfulfilled annotation: DiagnosticAnnotation { category: None, severity: Error, message: "Use a simple identifier here", line: Some(6) } did not match any emitted diagnostics + │ ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:151:25 + │ + ├▶ unexpected diagnostic: + │ error[expander::unresolved-variable]: Unresolved variable + │ ╭▸ + │ 8 │ "x" + │ │ ━ cannot find `x` in this scope + │ │ + │ ╰ note: this could be a typo, a name used outside its scope, or a missing declaration; if it is a function or type from another module, you may need to import it first + │ help: a similar imported name exists + │ ╭╴ + │ 8 - "x" + │ 8 + "~↑√∛index" + │ ╰╴ + │ ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:171:21 + │ + ╰▶ unexpected diagnostic: + error[expander::invalid-use-import-binding]: Invalid use import binding + ╭▸ + 6 │ { "#tuple": ["::core::math::sub"] }, + │ ━━━━━━━━━━━━━━━━━ expected a simple name to import + │ + ╰ help: each import must be a plain identifier like `foo`, not a qualified path or expression + ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:171:21 + +[105/167] hashql-ast lower::expander::special-form-expander::type-4 +──────────────────────────────────────────────────────────────────────────────── +Failed to verify annotation +├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:321:29 +├╴1 additional opaque attachment +│ +╰┬▶ unfulfilled annotation: DiagnosticAnnotation { category: None, severity: Error, message: "Remove this argument", line: Some(8) } did not match any emitted diagnostics + │ ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:151:25 + │ + ╰▶ unexpected diagnostic: + error[expander::invalid-argument-count]: Invalid argument count + ╭▸ + 3 │ ┏ [ + 4 │ ┃ "::kernel::special_form::type", + 5 │ ┃ "x", + 6 │ ┃ "Boolean", + 7 │ ┃ ["+", "x", "x"], + 8 │ ┃ { "#literal": true } + │ ┃ ──────────────────── unexpected argument + 9 │ ┃ //~^ ERROR Remove this argument + 10 │ ┃ ] + │ ┗━┛ expected 3 arguments to `type`, found 4 + │ + ├ help: use `(type Name type-expr body)` + ╰ note: the arguments are, in order: the type name (optionally with generic parameters), the type definition, and the body where the name is in scope + ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:171:21 + +[106/167] hashql-ast lower::expander::special-form-expander::type-expr-call-not-path +──────────────────────────────────────────────────────────────────────────────── +Failed to verify annotation +├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:321:29 +├╴1 additional opaque attachment +│ +╰┬▶ unfulfilled annotation: DiagnosticAnnotation { category: None, severity: Error, message: "Function call with non-path callee cannot be used as a type", line: Some(7) } did not match any emitted diagnostics + │ ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:151:25 + │ + ├▶ unexpected diagnostic: + │ error[expander::invalid-type-constructor-call]: Invalid type constructor call + │ ╭▸ + │ 6 │ ┌ [ + │ 7 │ │ ["+", { "#literal": 1 }, { "#literal": 2 }], + │ │ │ ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ cannot use this as a type constructor + │ 8 │ │ //~^ ERROR Function call with non-path callee cannot be used as a type + │ 9 │ │ "Int", + │ 10 │ │ "Float" + │ 11 │ │ ] + │ │ └───┘ this call appears in a type position + │ │ + │ ├ help: use a type path directly, or use `(| ...)` / `(& ...)` for unions and intersections + │ ╰ note: generic type arguments belong on the type path itself, for example `Foo`, not `(Foo T)` + │ ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:171:21 + │ + ├▶ unexpected diagnostic: + │ error[expander::unresolved-variable]: Unresolved variable + │ ╭▸ + │ 9 │ "Int", + │ │ ━━━ cannot find `Int` in this scope + │ │ + │ ├ help: check the spelling, or import the name with a `use` statement + │ ╰ note: this could be a typo, a name used outside its scope, or a missing declaration; if it is a function or type from another module, you may need to import it first + │ ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:171:21 + │ + ├▶ unexpected diagnostic: + │ error[expander::unresolved-variable]: Unresolved variable + │ ╭▸ + │ 10 │ "Float" + │ │ ━━━━━ cannot find `Float` in this scope + │ │ + │ ├ help: check the spelling, or import the name with a `use` statement + │ ╰ note: this could be a typo, a name used outside its scope, or a missing declaration; if it is a function or type from another module, you may need to import it first + │ ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:171:21 + │ + ╰▶ unexpected diagnostic: + error[expander::unresolved-variable]: Unresolved variable + ╭▸ + 7 │ ["+", { "#literal": 1 }, { "#literal": 2 }], + │ ━ cannot find `+` in this scope + │ + ╰ note: this could be a typo, a name used outside its scope, or a missing declaration; if it is a function or type from another module, you may need to import it first + help: a similar imported name exists + ╭╴ + 7 - ["+", { "#literal": 1 }, { "#literal": 2 }], + 7 + ["StringUnionUnknownUrl|", { "#literal": 1 }, { "#literal": 2 }], + ╰╴ + ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:171:21 + +[107/167] hashql-ast lower::expander::special-form-expander::unknown-special-form +──────────────────────────────────────────────────────────────────────────────── +Failed to verify annotation +├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:321:29 +├╴1 additional opaque attachment +│ +╰┬▶ unfulfilled annotation: DiagnosticAnnotation { category: None, severity: Error, message: "This special form path is invalid", line: Some(3) } did not match any emitted diagnostics + │ ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:151:25 + │ + ╰▶ unexpected diagnostic: + error[expander::item-not-found]: Item not found + ╭▸ + 3 │ ["::kernel::special_form::headpat"] + │ ┬─────────── ━━━━━━━ cannot find `headpat` in module `::kernel::special_form` + │ │ + │ looked in this module + │ + ╰ help: check the spelling and ensure the item is exported + ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:171:21 + +[108/167] hashql-ast lower::expander::special-form-expander::let-5 +──────────────────────────────────────────────────────────────────────────────── +Failed to verify annotation +├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:321:29 +├╴1 additional opaque attachment +│ +╰┬▶ unfulfilled annotation: DiagnosticAnnotation { category: None, severity: Error, message: "Remove this argument", line: Some(9) } did not match any emitted diagnostics + │ ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:151:25 + │ + ╰▶ unexpected diagnostic: + error[expander::invalid-argument-count]: Invalid argument count + ╭▸ + 3 │ ┏ [ + 4 │ ┃ "::kernel::special_form::let", + 5 │ ┃ "x", + 6 │ ┃ "Boolean", + ‡ ┃ + 9 │ ┃ { "#literal": true } + │ ┃ ──────────────────── unexpected argument + 10 │ ┃ //~^ ERROR Remove this argument + 11 │ ┃ ] + │ ┗━┛ expected 3 or 4 arguments to `let`, found 5 + │ + ├ help: use `(let name value body)` or `(let name type value body)` + ╰ note: the arguments are, in order: the binding name, an optional type annotation, the bound value, and the body expression where the name is in scope + ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:171:21 + +[109/167] hashql-ast lower::expander::special-form-expander::type-expr-call-intersection +──────────────────────────────────────────────────────────────────────────────── +Expected trial to pass, but it failed +├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:390:24 +╰╴1 additional opaque attachment + +[110/167] hashql-ast lower::expander::special-form-expander::use-struct +──────────────────────────────────────────────────────────────────────────────── +Expected trial to pass, but it failed +├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:390:24 +╰╴1 additional opaque attachment + +[111/167] hashql-ast lower::expander::special-form-expander::if-1 +──────────────────────────────────────────────────────────────────────────────── +Failed to verify annotation +├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:321:29 +├╴1 additional opaque attachment +│ +╰┬▶ unfulfilled annotation: DiagnosticAnnotation { category: None, severity: Error, message: "Add missing arguments", line: Some(3) } did not match any emitted diagnostics + │ ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:151:25 + │ + ╰▶ unexpected diagnostic: + error[expander::invalid-argument-count]: Invalid argument count + ╭▸ + 3 │ ["::kernel::special_form::if", { "#literal": true }] + │ ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ expected 2 or 3 arguments to `if`, found 1 + │ + ├ help: use `(if condition then)` or `(if condition then else)` + ╰ note: the arguments are, in order: the condition, the then branch, and an optional else branch + ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:171:21 + +[112/167] hashql-ast lower::expander::special-form-expander::type-2 +──────────────────────────────────────────────────────────────────────────────── +Failed to verify annotation +├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:321:29 +├╴1 additional opaque attachment +│ +╰┬▶ unfulfilled annotation: DiagnosticAnnotation { category: None, severity: Error, message: "Add missing arguments", line: Some(3) } did not match any emitted diagnostics + │ ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:151:25 + │ + ╰▶ unexpected diagnostic: + error[expander::invalid-argument-count]: Invalid argument count + ╭▸ + 3 │ ["::kernel::special_form::type", "x", "Integer"] + │ ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ expected 3 arguments to `type`, found 2 + │ + ├ help: use `(type Name type-expr body)` + ╰ note: the arguments are, in order: the type name (optionally with generic parameters), the type definition, and the body where the name is in scope + ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:171:21 + +[113/167] hashql-ast lower::expander::special-form-expander::use-struct-literal +──────────────────────────────────────────────────────────────────────────────── +Failed to verify annotation +├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:321:29 +├╴1 additional opaque attachment +│ +╰┬▶ unfulfilled annotation: DiagnosticAnnotation { category: None, severity: Error, message: "Replace with a valid import expression", line: Some(8) } did not match any emitted diagnostics + │ ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:151:25 + │ + ├▶ unexpected diagnostic: + │ error[expander::unresolved-variable]: Unresolved variable + │ ╭▸ + │ 12 │ "x" + │ │ ━ cannot find `x` in this scope + │ │ + │ ╰ note: this could be a typo, a name used outside its scope, or a missing declaration; if it is a function or type from another module, you may need to import it first + │ help: a similar imported name exists + │ ╭╴ + │ 12 - "x" + │ 12 + "~↑√∛index" + │ ╰╴ + │ ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:171:21 + │ + ├▶ unexpected diagnostic: + │ error[expander::package-not-found]: Package not found + │ ╭▸ + │ 5 │ "::math", + │ │ ┬─┯━━━ + │ │ │ │ + │ │ │ cannot find package `math` + │ │ in this path + │ │ + │ ├ help: check the package name, or add it to the project dependencies + │ ╰ note: absolute paths start from an installed package + │ ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:171:21 + │ + ╰▶ unexpected diagnostic: + error[expander::invalid-use-alias]: Invalid use alias + ╭▸ + 8 │ "x": { "#literal": 1 } + │ ━━━━━━━━━━━━━━━━━ expected `_` or a simple identifier as the alias + │ + ╰ help: use `_` to keep the original name or a simple identifier to rename: `(name: alias)` or `(name: _)` + ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:171:21 + +[114/167] hashql-ast lower::expander::special-form-expander::use-3 +──────────────────────────────────────────────────────────────────────────────── +Expected trial to pass, but it failed +├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:390:24 +╰╴1 additional opaque attachment + +[115/167] hashql-ast lower::expander::special-form-expander::type-generic-relative-path +──────────────────────────────────────────────────────────────────────────────── +Failed to verify annotation +├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:321:29 +├╴1 additional opaque attachment +│ +╰┬▶ unfulfilled annotation: DiagnosticAnnotation { category: None, severity: Error, message: "Generic arguments must be simple identifiers", line: Some(5) } did not match any emitted diagnostics + │ ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:151:25 + │ + ├▶ unexpected diagnostic: + │ error[expander::unresolved-variable]: Unresolved variable + │ ╭▸ + │ 7 │ { "#struct": { "foo": "Bar" } }, + │ │ ━━━ cannot find `Bar` in this scope + │ │ + │ ├ help: check the spelling, or import the name with a `use` statement + │ ╰ note: this could be a typo, a name used outside its scope, or a missing declaration; if it is a function or type from another module, you may need to import it first + │ ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:171:21 + │ + ╰▶ unexpected diagnostic: + error[expander::invalid-generic-argument]: Invalid generic argument + ╭▸ + 5 │ "Foo", + │ ━━━━━━━━ expected a simple type parameter + │ + ├ help: use a simple identifier like `T`, not a qualified path + ╰ note: generic parameters are declared as `Name` for unconstrained or `Name` for constrained parameters + ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:171:21 + +[116/167] hashql-ast lower::expander::special-form-expander::type-generic-duplicate +──────────────────────────────────────────────────────────────────────────────── +Failed to verify annotation +├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:321:29 +├╴1 additional opaque attachment +│ +╰┬▶ unfulfilled annotation: DiagnosticAnnotation { category: None, severity: Error, message: "Remove this duplicate declaration of 'T'", line: Some(5) } did not match any emitted diagnostics + │ ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:151:25 + │ + ├▶ unexpected diagnostic: + │ error[expander::unresolved-variable]: Unresolved variable + │ ╭▸ + │ 7 │ { "#struct": { "foo": "Bar" } }, + │ │ ━━━ cannot find `Bar` in this scope + │ │ + │ ├ help: check the spelling, or import the name with a `use` statement + │ ╰ note: this could be a typo, a name used outside its scope, or a missing declaration; if it is a function or type from another module, you may need to import it first + │ ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:171:21 + │ + ├▶ unexpected diagnostic: + │ error[expander::unresolved-variable]: Unresolved variable + │ ╭▸ + │ 5 │ "Foo", + │ │ ━━━ cannot find `Bar` in this scope + │ │ + │ ├ help: check the spelling, or import the name with a `use` statement + │ ╰ note: this could be a typo, a name used outside its scope, or a missing declaration; if it is a function or type from another module, you may need to import it first + │ ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:171:21 + │ + ╰▶ unexpected diagnostic: + error[expander::duplicate-generic-constraint]: Duplicate generic constraint + ╭▸ + 5 │ "Foo", + │ ┬ ━ duplicate generic parameter `T` + │ │ + │ `T` was first declared here + │ + ╰ help: remove the duplicate declaration or use a different name + ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:171:21 + +[117/167] hashql-ast lower::expander::special-form-expander::fn-generics-literal +──────────────────────────────────────────────────────────────────────────────── +Failed to verify annotation +├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:321:29 +├╴1 additional opaque attachment +│ +╰┬▶ unfulfilled annotation: DiagnosticAnnotation { category: None, severity: Error, message: "Use a valid generics expression", line: Some(5) } did not match any emitted diagnostics + │ ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:151:25 + │ + ├▶ unexpected diagnostic: + │ error[expander::unresolved-variable]: Unresolved variable + │ ╭▸ + │ 9 │ ["+", "a", "b"] + │ │ ━ cannot find `b` in this scope + │ │ + │ ╰ note: this could be a typo, a name used outside its scope, or a missing declaration; if it is a function or type from another module, you may need to import it first + │ help: a similar imported name exists + │ ╭╴ + │ 9 - ["+", "a", "b"] + │ 9 + ["+", "a", "~↑√∛cbrt"] + │ ╰╴ + │ ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:171:21 + │ + ├▶ unexpected diagnostic: + │ error[expander::unresolved-variable]: Unresolved variable + │ ╭▸ + │ 9 │ ["+", "a", "b"] + │ │ ━ cannot find `a` in this scope + │ │ + │ ╰ note: this could be a typo, a name used outside its scope, or a missing declaration; if it is a function or type from another module, you may need to import it first + │ help: a similar imported name exists + │ ╭╴ + │ 9 - ["+", "a", "b"] + │ 9 + ["+", "↑√∛ccesss", "b"] + │ ╰╴ + │ ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:171:21 + │ + ╰▶ unexpected diagnostic: + error[expander::invalid-fn-generics]: Invalid generic parameter list + ╭▸ + 5 │ { "#literal": 2 }, + │ ━━━━━━━━━━━━━━━━━ expected a tuple or struct for generic parameters + │ + ╰ help: use a tuple like `(T, U)` for unbounded generics or a struct like `(T: bound, U: _)` for bounded generics + ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:171:21 + +[118/167] hashql-ast lower::expander::special-form-expander::access-field-literal-string +──────────────────────────────────────────────────────────────────────────────── +Failed to verify annotation +├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:321:29 +├╴1 additional opaque attachment +│ +╰┬▶ unfulfilled annotation: DiagnosticAnnotation { category: None, severity: Error, message: "Use an integer literal here", line: Some(3) } did not match any emitted diagnostics + │ ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:151:25 + │ + ╰▶ unexpected diagnostic: + error[expander::invalid-field-literal-type]: Invalid field literal type + ╭▸ + 3 │ ["::kernel::special_form::access", "data", { "#literal": "field_name" }] + │ ━━━━━━━━━━━━ expected an integer for field indexing + │ + ╰ help: use an integer index like `0` for tuple field access, or a name like `field` for named field access + ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:171:21 + +[119/167] hashql-ast lower::expander::special-form-expander::type-generic-generic-ident +──────────────────────────────────────────────────────────────────────────────── +Failed to verify annotation +├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:321:29 +├╴1 additional opaque attachment +│ +╰┬▶ unfulfilled annotation: DiagnosticAnnotation { category: None, severity: Error, message: "Generic arguments must be simple identifiers", line: Some(5) } did not match any emitted diagnostics + │ ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:151:25 + │ + ├▶ unexpected diagnostic: + │ error[expander::unresolved-variable]: Unresolved variable + │ ╭▸ + │ 7 │ { "#struct": { "foo": "Bar" } }, + │ │ ━━━ cannot find `Bar` in this scope + │ │ + │ ├ help: check the spelling, or import the name with a `use` statement + │ ╰ note: this could be a typo, a name used outside its scope, or a missing declaration; if it is a function or type from another module, you may need to import it first + │ ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:171:21 + │ + ╰▶ unexpected diagnostic: + error[expander::invalid-generic-argument]: Invalid generic argument + ╭▸ + 5 │ "Foo>", + │ ━━━━━━━━ expected a simple type parameter + │ + ├ help: use a simple identifier like `T`, not a qualified path + ╰ note: generic parameters are declared as `Name` for unconstrained or `Name` for constrained parameters + ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:171:21 + +[120/167] hashql-ast lower::expander::special-form-expander::use-4 +──────────────────────────────────────────────────────────────────────────────── +Failed to verify annotation +├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:321:29 +├╴1 additional opaque attachment +│ +╰┬▶ unfulfilled annotation: DiagnosticAnnotation { category: None, severity: Error, message: "Remove this argument", line: Some(8) } did not match any emitted diagnostics + │ ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:151:25 + │ + ╰▶ unexpected diagnostic: + error[expander::invalid-argument-count]: Invalid argument count + ╭▸ + 3 │ ┏ [ + 4 │ ┃ "::kernel::special_form::use", + 5 │ ┃ "::math", + 6 │ ┃ { "#tuple": ["pi"] }, + 7 │ ┃ "x", + 8 │ ┃ "y" + │ ┃ ─ unexpected argument + 9 │ ┃ //~^ ERROR Remove this argument + 10 │ ┃ ] + │ ┗━┛ expected 3 arguments to `use`, found 4 + │ + ├ help: use `(use path imports body)` + ╰ note: the arguments are, in order: the module path to import from, the import specifier (`*`, a tuple of names, or a struct of aliases), and the body where the imports are in scope + ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:171:21 + +[121/167] hashql-ast lower::expander::special-form-expander::use-struct-path +──────────────────────────────────────────────────────────────────────────────── +Failed to verify annotation +├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:321:29 +├╴1 additional opaque attachment +│ +╰┬▶ unfulfilled annotation: DiagnosticAnnotation { category: None, severity: Error, message: "Use a simple identifier here", line: Some(8) } did not match any emitted diagnostics + │ ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:151:25 + │ + ├▶ unexpected diagnostic: + │ error[expander::unresolved-variable]: Unresolved variable + │ ╭▸ + │ 12 │ "x" + │ │ ━ cannot find `x` in this scope + │ │ + │ ╰ note: this could be a typo, a name used outside its scope, or a missing declaration; if it is a function or type from another module, you may need to import it first + │ help: a similar imported name exists + │ ╭╴ + │ 12 - "x" + │ 12 + "~↑√∛index" + │ ╰╴ + │ ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:171:21 + │ + ├▶ unexpected diagnostic: + │ error[expander::item-not-found]: Item not found + │ ╭▸ + │ 5 │ "::core", + │ │ ──── looked in this module + │ ‡ + │ 8 │ "x": "::core::math::sub" + │ │ ━ cannot find `x` in module `::core` + │ ╰╴ + │ help: a similar item exists in this module + │ ╭╴ + │ 8 - "x": "::core::math::sub" + │ 8 + "mathoptionresulturluuid": "::core::math::sub" + │ ╰╴ + │ ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:171:21 + │ + ╰▶ unexpected diagnostic: + error[expander::invalid-use-alias]: Invalid use alias + ╭▸ + 8 │ "x": "::core::math::sub" + │ ━━━━━━━━━━━━━━━━━ expected `_` or a simple identifier as the alias + │ + ╰ help: use `_` to keep the original name or a simple identifier to rename: `(name: alias)` or `(name: _)` + ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:171:21 + +[122/167] hashql-ast lower::expander::special-form-expander::if-4 +──────────────────────────────────────────────────────────────────────────────── +Failed to verify annotation +├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:321:29 +├╴1 additional opaque attachment +│ +╰┬▶ unfulfilled annotation: DiagnosticAnnotation { category: None, severity: Error, message: "Remove this argument", line: Some(8) } did not match any emitted diagnostics + │ ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:151:25 + │ + ╰▶ unexpected diagnostic: + error[expander::invalid-argument-count]: Invalid argument count + ╭▸ + 3 │ ┏ [ + 4 │ ┃ "::kernel::special_form::if", + 5 │ ┃ { "#literal": true }, + 6 │ ┃ { "#literal": true }, + 7 │ ┃ { "#literal": true }, + 8 │ ┃ { "#literal": true } + │ ┃ ──────────────────── unexpected argument + 9 │ ┃ //~^ ERROR Remove this argument + 10 │ ┃ ] + │ ┗━┛ expected 2 or 3 arguments to `if`, found 4 + │ + ├ help: use `(if condition then)` or `(if condition then else)` + ╰ note: the arguments are, in order: the condition, the then branch, and an optional else branch + ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:171:21 + +[123/167] hashql-ast lower::expander::special-form-expander::type-never +──────────────────────────────────────────────────────────────────────────────── +Expected trial to pass, but it failed +├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:390:24 +╰╴1 additional opaque attachment + +[124/167] hashql-ast lower::expander::special-form-expander::type-expr-tuple +──────────────────────────────────────────────────────────────────────────────── +Expected trial to pass, but it failed +├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:390:24 +╰╴1 additional opaque attachment + +[125/167] hashql-ast lower::expander::special-form-expander::use-tuple +──────────────────────────────────────────────────────────────────────────────── +Expected trial to pass, but it failed +├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:390:24 +╰╴1 additional opaque attachment + +[126/167] hashql-ast lower::expander::special-form-expander::let-argument-not-ident +──────────────────────────────────────────────────────────────────────────────── +Failed to verify annotation +├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:321:29 +├╴1 additional opaque attachment +│ +╰┬▶ unfulfilled annotation: DiagnosticAnnotation { category: None, severity: Error, message: "Replace this with a simple identifier", line: Some(5) } did not match any emitted diagnostics + │ ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:151:25 + │ + ├▶ unfulfilled annotation: DiagnosticAnnotation { category: None, severity: Error, message: "Replace this with a simple identifier", line: Some(10) } did not match any emitted diagnostics + │ ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:151:25 + │ + ├▶ unfulfilled annotation: DiagnosticAnnotation { category: None, severity: Error, message: "Replace this with a simple identifier", line: Some(15) } did not match any emitted diagnostics + │ ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:151:25 + │ + ╰▶ unexpected diagnostic: + error[expander::invalid-binding-name]: Invalid binding name + ╭▸ + 5 │ "Int", + │ ━━━━━━ expected a simple identifier for the `let` binding name + │ + ├ help: write `(let name value body)` with a plain name such as `x` + ╰ note: the first argument to `let` introduces a new local binding and must be a plain identifier without path qualification or generic arguments + ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:171:21 + +[127/167] hashql-ast lower::expander::special-form-expander::type-struct-has-type +──────────────────────────────────────────────────────────────────────────────── +Failed to verify annotation +├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:321:29 +├╴1 additional opaque attachment +│ +╰┬▶ unfulfilled annotation: DiagnosticAnnotation { category: None, severity: Error, message: "Remove this type annotation", line: Some(8) } did not match any emitted diagnostics + │ ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:151:25 + │ + ├▶ unexpected diagnostic: + │ error[expander::type-annotation-in-type-position]: Type annotation in type position + │ ╭▸ + │ 6 │ ┌ { + │ 7 │ │ "#struct": { "name": "String" }, + │ 8 │ │ "#type": "(name: String)" + │ │ │ ━━━━━━━━━━━━━━ type annotations are not allowed inside a type expression + │ 9 │ │ //~^ ERROR Remove this type annotation + │ 10 │ │ }, + │ │ └───┘ this struct is already being used as a type + │ │ + │ ├ help: remove the type annotation + │ ╰ note: in type position, `(name: String)` already defines a struct type + │ ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:171:21 + │ + ╰▶ unexpected diagnostic: + error[expander::unresolved-variable]: Unresolved variable + ╭▸ + 11 │ "x" + │ ━ cannot find `x` in this scope + │ + ╰ note: this could be a typo, a name used outside its scope, or a missing declaration; if it is a function or type from another module, you may need to import it first + help: a similar imported name exists + ╭╴ + 11 - "x" + 11 + "~↑√∛index" + ╰╴ + ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:171:21 + +[128/167] hashql-ast lower::expander::special-form-expander::access-field-literal-boolean +──────────────────────────────────────────────────────────────────────────────── +Failed to verify annotation +├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:321:29 +├╴1 additional opaque attachment +│ +╰┬▶ unfulfilled annotation: DiagnosticAnnotation { category: None, severity: Error, message: "Use an integer literal here", line: Some(3) } did not match any emitted diagnostics + │ ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:151:25 + │ + ╰▶ unexpected diagnostic: + error[expander::invalid-field-literal-type]: Invalid field literal type + ╭▸ + 3 │ ["::kernel::special_form::access", "data", { "#literal": true }] + │ ━━━━ expected an integer for field indexing + │ + ╰ help: use an integer index like `0` for tuple field access, or a name like `field` for named field access + ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:171:21 + +[129/167] hashql-ast lower::expander::special-form-expander::let-collect-all-errors +──────────────────────────────────────────────────────────────────────────────── +Failed to verify annotation +├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:321:29 +├╴1 additional opaque attachment +│ +╰┬▶ unfulfilled annotation: DiagnosticAnnotation { category: None, severity: Error, message: "Replace this with a simple identifier", line: Some(5) } did not match any emitted diagnostics + │ ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:151:25 + │ + ├▶ unfulfilled annotation: DiagnosticAnnotation { category: None, severity: Error, message: "Replace this literal with a type name", line: Some(7) } did not match any emitted diagnostics + │ ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:151:25 + │ + ╰▶ unexpected diagnostic: + error[expander::invalid-binding-name]: Invalid binding name + ╭▸ + 5 │ "::x", + │ ━━━ expected a simple identifier for the `let` binding name + │ + ├ help: write `(let name value body)` with a plain name such as `x` + ╰ note: the first argument to `let` introduces a new local binding and must be a plain identifier without path qualification or generic arguments + ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:171:21 + +[130/167] hashql-ast lower::expander::special-form-expander::type-collect-all-errors +──────────────────────────────────────────────────────────────────────────────── +Failed to verify annotation +├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:321:29 +├╴1 additional opaque attachment +│ +╰┬▶ unfulfilled annotation: DiagnosticAnnotation { category: None, severity: Error, message: "Replace this qualified path with a simple identifier", line: Some(3) } did not match any emitted diagnostics + │ ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:151:25 + │ + ├▶ unfulfilled annotation: DiagnosticAnnotation { category: None, severity: Error, message: "Replace this literal with a type name", line: Some(3) } did not match any emitted diagnostics + │ ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:151:25 + │ + ╰▶ unexpected diagnostic: + error[expander::invalid-binding-name]: Invalid binding name + ╭▸ + 3 │ ["::kernel::special_form::type", "::x", { "#literal": 1 }, "x"] + │ ━━━ expected a type name for the `type` binding + │ + ├ help: write `(type Name type-expr body)` with a name like `MyType` or `Pair` + ╰ note: the first argument to `type` introduces a new type alias and must be a simple identifier, optionally with generic parameters + ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:171:21 + +[131/167] hashql-ast lower::expander::special-form-expander::access-field-literal-valid +──────────────────────────────────────────────────────────────────────────────── +Expected trial to pass, but it failed +├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:390:24 +╰╴1 additional opaque attachment + +[132/167] hashql-ast lower::expander::special-form-expander::unknown-special-form-typo +──────────────────────────────────────────────────────────────────────────────── +Failed to verify annotation +├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:321:29 +├╴1 additional opaque attachment +│ +╰┬▶ unfulfilled annotation: DiagnosticAnnotation { category: None, severity: Error, message: "Did you mean to use 'newtype' instead?", line: Some(3) } did not match any emitted diagnostics + │ ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:151:25 + │ + ╰▶ unexpected diagnostic: + error[expander::item-not-found]: Item not found + ╭▸ + 3 │ ["::kernel::special_form::nuwtype"] + │ ┬─────────── ━━━━━━━ cannot find `nuwtype` in module `::kernel::special_form` + │ │ + │ looked in this module + ╰╴ + help: a similar item exists in this module + ╭╴ + 3 - ["::kernel::special_form::nuwtype"] + 3 + ["::kernel::special_form::newtype"] + ╰╴ + ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:171:21 + +[133/167] hashql-ast lower::expander::special-form-expander::type-expr-call-arbitrary +──────────────────────────────────────────────────────────────────────────────── +Failed to verify annotation +├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:321:29 +├╴1 additional opaque attachment +│ +╰┬▶ unfulfilled annotation: DiagnosticAnnotation { category: None, severity: Error, message: "This function cannot be used as a type constructor", line: Some(6) } did not match any emitted diagnostics + │ ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:151:25 + │ + ├▶ unexpected diagnostic: + │ error[expander::unresolved-variable]: Unresolved variable + │ ╭▸ + │ 6 │ ["::core::math::headpat", "Int", "Float"] + │ │ ━━━━━ cannot find `Float` in this scope + │ │ + │ ├ help: check the spelling, or import the name with a `use` statement + │ ╰ note: this could be a typo, a name used outside its scope, or a missing declaration; if it is a function or type from another module, you may need to import it first + │ ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:171:21 + │ + ├▶ unexpected diagnostic: + │ error[expander::unresolved-variable]: Unresolved variable + │ ╭▸ + │ 6 │ ["::core::math::headpat", "Int", "Float"] + │ │ ━━━ cannot find `Int` in this scope + │ │ + │ ├ help: check the spelling, or import the name with a `use` statement + │ ╰ note: this could be a typo, a name used outside its scope, or a missing declaration; if it is a function or type from another module, you may need to import it first + │ ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:171:21 + │ + ╰▶ unexpected diagnostic: + error[expander::item-not-found]: Item not found + ╭▸ + 6 │ ["::core::math::headpat", "Int", "Float"] + │ ┬─── ━━━━━━━ cannot find `headpat` in module `::core::math` + │ │ + │ looked in this module + │ + ╰ help: check the spelling and ensure the item is exported + ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:171:21 + +[134/167] hashql-ast lower::expander::special-form-expander::not-enough-segments +──────────────────────────────────────────────────────────────────────────────── +Failed to verify annotation +├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:321:29 +├╴1 additional opaque attachment +│ +╰┬▶ unfulfilled annotation: DiagnosticAnnotation { category: None, severity: Error, message: "exactly 3 segments", line: Some(4) } did not match any emitted diagnostics + │ ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:151:25 + │ + ╰▶ unexpected diagnostic: + error[expander::item-not-found]: Item not found + ╭▸ + 4 │ "::kernel::special_form", + │ ┬───── ━━━━━━━━━━━━ cannot find `special_form` in module `::kernel` + │ │ + │ looked in this module + │ + ╰ help: check the spelling and ensure the item is exported + ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:171:21 + +[135/167] hashql-ast lower::expander::special-form-expander::generics +──────────────────────────────────────────────────────────────────────────────── +Failed to verify annotation +├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:321:29 +├╴1 additional opaque attachment +│ +╰┬▶ unfulfilled annotation: DiagnosticAnnotation { category: None, severity: Error, message: "Remove these generic arguments", line: Some(3) } did not match any emitted diagnostics + │ ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:151:25 + │ + ├▶ unexpected diagnostic: + │ error[expander::generic-arguments-in-module]: Generic arguments in module path + │ ╭▸ + │ 3 │ ["::kernel::special_form::if"] + │ │ ━ generic argument not allowed here + │ │ + │ ├ help: move the generic arguments to the final segment of the path, or remove them + │ ╰ note: modules are not generic; only the final item in a path can be parameterized + │ ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:171:21 + │ + ├▶ unexpected diagnostic: + │ error[expander::unresolved-variable]: Unresolved variable + │ ╭▸ + │ 3 │ ["::kernel::special_form::if"] + │ │ ━ cannot find `U` in this scope + │ │ + │ ╰ note: this could be a typo, a name used outside its scope, or a missing declaration; if it is a function or type from another module, you may need to import it first + │ help: a similar imported name exists + │ ╭╴ + │ 3 - ["::kernel::special_form::if"] + │ 3 + ["::kernel::special_form::if<~↑√∛rl>"] + │ ╰╴ + │ ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:171:21 + │ + ╰▶ unexpected diagnostic: + error[expander::unresolved-variable]: Unresolved variable + ╭▸ + 3 │ ["::kernel::special_form::if"] + │ ━ cannot find `T` in this scope + │ + ╰ note: this could be a typo, a name used outside its scope, or a missing declaration; if it is a function or type from another module, you may need to import it first + help: a similar imported name exists + ╭╴ + 3 - ["::kernel::special_form::if"] + 3 + ["::kernel::special_form<||~↑√∛>::if"] + ╰╴ + ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:171:21 + +[136/167] hashql-ast lower::expander::special-form-expander::use-2 +──────────────────────────────────────────────────────────────────────────────── +Failed to verify annotation +├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:321:29 +├╴1 additional opaque attachment +│ +╰┬▶ unfulfilled annotation: DiagnosticAnnotation { category: None, severity: Error, message: "Add missing arguments", line: Some(3) } did not match any emitted diagnostics + │ ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:151:25 + │ + ╰▶ unexpected diagnostic: + error[expander::invalid-argument-count]: Invalid argument count + ╭▸ + 3 │ ["::kernel::special_form::use", "::math", { "#tuple": ["pi"] }] + │ ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ expected 3 arguments to `use`, found 2 + │ + ├ help: use `(use path imports body)` + ╰ note: the arguments are, in order: the module path to import from, the import specifier (`*`, a tuple of names, or a struct of aliases), and the body where the imports are in scope + ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:171:21 + +[137/167] hashql-ast lower::expander::special-form-expander::let-2 +──────────────────────────────────────────────────────────────────────────────── +Failed to verify annotation +├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:321:29 +├╴1 additional opaque attachment +│ +╰┬▶ unfulfilled annotation: DiagnosticAnnotation { category: None, severity: Error, message: "Add missing arguments", line: Some(3) } did not match any emitted diagnostics + │ ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:151:25 + │ + ╰▶ unexpected diagnostic: + error[expander::invalid-argument-count]: Invalid argument count + ╭▸ + 3 │ ["::kernel::special_form::let", "x", { "#literal": true }] + │ ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ expected 3 or 4 arguments to `let`, found 2 + │ + ├ help: use `(let name value body)` or `(let name type value body)` + ╰ note: the arguments are, in order: the binding name, an optional type annotation, the bound value, and the body expression where the name is in scope + ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:171:21 + +[138/167] hashql-ast lower::expander::special-form-expander::access-field-index-out-of-bounds +──────────────────────────────────────────────────────────────────────────────── +Failed to verify annotation +├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:321:29 +├╴1 additional opaque attachment +│ +╰┬▶ unfulfilled annotation: DiagnosticAnnotation { category: None, severity: Error, message: "Use a valid field index within usize bounds", line: Some(3) } did not match any emitted diagnostics + │ ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:151:25 + │ + ╰▶ unexpected diagnostic: + error[expander::field-index-out-of-bounds]: Field index out of bounds + ╭▸ + 3 │ ["::kernel::special_form::access", "data", { "#literal": 18446744073709551616 }] + │ ━━━━━━━━━━━━━━━━━━━━ field index is out of bounds + │ + ╰ help: use a non-negative integer that fits within platform bounds + ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:171:21 + +[139/167] hashql-ast lower::expander::special-form-expander::fn-generics-tuple-type +──────────────────────────────────────────────────────────────────────────────── +Failed to verify annotation +├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:321:29 +├╴1 additional opaque attachment +│ +╰┬▶ unfulfilled annotation: DiagnosticAnnotation { category: None, severity: Error, message: "Remove this type annotation", line: Some(7) } did not match any emitted diagnostics + │ ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:151:25 + │ + ├▶ unexpected diagnostic: + │ error[expander::unresolved-variable]: Unresolved variable + │ ╭▸ + │ 12 │ ["+", "a", "b"] + │ │ ━ cannot find `b` in this scope + │ │ + │ ╰ note: this could be a typo, a name used outside its scope, or a missing declaration; if it is a function or type from another module, you may need to import it first + │ help: a similar imported name exists + │ ╭╴ + │ 12 - ["+", "a", "b"] + │ 12 + ["+", "a", "~↑√∛cbrt"] + │ ╰╴ + │ ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:171:21 + │ + ├▶ unexpected diagnostic: + │ error[expander::unresolved-variable]: Unresolved variable + │ ╭▸ + │ 12 │ ["+", "a", "b"] + │ │ ━ cannot find `a` in this scope + │ │ + │ ╰ note: this could be a typo, a name used outside its scope, or a missing declaration; if it is a function or type from another module, you may need to import it first + │ help: a similar imported name exists + │ ╭╴ + │ 12 - ["+", "a", "b"] + │ 12 + ["+", "↑√∛ccesss", "b"] + │ ╰╴ + │ ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:171:21 + │ + ╰▶ unexpected diagnostic: + error[expander::fn-generics-type-annotation]: Type annotation on generic parameter list + ╭▸ + 7 │ "#type": "Int" + │ ━━━ type annotation is not allowed on the generic parameter list + │ + ├ help: remove the type annotation; the generic parameter list declares type variables, not a typed value + ╰ note: write `(fn (T, U) ...)` for unbounded generics or `(fn (T: bound, U: _) ...)` for bounded generics + ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:171:21 + +[140/167] hashql-ast lower::expander::special-form-expander::fn-generics-struct +──────────────────────────────────────────────────────────────────────────────── +Expected trial to pass, but it failed +├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:390:24 +╰╴1 additional opaque attachment + +[141/167] hashql-ast lower::expander::special-form-expander::labeled-argument +──────────────────────────────────────────────────────────────────────────────── +Failed to verify annotation +├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:321:29 +├╴1 additional opaque attachment +│ +╰┬▶ unfulfilled annotation: DiagnosticAnnotation { category: None, severity: Error, message: "this labeled argument", line: Some(6) } did not match any emitted diagnostics + │ ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:151:25 + │ + ╰▶ unexpected diagnostic: + error[expander::labeled-arguments-not-supported]: Labeled arguments not supported + ╭▸ + 6 │ ":test": { "#literal": true } + │ ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ labeled arguments are not allowed in `if` + │ + ╰ help: pass the arguments positionally: `(if condition then)` or `(if condition then else)` + ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:171:21 + +[142/167] hashql-ast lower::expander::special-form-expander::type-3 +──────────────────────────────────────────────────────────────────────────────── +Expected trial to pass, but it failed +├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:390:24 +╰╴1 additional opaque attachment + +[143/167] hashql-ast lower::expander::pre-expansion-name-resolver::re-assign-prelude +──────────────────────────────────────────────────────────────────────────────── +Expected trial to pass, but it failed +├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:390:24 +╰╴1 additional opaque attachment + +[144/167] hashql-ast lower::expander::pre-expansion-name-resolver::newtype-4 +──────────────────────────────────────────────────────────────────────────────── +Expected trial to pass, but it failed +├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:390:24 +╰╴1 additional opaque attachment + +[145/167] hashql-ast lower::expander::pre-expansion-name-resolver::re-assign +──────────────────────────────────────────────────────────────────────────────── +Expected trial to pass, but it failed +├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:390:24 +╰╴1 additional opaque attachment + +[146/167] hashql-ast lower::expander::pre-expansion-name-resolver::let-absolute +──────────────────────────────────────────────────────────────────────────────── +Expected trial to pass, but it failed +├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:390:24 +╰╴1 additional opaque attachment + +[147/167] hashql-ast lower::expander::pre-expansion-name-resolver::nested-let +──────────────────────────────────────────────────────────────────────────────── +Expected trial to pass, but it failed +├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:390:24 +╰╴1 additional opaque attachment + +[148/167] hashql-ast lower::expander::pre-expansion-name-resolver::absolute-path +──────────────────────────────────────────────────────────────────────────────── +Expected trial to pass, but it failed +├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:390:24 +╰╴1 additional opaque attachment + +[149/167] hashql-ast lower::expander::pre-expansion-name-resolver::newtype-3-alias +──────────────────────────────────────────────────────────────────────────────── +Expected trial to pass, but it failed +├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:390:24 +╰╴1 additional opaque attachment + +[150/167] hashql-ast lower::expander::pre-expansion-name-resolver::type-3-alias +──────────────────────────────────────────────────────────────────────────────── +Expected trial to pass, but it failed +├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:390:24 +╰╴1 additional opaque attachment + +[151/167] hashql-ast lower::expander::pre-expansion-name-resolver::multi-segment-resolution +──────────────────────────────────────────────────────────────────────────────── +Expected trial to pass, but it failed +├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:390:24 +╰╴1 additional opaque attachment + +[152/167] hashql-ast lower::expander::pre-expansion-name-resolver::let-3-alias +──────────────────────────────────────────────────────────────────────────────── +Expected trial to pass, but it failed +├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:390:24 +╰╴1 additional opaque attachment + +[153/167] hashql-ast lower::expander::pre-expansion-name-resolver::newtype-3 +──────────────────────────────────────────────────────────────────────────────── +Expected trial to pass, but it failed +├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:390:24 +╰╴1 additional opaque attachment + +[154/167] hashql-ast lower::expander::pre-expansion-name-resolver::resolve-symbol +──────────────────────────────────────────────────────────────────────────────── +Expected trial to pass, but it failed +├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:390:24 +╰╴1 additional opaque attachment + +[155/167] hashql-ast lower::expander::pre-expansion-name-resolver::type-4 +──────────────────────────────────────────────────────────────────────────────── +Expected trial to pass, but it failed +├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:390:24 +╰╴1 additional opaque attachment + +[156/167] hashql-ast lower::expander::pre-expansion-name-resolver::alias-symbol +──────────────────────────────────────────────────────────────────────────────── +Expected trial to pass, but it failed +├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:390:24 +╰╴1 additional opaque attachment + +[157/167] hashql-ast lower::expander::pre-expansion-name-resolver::let-4-alias +──────────────────────────────────────────────────────────────────────────────── +Expected trial to pass, but it failed +├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:390:24 +╰╴1 additional opaque attachment + +[158/167] hashql-ast lower::expander::pre-expansion-name-resolver::resolve-generics +──────────────────────────────────────────────────────────────────────────────── +Expected trial to pass, but it failed +├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:390:24 +╰╴1 additional opaque attachment + +[159/167] hashql-ast lower::expander::pre-expansion-name-resolver::invalid-let-expr +──────────────────────────────────────────────────────────────────────────────── +Expected trial to pass, but it failed +├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:390:24 +╰╴1 additional opaque attachment + +[160/167] hashql-ast lower::expander::pre-expansion-name-resolver::let-3 +──────────────────────────────────────────────────────────────────────────────── +Expected trial to pass, but it failed +├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:390:24 +╰╴1 additional opaque attachment + +[161/167] hashql-ast lower::expander::pre-expansion-name-resolver::re-assign-prelude-diverging +──────────────────────────────────────────────────────────────────────────────── +Expected trial to pass, but it failed +├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:390:24 +╰╴1 additional opaque attachment + +[162/167] hashql-ast lower::expander::pre-expansion-name-resolver::let-4 +──────────────────────────────────────────────────────────────────────────────── +Expected trial to pass, but it failed +├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:390:24 +╰╴1 additional opaque attachment + +[163/167] hashql-ast lower::expander::pre-expansion-name-resolver::restoration-bindings +──────────────────────────────────────────────────────────────────────────────── +Expected trial to pass, but it failed +├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:390:24 +╰╴1 additional opaque attachment + +[164/167] hashql-ast lower::expander::pre-expansion-name-resolver::let-ident-generic +──────────────────────────────────────────────────────────────────────────────── +Expected trial to pass, but it failed +├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:390:24 +╰╴1 additional opaque attachment + +[165/167] hashql-ast lower::expander::pre-expansion-name-resolver::type-3 +──────────────────────────────────────────────────────────────────────────────── +Expected trial to pass, but it failed +├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:390:24 +╰╴1 additional opaque attachment + +[166/167] hashql-ast lower::type-extractor::generic-type-resolution +──────────────────────────────────────────────────────────────────────────────── +Expected trial to pass, but it failed +├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:390:24 +╰╴1 additional opaque attachment + +[167/167] hashql-ast lower::type-extractor::definition::constraints-parsing +──────────────────────────────────────────────────────────────────────────────── +Expected trial to pass, but it failed +├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:390:24 +╰╴1 additional opaque attachment diff --git a/libs/@local/hashql/core/src/module/namespace.rs b/libs/@local/hashql/core/src/module/namespace.rs index f54b43d2796..072e0a91a35 100644 --- a/libs/@local/hashql/core/src/module/namespace.rs +++ b/libs/@local/hashql/core/src/module/namespace.rs @@ -376,6 +376,11 @@ impl<'env, 'heap> ModuleNamespace<'env, 'heap> { successful &= self.import_absolute_static("List", ["kernel", "type", "List"]); successful &= self.import_absolute_static("Dict", ["kernel", "type", "Dict"]); + successful &= self.import_absolute_static("Union", ["kernel", "type", "Union"]); + successful &= self.import_absolute_static("|", ["kernel", "type", "Union"]); + successful &= + self.import_absolute_static("Intersection", ["kernel", "type", "Intersection"]); + successful &= self.import_absolute_static("&", ["kernel", "type", "Intersection"]); successful &= self.import_absolute_static("Null", ["kernel", "type", "Null"]); diff --git a/libs/@local/hashql/diagnostics/src/diagnostic/suggestion.rs b/libs/@local/hashql/diagnostics/src/diagnostic/suggestion.rs index 8000f284693..978e8d28102 100644 --- a/libs/@local/hashql/diagnostics/src/diagnostic/suggestion.rs +++ b/libs/@local/hashql/diagnostics/src/diagnostic/suggestion.rs @@ -277,9 +277,9 @@ impl Suggestions { .get(source_id) .ok_or(RenderError::SourceNotFound(source_id))?; - let mut snippet = Snippet::source(&*source.content).path(source.path.as_deref()); - for patch in chunk { + let mut snippet = Snippet::source(&*source.content).path(source.path.as_deref()); + let patch = patch.render(context).map_err(|error| match error { RenderError::SpanNotFound(None, span) => { RenderError::SpanNotFound(Some(source_id), span) @@ -288,10 +288,10 @@ impl Suggestions { | RenderError::SpanNotFound(Some(_), _) | RenderError::ConcreteSourceNotFound => error, })?; + snippet = snippet.patch(patch); + group = group.element(snippet); } - - group = group.element(snippet); } if let Some(trailer) = self.trailer.as_deref() { diff --git a/libs/@local/hashql/hir/tests/ui/lower/alias-replacement/complex-mixed.stdout b/libs/@local/hashql/hir/tests/ui/lower/alias-replacement/complex-mixed.stdout index 07a66df61aa..00fccd48adf 100644 --- a/libs/@local/hashql/hir/tests/ui/lower/alias-replacement/complex-mixed.stdout +++ b/libs/@local/hashql/hir/tests/ui/lower/alias-replacement/complex-mixed.stdout @@ -4,7 +4,7 @@ let a:0 = 10, b:0 = ::core::math::add(a:0, 5), c:0 = a:0, d:0 = b:0, - e:0 = a:0 + e:0 = c:0 in ::core::math::add(::core::math::mul(d:0, e:0), ::core::math::sub(a:0, b:0)) diff --git a/libs/@local/hashql/hir/tests/ui/lower/alias-replacement/generic-reassignment.stderr b/libs/@local/hashql/hir/tests/ui/lower/alias-replacement/generic-reassignment.stderr index 2f027539ae3..03af01f21d1 100644 --- a/libs/@local/hashql/hir/tests/ui/lower/alias-replacement/generic-reassignment.stderr +++ b/libs/@local/hashql/hir/tests/ui/lower/alias-replacement/generic-reassignment.stderr @@ -1,10 +1,13 @@ -error[lower::argument-override]: Cannot apply type arguments to already-parameterized variable +error[lowering::expander::intrinsic-generic-arguments]: Generic arguments on intrinsic ╭▸ - 6 │ "core::math::add", - │ ━━━━━━━━━━━━━━━━━━━━━━━━ `foo:0` was defined with type arguments here - ‡ 10 │ "foo", - │ ────── ... but additional type arguments are provided here + │ ━━━━━━━━━━━ `foo` does not accept generic arguments │ - ├ help: The variable `foo:0` already represents `::core::math::add` with type arguments applied. Use `foo:0` directly without additional type arguments, or create a new binding if you need different type parameters. - ╰ note: Variables that alias parameterized expressions cannot have additional type arguments applied to them, as this would create ambiguous type parameter bindings. \ No newline at end of file + ╰ help: remove the generic arguments from `foo` + +error[lowering::expander::intrinsic-generic-arguments]: Generic arguments on intrinsic + ╭▸ +6 │ "core::math::add", + │ ━━━━━━━━━━━━ `add` does not accept generic arguments + │ + ╰ help: remove the generic arguments from `add` \ No newline at end of file diff --git a/libs/@local/hashql/hir/tests/ui/lower/alias-replacement/nested-aliases.stdout b/libs/@local/hashql/hir/tests/ui/lower/alias-replacement/nested-aliases.stdout index 8ba50a1a601..3e45f1b4bb9 100644 --- a/libs/@local/hashql/hir/tests/ui/lower/alias-replacement/nested-aliases.stdout +++ b/libs/@local/hashql/hir/tests/ui/lower/alias-replacement/nested-aliases.stdout @@ -2,7 +2,7 @@ let x:0 = 42, y:0 = x:0, - z:0 = x:0 + z:0 = y:0 in ::core::math::add(z:0, x:0) diff --git a/libs/@local/hashql/hir/tests/ui/lower/alias-replacement/qualified-variable-alias.stdout b/libs/@local/hashql/hir/tests/ui/lower/alias-replacement/qualified-variable-alias.stdout index 2567529a43e..0384b3742dc 100644 --- a/libs/@local/hashql/hir/tests/ui/lower/alias-replacement/qualified-variable-alias.stdout +++ b/libs/@local/hashql/hir/tests/ui/lower/alias-replacement/qualified-variable-alias.stdout @@ -1,9 +1,6 @@ ════ Initial HIR ═══════════════════════════════════════════════════════════════ -let x:0 = ::core::math::add, - y:0 = ::core::math::add -in -::core::math::mul(y:0, 2) +::core::math::mul(::core::math::add, 2) ════ HIR after alias replacement ═══════════════════════════════════════════════ diff --git a/libs/@local/hashql/hir/tests/ui/lower/ctor/too-many-arguments.jsonc b/libs/@local/hashql/hir/tests/ui/lower/ctor/too-many-arguments.jsonc index 2207f9f53f8..3c62f433cf9 100644 --- a/libs/@local/hashql/hir/tests/ui/lower/ctor/too-many-arguments.jsonc +++ b/libs/@local/hashql/hir/tests/ui/lower/ctor/too-many-arguments.jsonc @@ -6,7 +6,7 @@ { "#struct": { "name": "T", "age": "U" } }, [ "Person", - //~^ ERROR Remove this argument + //~^ ERROR unexpected argument { "#literal": 30 } ] ] diff --git a/libs/@local/hashql/hir/tests/ui/lower/inference/bind-arguments-explicit.stderr b/libs/@local/hashql/hir/tests/ui/lower/inference/bind-arguments-explicit.stderr index a225dba7bd2..33ddea0fe7b 100644 --- a/libs/@local/hashql/hir/tests/ui/lower/inference/bind-arguments-explicit.stderr +++ b/libs/@local/hashql/hir/tests/ui/lower/inference/bind-arguments-explicit.stderr @@ -1,16 +1,6 @@ -error[type-check::bound-constraint-violation]: Type bound constraint violation +error[lowering::expander::intrinsic-generic-arguments]: Generic arguments on intrinsic ╭▸ -1 │ //@ run: fail - │ ─ Upper bound `Number` is not a supertype of the lower bound - ‡ 4 │ "`+`", - │ ━━━━━━━━━━━━━━━━━━━ Type variable has incompatible upper and lower bounds - ‡ -7 │ { "#literal": "42" } - │ ──── Lower bound `String` must be a subtype of the upper bound + │ ━━━━━━━━━━━━━━━━━━━ `+` does not accept generic arguments │ - ├ help: These type bounds create an impossible constraint. To fix this: - │ 1. Modify `String` to be a proper subtype of `Number` - │ 2. Or adjust `Number` to be a supertype of `String` - │ 3. Or check your code for contradictory type assertions - ╰ note: During type inference, when a variable has both upper and lower bounds, the relationship 'lower <: upper' must hold. This ensures a valid solution exists in the type system. When this relationship is violated, it means your code is requiring contradictory types for the same variable. \ No newline at end of file + ╰ help: remove the generic arguments from `+` \ No newline at end of file diff --git a/libs/@local/hashql/hir/tests/ui/lower/inference/intrinsics/assignment.stdout b/libs/@local/hashql/hir/tests/ui/lower/inference/intrinsics/assignment.stdout index 4be6b8ab435..ec88f239ee9 100644 --- a/libs/@local/hashql/hir/tests/ui/lower/inference/intrinsics/assignment.stdout +++ b/libs/@local/hashql/hir/tests/ui/lower/inference/intrinsics/assignment.stdout @@ -1,16 +1,13 @@ ════ Initial HIR ═══════════════════════════════════════════════════════════════ -let add:0 = ::core::math::add in add:0 +::core::math::add ════ HIR after type inference ══════════════════════════════════════════════════ -let add:0 = ::core::math::add in add:0 +::core::math::add ════ Intrinsics ════════════════════════════════════════════════════════════════ ┌─ ::core::math::add └→ ::core::math::add -┌─ add:0 -└→ ::core::math::add - diff --git a/libs/@local/hashql/hir/tests/ui/lower/inference/intrinsics/re-assignment.stdout b/libs/@local/hashql/hir/tests/ui/lower/inference/intrinsics/re-assignment.stdout index 91acdeabe81..ec88f239ee9 100644 --- a/libs/@local/hashql/hir/tests/ui/lower/inference/intrinsics/re-assignment.stdout +++ b/libs/@local/hashql/hir/tests/ui/lower/inference/intrinsics/re-assignment.stdout @@ -1,25 +1,13 @@ ════ Initial HIR ═══════════════════════════════════════════════════════════════ -let foo:0 = ::core::math::add, - bar:0 = ::core::math::add -in -bar:0 +::core::math::add ════ HIR after type inference ══════════════════════════════════════════════════ -let foo:0 = ::core::math::add, - bar:0 = ::core::math::add -in -bar:0 +::core::math::add ════ Intrinsics ════════════════════════════════════════════════════════════════ ┌─ ::core::math::add └→ ::core::math::add -┌─ ::core::math::add -└→ ::core::math::add - -┌─ bar:0 -└→ ::core::math::add - diff --git a/libs/@local/hashql/hir/tests/ui/lower/specialization/collect-custom-collect.stderr b/libs/@local/hashql/hir/tests/ui/lower/specialization/collect-custom-collect.stderr index 600b230b77c..64131abc98b 100644 --- a/libs/@local/hashql/hir/tests/ui/lower/specialization/collect-custom-collect.stderr +++ b/libs/@local/hashql/hir/tests/ui/lower/specialization/collect-custom-collect.stderr @@ -1,135 +1,7 @@ -error[lower::specialization::non-intrinsic-graph-operation]: Non-intrinsic function in graph operation +error[lowering::expander::unresolved-variable]: Unresolved variable ╭▸ 6 │ ["fn", { "#tuple": [] }, { "#struct": { "graph": "_" } }, "_", "graph"], - │ ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ This is not a graph intrinsic operation + │ ━━━━━ cannot find `graph` in this scope │ - ├ help: ( - │ graph:0: ::graph::Graph( - │ 'marker: ::graph::types::knowledge::entity::Entity( - │ encodings: ::graph::types::knowledge::entity::EntityEncodings( - │ vectors: ? - │ ), - │ link_data: ::core::option::None(Null) - │ | ::core::option::Some(::graph::types::knowledge::entity::LinkData( - │ left_entity_confidence: ::core::option::None(Null) - │ | ::core::option::Some(::graph::types::knowledge::entity::Confidence(Number)), - │ left_entity_id: ::graph::types::knowledge::entity::EntityId( - │ draft_id: ::core::option::None(Null) - │ | ::core::option::Some(::graph::types::knowledge::entity::DraftId(::core::uuid::Uuid(String))), - │ entity_uuid: ::graph::types::knowledge::entity::EntityUuid(::core::uuid::Uuid(String)), - │ web_id: ::graph::types::principal::actor_group::web::WebId(::graph::types::principal::actor_group::ActorGroupEntityUuid(::core::uuid::Uuid(String))) - │ ), - │ left_entity_provenance: ::graph::types::knowledge::entity::PropertyProvenance(?), - │ right_entity_confidence: ::core::option::None(Null) - │ | ::core::option::Some(::graph::types::knowledge::entity::Confidence(Number)), - │ right_entity_id: ::graph::types::knowledge::entity::EntityId( - │ draft_id: ::core::option::None(Null) - │ | ::core::option::Some(::graph::types::knowledge::entity::DraftId(::core::uuid::Uuid(String))), - │ entity_uuid: ::graph::types::knowledge::entity::EntityUuid(::core::uuid::Uuid(String)), - │ web_id: ::graph::types::principal::actor_group::web::WebId(::graph::types::principal::actor_group::ActorGroupEntityUuid(::core::uuid::Uuid(String))) - │ ), - │ right_entity_provenance: ::graph::types::knowledge::entity::PropertyProvenance(?) - │ )), - │ metadata: ::graph::types::knowledge::entity::EntityMetadata( - │ archived: Boolean, - │ confidence: ::core::option::None(Null) - │ | ::core::option::Some(::graph::types::knowledge::entity::Confidence(Number)), - │ entity_type_ids: List<::graph::types::ontology::VersionedUrl( - │ base_url: ::graph::types::ontology::BaseUrl(::core::url::Url(String)), - │ version: ::graph::ontology::OntologyTypeVersion(String) - │ )>, - │ properties: ::graph::types::knowledge::entity::PropertyObjectMetadata(?), - │ provenance: ::graph::types::knowledge::entity::EntityProvenance( - │ edition: ::graph::types::knowledge::entity::EntityEditionProvenance(?), - │ inferred: ::graph::types::knowledge::entity::InferredEntityProvenance(?) - │ ), - │ record_id: ::graph::types::knowledge::entity::RecordId( - │ edition_id: ::graph::types::knowledge::entity::EntityEditionId(::core::uuid::Uuid(String)), - │ entity_id: ::graph::types::knowledge::entity::EntityId( - │ draft_id: ::core::option::None(Null) - │ | ::core::option::Some(::graph::types::knowledge::entity::DraftId(::core::uuid::Uuid(String))), - │ entity_uuid: ::graph::types::knowledge::entity::EntityUuid(::core::uuid::Uuid(String)), - │ web_id: ::graph::types::principal::actor_group::web::WebId(::graph::types::principal::actor_group::ActorGroupEntityUuid(::core::uuid::Uuid(String))) - │ ) - │ ), - │ temporal_versioning: ::graph::types::knowledge::entity::TemporalMetadata( - │ decision_time: ::graph::temporal::DecisionTime(::graph::temporal::Interval( - │ end: ::graph::temporal::UnboundedTemporalBound(Null) - │ | ::graph::temporal::ExclusiveTemporalBound(::graph::temporal::Timestamp(Integer)), - │ start: ::graph::temporal::InclusiveTemporalBound(::graph::temporal::Timestamp(Integer)) - │ )), - │ transaction_time: ::graph::temporal::TransactionTime(::graph::temporal::Interval( - │ end: ::graph::temporal::UnboundedTemporalBound(Null) - │ | ::graph::temporal::ExclusiveTemporalBound(::graph::temporal::Timestamp(Integer)), - │ start: ::graph::temporal::InclusiveTemporalBound(::graph::temporal::Timestamp(Integer)) - │ )) - │ ) - │ ), - │ properties: ? - │ ) - │ ) - │ ): ::graph::Graph( - │ 'marker: ::graph::types::knowledge::entity::Entity( - │ encodings: ::graph::types::knowledge::entity::EntityEncodings( - │ vectors: ? - │ ), - │ link_data: ::core::option::None(Null) - │ | ::core::option::Some(::graph::types::knowledge::entity::LinkData( - │ left_entity_confidence: ::core::option::None(Null) - │ | ::core::option::Some(::graph::types::knowledge::entity::Confidence(Number)), - │ left_entity_id: ::graph::types::knowledge::entity::EntityId( - │ draft_id: ::core::option::None(Null) - │ | ::core::option::Some(::graph::types::knowledge::entity::DraftId(::core::uuid::Uuid(String))), - │ entity_uuid: ::graph::types::knowledge::entity::EntityUuid(::core::uuid::Uuid(String)), - │ web_id: ::graph::types::principal::actor_group::web::WebId(::graph::types::principal::actor_group::ActorGroupEntityUuid(::core::uuid::Uuid(String))) - │ ), - │ left_entity_provenance: ::graph::types::knowledge::entity::PropertyProvenance(?), - │ right_entity_confidence: ::core::option::None(Null) - │ | ::core::option::Some(::graph::types::knowledge::entity::Confidence(Number)), - │ right_entity_id: ::graph::types::knowledge::entity::EntityId( - │ draft_id: ::core::option::None(Null) - │ | ::core::option::Some(::graph::types::knowledge::entity::DraftId(::core::uuid::Uuid(String))), - │ entity_uuid: ::graph::types::knowledge::entity::EntityUuid(::core::uuid::Uuid(String)), - │ web_id: ::graph::types::principal::actor_group::web::WebId(::graph::types::principal::actor_group::ActorGroupEntityUuid(::core::uuid::Uuid(String))) - │ ), - │ right_entity_provenance: ::graph::types::knowledge::entity::PropertyProvenance(?) - │ )), - │ metadata: ::graph::types::knowledge::entity::EntityMetadata( - │ archived: Boolean, - │ confidence: ::core::option::None(Null) - │ | ::core::option::Some(::graph::types::knowledge::entity::Confidence(Number)), - │ entity_type_ids: List<::graph::types::ontology::VersionedUrl( - │ base_url: ::graph::types::ontology::BaseUrl(::core::url::Url(String)), - │ version: ::graph::ontology::OntologyTypeVersion(String) - │ )>, - │ properties: ::graph::types::knowledge::entity::PropertyObjectMetadata(?), - │ provenance: ::graph::types::knowledge::entity::EntityProvenance( - │ edition: ::graph::types::knowledge::entity::EntityEditionProvenance(?), - │ inferred: ::graph::types::knowledge::entity::InferredEntityProvenance(?) - │ ), - │ record_id: ::graph::types::knowledge::entity::RecordId( - │ edition_id: ::graph::types::knowledge::entity::EntityEditionId(::core::uuid::Uuid(String)), - │ entity_id: ::graph::types::knowledge::entity::EntityId( - │ draft_id: ::core::option::None(Null) - │ | ::core::option::Some(::graph::types::knowledge::entity::DraftId(::core::uuid::Uuid(String))), - │ entity_uuid: ::graph::types::knowledge::entity::EntityUuid(::core::uuid::Uuid(String)), - │ web_id: ::graph::types::principal::actor_group::web::WebId(::graph::types::principal::actor_group::ActorGroupEntityUuid(::core::uuid::Uuid(String))) - │ ) - │ ), - │ temporal_versioning: ::graph::types::knowledge::entity::TemporalMetadata( - │ decision_time: ::graph::temporal::DecisionTime(::graph::temporal::Interval( - │ end: ::graph::temporal::UnboundedTemporalBound(Null) - │ | ::graph::temporal::ExclusiveTemporalBound(::graph::temporal::Timestamp(Integer)), - │ start: ::graph::temporal::InclusiveTemporalBound(::graph::temporal::Timestamp(Integer)) - │ )), - │ transaction_time: ::graph::temporal::TransactionTime(::graph::temporal::Interval( - │ end: ::graph::temporal::UnboundedTemporalBound(Null) - │ | ::graph::temporal::ExclusiveTemporalBound(::graph::temporal::Timestamp(Integer)), - │ start: ::graph::temporal::InclusiveTemporalBound(::graph::temporal::Timestamp(Integer)) - │ )) - │ ) - │ ), - │ properties: ? - │ ) - │ ) -> graph:0 is not a valid graph operation. Graph operation chains can only contain intrinsic functions that are part of the HashQL graph API. Higher-order functions (HOFs) and user-defined functions are not supported yet. To track support for user-defined functions see https://linear.app/hash/issue/H-4776/hashql-allow-user-defined-functions-in-graph-pipelines - ╰ note: Graph intrinsics are built-in operations like `::graph::head::entities`, `::graph::body::filter`, and `::graph::tail::collect` that can be optimized during compilation. Only these predefined operations can be used to build graph query chains. \ No newline at end of file + ├ help: check the spelling, or import the name with a `use` statement + ╰ note: this could be a typo, a name used outside its scope, or a missing declaration; if it is a function or type from another module, you may need to import it first \ No newline at end of file From 764c3723e8737c4ad60be528912723f3e9770863 Mon Sep 17 00:00:00 2001 From: Bilal Mahmoud <7252775+indietyp@users.noreply.github.com> Date: Mon, 15 Jun 2026 15:34:54 +0200 Subject: [PATCH 33/55] feat: checkpoint --- .../hashql/ast/src/lower/expander/error.rs | 26 + .../hashql/ast/src/lower/expander/use.rs | 12 + .../use-struct-type.jsonc | 2 +- .../use-tuple-type.jsonc | 2 +- .../@local/hashql/compiletest/test-report.txt | 10264 +++++----------- 5 files changed, 3191 insertions(+), 7115 deletions(-) diff --git a/libs/@local/hashql/ast/src/lower/expander/error.rs b/libs/@local/hashql/ast/src/lower/expander/error.rs index 133c2ef88e6..8fa86758882 100644 --- a/libs/@local/hashql/ast/src/lower/expander/error.rs +++ b/libs/@local/hashql/ast/src/lower/expander/error.rs @@ -188,6 +188,11 @@ const DUPLICATE_FN_PARAMETER: TerminalDiagnosticCategory = TerminalDiagnosticCat name: "Duplicate function parameter", }; +const USE_IMPORTS_TYPE_ANNOTATION: TerminalDiagnosticCategory = TerminalDiagnosticCategory { + id: "use-imports-type-annotation", + name: "Type annotation on use imports", +}; + const INVALID_USE_IMPORTS: TerminalDiagnosticCategory = TerminalDiagnosticCategory { id: "invalid-use-imports", name: "Invalid use imports", @@ -263,6 +268,7 @@ pub enum ExpanderDiagnosticCategory { DuplicateFnParameter, IntrinsicTypeAnnotation, IntrinsicGenericArguments, + UseImportsTypeAnnotation, InvalidUseImports, InvalidUseImportBinding, InvalidUseAlias, @@ -315,6 +321,7 @@ impl DiagnosticCategory for ExpanderDiagnosticCategory { Self::DuplicateFnParameter => Some(&DUPLICATE_FN_PARAMETER), Self::IntrinsicTypeAnnotation => Some(&INTRINSIC_TYPE_ANNOTATION), Self::IntrinsicGenericArguments => Some(&INTRINSIC_GENERIC_ARGUMENTS), + Self::UseImportsTypeAnnotation => Some(&USE_IMPORTS_TYPE_ANNOTATION), Self::InvalidUseImports => Some(&INVALID_USE_IMPORTS), Self::InvalidUseImportBinding => Some(&INVALID_USE_IMPORT_BINDING), Self::InvalidUseAlias => Some(&INVALID_USE_ALIAS), @@ -2286,6 +2293,25 @@ pub(crate) fn invalid_use_argument_count( diagnostic } +/// The import list in a `use` has a type annotation. +pub(crate) fn use_imports_type_annotation(annotation_span: SpanId) -> ExpanderDiagnostic { + let mut diagnostic = Diagnostic::new( + ExpanderDiagnosticCategory::UseImportsTypeAnnotation, + Severity::Error, + ) + .primary(Label::new( + annotation_span, + "type annotations are not allowed on the import list", + )); + + diagnostic.add_message(Message::help( + "remove the type annotation; the import list declares which names to bring into scope, \ + not a typed value", + )); + + diagnostic +} + /// The imports argument to `use` is not a valid form. pub(crate) fn invalid_use_imports(span: SpanId) -> ExpanderDiagnostic { let mut diagnostic = Diagnostic::new( diff --git a/libs/@local/hashql/ast/src/lower/expander/use.rs b/libs/@local/hashql/ast/src/lower/expander/use.rs index aea10d13afd..98739e4b180 100644 --- a/libs/@local/hashql/ast/src/lower/expander/use.rs +++ b/libs/@local/hashql/ast/src/lower/expander/use.rs @@ -25,6 +25,12 @@ fn lower_imports_tuple<'heap, S>( expander: &mut Expander<'_, 'heap, S>, tuple: &mut crate::node::expr::TupleExpr<'heap>, ) -> UseKind<'heap> { + if let Some(annotation) = tuple.r#type.as_ref() { + expander + .diagnostics + .push(error::use_imports_type_annotation(annotation.span)); + } + let mut bindings = Vec::with_capacity_in(tuple.elements.len(), expander.heap); for element in tuple.elements.drain(..) { @@ -57,6 +63,12 @@ fn lower_imports_struct<'heap, S>( expander: &mut Expander<'_, 'heap, S>, r#struct: &mut crate::node::expr::StructExpr<'heap>, ) -> UseKind<'heap> { + if let Some(annotation) = r#struct.r#type.as_ref() { + expander + .diagnostics + .push(error::use_imports_type_annotation(annotation.span)); + } + let mut bindings = Vec::with_capacity_in(r#struct.entries.len(), expander.heap); for entry in r#struct.entries.drain(..) { diff --git a/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/use-struct-type.jsonc b/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/use-struct-type.jsonc index 4b56034bfd1..03a082a4d41 100644 --- a/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/use-struct-type.jsonc +++ b/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/use-struct-type.jsonc @@ -6,7 +6,7 @@ { "#struct": { "x": "x" }, "#type": "X" - //~^ ERROR Remove this type annotation + //~^ ERROR type annotations are not allowed on the import list }, "x" ] diff --git a/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/use-tuple-type.jsonc b/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/use-tuple-type.jsonc index 2d0da5307af..b3566e85bcb 100644 --- a/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/use-tuple-type.jsonc +++ b/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/use-tuple-type.jsonc @@ -4,6 +4,6 @@ "::kernel::special_form::use", "::core", { "#tuple": ["::core::math::sub"], "#type": "Number" }, - //~^ ERROR Remove this type annotation + //~^ ERROR type annotations are not allowed on the import list "x" ] diff --git a/libs/@local/hashql/compiletest/test-report.txt b/libs/@local/hashql/compiletest/test-report.txt index c3c084b00e4..aa1d9a15a68 100644 --- a/libs/@local/hashql/compiletest/test-report.txt +++ b/libs/@local/hashql/compiletest/test-report.txt @@ -1,762 +1,1267 @@ -warning: unused import: `heap::Heap` - --> libs/@local/hashql/core/src/module/std_lib/core/mod.rs:3:5 - | -3 | heap::Heap, - | ^^^^^^^^^^ - | - = note: `#[warn(unused_imports)]` (part of `#[warn(unused)]`) on by default - -warning: unused import: `heap::Heap` - --> libs/@local/hashql/core/src/module/std_lib/core/bits.rs:3:5 - | -3 | heap::Heap, - | ^^^^^^^^^^ - -warning: unused import: `heap::Heap` - --> libs/@local/hashql/core/src/module/std_lib/core/bool.rs:3:5 - | -3 | heap::Heap, - | ^^^^^^^^^^ - -warning: unused import: `heap::Heap` - --> libs/@local/hashql/core/src/module/std_lib/core/cmp.rs:3:5 - | -3 | heap::Heap, - | ^^^^^^^^^^ - -warning: unused import: `heap::Heap` - --> libs/@local/hashql/core/src/module/std_lib/core/json.rs:2:5 - | -2 | heap::Heap, - | ^^^^^^^^^^ - -warning: unused import: `heap::Heap` - --> libs/@local/hashql/core/src/module/std_lib/core/math.rs:3:5 - | -3 | heap::Heap, - | ^^^^^^^^^^ - -warning: unused import: `heap::Heap` - --> libs/@local/hashql/core/src/module/std_lib/core/option.rs:2:5 - | -2 | heap::Heap, - | ^^^^^^^^^^ - -warning: unused import: `heap::Heap` - --> libs/@local/hashql/core/src/module/std_lib/core/url.rs:2:5 - | -2 | heap::Heap, - | ^^^^^^^^^^ - -warning: unused import: `heap::Heap` - --> libs/@local/hashql/core/src/module/std_lib/core/uuid.rs:2:5 - | -2 | heap::Heap, - | ^^^^^^^^^^ - -warning: unused import: `heap::Heap` - --> libs/@local/hashql/core/src/module/std_lib/graph/body.rs:2:5 - | -2 | heap::Heap, - | ^^^^^^^^^^ - -warning: unused import: `heap::Heap` - --> libs/@local/hashql/core/src/module/std_lib/graph/entity.rs:2:5 - | -2 | heap::Heap, - | ^^^^^^^^^^ - -warning: unused import: `heap::Heap` - --> libs/@local/hashql/core/src/module/std_lib/graph/head.rs:2:5 - | -2 | heap::Heap, - | ^^^^^^^^^^ - -warning: unused import: `heap::Heap` - --> libs/@local/hashql/core/src/module/std_lib/graph/tail.rs:2:5 - | -2 | heap::Heap, - | ^^^^^^^^^^ - -warning: unused import: `heap::Heap` - --> libs/@local/hashql/core/src/module/std_lib/graph/temporal.rs:2:5 - | -2 | heap::Heap, - | ^^^^^^^^^^ - -warning: unused import: `heap::Heap` - --> libs/@local/hashql/core/src/module/std_lib/graph/types/mod.rs:3:5 - | -3 | heap::Heap, - | ^^^^^^^^^^ - -warning: unused import: `heap::Heap` - --> libs/@local/hashql/core/src/module/std_lib/graph/types/knowledge/entity.rs:2:5 - | -2 | heap::Heap, - | ^^^^^^^^^^ - -warning: unused import: `heap::Heap` - --> libs/@local/hashql/core/src/module/std_lib/graph/types/ontology/mod.rs:2:5 - | -2 | heap::Heap, - | ^^^^^^^^^^ - -warning: unused import: `heap::Heap` - --> libs/@local/hashql/core/src/module/std_lib/graph/types/ontology/entity_type.rs:2:5 - | -2 | heap::Heap, - | ^^^^^^^^^^ - -warning: unused import: `heap::Heap` - --> libs/@local/hashql/core/src/module/std_lib/graph/types/principal/mod.rs:4:5 - | -4 | heap::Heap, - | ^^^^^^^^^^ - -warning: unused imports: `core` and `core` - --> libs/@local/hashql/core/src/symbol/sym.rs:315:9 - | -315 | core: { - | ^^^^ - -warning: unused imports: `graph` and `graph` - --> libs/@local/hashql/core/src/symbol/sym.rs:350:9 - | -350 | graph: { - | ^^^^^ - -warning: `hashql-core` (lib) generated 21 warnings (run `cargo fix --lib -p hashql-core` to apply 21 suggestions) -warning: method `matches_absolute_path` is never used - --> libs/@local/hashql/ast/src/node/path.rs:209:19 - | -108 | impl<'heap> Path<'heap> { - | ----------------------- method in this implementation -... -209 | pub(crate) fn matches_absolute_path( - | ^^^^^^^^^^^^^^^^^^^^^ - | - = note: `#[warn(dead_code)]` (part of `#[warn(unused)]`) on by default - -warning: `hashql-ast` (lib) generated 1 warning - Finished `dev` profile [unoptimized + debuginfo] target(s) in 0.28s - Running `/Users/bmahmoud/projects/hash/hash/target/debug/hashql-compiletest run --bless` -2026-06-15T11:12:38.429630Z  INFO hashql_compiletest::harness::test::discover: adding entry point path=/Users/bmahmoud/projects/hash/hash/libs/@local/hashql/hir tests=/Users/bmahmoud/projects/hash/hash/libs/@local/hashql/hir/tests/ui -2026-06-15T11:12:38.429794Z  INFO hashql_compiletest::harness::test::discover: adding entry point path=/Users/bmahmoud/projects/hash/hash/libs/@local/hashql/ast tests=/Users/bmahmoud/projects/hash/hash/libs/@local/hashql/ast/tests/ui -2026-06-15T11:12:38.429810Z  INFO hashql_compiletest::harness::test::discover: adding entry point path=/Users/bmahmoud/projects/hash/hash/libs/@local/hashql/eval tests=/Users/bmahmoud/projects/hash/hash/libs/@local/hashql/eval/tests/ui -2026-06-15T11:12:38.429823Z  INFO hashql_compiletest::harness::test::discover: adding entry point path=/Users/bmahmoud/projects/hash/hash/libs/@local/hashql/mir tests=/Users/bmahmoud/projects/hash/hash/libs/@local/hashql/mir/tests/ui -2026-06-15T11:12:38.432096Z  INFO hashql_compiletest::runner: found 4 test groups with 544 test cases, in 2.756208ms groups=4 cases=544 elapsed=2.771958ms -2026-06-15T11:12:38.438145Z  INFO hashql_compiletest::runner: converted 4 (544) test groups into 4 (544) trial groups, in 5.999834ms groups=4 cases=544 elapsed=6.010542ms -2026-06-15T11:12:38.438742Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "name-mangler"] -2026-06-15T11:12:38.438761Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-mir" trial=["pass", "cfg_simplify"] -2026-06-15T11:12:38.438760Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "name-mangler"] -2026-06-15T11:12:38.438775Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "name-mangler"] -2026-06-15T11:12:38.438745Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "import-resolver"] -2026-06-15T11:12:38.438762Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] -2026-06-15T11:12:38.438759Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "name-mangler"] -2026-06-15T11:12:38.438742Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "thunking"] -2026-06-15T11:12:38.438772Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "name-mangler"] -2026-06-15T11:12:38.438771Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "name-mangler"] -2026-06-15T11:12:38.438770Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "name-mangler"] -2026-06-15T11:12:38.438777Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-mir" trial=["pass", "post_inline"] -2026-06-15T11:12:38.438744Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "name-mangler"] -2026-06-15T11:12:38.438754Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "sanitizer"] -2026-06-15T11:12:38.438753Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] -2026-06-15T11:12:38.438752Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-mir" trial=["pass", "forward_substitution"] -2026-06-15T11:12:38.438752Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "import-resolver"] -2026-06-15T11:12:38.438744Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "import-resolver", "continue"] -2026-06-15T11:12:38.444248Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "name-mangler"] result=Ok(()) -2026-06-15T11:12:38.444196Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "import-resolver"] result=Ok(()) -2026-06-15T11:12:38.444279Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "import-resolver"] -2026-06-15T11:12:38.444181Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "name-mangler"] result=Err(Expected trial to pass, but it failed -├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:390:24 -╰╴1 additional opaque attachment) -2026-06-15T11:12:38.444083Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "name-mangler"] result=Err(Expected trial to pass, but it failed -├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:390:24 -╰╴1 additional opaque attachment) -2026-06-15T11:12:38.443961Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "name-mangler"] result=Err(Expected trial to pass, but it failed -├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:390:24 -╰╴1 additional opaque attachment) -2026-06-15T11:12:38.444326Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-mir" trial=["pass", "inst_simplify"] -2026-06-15T11:12:38.444336Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "name-mangler"] -2026-06-15T11:12:38.443996Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] result=Err(Expected trial to pass, but it failed -├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:390:24 -╰╴1 additional opaque attachment) -2026-06-15T11:12:38.444361Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] -2026-06-15T11:12:38.444066Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "name-mangler"] result=Err(Expected trial to pass, but it failed -├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:390:24 -╰╴1 additional opaque attachment) -2026-06-15T11:12:38.443963Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "name-mangler"] result=Err(Expected trial to pass, but it failed -├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:390:24 -╰╴1 additional opaque attachment) -2026-06-15T11:12:38.444320Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "name-mangler"] -2026-06-15T11:12:38.444417Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-mir" trial=["pass", "inst_simplify"] -2026-06-15T11:12:38.444231Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] result=Ok(()) -2026-06-15T11:12:38.444193Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "import-resolver"] result=Ok(()) -2026-06-15T11:12:38.444462Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] -2026-06-15T11:12:38.444265Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "name-mangler"] -2026-06-15T11:12:38.443985Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "name-mangler"] result=Err(Expected trial to pass, but it failed -├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:390:24 -╰╴1 additional opaque attachment) -2026-06-15T11:12:38.443963Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "name-mangler"] result=Err(Expected trial to pass, but it failed -├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:390:24 -╰╴1 additional opaque attachment) -2026-06-15T11:12:38.444511Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "name-mangler"] -2026-06-15T11:12:38.444516Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "inference", "intrinsics"] -2026-06-15T11:12:38.444396Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "name-mangler"] -2026-06-15T11:12:38.444470Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "import-resolver"] -2026-06-15T11:12:38.445098Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "thunking"] result=Ok(()) -2026-06-15T11:12:38.445108Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "thunking"] -2026-06-15T11:12:38.445048Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "sanitizer"] result=Err(Failed to verify annotation -├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:321:29 -├╴1 additional opaque attachment -│ -╰┬▶ unfulfilled annotation: DiagnosticAnnotation { category: None, severity: Error, message: "Special form cannot be used as a value", line: Some(5) } did not match any emitted diagnostics +2026-06-15T13:31:06.553503Z  INFO hashql_compiletest::harness::test::discover: adding entry point path=/Users/bmahmoud/projects/hash/hash/libs/@local/hashql/hir tests=/Users/bmahmoud/projects/hash/hash/libs/@local/hashql/hir/tests/ui +2026-06-15T13:31:06.553696Z  INFO hashql_compiletest::harness::test::discover: adding entry point path=/Users/bmahmoud/projects/hash/hash/libs/@local/hashql/ast tests=/Users/bmahmoud/projects/hash/hash/libs/@local/hashql/ast/tests/ui +2026-06-15T13:31:06.553712Z  INFO hashql_compiletest::harness::test::discover: adding entry point path=/Users/bmahmoud/projects/hash/hash/libs/@local/hashql/eval tests=/Users/bmahmoud/projects/hash/hash/libs/@local/hashql/eval/tests/ui +2026-06-15T13:31:06.553724Z  INFO hashql_compiletest::harness::test::discover: adding entry point path=/Users/bmahmoud/projects/hash/hash/libs/@local/hashql/mir tests=/Users/bmahmoud/projects/hash/hash/libs/@local/hashql/mir/tests/ui +2026-06-15T13:31:06.559700Z  INFO hashql_compiletest::runner: found 4 test groups with 544 test cases, in 6.466625ms groups=4 cases=544 elapsed=6.482917ms +2026-06-15T13:31:06.565143Z  INFO hashql_compiletest::runner: converted 4 (544) test groups into 4 (544) trial groups, in 5.402541ms groups=4 cases=544 elapsed=5.402833ms +2026-06-15T13:31:06.565768Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-mir" trial=["pass", "forward_substitution"] +2026-06-15T13:31:06.565754Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-mir" trial=["pass", "forward_substitution"] +2026-06-15T13:31:06.565770Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "name-mangler"] +2026-06-15T13:31:06.565770Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] +2026-06-15T13:31:06.565771Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "thunking"] +2026-06-15T13:31:06.565768Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-mir" trial=["pass", "inst_simplify"] +2026-06-15T13:31:06.565772Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-mir" trial=["pass", "inst_simplify"] +2026-06-15T13:31:06.565787Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["reify"] +2026-06-15T13:31:06.565787Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-mir" trial=["reify"] +2026-06-15T13:31:06.565792Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-mir" trial=["pass", "inst_simplify"] +2026-06-15T13:31:06.565790Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-mir" trial=["pass", "inst_simplify"] +2026-06-15T13:31:06.565756Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-mir" trial=["pass", "cfg_simplify"] +2026-06-15T13:31:06.565795Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] +2026-06-15T13:31:06.565768Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-mir" trial=["pass", "inst_simplify"] +2026-06-15T13:31:06.565768Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-mir" trial=["pass", "inst_simplify"] +2026-06-15T13:31:06.565768Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-mir" trial=["pass", "inst_simplify"] +2026-06-15T13:31:06.565770Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-mir" trial=["pass", "post_inline"] +2026-06-15T13:31:06.565797Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-mir" trial=["pass", "inst_simplify"] +2026-06-15T13:31:06.571167Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] result=Ok(()) +2026-06-15T13:31:06.571183Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] +2026-06-15T13:31:06.571122Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "name-mangler"] result=Ok(()) +2026-06-15T13:31:06.571138Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] result=Err(Expected trial to pass, but it failed +├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:390:24 +╰╴1 additional opaque attachment) +2026-06-15T13:31:06.571381Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] +2026-06-15T13:31:06.571358Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "name-mangler"] +2026-06-15T13:31:06.572176Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "thunking"] result=Ok(()) +2026-06-15T13:31:06.572185Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "thunking"] +2026-06-15T13:31:06.572283Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["reify"] result=Ok(()) +2026-06-15T13:31:06.572303Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["reify"] +2026-06-15T13:31:06.572784Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] result=Err(Expected trial to pass, but it failed +├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:390:24 +╰╴1 additional opaque attachment) +2026-06-15T13:31:06.572847Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] +2026-06-15T13:31:06.572979Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "name-mangler"] result=Ok(()) +2026-06-15T13:31:06.572995Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "name-mangler"] +2026-06-15T13:31:06.573166Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-mir" trial=["reify"] result=Ok(()) +2026-06-15T13:31:06.573177Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-mir" trial=["reify"] +2026-06-15T13:31:06.573314Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] result=Ok(()) +2026-06-15T13:31:06.573327Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] +2026-06-15T13:31:06.573358Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-mir" trial=["pass", "inst_simplify"] result=Ok(()) +2026-06-15T13:31:06.573380Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-mir" trial=["pass", "inst_simplify"] result=Ok(()) +2026-06-15T13:31:06.573380Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-mir" trial=["pass", "inst_simplify"] result=Ok(()) +2026-06-15T13:31:06.573397Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-mir" trial=["pass", "inst_simplify"] result=Ok(()) +2026-06-15T13:31:06.573404Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-mir" trial=["pass", "administrative_reduction"] +2026-06-15T13:31:06.573410Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-mir" trial=["pass", "forward_substitution"] result=Ok(()) +2026-06-15T13:31:06.573377Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-mir" trial=["pass", "inst_simplify"] result=Ok(()) +2026-06-15T13:31:06.573400Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-mir" trial=["pass", "cfg_simplify"] result=Ok(()) +2026-06-15T13:31:06.573403Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["reify"] +2026-06-15T13:31:06.573375Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-mir" trial=["pass", "inst_simplify"] result=Ok(()) +2026-06-15T13:31:06.573412Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-mir" trial=["pass", "inst_simplify"] +2026-06-15T13:31:06.573498Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-mir" trial=["reify"] +2026-06-15T13:31:06.573355Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-mir" trial=["pass", "inst_simplify"] result=Ok(()) +2026-06-15T13:31:06.573423Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-mir" trial=["pass", "forward_substitution"] +2026-06-15T13:31:06.573445Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-mir" trial=["pass", "inst_simplify"] +2026-06-15T13:31:06.573460Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-mir" trial=["reify"] +2026-06-15T13:31:06.573391Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-mir" trial=["pass", "inst_simplify"] +2026-06-15T13:31:06.573536Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-mir" trial=["pass", "inst_simplify"] +2026-06-15T13:31:06.573572Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["reify"] result=Err(Expected trial to pass, but it failed +├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:390:24 +╰╴1 additional opaque attachment) +2026-06-15T13:31:06.573628Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["reify"] +2026-06-15T13:31:06.573703Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-mir" trial=["pass", "post_inline"] result=Ok(()) +2026-06-15T13:31:06.573715Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-mir" trial=["pass", "post_inline"] +2026-06-15T13:31:06.573792Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "thunking"] result=Ok(()) +2026-06-15T13:31:06.573801Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "normalization"] +2026-06-15T13:31:06.574229Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] result=Err(Expected trial to pass, but it failed +├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:390:24 +╰╴1 additional opaque attachment) +2026-06-15T13:31:06.574257Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] +2026-06-15T13:31:06.574344Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "name-mangler"] result=Err(Expected trial to pass, but it failed +├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:390:24 +╰╴1 additional opaque attachment) +2026-06-15T13:31:06.574367Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "name-mangler"] +2026-06-15T13:31:06.574663Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] result=Err(Failed to verify annotation +├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:321:29 +├╴1 additional opaque attachment +│ +╰┬▶ unfulfilled annotation: DiagnosticAnnotation { category: None, severity: Error, message: "expected a simple name to import", line: Some(6) } did not match any emitted diagnostics │ ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:151:25 │ - ├▶ unexpected diagnostic: - │ error[expander::unresolved-variable]: Unresolved variable - │ ╭▸ - │ 7 │ "a" - │ │ ━ cannot find `a` in this scope - │ │ - │ ╰ note: this could be a typo, a name used outside its scope, or a missing declaration; if it is a function or type from another module, you may need to import it first - │ help: a similar imported name exists - │ ╭╴ - │ 7 - "a" - │ 7 + "↑√∛ccesss" - │ ╰╴ - │ ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:171:21 - │ ╰▶ unexpected diagnostic: - error[expander::unresolved-variable]: Unresolved variable + error[expander::invalid-use-imports]: Invalid use imports ╭▸ - 4 │ "add", - │ ━━━ cannot find `add` in this scope + 6 │ "::core::math::X", + │ ━━━━━━━━━━━━━━━ expected `*`, a tuple of names, or a struct of aliases │ - ├ help: bring it into scope: `use ::core::math::add in` - ╰ note: this could be a typo, a name used outside its scope, or a missing declaration; if it is a function or type from another module, you may need to import it first - help: use one of these fully qualified paths - ╭╴ - 4 │ "::core::math::add", - ╰╴ ++++++++++++++ + ╰ help: use `*` to import everything, `(a, b)` to import specific names, or `(a: alias, b: _)` to import with aliases ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:171:21) -2026-06-15T11:12:38.445134Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "sanitizer"] -2026-06-15T11:12:38.445461Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "name-mangler"] result=Ok(()) -2026-06-15T11:12:38.445475Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "type-extractor", "definition"] -2026-06-15T11:12:38.445799Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "name-mangler"] result=Ok(()) -2026-06-15T11:12:38.445826Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "import-resolver"] -2026-06-15T11:12:38.445857Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "import-resolver"] result=Err(Failed to verify annotation -├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:321:29 -├╴1 additional opaque attachment -│ -╰┬▶ unfulfilled annotation: DiagnosticAnnotation { category: None, severity: Error, message: "Cannot find variable 'shl'", line: Some(7) } did not match any emitted diagnostics - │ ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:151:25 - │ - ╰▶ unexpected diagnostic: +2026-06-15T13:31:06.574714Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] +2026-06-15T13:31:06.575018Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["reify"] result=Ok(()) +2026-06-15T13:31:06.575037Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["reify"] +2026-06-15T13:31:06.575237Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-mir" trial=["reify"] result=Ok(()) +2026-06-15T13:31:06.575247Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-mir" trial=["reify"] +2026-06-15T13:31:06.575254Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["reify"] result=Ok(()) +2026-06-15T13:31:06.575259Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-mir" trial=["pass", "inst_simplify"] result=Ok(()) +2026-06-15T13:31:06.575276Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-mir" trial=["reify"] +2026-06-15T13:31:06.575264Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["reify"] +2026-06-15T13:31:06.575325Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-mir" trial=["pass", "inst_simplify"] result=Ok(()) +2026-06-15T13:31:06.575340Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-mir" trial=["pass", "inst_simplify"] +2026-06-15T13:31:06.575380Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-mir" trial=["pass", "inst_simplify"] result=Ok(()) +2026-06-15T13:31:06.575392Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-mir" trial=["reify"] +2026-06-15T13:31:06.575427Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "normalization"] result=Ok(()) +2026-06-15T13:31:06.575440Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "normalization"] +2026-06-15T13:31:06.575428Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-mir" trial=["reify"] result=Ok(()) +2026-06-15T13:31:06.575457Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-mir" trial=["pass", "administrative_reduction"] result=Ok(()) +2026-06-15T13:31:06.575499Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-mir" trial=["pass", "administrative_reduction"] +2026-06-15T13:31:06.575516Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-mir" trial=["reify"] +2026-06-15T13:31:06.575593Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-mir" trial=["pass", "inst_simplify"] result=Ok(()) +2026-06-15T13:31:06.575604Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-mir" trial=["pass", "inst_simplify"] +2026-06-15T13:31:06.575770Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "name-mangler"] result=Ok(()) +2026-06-15T13:31:06.575798Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "name-mangler"] +2026-06-15T13:31:06.575911Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-mir" trial=["pass", "forward_substitution"] result=Ok(()) +2026-06-15T13:31:06.575926Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-mir" trial=["pass", "inst_simplify"] +2026-06-15T13:31:06.575864Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] result=Err(Failed to verify annotation +├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:321:29 +├╴1 additional opaque attachment +│ +╰┬▶ unfulfilled annotation: DiagnosticAnnotation { category: None, severity: Error, message: "expected a simple identifier for the `let` binding name", line: Some(10) } did not match any emitted diagnostics + │ ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:151:25 + │ + ╰▶ unfulfilled annotation: DiagnosticAnnotation { category: None, severity: Error, message: "expected a simple identifier for the `let` binding name", line: Some(15) } did not match any emitted diagnostics + ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:151:25) +2026-06-15T13:31:06.576053Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] +2026-06-15T13:31:06.576116Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] result=Ok(()) +2026-06-15T13:31:06.576135Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] +2026-06-15T13:31:06.576258Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["reify"] result=Ok(()) +2026-06-15T13:31:06.576275Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["reify"] +2026-06-15T13:31:06.576523Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-mir" trial=["reify"] result=Ok(()) +2026-06-15T13:31:06.576532Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-mir" trial=["reify"] +2026-06-15T13:31:06.576746Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["reify"] result=Ok(()) +2026-06-15T13:31:06.576755Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["reify"] +2026-06-15T13:31:06.576762Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-mir" trial=["reify"] result=Ok(()) +2026-06-15T13:31:06.576771Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-mir" trial=["reify"] +2026-06-15T13:31:06.576985Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "normalization"] result=Ok(()) +2026-06-15T13:31:06.576994Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "normalization"] +2026-06-15T13:31:06.577078Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "name-mangler"] result=Err(Expected trial to pass, but it failed +├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:390:24 +╰╴1 additional opaque attachment) +2026-06-15T13:31:06.577109Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "name-mangler"] +2026-06-15T13:31:06.577184Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-mir" trial=["pass", "inst_simplify"] result=Ok(()) +2026-06-15T13:31:06.577200Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "inference", "intrinsics"] +2026-06-15T13:31:06.577185Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-mir" trial=["pass", "inst_simplify"] result=Ok(()) +2026-06-15T13:31:06.577289Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-mir" trial=["pass", "inst_simplify"] +2026-06-15T13:31:06.577444Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-mir" trial=["reify"] result=Ok(()) +2026-06-15T13:31:06.577453Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-mir" trial=["reify"] +2026-06-15T13:31:06.577627Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-mir" trial=["pass", "inst_simplify"] result=Ok(()) +2026-06-15T13:31:06.577643Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-mir" trial=["pass", "inst_simplify"] +2026-06-15T13:31:06.577636Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] result=Err(Expected trial to pass, but it failed +├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:390:24 +╰╴1 additional opaque attachment) +2026-06-15T13:31:06.577676Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] +2026-06-15T13:31:06.577680Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["reify"] result=Ok(()) +2026-06-15T13:31:06.577721Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["reify"] +2026-06-15T13:31:06.578000Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] result=Err(Failed to verify annotation +├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:321:29 +├╴1 additional opaque attachment +│ +╰─▶ unexpected diagnostic: error[expander::unresolved-variable]: Unresolved variable - ╭▸ - 7 │ "shl" - │ ━━━ cannot find `shl` in this scope - │ - ├ help: bring it into scope: `use ::core::bits::shl in` - ╰ note: this could be a typo, a name used outside its scope, or a missing declaration; if it is a function or type from another module, you may need to import it first - help: use one of these fully qualified paths - ╭╴ - 7 │ "::core::bits::shl" - ╰╴ ++++++++++++++ - ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:171:21) -2026-06-15T11:12:38.445946Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "import-resolver"] -2026-06-15T11:12:38.445917Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] result=Err(Failed to verify annotation -├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:321:29 -├╴1 additional opaque attachment -│ -╰┬▶ unfulfilled annotation: DiagnosticAnnotation { category: None, severity: Error, message: "Remove this argument", line: Some(8) } did not match any emitted diagnostics - │ ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:151:25 - │ - ╰▶ unexpected diagnostic: - error[expander::invalid-argument-count]: Invalid argument count ╭▸ - 3 │ ┏ [ - 4 │ ┃ "::kernel::special_form::newtype", - 5 │ ┃ "x", - 6 │ ┃ "Boolean", - 7 │ ┃ ["+", "x", "x"], - 8 │ ┃ { "#literal": true } - │ ┃ ──────────────────── unexpected argument - 9 │ ┃ //~^ ERROR Remove this argument - 10 │ ┃ ] - │ ┗━┛ expected 3 arguments to `newtype`, found 4 + 11 │ "x" + │ ━ cannot find `x` in this scope │ - ├ help: use `(newtype Name type-expr body)` - ╰ note: the arguments are, in order: the type name (optionally with generic parameters), the underlying type, and the body where the name is in scope - ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:171:21) -2026-06-15T11:12:38.445975Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] -2026-06-15T11:12:38.446026Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "import-resolver"] result=Ok(()) -2026-06-15T11:12:38.446043Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "import-resolver"] -2026-06-15T11:12:38.445982Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "import-resolver", "continue"] result=Err(Failed to verify annotation + ╰ note: this could be a typo, a name used outside its scope, or a missing declaration; if it is a function or type from another module, you may need to import it first + help: a similar imported name exists + ╭╴ + 11 - "x" + 11 + "~" + ├╴ + 11 - "x" + 11 + "↑" + ├╴ + 11 - "x" + 11 + "√" + ├╴ + 11 - "x" + 11 + "∛" + ├╴ + 11 │ "index" + ╰╴ ++++ + ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:171:21) +2026-06-15T13:31:06.578049Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] +2026-06-15T13:31:06.578085Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-mir" trial=["reify"] result=Ok(()) +2026-06-15T13:31:06.578095Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-mir" trial=["reify"] +2026-06-15T13:31:06.578255Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["reify"] result=Ok(()) +2026-06-15T13:31:06.578264Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "specialization"] +2026-06-15T13:31:06.578415Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "name-mangler"] result=Err(Expected trial to pass, but it failed +├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:390:24 +╰╴1 additional opaque attachment) +2026-06-15T13:31:06.578444Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "name-mangler"] +2026-06-15T13:31:06.578453Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-mir" trial=["reify"] result=Ok(()) +2026-06-15T13:31:06.578468Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-mir" trial=["pass", "administrative_reduction"] result=Ok(()) +2026-06-15T13:31:06.578503Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-mir" trial=["pass", "administrative_reduction"] +2026-06-15T13:31:06.578532Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-mir" trial=["reify"] result=Ok(()) +2026-06-15T13:31:06.578541Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-mir" trial=["reify"] +2026-06-15T13:31:06.578499Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-mir" trial=["reify"] +2026-06-15T13:31:06.578712Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "inference", "intrinsics"] result=Ok(()) +2026-06-15T13:31:06.578723Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "inference"] +2026-06-15T13:31:06.578903Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-mir" trial=["reify"] result=Ok(()) +2026-06-15T13:31:06.578914Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-mir" trial=["reify"] +2026-06-15T13:31:06.578919Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-mir" trial=["pass", "inst_simplify"] result=Ok(()) +2026-06-15T13:31:06.578930Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-mir" trial=["pass", "inst_simplify"] +2026-06-15T13:31:06.579020Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "normalization"] result=Ok(()) +2026-06-15T13:31:06.579028Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "normalization"] +2026-06-15T13:31:06.579075Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["reify"] result=Ok(()) +2026-06-15T13:31:06.579059Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] result=Err(Expected trial to pass, but it failed +├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:390:24 +╰╴1 additional opaque attachment) +2026-06-15T13:31:06.579086Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["reify"] +2026-06-15T13:31:06.579105Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] +2026-06-15T13:31:06.579142Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-mir" trial=["pass", "inst_simplify"] result=Ok(()) +2026-06-15T13:31:06.579157Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-mir" trial=["pass", "inst_simplify"] +2026-06-15T13:31:06.579212Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] result=Ok(()) +2026-06-15T13:31:06.579222Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] +2026-06-15T13:31:06.579803Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "name-mangler"] result=Err(Expected trial to pass, but it failed +├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:390:24 +╰╴1 additional opaque attachment) +2026-06-15T13:31:06.579829Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "name-mangler"] +2026-06-15T13:31:06.579976Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "inference"] result=Ok(()) +2026-06-15T13:31:06.579988Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "inference"] +2026-06-15T13:31:06.580052Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-mir" trial=["reify"] result=Ok(()) +2026-06-15T13:31:06.580064Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-mir" trial=["reify"] +2026-06-15T13:31:06.580055Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-mir" trial=["reify"] result=Ok(()) +2026-06-15T13:31:06.580108Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-mir" trial=["reify"] +2026-06-15T13:31:06.580318Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["reify"] result=Ok(()) +2026-06-15T13:31:06.580328Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["reify"] +2026-06-15T13:31:06.580410Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "normalization"] result=Ok(()) +2026-06-15T13:31:06.580419Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "normalization"] +2026-06-15T13:31:06.580415Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] result=Err(Failed to verify annotation +├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:321:29 +├╴1 additional opaque attachment +│ +╰─▶ unfulfilled annotation: DiagnosticAnnotation { category: None, severity: Error, message: "cannot use a literal value as a type", line: Some(7) } did not match any emitted diagnostics + ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:151:25) +2026-06-15T13:31:06.580452Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] +2026-06-15T13:31:06.580506Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] result=Err(Expected trial to pass, but it failed +├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:390:24 +╰╴1 additional opaque attachment) +2026-06-15T13:31:06.580543Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] +2026-06-15T13:31:06.580522Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-mir" trial=["reify"] result=Ok(()) +2026-06-15T13:31:06.580583Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-mir" trial=["reify"] +2026-06-15T13:31:06.580605Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-mir" trial=["pass", "inst_simplify"] result=Ok(()) +2026-06-15T13:31:06.580619Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "specialization"] +2026-06-15T13:31:06.580686Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-mir" trial=["pass", "inst_simplify"] result=Ok(()) +2026-06-15T13:31:06.580698Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "type-extractor", "definition"] +2026-06-15T13:31:06.580864Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-mir" trial=["pass", "administrative_reduction"] result=Ok(()) +2026-06-15T13:31:06.580874Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-mir" trial=["pass", "administrative_reduction"] +2026-06-15T13:31:06.581135Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "name-mangler"] result=Err(Expected trial to pass, but it failed +├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:390:24 +╰╴1 additional opaque attachment) +2026-06-15T13:31:06.581164Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "name-mangler"] +2026-06-15T13:31:06.581492Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-mir" trial=["reify"] result=Ok(()) +2026-06-15T13:31:06.581520Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["reify"] +2026-06-15T13:31:06.581594Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["reify"] result=Ok(()) +2026-06-15T13:31:06.581607Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["reify"] +2026-06-15T13:31:06.581606Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "inference"] result=Ok(()) +2026-06-15T13:31:06.581638Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "inference"] +2026-06-15T13:31:06.581650Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] result=Err(Failed to verify annotation +├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:321:29 +├╴1 additional opaque attachment +│ +╰─▶ unfulfilled annotation: DiagnosticAnnotation { category: None, severity: Error, message: "cannot use a literal value as a type", line: Some(3) } did not match any emitted diagnostics + ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:151:25) +2026-06-15T13:31:06.581684Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] +2026-06-15T13:31:06.581720Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-mir" trial=["reify"] result=Ok(()) +2026-06-15T13:31:06.581728Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-mir" trial=["reify"] +2026-06-15T13:31:06.581833Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "type-extractor", "definition"] result=Ok(()) +2026-06-15T13:31:06.581850Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "type-extractor", "definition"] +2026-06-15T13:31:06.581882Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] result=Err(Expected trial to pass, but it failed +├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:390:24 +╰╴1 additional opaque attachment) +2026-06-15T13:31:06.581911Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] +2026-06-15T13:31:06.582013Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-mir" trial=["reify"] result=Ok(()) +2026-06-15T13:31:06.582026Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["reify"] +2026-06-15T13:31:06.582116Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "normalization"] result=Ok(()) +2026-06-15T13:31:06.582124Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "normalization"] +2026-06-15T13:31:06.582307Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "name-mangler"] result=Ok(()) +2026-06-15T13:31:06.582315Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "name-mangler"] +2026-06-15T13:31:06.582760Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-mir" trial=["pass", "administrative_reduction"] result=Ok(()) +2026-06-15T13:31:06.582770Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-mir" trial=["pass", "administrative_reduction"] +2026-06-15T13:31:06.582777Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["reify"] result=Ok(()) +2026-06-15T13:31:06.582788Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["reify"] +2026-06-15T13:31:06.582761Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "specialization"] result=Ok(()) +2026-06-15T13:31:06.582817Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "specialization"] +2026-06-15T13:31:06.582951Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["reify"] result=Ok(()) +2026-06-15T13:31:06.582961Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["reify"] +2026-06-15T13:31:06.582981Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] result=Err(Expected trial to pass, but it failed +├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:390:24 +╰╴1 additional opaque attachment) +2026-06-15T13:31:06.583000Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] +2026-06-15T13:31:06.583156Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "type-extractor", "definition"] result=Ok(()) +2026-06-15T13:31:06.583173Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "type-extractor", "definition"] +2026-06-15T13:31:06.583250Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] result=Err(Expected trial to pass, but it failed +├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:390:24 +╰╴1 additional opaque attachment) +2026-06-15T13:31:06.583308Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] +2026-06-15T13:31:06.583388Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["reify"] result=Ok(()) +2026-06-15T13:31:06.583397Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "name-mangler"] result=Ok(()) +2026-06-15T13:31:06.583407Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "name-mangler"] +2026-06-15T13:31:06.583399Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["reify"] +2026-06-15T13:31:06.583578Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "normalization"] result=Ok(()) +2026-06-15T13:31:06.583589Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "normalization"] +2026-06-15T13:31:06.583676Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-mir" trial=["reify"] result=Ok(()) +2026-06-15T13:31:06.583685Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-mir" trial=["reify"] +2026-06-15T13:31:06.583687Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "inference"] result=Ok(()) +2026-06-15T13:31:06.583696Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "inference"] +2026-06-15T13:31:06.583975Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["reify"] result=Ok(()) +2026-06-15T13:31:06.583984Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["reify"] +2026-06-15T13:31:06.584090Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["reify"] result=Ok(()) +2026-06-15T13:31:06.584101Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-mir" trial=["pass", "administrative_reduction"] +2026-06-15T13:31:06.584406Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "type-extractor", "definition"] result=Ok(()) +2026-06-15T13:31:06.584421Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "type-extractor", "definition"] +2026-06-15T13:31:06.584385Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] result=Err(Failed to verify annotation ├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:321:29 ├╴1 additional opaque attachment │ -╰┬▶ unfulfilled annotation: DiagnosticAnnotation { category: None, severity: Error, message: "Cannot find variable 'T'", line: Some(7) } did not match any emitted diagnostics +╰┬▶ unfulfilled annotation: DiagnosticAnnotation { category: None, severity: Error, message: "Did you mean to use 'newtype' instead?", line: Some(3) } did not match any emitted diagnostics │ ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:151:25 │ ╰▶ unexpected diagnostic: - error[expander::unresolved-variable]: Unresolved variable + error[expander::item-not-found]: Item not found ╭▸ - 7 │ "T", - │ ━ cannot find `T` in this scope - │ - ╰ note: this could be a typo, a name used outside its scope, or a missing declaration; if it is a function or type from another module, you may need to import it first - help: a similar local binding exists - ╭╴ - 7 - "T", - 7 + "Foo", + 3 │ ["::kernel::special_form::nuwtype"] + │ ┬─────────── ━━━━━━━ cannot find `nuwtype` in module `::kernel::special_form` + │ │ + │ looked in this module ╰╴ - help: a similar imported name exists + help: a similar item exists in this module ╭╴ - 7 - "T", - 7 + "StringUnionUnknownUrl|", + 3 - ["::kernel::special_form::nuwtype"] + 3 + ["::kernel::special_form::newtype"] ╰╴ ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:171:21) -2026-06-15T11:12:38.446096Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "import-resolver", "continue"] -2026-06-15T11:12:38.446198Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "name-mangler"] result=Ok(()) -2026-06-15T11:12:38.446211Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "name-mangler"] -2026-06-15T11:12:38.446243Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] result=Err(Expected trial to pass, but it failed -├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:390:24 -╰╴1 additional opaque attachment) -2026-06-15T11:12:38.446269Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] -2026-06-15T11:12:38.446311Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-mir" trial=["pass", "inst_simplify"] result=Ok(()) -2026-06-15T11:12:38.446329Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-mir" trial=["pass", "inst_simplify"] -2026-06-15T11:12:38.446311Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-mir" trial=["pass", "inst_simplify"] result=Ok(()) -2026-06-15T11:12:38.446359Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-mir" trial=["pass", "inst_simplify"] -2026-06-15T11:12:38.446380Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "name-mangler"] result=Ok(()) -2026-06-15T11:12:38.446406Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-mir" trial=["pass", "pre_inline"] -2026-06-15T11:12:38.446475Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "thunking"] result=Ok(()) -2026-06-15T11:12:38.446488Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "normalization"] -2026-06-15T11:12:38.446531Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-mir" trial=["pass", "cfg_simplify"] result=Ok(()) -2026-06-15T11:12:38.446549Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-mir" trial=["reify"] -2026-06-15T11:12:38.446663Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "inference", "intrinsics"] result=Ok(()) -2026-06-15T11:12:38.446677Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "inference"] -2026-06-15T11:12:38.446754Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "sanitizer"] result=Err(Failed to verify annotation -├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:321:29 -├╴1 additional opaque attachment -│ -╰┬▶ unfulfilled annotation: DiagnosticAnnotation { category: None, severity: Error, message: "Special form cannot be used as a type", line: Some(6) } did not match any emitted diagnostics +2026-06-15T13:31:06.584516Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] +2026-06-15T13:31:06.584512Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "name-mangler"] result=Err(Expected trial to pass, but it failed +├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:390:24 +╰╴1 additional opaque attachment) +2026-06-15T13:31:06.584539Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "name-mangler"] +2026-06-15T13:31:06.584669Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "specialization"] result=Ok(()) +2026-06-15T13:31:06.584676Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] result=Ok(()) +2026-06-15T13:31:06.584679Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "specialization"] +2026-06-15T13:31:06.584688Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] +2026-06-15T13:31:06.584741Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-mir" trial=["pass", "administrative_reduction"] result=Ok(()) +2026-06-15T13:31:06.584754Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "specialization"] +2026-06-15T13:31:06.584928Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["reify"] result=Ok(()) +2026-06-15T13:31:06.584936Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["reify"] +2026-06-15T13:31:06.584979Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "inference"] result=Ok(()) +2026-06-15T13:31:06.584987Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "inference"] +2026-06-15T13:31:06.585120Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["reify"] result=Ok(()) +2026-06-15T13:31:06.585128Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["reify"] +2026-06-15T13:31:06.585159Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "normalization"] result=Ok(()) +2026-06-15T13:31:06.585166Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "normalization"] +2026-06-15T13:31:06.585778Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "name-mangler"] result=Ok(()) +2026-06-15T13:31:06.585800Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "name-mangler"] +2026-06-15T13:31:06.585856Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-mir" trial=["reify"] result=Ok(()) +2026-06-15T13:31:06.585866Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-mir" trial=["reify"] +2026-06-15T13:31:06.585943Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "type-extractor", "definition"] result=Ok(()) +2026-06-15T13:31:06.585957Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-mir" trial=["pass", "administrative_reduction"] result=Ok(()) +2026-06-15T13:31:06.585972Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-mir" trial=["pass", "post_inline"] +2026-06-15T13:31:06.585959Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "type-extractor", "definition"] +2026-06-15T13:31:06.586204Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "specialization"] result=Ok(()) +2026-06-15T13:31:06.586214Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "thunking"] +2026-06-15T13:31:06.586293Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["reify"] result=Ok(()) +2026-06-15T13:31:06.586302Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["reify"] +2026-06-15T13:31:06.586385Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "inference"] result=Ok(()) +2026-06-15T13:31:06.586393Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "inference"] +2026-06-15T13:31:06.586489Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "normalization"] result=Ok(()) +2026-06-15T13:31:06.586497Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "normalization"] +2026-06-15T13:31:06.586573Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["reify"] result=Ok(()) +2026-06-15T13:31:06.586584Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] +2026-06-15T13:31:06.586767Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] result=Err(Failed to verify annotation +├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:321:29 +├╴1 additional opaque attachment +│ +╰┬▶ unfulfilled annotation: DiagnosticAnnotation { category: None, severity: Error, message: "cannot use this as a type constructor", line: Some(6) } did not match any emitted diagnostics │ ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:151:25 │ + ├▶ unexpected diagnostic: + │ error[expander::unresolved-variable]: Unresolved variable + │ ╭▸ + │ 6 │ ["::core::math::headpat", "Int", "Float"] + │ │ ━━━━━ cannot find `Float` in this scope + │ │ + │ ├ help: check the spelling, or import the name with a `use` statement + │ ╰ note: this could be a typo, a name used outside its scope, or a missing declaration; if it is a function or type from another module, you may need to import it first + │ ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:171:21 + │ + ├▶ unexpected diagnostic: + │ error[expander::unresolved-variable]: Unresolved variable + │ ╭▸ + │ 6 │ ["::core::math::headpat", "Int", "Float"] + │ │ ━━━ cannot find `Int` in this scope + │ │ + │ ├ help: check the spelling, or import the name with a `use` statement + │ ╰ note: this could be a typo, a name used outside its scope, or a missing declaration; if it is a function or type from another module, you may need to import it first + │ ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:171:21 + │ ╰▶ unexpected diagnostic: error[expander::item-not-found]: Item not found ╭▸ - 6 │ "::kernel::special_form::let", - │ ┬─────────── ━━━ cannot find `let` in module `::kernel::special_form` - │ │ - │ looked in this module + 6 │ ["::core::math::headpat", "Int", "Float"] + │ ┬─── ━━━━━━━ cannot find `headpat` in module `::core::math` + │ │ + │ looked in this module │ ╰ help: check the spelling and ensure the item is exported ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:171:21) -2026-06-15T11:12:38.446813Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "sanitizer"] -2026-06-15T11:12:38.446826Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "type-extractor", "definition"] result=Ok(()) -2026-06-15T11:12:38.446830Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-mir" trial=["pass", "post_inline"] result=Ok(()) -2026-06-15T11:12:38.446835Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "type-extractor", "definition"] -2026-06-15T11:12:38.446839Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-mir" trial=["pass", "post_inline"] -2026-06-15T11:12:38.447127Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "import-resolver"] result=Ok(()) -2026-06-15T11:12:38.447139Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "import-resolver"] -2026-06-15T11:12:38.447149Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "name-mangler"] result=Err(Expected trial to pass, but it failed -├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:390:24 -╰╴1 additional opaque attachment) -2026-06-15T11:12:38.447193Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "name-mangler"] -2026-06-15T11:12:38.447310Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "import-resolver"] result=Ok(()) -2026-06-15T11:12:38.447320Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "import-resolver"] -2026-06-15T11:12:38.447393Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "import-resolver"] result=Ok(()) -2026-06-15T11:12:38.447408Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "import-resolver"] -2026-06-15T11:12:38.447469Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] result=Err(Failed to verify annotation +2026-06-15T13:31:06.586865Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] +2026-06-15T13:31:06.587158Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "name-mangler"] result=Ok(()) +2026-06-15T13:31:06.587181Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "name-mangler"] +2026-06-15T13:31:06.587453Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] result=Err(Failed to verify annotation ├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:321:29 ├╴1 additional opaque attachment │ -╰┬▶ unfulfilled annotation: DiagnosticAnnotation { category: None, severity: Error, message: "Use a simple identifier here", line: Some(6) } did not match any emitted diagnostics +╰┬▶ unfulfilled annotation: DiagnosticAnnotation { category: None, severity: Error, message: "expected a tuple or struct for generic parameters", line: Some(7) } did not match any emitted diagnostics │ ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:151:25 │ + ├▶ unexpected diagnostic: + │ error[expander::unresolved-variable]: Unresolved variable + │ ╭▸ + │ 13 │ ["+", "a", "b"] + │ │ ━ cannot find `b` in this scope + │ │ + │ ╰ note: this could be a typo, a name used outside its scope, or a missing declaration; if it is a function or type from another module, you may need to import it first + │ help: a similar imported name exists + │ ╭╴ + │ 13 - ["+", "a", "b"] + │ 13 + ["+", "a", "~"] + │ ├╴ + │ 13 - ["+", "a", "b"] + │ 13 + ["+", "a", "↑"] + │ ├╴ + │ 13 - ["+", "a", "b"] + │ 13 + ["+", "a", "√"] + │ ├╴ + │ 13 - ["+", "a", "b"] + │ 13 + ["+", "a", "∛"] + │ ├╴ + │ 13 - ["+", "a", "b"] + │ 13 + ["+", "a", "cbrt"] + │ ╰╴ + │ ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:171:21 + │ + ├▶ unexpected diagnostic: + │ error[expander::unresolved-variable]: Unresolved variable + │ ╭▸ + │ 13 │ ["+", "a", "b"] + │ │ ━ cannot find `a` in this scope + │ │ + │ ╰ note: this could be a typo, a name used outside its scope, or a missing declaration; if it is a function or type from another module, you may need to import it first + │ help: a similar imported name exists + │ ╭╴ + │ 13 - ["+", "a", "b"] + │ 13 + ["+", "↑", "b"] + │ ├╴ + │ 13 - ["+", "a", "b"] + │ 13 + ["+", "√", "b"] + │ ├╴ + │ 13 - ["+", "a", "b"] + │ 13 + ["+", "∛", "b"] + │ ├╴ + │ 13 │ ["+", "access", "b"] + │ ├╴ +++++ + │ 13 │ ["+", "as", "b"] + │ ╰╴ + + │ ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:171:21 + │ ╰▶ unexpected diagnostic: - error[expander::invalid-use-imports]: Invalid use imports + error[expander::invalid-fn-generic-param]: Invalid generic parameter ╭▸ - 6 │ "::core::math::X", - │ ━━━━━━━━━━━━━━━ expected `*`, a tuple of names, or a struct of aliases + 7 │ { "#literal": 1 } + │ ━━━━━━━━━━━━━━━━━ expected a simple type parameter name │ - ╰ help: use `*` to import everything, `(a, b)` to import specific names, or `(a: alias, b: _)` to import with aliases + ╰ help: each generic parameter must be a plain identifier like `T`, not a qualified path or expression ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:171:21) -2026-06-15T11:12:38.447509Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] -2026-06-15T11:12:38.447617Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "name-mangler"] result=Err(Expected trial to pass, but it failed -├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:390:24 -╰╴1 additional opaque attachment) -2026-06-15T11:12:38.447653Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "name-mangler"] -2026-06-15T11:12:38.447709Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] result=Err(Expected trial to pass, but it failed +2026-06-15T13:31:06.587562Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] +2026-06-15T13:31:06.587588Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "thunking"] result=Ok(()) +2026-06-15T13:31:06.587602Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "thunking"] +2026-06-15T13:31:06.587614Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "type-extractor", "definition"] result=Ok(()) +2026-06-15T13:31:06.587623Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "type-extractor", "definition"] +2026-06-15T13:31:06.587852Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "inference"] result=Err(Expected trial to pass, but it failed ├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:390:24 ╰╴1 additional opaque attachment) -2026-06-15T11:12:38.447748Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] -2026-06-15T11:12:38.448024Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-mir" trial=["pass", "inst_simplify"] result=Ok(()) -2026-06-15T11:12:38.448039Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-mir" trial=["pass", "inst_simplify"] -2026-06-15T11:12:38.448152Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "type-extractor", "definition"] result=Ok(()) -2026-06-15T11:12:38.448264Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "type-extractor", "definition"] -2026-06-15T11:12:38.448220Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "normalization"] result=Ok(()) -2026-06-15T11:12:38.448244Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-mir" trial=["pass", "inst_simplify"] result=Ok(()) -2026-06-15T11:12:38.448339Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-mir" trial=["pass", "inst_simplify"] -2026-06-15T11:12:38.448309Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "import-resolver", "continue"] result=Err(Failed to verify annotation +2026-06-15T13:31:06.587887Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "inference"] +2026-06-15T13:31:06.588202Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["reify"] result=Ok(()) +2026-06-15T13:31:06.588210Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["reify"] +2026-06-15T13:31:06.588242Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "normalization"] result=Ok(()) +2026-06-15T13:31:06.588245Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-mir" trial=["reify"] result=Ok(()) +2026-06-15T13:31:06.588251Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "normalization"] +2026-06-15T13:31:06.588265Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-mir" trial=["pass", "pre_inline"] +2026-06-15T13:31:06.588268Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] result=Err(Failed to verify annotation ├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:321:29 ├╴1 additional opaque attachment │ -╰┬▶ unfulfilled annotation: DiagnosticAnnotation { category: None, severity: Error, message: "Cannot find variable 'shl'", line: Some(5) } did not match any emitted diagnostics +╰┬▶ unfulfilled annotation: DiagnosticAnnotation { category: None, severity: Error, message: "exactly 3 segments", line: Some(4) } did not match any emitted diagnostics │ ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:151:25 │ ╰▶ unexpected diagnostic: - error[expander::unresolved-variable]: Unresolved variable + error[expander::item-not-found]: Item not found ╭▸ - 5 │ "shl", - │ ━━━ cannot find `shl` in this scope + 4 │ "::kernel::special_form", + │ ┬───── ━━━━━━━━━━━━ cannot find `special_form` in module `::kernel` + │ │ + │ looked in this module │ - ├ help: bring it into scope: `use ::core::bits::shl in` - ╰ note: this could be a typo, a name used outside its scope, or a missing declaration; if it is a function or type from another module, you may need to import it first - help: use one of these fully qualified paths - ╭╴ - 5 │ "::core::bits::shl", - ╰╴ ++++++++++++++ + ╰ help: check the spelling and ensure the item is exported ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:171:21) -2026-06-15T11:12:38.448360Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "import-resolver", "continue"] -2026-06-15T11:12:38.448168Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "inference"] result=Ok(()) -2026-06-15T11:12:38.448418Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "import-resolver"] result=Ok(()) -2026-06-15T11:12:38.448308Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "normalization"] -2026-06-15T11:12:38.448427Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "inference"] -2026-06-15T11:12:38.448437Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "import-resolver"] -2026-06-15T11:12:38.448505Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "import-resolver"] result=Ok(()) -2026-06-15T11:12:38.448522Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-mir" trial=["pass", "inline"] -2026-06-15T11:12:38.448590Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "name-mangler"] result=Ok(()) -2026-06-15T11:12:38.448601Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-mir" trial=["pass", "forward_substitution"] -2026-06-15T11:12:38.448717Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "import-resolver"] result=Err(Expected trial to pass, but it failed +2026-06-15T13:31:06.588325Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] +2026-06-15T13:31:06.588443Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "name-mangler"] result=Ok(()) +2026-06-15T13:31:06.588453Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "name-mangler"] +2026-06-15T13:31:06.588802Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "type-extractor", "definition"] result=Ok(()) +2026-06-15T13:31:06.588814Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "type-extractor", "definition"] +2026-06-15T13:31:06.588952Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] result=Err(Expected trial to pass, but it failed ├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:390:24 ╰╴1 additional opaque attachment) -2026-06-15T11:12:38.448762Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "import-resolver"] -2026-06-15T11:12:38.448870Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-mir" trial=["reify"] result=Ok(()) -2026-06-15T11:12:38.448887Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-mir" trial=["reify"] -2026-06-15T11:12:38.448940Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "name-mangler"] result=Ok(()) -2026-06-15T11:12:38.448957Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-mir" trial=["pass", "pre_inline"] -2026-06-15T11:12:38.449009Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-mir" trial=["pass", "pre_inline"] result=Ok(()) -2026-06-15T11:12:38.449025Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-mir" trial=["pass", "pre_inline"] -2026-06-15T11:12:38.448932Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "sanitizer"] result=Err(Failed to verify annotation +2026-06-15T13:31:06.588981Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] +2026-06-15T13:31:06.588983Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "thunking"] result=Ok(()) +2026-06-15T13:31:06.589007Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "thunking"] +2026-06-15T13:31:06.588983Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-mir" trial=["pass", "post_inline"] result=Ok(()) +2026-06-15T13:31:06.589042Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-mir" trial=["pass", "post_inline"] +2026-06-15T13:31:06.589331Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["reify"] result=Ok(()) +2026-06-15T13:31:06.589342Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["reify"] +2026-06-15T13:31:06.589285Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] result=Err(Failed to verify annotation ├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:321:29 ├╴1 additional opaque attachment │ -╰┬▶ unfulfilled annotation: DiagnosticAnnotation { category: None, severity: Error, message: "Remove this constraint from 'T'", line: Some(4) } did not match any emitted diagnostics +╰┬▶ unfulfilled annotation: DiagnosticAnnotation { category: None, severity: Error, message: "expected a simple type parameter", line: Some(7) } did not match any emitted diagnostics │ ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:151:25 │ ├▶ unexpected diagnostic: │ error[expander::unresolved-variable]: Unresolved variable - │ ╭▸ - │ 4 │ "add", - │ │ ━━━ cannot find `add` in this scope - │ │ - │ ├ help: bring it into scope: `use ::core::math::add in` - │ ╰ note: this could be a typo, a name used outside its scope, or a missing declaration; if it is a function or type from another module, you may need to import it first - │ help: use one of these fully qualified paths - │ ╭╴ - │ 4 │ "::core::math::add", - │ ╰╴ ++++++++++++++ + │ ╭▸ + │ 13 │ ["+", "a", "b"] + │ │ ━ cannot find `b` in this scope + │ │ + │ ╰ note: this could be a typo, a name used outside its scope, or a missing declaration; if it is a function or type from another module, you may need to import it first + │ help: a similar imported name exists + │ ╭╴ + │ 13 - ["+", "a", "b"] + │ 13 + ["+", "a", "~"] + │ ├╴ + │ 13 - ["+", "a", "b"] + │ 13 + ["+", "a", "↑"] + │ ├╴ + │ 13 - ["+", "a", "b"] + │ 13 + ["+", "a", "√"] + │ ├╴ + │ 13 - ["+", "a", "b"] + │ 13 + ["+", "a", "∛"] + │ ├╴ + │ 13 - ["+", "a", "b"] + │ 13 + ["+", "a", "cbrt"] + │ ╰╴ + │ ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:171:21 + │ + ├▶ unexpected diagnostic: + │ error[expander::unresolved-variable]: Unresolved variable + │ ╭▸ + │ 13 │ ["+", "a", "b"] + │ │ ━ cannot find `a` in this scope + │ │ + │ ╰ note: this could be a typo, a name used outside its scope, or a missing declaration; if it is a function or type from another module, you may need to import it first + │ help: a similar imported name exists + │ ╭╴ + │ 13 - ["+", "a", "b"] + │ 13 + ["+", "↑", "b"] + │ ├╴ + │ 13 - ["+", "a", "b"] + │ 13 + ["+", "√", "b"] + │ ├╴ + │ 13 - ["+", "a", "b"] + │ 13 + ["+", "∛", "b"] + │ ├╴ + │ 13 │ ["+", "access", "b"] + │ ├╴ +++++ + │ 13 │ ["+", "as", "b"] + │ ╰╴ + │ ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:171:21 │ ╰▶ unexpected diagnostic: - error[expander::unresolved-variable]: Unresolved variable + error[expander::invalid-expression-in-type-position]: Invalid expression in type position ╭▸ - 4 │ "add", - │ ━━━━━━ cannot find `Number` in this scope + 7 │ "T": { "#literal": 2 } + │ ━━━━━━━━━━━━━━━━━ cannot use a literal value as a type │ - ├ help: check the spelling, or import the name with a `use` statement - ╰ note: this could be a typo, a name used outside its scope, or a missing declaration; if it is a function or type from another module, you may need to import it first + ├ help: replace this with a type path, tuple type, struct type, `_`, `(| ...)`, or `(& ...)` + ╰ note: valid type forms are: type paths like `String`, tuple types like `(Int, String)`, struct types like `(name: String)`, `_` for inference, unions `(| ...)`, and intersections `(& ...)` ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:171:21) -2026-06-15T11:12:38.449073Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "import-resolver"] -2026-06-15T11:12:38.449045Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] result=Err(Failed to verify annotation +2026-06-15T13:31:06.589429Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] +2026-06-15T13:31:06.589442Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "inference"] result=Ok(()) +2026-06-15T13:31:06.589455Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "inference"] +2026-06-15T13:31:06.589686Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "name-mangler"] result=Err(Expected trial to pass, but it failed +├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:390:24 +╰╴1 additional opaque attachment) +2026-06-15T13:31:06.589717Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "name-mangler"] +2026-06-15T13:31:06.589775Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "normalization"] result=Ok(()) +2026-06-15T13:31:06.589784Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "normalization"] +2026-06-15T13:31:06.590234Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "type-extractor", "definition"] result=Ok(()) +2026-06-15T13:31:06.590224Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] result=Err(Expected trial to pass, but it failed +├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:390:24 +╰╴1 additional opaque attachment) +2026-06-15T13:31:06.590268Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] +2026-06-15T13:31:06.590255Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "type-extractor", "definition"] +2026-06-15T13:31:06.590373Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-mir" trial=["pass", "pre_inline"] result=Ok(()) +2026-06-15T13:31:06.590384Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-mir" trial=["pass", "pre_inline"] +2026-06-15T13:31:06.590385Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "thunking"] result=Ok(()) +2026-06-15T13:31:06.590469Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "thunking"] +2026-06-15T13:31:06.590555Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["reify"] result=Ok(()) +2026-06-15T13:31:06.590566Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["reify"] +2026-06-15T13:31:06.590675Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] result=Ok(()) +2026-06-15T13:31:06.590684Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] +2026-06-15T13:31:06.590923Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "name-mangler"] result=Ok(()) +2026-06-15T13:31:06.590956Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "sanitizer"] +2026-06-15T13:31:06.591112Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "inference"] result=Ok(()) +2026-06-15T13:31:06.591123Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "inference"] +2026-06-15T13:31:06.591153Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "normalization"] result=Ok(()) +2026-06-15T13:31:06.591161Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "normalization"] +2026-06-15T13:31:06.591119Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] result=Err(Failed to verify annotation ├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:321:29 ├╴1 additional opaque attachment │ -╰┬▶ unfulfilled annotation: DiagnosticAnnotation { category: None, severity: Error, message: "Remove this argument", line: Some(7) } did not match any emitted diagnostics +╰┬▶ unfulfilled annotation: DiagnosticAnnotation { category: None, severity: Error, message: "Remove these generic arguments", line: Some(3) } did not match any emitted diagnostics │ ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:151:25 │ + ├▶ unexpected diagnostic: + │ error[expander::generic-arguments-in-module]: Generic arguments in module path + │ ╭▸ + │ 3 │ ["::kernel::special_form::if"] + │ │ ━ generic argument not allowed here + │ │ + │ ├ help: move the generic arguments to the final segment of the path, or remove them + │ ╰ note: modules are not generic; only the final item in a path can be parameterized + │ ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:171:21 + │ + ├▶ unexpected diagnostic: + │ error[expander::unresolved-variable]: Unresolved variable + │ ╭▸ + │ 3 │ ["::kernel::special_form::if"] + │ │ ━ cannot find `U` in this scope + │ │ + │ ╰ note: this could be a typo, a name used outside its scope, or a missing declaration; if it is a function or type from another module, you may need to import it first + │ help: a similar imported name exists + │ ╭╴ + │ 3 - ["::kernel::special_form::if"] + │ 3 + ["::kernel::special_form::if"] + │ ├╴ + │ 3 - ["::kernel::special_form::if"] + │ 3 + ["::kernel::special_form::if<|>"] + │ ├╴ + │ 3 │ ["::kernel::special_form::if"] + │ ├╴ ++++++ + │ 3 │ ["::kernel::special_form::if"] + │ ├╴ ++++ + │ 3 │ ["::kernel::special_form::if"] + │ ╰╴ ++ + │ ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:171:21 + │ ╰▶ unexpected diagnostic: - error[expander::invalid-argument-count]: Invalid argument count + error[expander::unresolved-variable]: Unresolved variable ╭▸ - 3 │ ┏ [ - 4 │ ┃ "::kernel::special_form::as", - 5 │ ┃ { "#literal": true }, - 6 │ ┃ { "#literal": true }, - 7 │ ┃ { "#literal": true } - │ ┃ ──────────────────── unexpected argument - 8 │ ┃ //~^ ERROR Remove this argument - 9 │ ┃ ] - │ ┗━┛ expected 2 arguments to `as`, found 3 + 3 │ ["::kernel::special_form::if"] + │ ━ cannot find `T` in this scope │ - ├ help: use `(as value type)` - ╰ note: the first argument is the value to cast and the second is the target type + ╰ note: this could be a typo, a name used outside its scope, or a missing declaration; if it is a function or type from another module, you may need to import it first + help: a similar imported name exists + ╭╴ + 3 - ["::kernel::special_form::if"] + 3 + ["::kernel::special_form::if"] + ├╴ + 3 - ["::kernel::special_form::if"] + 3 + ["::kernel::special_form::if"] + ├╴ + 3 - ["::kernel::special_form::if"] + 3 + ["::kernel::special_form::if"] + ├╴ + 3 - ["::kernel::special_form::if"] + 3 + ["::kernel::special_form::if"] + ├╴ + 3 - ["::kernel::special_form::if"] + 3 + ["::kernel::special_form<|>::if"] + ╰╴ ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:171:21) -2026-06-15T11:12:38.449099Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] -2026-06-15T11:12:38.449226Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] result=Err(Failed to verify annotation +2026-06-15T13:31:06.591216Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] +2026-06-15T13:31:06.591670Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "type-extractor", "definition"] result=Ok(()) +2026-06-15T13:31:06.591683Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "type-extractor", "definition"] +2026-06-15T13:31:06.591720Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] result=Ok(()) +2026-06-15T13:31:06.591729Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] +2026-06-15T13:31:06.591870Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-mir" trial=["pass", "pre_inline"] result=Ok(()) +2026-06-15T13:31:06.591879Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-mir" trial=["pass", "pre_inline"] +2026-06-15T13:31:06.591898Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] result=Err(Failed to verify annotation ├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:321:29 ├╴1 additional opaque attachment │ -╰┬▶ unfulfilled annotation: DiagnosticAnnotation { category: None, severity: Error, message: "Replace this with a simple identifier", line: Some(5) } did not match any emitted diagnostics - │ ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:151:25 - │ - ├▶ unfulfilled annotation: DiagnosticAnnotation { category: None, severity: Error, message: "Replace this with a simple identifier", line: Some(10) } did not match any emitted diagnostics +╰┬▶ unfulfilled annotation: DiagnosticAnnotation { category: None, severity: Error, message: "expected `*`, a tuple of names, or a struct of aliases", line: Some(6) } did not match any emitted diagnostics │ ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:151:25 │ - ├▶ unfulfilled annotation: DiagnosticAnnotation { category: None, severity: Error, message: "Replace this with a simple identifier", line: Some(15) } did not match any emitted diagnostics - │ ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:151:25 + ├▶ unexpected diagnostic: + │ error[expander::unresolved-variable]: Unresolved variable + │ ╭▸ + │ 8 │ "x" + │ │ ━ cannot find `x` in this scope + │ │ + │ ╰ note: this could be a typo, a name used outside its scope, or a missing declaration; if it is a function or type from another module, you may need to import it first + │ help: a similar imported name exists + │ ╭╴ + │ 8 - "x" + │ 8 + "~" + │ ├╴ + │ 8 - "x" + │ 8 + "↑" + │ ├╴ + │ 8 - "x" + │ 8 + "√" + │ ├╴ + │ 8 - "x" + │ 8 + "∛" + │ ├╴ + │ 8 │ "index" + │ ╰╴ ++++ + │ ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:171:21 │ ╰▶ unexpected diagnostic: - error[expander::invalid-binding-name]: Invalid binding name + error[expander::invalid-use-import-binding]: Invalid use import binding ╭▸ - 5 │ "Int", - │ ━━━━━━ expected a simple identifier for the `let` binding name + 6 │ { "#tuple": [{ "#literal": 1 }] }, + │ ━━━━━━━━━━━━━━━━━ expected a simple name to import │ - ├ help: write `(let name value body)` with a plain name such as `x` - ╰ note: the first argument to `let` introduces a new local binding and must be a plain identifier without path qualification or generic arguments + ╰ help: each import must be a plain identifier like `foo`, not a qualified path or expression ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:171:21) -2026-06-15T11:12:38.449278Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] -2026-06-15T11:12:38.449549Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-mir" trial=["pass", "inst_simplify"] result=Ok(()) -2026-06-15T11:12:38.449560Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-mir" trial=["pass", "inst_simplify"] -2026-06-15T11:12:38.449621Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "type-extractor", "definition"] result=Ok(()) -2026-06-15T11:12:38.449641Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "type-extractor", "definition"] -2026-06-15T11:12:38.449857Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-mir" trial=["pass", "inst_simplify"] result=Ok(()) -2026-06-15T11:12:38.449870Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-mir" trial=["pass", "inst_simplify"] -2026-06-15T11:12:38.449954Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "import-resolver"] result=Ok(()) -2026-06-15T11:12:38.449970Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "inference"] result=Ok(()) -2026-06-15T11:12:38.449979Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "import-resolver"] -2026-06-15T11:12:38.449988Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "inference"] -2026-06-15T11:12:38.450260Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "import-resolver"] result=Ok(()) -2026-06-15T11:12:38.450270Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "import-resolver"] -2026-06-15T11:12:38.450323Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] result=Err(Expected trial to pass, but it failed -├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:390:24 -╰╴1 additional opaque attachment) -2026-06-15T11:12:38.450345Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] -2026-06-15T11:12:38.450438Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "normalization"] result=Ok(()) -2026-06-15T11:12:38.450461Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "normalization"] -2026-06-15T11:12:38.450527Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "import-resolver"] result=Err(Failed to verify annotation +2026-06-15T13:31:06.591967Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] +2026-06-15T13:31:06.592304Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "thunking"] result=Ok(()) +2026-06-15T13:31:06.592317Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["reify"] +2026-06-15T13:31:06.592317Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "normalization"] result=Ok(()) +2026-06-15T13:31:06.592333Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "normalization"] +2026-06-15T13:31:06.592408Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["reify"] result=Ok(()) +2026-06-15T13:31:06.592420Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "import-resolver"] +2026-06-15T13:31:06.592485Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "inference"] result=Ok(()) +2026-06-15T13:31:06.592495Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "inference"] +2026-06-15T13:31:06.592544Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-mir" trial=["pass", "post_inline"] result=Ok(()) +2026-06-15T13:31:06.592558Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] result=Ok(()) +2026-06-15T13:31:06.592561Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-mir" trial=["reify"] +2026-06-15T13:31:06.592580Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] +2026-06-15T13:31:06.592835Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "type-extractor", "definition"] result=Ok(()) +2026-06-15T13:31:06.592846Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "type-extractor", "definition"] +2026-06-15T13:31:06.593139Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "sanitizer"] result=Err(Failed to verify annotation ├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:321:29 ├╴1 additional opaque attachment │ -╰┬▶ unfulfilled annotation: DiagnosticAnnotation { category: None, severity: Error, message: "Cannot find variable 'föo'", line: Some(11) } did not match any emitted diagnostics +╰┬▶ unfulfilled annotation: DiagnosticAnnotation { category: None, severity: Error, message: "Special form cannot be used as a value", line: Some(5) } did not match any emitted diagnostics │ ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:151:25 │ + ├▶ unexpected diagnostic: + │ error[expander::unresolved-variable]: Unresolved variable + │ ╭▸ + │ 7 │ "a" + │ │ ━ cannot find `a` in this scope + │ │ + │ ╰ note: this could be a typo, a name used outside its scope, or a missing declaration; if it is a function or type from another module, you may need to import it first + │ help: a similar imported name exists + │ ╭╴ + │ 7 - "a" + │ 7 + "↑" + │ ├╴ + │ 7 - "a" + │ 7 + "√" + │ ├╴ + │ 7 - "a" + │ 7 + "∛" + │ ├╴ + │ 7 │ "access" + │ ├╴ +++++ + │ 7 │ "as" + │ ╰╴ + + │ ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:171:21 + │ ╰▶ unexpected diagnostic: error[expander::unresolved-variable]: Unresolved variable - ╭▸ - 11 │ "föo" - │ ━━━ cannot find `föo` in this scope - │ - ╰ note: this could be a typo, a name used outside its scope, or a missing declaration; if it is a function or type from another module, you may need to import it first - help: a similar local binding exists - ╭╴ - 11 - "föo" - 11 + "foo" - ╰╴ + ╭▸ + 4 │ "add", + │ ━━━ cannot find `add` in this scope + │ + ├ help: bring it into scope: `use ::core::math::add in` + ╰ note: this could be a typo, a name used outside its scope, or a missing declaration; if it is a function or type from another module, you may need to import it first + help: use one of these fully qualified paths + ╭╴ + 4 │ "::core::math::add", + ╰╴ ++++++++++++++ ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:171:21) -2026-06-15T11:12:38.450604Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "import-resolver"] -2026-06-15T11:12:38.450652Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-mir" trial=["reify"] result=Ok(()) -2026-06-15T11:12:38.450664Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-mir" trial=["reify"] -2026-06-15T11:12:38.450671Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-mir" trial=["pass", "pre_inline"] result=Ok(()) -2026-06-15T11:12:38.450687Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-mir" trial=["pass", "pre_inline"] -2026-06-15T11:12:38.450691Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-mir" trial=["pass", "pre_inline"] result=Ok(()) -2026-06-15T11:12:38.450707Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-mir" trial=["pass", "pre_inline"] -2026-06-15T11:12:38.450773Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-mir" trial=["pass", "forward_substitution"] result=Ok(()) -2026-06-15T11:12:38.450784Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-mir" trial=["pass", "forward_substitution"] -2026-06-15T11:12:38.450750Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "import-resolver", "continue"] result=Err(Failed to verify annotation +2026-06-15T13:31:06.593255Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "sanitizer"] +2026-06-15T13:31:06.593450Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] result=Ok(()) +2026-06-15T13:31:06.593460Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] +2026-06-15T13:31:06.593469Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "import-resolver"] result=Ok(()) +2026-06-15T13:31:06.593482Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["reify"] result=Ok(()) +2026-06-15T13:31:06.593484Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "import-resolver"] +2026-06-15T13:31:06.593496Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] +2026-06-15T13:31:06.593790Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "normalization"] result=Ok(()) +2026-06-15T13:31:06.593798Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "normalization"] +2026-06-15T13:31:06.593843Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "inference"] result=Ok(()) +2026-06-15T13:31:06.593851Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "inference"] +2026-06-15T13:31:06.593912Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] result=Ok(()) +2026-06-15T13:31:06.593926Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] +2026-06-15T13:31:06.594024Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "type-extractor", "definition"] result=Ok(()) +2026-06-15T13:31:06.594037Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "type-extractor", "definition"] +2026-06-15T13:31:06.594295Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] result=Err(Failed to verify annotation ├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:321:29 ├╴1 additional opaque attachment │ -╰┬▶ unfulfilled annotation: DiagnosticAnnotation { category: None, severity: Error, message: "Module 'foo' not found", line: Some(6) } did not match any emitted diagnostics - │ ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:151:25 - │ - ├▶ unexpected diagnostic: +╰┬▶ unexpected diagnostic: │ error[expander::unresolved-variable]: Unresolved variable │ ╭▸ - │ 9 │ ["add", { "#literal": 1 }, { "#literal": 2 }] - │ │ ━━━ cannot find `add` in this scope + │ 7 │ "#tuple": ["Int"], + │ │ ━━━ cannot find `Int` in this scope │ │ - │ ├ help: bring it into scope: `use ::core::math::add in` + │ ├ help: check the spelling, or import the name with a `use` statement │ ╰ note: this could be a typo, a name used outside its scope, or a missing declaration; if it is a function or type from another module, you may need to import it first - │ help: use one of these fully qualified paths - │ ╭╴ - │ 9 │ ["::core::math::add", { "#literal": 1 }, { "#literal": 2 }] - │ ╰╴ ++++++++++++++ + │ ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:171:21 + │ + ├▶ unexpected diagnostic: + │ error[expander::unresolved-variable]: Unresolved variable + │ ╭▸ + │ 11 │ "x" + │ │ ━ cannot find `x` in this scope + │ │ + │ ╰ note: this could be a typo, a name used outside its scope, or a missing declaration; if it is a function or type from another module, you may need to import it first + │ help: a similar imported name exists + │ ╭╴ + │ 11 - "x" + │ 11 + "~" + │ ├╴ + │ 11 - "x" + │ 11 + "↑" + │ ├╴ + │ 11 - "x" + │ 11 + "√" + │ ├╴ + │ 11 - "x" + │ 11 + "∛" + │ ├╴ + │ 11 │ "index" + │ ╰╴ ++++ │ ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:171:21 │ ╰▶ unexpected diagnostic: - error[expander::module-not-found]: Module not found + error[expander::unresolved-variable]: Unresolved variable ╭▸ - 6 │ "kernel::foo", - │ ┬───── ━━━ cannot find module `foo` in `kernel` - │ │ - │ looked in this module + 8 │ "#type": "(Int)" + │ ━━━ cannot find `Int` in this scope │ - ├ help: check the module name and ensure it is exported from its parent - ╰ note: only exported sub-modules are reachable via `::` + ├ help: check the spelling, or import the name with a `use` statement + ╰ note: this could be a typo, a name used outside its scope, or a missing declaration; if it is a function or type from another module, you may need to import it first ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:171:21) -2026-06-15T11:12:38.450835Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "import-resolver", "continue"] -2026-06-15T11:12:38.450954Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-mir" trial=["pass", "inst_simplify"] result=Ok(()) -2026-06-15T11:12:38.450965Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-mir" trial=["pass", "inst_simplify"] -2026-06-15T11:12:38.451038Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] result=Err(Failed to verify annotation +2026-06-15T13:31:06.594376Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] +2026-06-15T13:31:06.594468Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-mir" trial=["reify"] result=Ok(()) +2026-06-15T13:31:06.594479Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-mir" trial=["reify"] +2026-06-15T13:31:06.594565Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "import-resolver"] result=Ok(()) +2026-06-15T13:31:06.594575Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "import-resolver"] +2026-06-15T13:31:06.594801Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] result=Err(Expected trial to pass, but it failed +├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:390:24 +╰╴1 additional opaque attachment) +2026-06-15T13:31:06.594826Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] +2026-06-15T13:31:06.594795Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "sanitizer"] result=Err(Failed to verify annotation ├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:321:29 ├╴1 additional opaque attachment │ -╰┬▶ unfulfilled annotation: DiagnosticAnnotation { category: None, severity: Error, message: "Remove this type annotation", line: Some(8) } did not match any emitted diagnostics +╰┬▶ unfulfilled annotation: DiagnosticAnnotation { category: None, severity: Error, message: "Special form cannot be used as a type", line: Some(6) } did not match any emitted diagnostics │ ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:151:25 │ - ├▶ unexpected diagnostic: - │ error[expander::type-annotation-in-type-position]: Type annotation in type position + ╰▶ unexpected diagnostic: + error[expander::item-not-found]: Item not found + ╭▸ + 6 │ "::kernel::special_form::let", + │ ┬─────────── ━━━ cannot find `let` in module `::kernel::special_form` + │ │ + │ looked in this module + │ + ╰ help: check the spelling and ensure the item is exported + ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:171:21) +2026-06-15T13:31:06.594886Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "sanitizer"] +2026-06-15T13:31:06.594968Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-mir" trial=["pass", "pre_inline"] result=Ok(()) +2026-06-15T13:31:06.594978Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-mir" trial=["pass", "pre_inline"] +2026-06-15T13:31:06.595215Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] result=Ok(()) +2026-06-15T13:31:06.595230Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] +2026-06-15T13:31:06.595341Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "type-extractor", "definition"] result=Ok(()) +2026-06-15T13:31:06.595352Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "type-extractor", "definition"] +2026-06-15T13:31:06.595635Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] result=Ok(()) +2026-06-15T13:31:06.595642Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] +2026-06-15T13:31:06.595658Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "normalization"] result=Ok(()) +2026-06-15T13:31:06.595667Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "inference"] result=Ok(()) +2026-06-15T13:31:06.595677Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "checking"] +2026-06-15T13:31:06.595668Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "normalization"] +2026-06-15T13:31:06.595744Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "import-resolver"] result=Ok(()) +2026-06-15T13:31:06.595752Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "import-resolver"] +2026-06-15T13:31:06.596094Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] result=Ok(()) +2026-06-15T13:31:06.596108Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] +2026-06-15T13:31:06.596060Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] result=Err(Failed to verify annotation +├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:321:29 +├╴1 additional opaque attachment +│ +╰┬▶ unexpected diagnostic: + │ error[expander::unresolved-variable]: Unresolved variable │ ╭▸ - │ 6 │ ┌ { - │ 7 │ │ "#struct": { "name": "String" }, - │ 8 │ │ "#type": "(name: String)" - │ │ │ ━━━━━━━━━━━━━━ type annotations are not allowed inside a type expression - │ 9 │ │ //~^ ERROR Remove this type annotation - │ 10 │ │ }, - │ │ └───┘ this struct is already being used as a type + │ 13 │ ["+", "a", "b"] + │ │ ━ cannot find `b` in this scope │ │ - │ ├ help: remove the type annotation - │ ╰ note: in type position, `(name: String)` already defines a struct type + │ ╰ note: this could be a typo, a name used outside its scope, or a missing declaration; if it is a function or type from another module, you may need to import it first + │ help: a similar imported name exists + │ ╭╴ + │ 13 - ["+", "a", "b"] + │ 13 + ["+", "a", "~"] + │ ├╴ + │ 13 - ["+", "a", "b"] + │ 13 + ["+", "a", "↑"] + │ ├╴ + │ 13 - ["+", "a", "b"] + │ 13 + ["+", "a", "√"] + │ ├╴ + │ 13 - ["+", "a", "b"] + │ 13 + ["+", "a", "∛"] + │ ├╴ + │ 13 - ["+", "a", "b"] + │ 13 + ["+", "a", "cbrt"] + │ ╰╴ │ ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:171:21 │ ╰▶ unexpected diagnostic: error[expander::unresolved-variable]: Unresolved variable ╭▸ - 11 │ "x" - │ ━ cannot find `x` in this scope + 13 │ ["+", "a", "b"] + │ ━ cannot find `a` in this scope │ ╰ note: this could be a typo, a name used outside its scope, or a missing declaration; if it is a function or type from another module, you may need to import it first help: a similar imported name exists ╭╴ - 11 - "x" - 11 + "~↑√∛index" - ╰╴ - ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:171:21) -2026-06-15T11:12:38.451092Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] -2026-06-15T11:12:38.451294Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "type-extractor", "definition"] result=Ok(()) -2026-06-15T11:12:38.451311Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "type-extractor", "definition"] -2026-06-15T11:12:38.451325Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "import-resolver"] result=Ok(()) -2026-06-15T11:12:38.451337Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-mir" trial=["pass", "inline"] -2026-06-15T11:12:38.451367Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-mir" trial=["pass", "inst_simplify"] result=Ok(()) -2026-06-15T11:12:38.451381Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-mir" trial=["pass", "inst_simplify"] -2026-06-15T11:12:38.451567Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] result=Err(Expected trial to pass, but it failed -├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:390:24 -╰╴1 additional opaque attachment) -2026-06-15T11:12:38.451587Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] -2026-06-15T11:12:38.451592Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "import-resolver"] result=Ok(()) -2026-06-15T11:12:38.451601Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "import-resolver"] -2026-06-15T11:12:38.451980Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "import-resolver"] result=Ok(()) -2026-06-15T11:12:38.451994Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "import-resolver"] -2026-06-15T11:12:38.452165Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-mir" trial=["reify"] result=Ok(()) -2026-06-15T11:12:38.452178Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-mir" trial=["reify"] -2026-06-15T11:12:38.452282Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-mir" trial=["pass", "pre_inline"] result=Ok(()) -2026-06-15T11:12:38.452297Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-mir" trial=["pass", "pre_inline"] -2026-06-15T11:12:38.452323Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "normalization"] result=Ok(()) -2026-06-15T11:12:38.452349Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "normalization"] -2026-06-15T11:12:38.452352Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-mir" trial=["pass", "forward_substitution"] result=Ok(()) -2026-06-15T11:12:38.452423Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-mir" trial=["pass", "inst_simplify"] -2026-06-15T11:12:38.452463Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-mir" trial=["pass", "inst_simplify"] result=Ok(()) -2026-06-15T11:12:38.452475Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-mir" trial=["pass", "inst_simplify"] -2026-06-15T11:12:38.452584Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "import-resolver", "continue"] result=Err(Failed to verify annotation + 13 - ["+", "a", "b"] + 13 + ["+", "↑", "b"] + ├╴ + 13 - ["+", "a", "b"] + 13 + ["+", "√", "b"] + ├╴ + 13 - ["+", "a", "b"] + 13 + ["+", "∛", "b"] + ├╴ + 13 │ ["+", "access", "b"] + ├╴ +++++ + 13 │ ["+", "as", "b"] + ╰╴ + + ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:171:21) +2026-06-15T13:31:06.596175Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] +2026-06-15T13:31:06.596375Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] result=Ok(()) +2026-06-15T13:31:06.596385Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] +2026-06-15T13:31:06.596435Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-mir" trial=["reify"] result=Ok(()) +2026-06-15T13:31:06.596446Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-mir" trial=["reify"] +2026-06-15T13:31:06.596484Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-mir" trial=["pass", "pre_inline"] result=Ok(()) +2026-06-15T13:31:06.596494Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-mir" trial=["pass", "dse"] +2026-06-15T13:31:06.596575Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "type-extractor", "definition"] result=Ok(()) +2026-06-15T13:31:06.596591Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "type-extractor", "definition"] +2026-06-15T13:31:06.596750Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "import-resolver"] result=Err(Expected trial to pass, but it failed +├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:390:24 +╰╴1 additional opaque attachment) +2026-06-15T13:31:06.596777Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "import-resolver"] +2026-06-15T13:31:06.596794Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] result=Ok(()) +2026-06-15T13:31:06.596803Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] +2026-06-15T13:31:06.596736Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "sanitizer"] result=Err(Failed to verify annotation ├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:321:29 ├╴1 additional opaque attachment │ -╰┬▶ unfulfilled annotation: DiagnosticAnnotation { category: None, severity: Error, message: "Cannot find variable 'Bar'", line: Some(6) } did not match any emitted diagnostics +╰┬▶ unfulfilled annotation: DiagnosticAnnotation { category: None, severity: Error, message: "Remove this constraint from 'T'", line: Some(4) } did not match any emitted diagnostics │ ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:151:25 │ ╰▶ unexpected diagnostic: error[expander::unresolved-variable]: Unresolved variable ╭▸ - 6 │ "Foo", - │ ━━━ cannot find `Bar` in this scope + 4 │ "add", + │ ━━━ cannot find `add` in this scope │ - ├ help: check the spelling, or import the name with a `use` statement + ├ help: bring it into scope: `use ::core::math::add in` ╰ note: this could be a typo, a name used outside its scope, or a missing declaration; if it is a function or type from another module, you may need to import it first + help: use one of these fully qualified paths + ╭╴ + 4 │ "::core::math::add", + ╰╴ ++++++++++++++ ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:171:21) -2026-06-15T11:12:38.452649Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "import-resolver"] -2026-06-15T11:12:38.452660Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-mir" trial=["pass", "pre_inline"] result=Ok(()) -2026-06-15T11:12:38.452671Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-mir" trial=["pass", "pre_inline"] -2026-06-15T11:12:38.452728Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] result=Err(Failed to verify annotation +2026-06-15T13:31:06.596828Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "import-resolver"] +2026-06-15T13:31:06.597386Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] result=Ok(()) +2026-06-15T13:31:06.597396Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] +2026-06-15T13:31:06.597576Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] result=Ok(()) +2026-06-15T13:31:06.597588Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] +2026-06-15T13:31:06.597816Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "type-extractor", "definition"] result=Ok(()) +2026-06-15T13:31:06.597827Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "type-extractor", "definition"] +2026-06-15T13:31:06.597864Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] result=Err(Expected trial to pass, but it failed +├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:390:24 +╰╴1 additional opaque attachment) +2026-06-15T13:31:06.597886Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] +2026-06-15T13:31:06.597936Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-mir" trial=["reify"] result=Err(Expected trial to pass, but it failed +├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:390:24 +╰╴1 additional opaque attachment) +2026-06-15T13:31:06.597957Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-mir" trial=["reify"] +2026-06-15T13:31:06.598019Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-mir" trial=["pass", "dse"] result=Ok(()) +2026-06-15T13:31:06.598028Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-mir" trial=["pass", "dse"] +2026-06-15T13:31:06.598080Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "import-resolver"] result=Ok(()) +2026-06-15T13:31:06.598095Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "import-resolver"] +2026-06-15T13:31:06.598775Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] result=Err(Failed to verify annotation ├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:321:29 ├╴1 additional opaque attachment │ -╰┬▶ unfulfilled annotation: DiagnosticAnnotation { category: None, severity: Error, message: "Use an integer literal here", line: Some(3) } did not match any emitted diagnostics - │ ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:151:25 +╰┬▶ unexpected diagnostic: + │ error[expander::unresolved-variable]: Unresolved variable + │ ╭▸ + │ 12 │ ["+", "a", "b"] + │ │ ━ cannot find `b` in this scope + │ │ + │ ╰ note: this could be a typo, a name used outside its scope, or a missing declaration; if it is a function or type from another module, you may need to import it first + │ help: a similar imported name exists + │ ╭╴ + │ 12 - ["+", "a", "b"] + │ 12 + ["+", "a", "~"] + │ ├╴ + │ 12 - ["+", "a", "b"] + │ 12 + ["+", "a", "↑"] + │ ├╴ + │ 12 - ["+", "a", "b"] + │ 12 + ["+", "a", "√"] + │ ├╴ + │ 12 - ["+", "a", "b"] + │ 12 + ["+", "a", "∛"] + │ ├╴ + │ 12 - ["+", "a", "b"] + │ 12 + ["+", "a", "cbrt"] + │ ╰╴ + │ ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:171:21 │ ╰▶ unexpected diagnostic: - error[expander::invalid-field-literal-type]: Invalid field literal type - ╭▸ - 3 │ ["::kernel::special_form::access", "data", { "#literal": true }] - │ ━━━━ expected an integer for field indexing - │ - ╰ help: use an integer index like `0` for tuple field access, or a name like `field` for named field access + error[expander::unresolved-variable]: Unresolved variable + ╭▸ + 12 │ ["+", "a", "b"] + │ ━ cannot find `a` in this scope + │ + ╰ note: this could be a typo, a name used outside its scope, or a missing declaration; if it is a function or type from another module, you may need to import it first + help: a similar imported name exists + ╭╴ + 12 - ["+", "a", "b"] + 12 + ["+", "↑", "b"] + ├╴ + 12 - ["+", "a", "b"] + 12 + ["+", "√", "b"] + ├╴ + 12 - ["+", "a", "b"] + 12 + ["+", "∛", "b"] + ├╴ + 12 │ ["+", "access", "b"] + ├╴ +++++ + 12 │ ["+", "as", "b"] + ╰╴ + ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:171:21) -2026-06-15T11:12:38.452768Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] -2026-06-15T11:12:38.452843Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] result=Err(Expected trial to pass, but it failed +2026-06-15T13:31:06.598850Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] +2026-06-15T13:31:06.598928Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "type-extractor", "definition"] result=Ok(()) +2026-06-15T13:31:06.598940Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "type-extractor", "definition"] +2026-06-15T13:31:06.599013Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] result=Err(Expected trial to pass, but it failed ├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:390:24 ╰╴1 additional opaque attachment) -2026-06-15T11:12:38.452860Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] -2026-06-15T11:12:38.453060Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "type-extractor", "definition"] result=Ok(()) -2026-06-15T11:12:38.453078Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "type-extractor", "definition"] -2026-06-15T11:12:38.453035Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "inference"] result=Err(Failed to verify annotation +2026-06-15T13:31:06.599035Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] +2026-06-15T13:31:06.598955Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "import-resolver"] result=Err(Failed to verify annotation +├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:321:29 +├╴1 additional opaque attachment +│ +╰┬▶ unfulfilled annotation: DiagnosticAnnotation { category: None, severity: Error, message: "Cannot find variable 'föo'", line: Some(11) } did not match any emitted diagnostics + │ ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:151:25 + │ + ╰▶ unexpected diagnostic: + error[expander::unresolved-variable]: Unresolved variable + ╭▸ + 11 │ "föo" + │ ━━━ cannot find `föo` in this scope + │ + ╰ note: this could be a typo, a name used outside its scope, or a missing declaration; if it is a function or type from another module, you may need to import it first + help: a similar local binding exists + ╭╴ + 11 - "föo" + 11 + "foo" + ╰╴ + ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:171:21) +2026-06-15T13:31:06.599103Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "import-resolver"] +2026-06-15T13:31:06.599411Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "import-resolver"] result=Ok(()) +2026-06-15T13:31:06.599359Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] result=Err(Failed to verify annotation ├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:321:29 ├╴1 additional opaque attachment │ -╰┬▶ unfulfilled annotation: DiagnosticAnnotation { category: None, severity: Error, message: "Type variable has incompatible upper and lower bounds", line: Some(3) } did not match any emitted diagnostics +╰┬▶ unfulfilled annotation: DiagnosticAnnotation { category: None, severity: Error, message: "expected `*`, a tuple of names, or a struct of aliases", line: Some(8) } did not match any emitted diagnostics │ ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:151:25 │ ├▶ unexpected diagnostic: - │ error[lowering::type-extractor::unbound-type-variable]: Unbound type variable - │ ╭▸ - │ 3 │ ["newtype", "Person", "T", ["Person", { "#literal": "2" }]] - │ │ ━━━━━━ Cannot find type 'Number' - │ │ - │ ├ note: This is likely a compiler bug in the name resolution system. The type checker has encountered a name that wasn't properly resolved earlier in compilation. The name resolution pass should have caught this error or provided a more specific error message. - │ ├ help: This is a bug in the compiler, not an issue with your code. - │ ├ help: Please report this issue along with a minimal code example that reproduces the error. - │ ╰ note: Internal compiler errors indicate a bug in the compiler itself that needs to be fixed. - │ - │ We would appreciate if you could file a GitHub or Linear issue and reference this error. - │ - │ When reporting this issue, please include your query, any relevant type definitions, and the complete error message shown above. + │ error[expander::unresolved-variable]: Unresolved variable + │ ╭▸ + │ 12 │ "x" + │ │ ━ cannot find `x` in this scope + │ │ + │ ╰ note: this could be a typo, a name used outside its scope, or a missing declaration; if it is a function or type from another module, you may need to import it first + │ help: a similar imported name exists + │ ╭╴ + │ 12 - "x" + │ 12 + "~" + │ ├╴ + │ 12 - "x" + │ 12 + "↑" + │ ├╴ + │ 12 - "x" + │ 12 + "√" + │ ├╴ + │ 12 - "x" + │ 12 + "∛" + │ ├╴ + │ 12 │ "index" + │ ╰╴ ++++ │ ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:171:21 │ ├▶ unexpected diagnostic: - │ error[lowering::type-extractor::unused-generic-parameter]: Generic parameter not used in type definition + │ error[expander::package-not-found]: Package not found │ ╭▸ - │ 1 │ //@ run: fail - │ │ ─ ...but never used in this type definition - │ 2 │ //@ description: Checks that type constructor bounded generic parameter (T: Number) violation is caught during type inference. - │ 3 │ ["newtype", "Person", "T", ["Person", { "#literal": "2" }]] - │ │ ━━━━━━━━━ Generic parameter `T` declared here... + │ 5 │ "::math", + │ │ ┬─┯━━━ + │ │ │ │ + │ │ │ cannot find package `math` + │ │ in this path │ │ - │ ├ help: Generic parameter `T` is declared but not referenced. Either remove the unused parameter or incorporate it into your type definition. - │ ╰ note: Each generic parameter should serve a purpose in parameterizing the type. Unused parameters can make code harder to understand and may indicate a design oversight or incomplete implementation. They are unconstrained variables, and therefore considered erroneous. + │ ├ help: check the package name, or add it to the project dependencies + │ ╰ note: absolute paths start from an installed package │ ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:171:21 │ ╰▶ unexpected diagnostic: - error[lowering::expander::unresolved-variable]: Unresolved variable + error[expander::invalid-use-alias]: Invalid use alias + ╭▸ + 8 │ "x": { "#literal": 1 } + │ ━━━━━━━━━━━━━━━━━ expected `_` or a simple identifier as the alias + │ + ╰ help: use `_` to keep the original name or a simple identifier to rename: `(name: alias)` or `(name: _)` + ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:171:21) +2026-06-15T13:31:06.599445Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "import-resolver"] +2026-06-15T13:31:06.599459Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] +2026-06-15T13:31:06.599519Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-mir" trial=["pass", "dse"] result=Ok(()) +2026-06-15T13:31:06.599531Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-mir" trial=["pass", "dse"] +2026-06-15T13:31:06.599542Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-mir" trial=["reify"] result=Ok(()) +2026-06-15T13:31:06.599572Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-mir" trial=["pass", "inline"] +2026-06-15T13:31:06.600349Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] result=Err(Expected trial to pass, but it failed +├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:390:24 +╰╴1 additional opaque attachment) +2026-06-15T13:31:06.600372Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] +2026-06-15T13:31:06.600373Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "import-resolver"] result=Ok(()) +2026-06-15T13:31:06.600417Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "import-resolver"] +2026-06-15T13:31:06.600484Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] result=Err(Failed to verify annotation +├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:321:29 +├╴1 additional opaque attachment +│ +╰─▶ unexpected diagnostic: + error[expander::unresolved-variable]: Unresolved variable ╭▸ - 3 │ ["newtype", "Person", "T", ["Person", { "#literal": "2" }]] - │ ━━━━━━ cannot find `Number` in this scope + 7 │ { "#struct": { "foo": "Bar" } }, + │ ━━━ cannot find `Bar` in this scope │ ├ help: check the spelling, or import the name with a `use` statement ╰ note: this could be a typo, a name used outside its scope, or a missing declaration; if it is a function or type from another module, you may need to import it first ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:171:21) -2026-06-15T11:12:38.453126Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "inference"] -2026-06-15T11:12:38.453229Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "import-resolver"] result=Ok(()) -2026-06-15T11:12:38.453241Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "import-resolver"] -2026-06-15T11:12:38.453449Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-mir" trial=["pass", "inline"] result=Ok(()) -2026-06-15T11:12:38.453458Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-mir" trial=["pass", "inline"] -2026-06-15T11:12:38.453721Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "import-resolver"] result=Err(Failed to verify annotation +2026-06-15T13:31:06.600519Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] +2026-06-15T13:31:06.600581Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "type-extractor", "definition"] result=Err(Failed to verify annotation ├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:321:29 ├╴1 additional opaque attachment │ -╰┬▶ unfulfilled annotation: DiagnosticAnnotation { category: None, severity: Error, message: "Remove this generic argument", line: Some(3) } did not match any emitted diagnostics +╰┬▶ unfulfilled annotation: DiagnosticAnnotation { category: None, severity: Error, message: "unexpected argument", line: Some(6) } did not match any emitted diagnostics + │ ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:151:25 + │ + ╰▶ unexpected diagnostic: + error[type-extractor::generic-parameter-mismatch]: Incorrect number of type parameters + ╭▸ + 6 │ "Some", + │ ┯━━━━━━━━━━━━┬─────━ + │ │ │ + │ │ Remove this argument + │ Type `::core::option::Some` takes 1 type parameter, but 2 were provided + │ + ├ help: Remove the extra parameter(s): `::core::option::Some` + ╰ note: Generic type parameters allow types to work with different data types while maintaining type safety. Each generic type has specific requirements for the number and names of type parameters it accepts. For example, List requires exactly one type parameter, while Dict requires two. + ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:171:21) +2026-06-15T13:31:06.600534Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] result=Err(Failed to verify annotation +├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:321:29 +├╴1 additional opaque attachment +│ +╰┬▶ unexpected diagnostic: + │ error[expander::unresolved-variable]: Unresolved variable + │ ╭▸ + │ 12 │ ["+", "a", "b"] + │ │ ━ cannot find `b` in this scope + │ │ + │ ╰ note: this could be a typo, a name used outside its scope, or a missing declaration; if it is a function or type from another module, you may need to import it first + │ help: a similar imported name exists + │ ╭╴ + │ 12 - ["+", "a", "b"] + │ 12 + ["+", "a", "~"] + │ ├╴ + │ 12 - ["+", "a", "b"] + │ 12 + ["+", "a", "↑"] + │ ├╴ + │ 12 - ["+", "a", "b"] + │ 12 + ["+", "a", "√"] + │ ├╴ + │ 12 - ["+", "a", "b"] + │ 12 + ["+", "a", "∛"] + │ ├╴ + │ 12 - ["+", "a", "b"] + │ 12 + ["+", "a", "cbrt"] + │ ╰╴ + │ ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:171:21 + │ + ├▶ unexpected diagnostic: + │ error[expander::unresolved-variable]: Unresolved variable + │ ╭▸ + │ 6 │ "#struct": { "T": "Int" }, + │ │ ━━━ cannot find `Int` in this scope + │ │ + │ ├ help: check the spelling, or import the name with a `use` statement + │ ╰ note: this could be a typo, a name used outside its scope, or a missing declaration; if it is a function or type from another module, you may need to import it first + │ ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:171:21 + │ + ╰▶ unexpected diagnostic: + error[expander::unresolved-variable]: Unresolved variable + ╭▸ + 12 │ ["+", "a", "b"] + │ ━ cannot find `a` in this scope + │ + ╰ note: this could be a typo, a name used outside its scope, or a missing declaration; if it is a function or type from another module, you may need to import it first + help: a similar imported name exists + ╭╴ + 12 - ["+", "a", "b"] + 12 + ["+", "↑", "b"] + ├╴ + 12 - ["+", "a", "b"] + 12 + ["+", "√", "b"] + ├╴ + 12 - ["+", "a", "b"] + 12 + ["+", "∛", "b"] + ├╴ + 12 │ ["+", "access", "b"] + ├╴ +++++ + 12 │ ["+", "as", "b"] + ╰╴ + + ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:171:21) +2026-06-15T13:31:06.600662Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "type-extractor", "definition"] +2026-06-15T13:31:06.600669Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] +2026-06-15T13:31:06.600748Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] result=Err(Expected trial to pass, but it failed +├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:390:24 +╰╴1 additional opaque attachment) +2026-06-15T13:31:06.600774Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] +2026-06-15T13:31:06.600975Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-mir" trial=["pass", "dse"] result=Ok(()) +2026-06-15T13:31:06.600985Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-mir" trial=["pass", "dse"] +2026-06-15T13:31:06.601534Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "import-resolver"] result=Err(Failed to verify annotation +├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:321:29 +├╴1 additional opaque attachment +│ +╰┬▶ unfulfilled annotation: DiagnosticAnnotation { category: None, severity: Error, message: "Remove this generic argument", line: Some(3) } did not match any emitted diagnostics │ ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:151:25 │ ├▶ unexpected diagnostic: @@ -779,115 +1284,109 @@ warning: `hashql-ast` (lib) generated 1 warning help: a similar imported name exists ╭╴ 3 - ["::math::add", { "#literal": 2 }, { "#literal": 3 }] - 3 + ["::math<||~↑√∛>::add", { "#literal": 2 }, { "#literal": 3 }] + 3 + ["::math::add", { "#literal": 2 }, { "#literal": 3 }] + ├╴ + 3 - ["::math::add", { "#literal": 2 }, { "#literal": 3 }] + 3 + ["::math::add", { "#literal": 2 }, { "#literal": 3 }] + ├╴ + 3 - ["::math::add", { "#literal": 2 }, { "#literal": 3 }] + 3 + ["::math::add", { "#literal": 2 }, { "#literal": 3 }] + ├╴ + 3 - ["::math::add", { "#literal": 2 }, { "#literal": 3 }] + 3 + ["::math::add", { "#literal": 2 }, { "#literal": 3 }] + ├╴ + 3 - ["::math::add", { "#literal": 2 }, { "#literal": 3 }] + 3 + ["::math<|>::add", { "#literal": 2 }, { "#literal": 3 }] ╰╴ ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:171:21) -2026-06-15T11:12:38.453825Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "import-resolver"] -2026-06-15T11:12:38.453879Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-mir" trial=["pass", "inline"] result=Ok(()) -2026-06-15T11:12:38.453919Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-mir" trial=["pass", "pre_inline"] result=Ok(()) -2026-06-15T11:12:38.453930Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-mir" trial=["pass", "inst_simplify"] result=Ok(()) -2026-06-15T11:12:38.453924Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-mir" trial=["pass", "inline"] -2026-06-15T11:12:38.453942Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-mir" trial=["pass", "inst_simplify"] -2026-06-15T11:12:38.453934Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-mir" trial=["pass", "pre_inline"] -2026-06-15T11:12:38.453988Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-mir" trial=["reify"] result=Ok(()) -2026-06-15T11:12:38.453999Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-mir" trial=["reify"] -2026-06-15T11:12:38.454076Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "normalization"] result=Ok(()) -2026-06-15T11:12:38.454097Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "normalization"] -2026-06-15T11:12:38.454114Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] result=Err(Expected trial to pass, but it failed -├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:390:24 -╰╴1 additional opaque attachment) -2026-06-15T11:12:38.454127Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-mir" trial=["pass", "pre_inline"] result=Ok(()) -2026-06-15T11:12:38.454156Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-mir" trial=["pass", "dse"] -2026-06-15T11:12:38.454162Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "import-resolver"] result=Err(Failed to verify annotation -├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:321:29 -├╴1 additional opaque attachment -│ -╰┬▶ unfulfilled annotation: DiagnosticAnnotation { category: None, severity: Error, message: "'lshift' not found in module 'core::bits'", line: Some(3) } did not match any emitted diagnostics - │ ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:151:25 - │ - ╰▶ unexpected diagnostic: - error[expander::item-not-found]: Item not found - ╭▸ - 3 │ ["use", "core::bits", { "#tuple": ["lshift"] }, "_"] - │ ┬─── ━━━━━━ cannot find `lshift` in module `core::bits` - │ │ - │ looked in this module - │ - ╰ help: check the spelling and ensure the item is exported - ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:171:21) -2026-06-15T11:12:38.454163Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] result=Err(Failed to verify annotation +2026-06-15T13:31:06.601600Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "import-resolver"] +2026-06-15T13:31:06.601668Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] result=Ok(()) +2026-06-15T13:31:06.601684Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] +2026-06-15T13:31:06.601750Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] result=Ok(()) +2026-06-15T13:31:06.601764Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] +2026-06-15T13:31:06.601764Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "import-resolver"] result=Ok(()) +2026-06-15T13:31:06.601786Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "import-resolver"] +2026-06-15T13:31:06.601986Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "type-extractor", "definition"] result=Ok(()) +2026-06-15T13:31:06.601999Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "type-extractor", "definition"] +2026-06-15T13:31:06.602355Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] result=Err(Failed to verify annotation ├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:321:29 ├╴1 additional opaque attachment │ -╰┬▶ unfulfilled annotation: DiagnosticAnnotation { category: None, severity: Error, message: "Replace this with a simple identifier", line: Some(5) } did not match any emitted diagnostics - │ ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:151:25 - │ - ├▶ unfulfilled annotation: DiagnosticAnnotation { category: None, severity: Error, message: "Replace this literal with a type name", line: Some(7) } did not match any emitted diagnostics - │ ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:151:25 - │ - ╰▶ unexpected diagnostic: - error[expander::invalid-binding-name]: Invalid binding name +╰─▶ unexpected diagnostic: + error[expander::unresolved-variable]: Unresolved variable ╭▸ - 5 │ "::x", - │ ━━━ expected a simple identifier for the `let` binding name + 7 │ { "#struct": { "foo": "Bar" } }, + │ ━━━ cannot find `Bar` in this scope │ - ├ help: write `(let name value body)` with a plain name such as `x` - ╰ note: the first argument to `let` introduces a new local binding and must be a plain identifier without path qualification or generic arguments + ├ help: check the spelling, or import the name with a `use` statement + ╰ note: this could be a typo, a name used outside its scope, or a missing declaration; if it is a function or type from another module, you may need to import it first ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:171:21) -2026-06-15T11:12:38.454138Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] -2026-06-15T11:12:38.454217Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "import-resolver"] -2026-06-15T11:12:38.454227Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] -2026-06-15T11:12:38.454415Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-mir" trial=["pass", "inst_simplify"] result=Ok(()) -2026-06-15T11:12:38.454433Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "type-extractor", "definition"] result=Ok(()) -2026-06-15T11:12:38.454452Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "type-extractor", "definition"] -2026-06-15T11:12:38.454470Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "inference"] result=Ok(()) -2026-06-15T11:12:38.454481Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "inference"] -2026-06-15T11:12:38.454495Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "import-resolver"] result=Ok(()) -2026-06-15T11:12:38.454441Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-mir" trial=["pass", "inst_simplify"] -2026-06-15T11:12:38.454507Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] -2026-06-15T11:12:38.455507Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-mir" trial=["pass", "inline"] result=Ok(()) -2026-06-15T11:12:38.455519Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "ctor"] -2026-06-15T11:12:38.455520Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] result=Err(Expected trial to pass, but it failed +2026-06-15T13:31:06.602397Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] +2026-06-15T13:31:06.602915Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] result=Ok(()) +2026-06-15T13:31:06.602925Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] +2026-06-15T13:31:06.602949Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] result=Err(Expected trial to pass, but it failed ├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:390:24 ╰╴1 additional opaque attachment) -2026-06-15T11:12:38.455551Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] -2026-06-15T11:12:38.455637Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-mir" trial=["pass", "inst_simplify"] result=Ok(()) -2026-06-15T11:12:38.455660Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "import-resolver"] -2026-06-15T11:12:38.455662Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-mir" trial=["pass", "dse"] result=Ok(()) -2026-06-15T11:12:38.455685Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-mir" trial=["pass", "dse"] -2026-06-15T11:12:38.455901Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-mir" trial=["pass", "inst_simplify"] result=Ok(()) -2026-06-15T11:12:38.455909Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "normalization"] result=Ok(()) -2026-06-15T11:12:38.455911Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-mir" trial=["pass", "inst_simplify"] -2026-06-15T11:12:38.455921Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "normalization"] -2026-06-15T11:12:38.455886Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] result=Err(Failed to verify annotation +2026-06-15T13:31:06.602975Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "pre-expansion-name-resolver"] +2026-06-15T13:31:06.603098Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] result=Err(Failed to verify annotation ├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:321:29 ├╴1 additional opaque attachment │ -╰┬▶ unfulfilled annotation: DiagnosticAnnotation { category: None, severity: Error, message: "Replace this qualified path with a simple identifier", line: Some(3) } did not match any emitted diagnostics - │ ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:151:25 - │ - ├▶ unfulfilled annotation: DiagnosticAnnotation { category: None, severity: Error, message: "Replace this literal with a type name", line: Some(3) } did not match any emitted diagnostics - │ ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:151:25 +╰┬▶ unexpected diagnostic: + │ error[expander::unresolved-variable]: Unresolved variable + │ ╭▸ + │ 9 │ ["+", "a", "b"] + │ │ ━ cannot find `b` in this scope + │ │ + │ ╰ note: this could be a typo, a name used outside its scope, or a missing declaration; if it is a function or type from another module, you may need to import it first + │ help: a similar imported name exists + │ ╭╴ + │ 9 - ["+", "a", "b"] + │ 9 + ["+", "a", "~"] + │ ├╴ + │ 9 - ["+", "a", "b"] + │ 9 + ["+", "a", "↑"] + │ ├╴ + │ 9 - ["+", "a", "b"] + │ 9 + ["+", "a", "√"] + │ ├╴ + │ 9 - ["+", "a", "b"] + │ 9 + ["+", "a", "∛"] + │ ├╴ + │ 9 - ["+", "a", "b"] + │ 9 + ["+", "a", "cbrt"] + │ ╰╴ + │ ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:171:21 │ ╰▶ unexpected diagnostic: - error[expander::invalid-binding-name]: Invalid binding name + error[expander::unresolved-variable]: Unresolved variable ╭▸ - 3 │ ["::kernel::special_form::type", "::x", { "#literal": 1 }, "x"] - │ ━━━ expected a type name for the `type` binding + 9 │ ["+", "a", "b"] + │ ━ cannot find `a` in this scope │ - ├ help: write `(type Name type-expr body)` with a name like `MyType` or `Pair` - ╰ note: the first argument to `type` introduces a new type alias and must be a simple identifier, optionally with generic parameters - ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:171:21) -2026-06-15T11:12:38.455978Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] -2026-06-15T11:12:38.455985Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "type-extractor", "definition"] result=Ok(()) -2026-06-15T11:12:38.456021Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "type-extractor", "definition"] -2026-06-15T11:12:38.456038Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "inference"] result=Ok(()) -2026-06-15T11:12:38.456041Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-mir" trial=["reify"] result=Ok(()) -2026-06-15T11:12:38.456060Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-mir" trial=["reify"] -2026-06-15T11:12:38.456052Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "inference"] -2026-06-15T11:12:38.456207Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-mir" trial=["pass", "pre_inline"] result=Ok(()) -2026-06-15T11:12:38.456225Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] -2026-06-15T11:12:38.456207Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "import-resolver"] result=Err(Failed to verify annotation + ╰ note: this could be a typo, a name used outside its scope, or a missing declaration; if it is a function or type from another module, you may need to import it first + help: a similar imported name exists + ╭╴ + 9 - ["+", "a", "b"] + 9 + ["+", "↑", "b"] + ├╴ + 9 - ["+", "a", "b"] + 9 + ["+", "√", "b"] + ├╴ + 9 - ["+", "a", "b"] + 9 + ["+", "∛", "b"] + ├╴ + 9 │ ["+", "access", "b"] + ├╴ +++++ + 9 │ ["+", "as", "b"] + ╰╴ + + ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:171:21) +2026-06-15T13:31:06.603180Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] +2026-06-15T13:31:06.603180Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "type-extractor", "definition"] result=Ok(()) +2026-06-15T13:31:06.603238Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "type-extractor", "definition"] +2026-06-15T13:31:06.603266Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "import-resolver"] result=Ok(()) +2026-06-15T13:31:06.603292Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "import-resolver"] +2026-06-15T13:31:06.603524Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "import-resolver"] result=Err(Failed to verify annotation ├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:321:29 ├╴1 additional opaque attachment │ @@ -905,7 +1404,19 @@ warning: `hashql-ast` (lib) generated 1 warning │ help: a similar item exists in this module │ ╭╴ │ 3 - ["use", "kernel::type", { "#tuple": ["T"] }, "_"] - │ 3 + ["use", "kernel::type", { "#tuple": ["NumberStringUnionUnknown|"] }, "_"] + │ 3 + ["use", "kernel::type", { "#tuple": ["Number"] }, "_"] + │ ├╴ + │ 3 - ["use", "kernel::type", { "#tuple": ["T"] }, "_"] + │ 3 + ["use", "kernel::type", { "#tuple": ["String"] }, "_"] + │ ├╴ + │ 3 - ["use", "kernel::type", { "#tuple": ["T"] }, "_"] + │ 3 + ["use", "kernel::type", { "#tuple": ["Union"] }, "_"] + │ ├╴ + │ 3 - ["use", "kernel::type", { "#tuple": ["T"] }, "_"] + │ 3 + ["use", "kernel::type", { "#tuple": ["Unknown"] }, "_"] + │ ├╴ + │ 3 - ["use", "kernel::type", { "#tuple": ["T"] }, "_"] + │ 3 + ["use", "kernel::type", { "#tuple": ["|"] }, "_"] │ ╰╴ │ ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:171:21 │ @@ -917,662 +1428,926 @@ warning: `hashql-ast` (lib) generated 1 warning │ ╰ help: remove the generic arguments; `use` imports modules and items, which do not take type parameters at the import site ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:171:21) -2026-06-15T11:12:38.456270Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "import-resolver"] -2026-06-15T11:12:38.456230Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "import-resolver"] result=Err(Failed to verify annotation +2026-06-15T13:31:06.603585Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "import-resolver"] +2026-06-15T13:31:06.604219Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "specialization"] result=Ok(()) +2026-06-15T13:31:06.604228Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "specialization"] +2026-06-15T13:31:06.604368Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "pre-expansion-name-resolver"] result=Err(Expected trial to pass, but it failed +├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:390:24 +╰╴1 additional opaque attachment) +2026-06-15T13:31:06.604396Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "pre-expansion-name-resolver"] +2026-06-15T13:31:06.604494Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] result=Err(Failed to verify annotation ├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:321:29 ├╴1 additional opaque attachment │ -╰┬▶ unfulfilled annotation: DiagnosticAnnotation { category: None, severity: Error, message: "Module 'foo' not found", line: Some(3) } did not match any emitted diagnostics - │ ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:151:25 +╰┬▶ unexpected diagnostic: + │ error[expander::unresolved-variable]: Unresolved variable + │ ╭▸ + │ 7 │ { "#struct": { "foo": "Bar" } }, + │ │ ━━━ cannot find `Bar` in this scope + │ │ + │ ├ help: check the spelling, or import the name with a `use` statement + │ ╰ note: this could be a typo, a name used outside its scope, or a missing declaration; if it is a function or type from another module, you may need to import it first + │ ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:171:21 │ ╰▶ unexpected diagnostic: - error[expander::module-not-found]: Module not found + error[expander::unresolved-variable]: Unresolved variable ╭▸ - 3 │ ["use", "kernel::foo", "*", "_"] - │ ┬───── ━━━ cannot find module `foo` in `kernel` - │ │ - │ looked in this module + 5 │ "Foo", + │ ━━━ cannot find `Bar` in this scope │ - ├ help: check the module name and ensure it is exported from its parent - ╰ note: only exported sub-modules are reachable via `::` + ├ help: check the spelling, or import the name with a `use` statement + ╰ note: this could be a typo, a name used outside its scope, or a missing declaration; if it is a function or type from another module, you may need to import it first ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:171:21) -2026-06-15T11:12:38.456292Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "import-resolver"] -2026-06-15T11:12:38.456803Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] result=Err(Failed to verify annotation +2026-06-15T13:31:06.604527Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] result=Err(Failed to verify annotation +├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:321:29 +├╴1 additional opaque attachment +│ +╰─▶ unexpected diagnostic: + error[expander::unresolved-variable]: Unresolved variable + ╭▸ + 8 │ "x" + │ ━ cannot find `x` in this scope + │ + ╰ note: this could be a typo, a name used outside its scope, or a missing declaration; if it is a function or type from another module, you may need to import it first + help: a similar imported name exists + ╭╴ + 8 - "x" + 8 + "~" + ├╴ + 8 - "x" + 8 + "↑" + ├╴ + 8 - "x" + 8 + "√" + ├╴ + 8 - "x" + 8 + "∛" + ├╴ + 8 │ "index" + ╰╴ ++++ + ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:171:21) +2026-06-15T13:31:06.604599Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] +2026-06-15T13:31:06.604614Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] +2026-06-15T13:31:06.604684Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "import-resolver"] result=Ok(()) +2026-06-15T13:31:06.604696Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "import-resolver"] +2026-06-15T13:31:06.604843Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-mir" trial=["pass", "inline"] result=Ok(()) +2026-06-15T13:31:06.604854Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-mir" trial=["pass", "inline"] +2026-06-15T13:31:06.604879Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "import-resolver"] result=Ok(()) +2026-06-15T13:31:06.604903Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "import-resolver"] +2026-06-15T13:31:06.604904Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "type-extractor", "definition"] result=Ok(()) +2026-06-15T13:31:06.604928Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "type-extractor", "definition"] +2026-06-15T13:31:06.605532Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "pre-expansion-name-resolver"] result=Err(Expected trial to pass, but it failed +├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:390:24 +╰╴1 additional opaque attachment) +2026-06-15T13:31:06.605555Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "pre-expansion-name-resolver"] +2026-06-15T13:31:06.605654Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "specialization"] result=Ok(()) +2026-06-15T13:31:06.605670Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-mir" trial=["reify"] +2026-06-15T13:31:06.606055Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] result=Ok(()) +2026-06-15T13:31:06.606071Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] +2026-06-15T13:31:06.606193Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "import-resolver"] result=Ok(()) +2026-06-15T13:31:06.606203Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "import-resolver"] +2026-06-15T13:31:06.606286Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "import-resolver"] result=Err(Failed to verify annotation ├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:321:29 ├╴1 additional opaque attachment │ -╰┬▶ unfulfilled annotation: DiagnosticAnnotation { category: None, severity: Error, message: "Replace this literal with a type name", line: Some(7) } did not match any emitted diagnostics +╰┬▶ unfulfilled annotation: DiagnosticAnnotation { category: None, severity: Error, message: "Cannot find variable 'shl'", line: Some(7) } did not match any emitted diagnostics │ ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:151:25 │ - ├▶ unexpected diagnostic: + ╰▶ unexpected diagnostic: + error[expander::unresolved-variable]: Unresolved variable + ╭▸ + 7 │ "shl" + │ ━━━ cannot find `shl` in this scope + │ + ├ help: bring it into scope: `use ::core::bits::shl in` + ╰ note: this could be a typo, a name used outside its scope, or a missing declaration; if it is a function or type from another module, you may need to import it first + help: use one of these fully qualified paths + ╭╴ + 7 │ "::core::bits::shl" + ╰╴ ++++++++++++++ + ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:171:21) +2026-06-15T13:31:06.606330Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "import-resolver"] +2026-06-15T13:31:06.606376Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "type-extractor", "definition"] result=Ok(()) +2026-06-15T13:31:06.606408Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "type-extractor", "definition"] +2026-06-15T13:31:06.606337Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] result=Err(Failed to verify annotation +├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:321:29 +├╴1 additional opaque attachment +│ +╰┬▶ unexpected diagnostic: │ error[expander::unresolved-variable]: Unresolved variable - │ ╭▸ - │ 13 │ ["+", "a", "b"] - │ │ ━ cannot find `b` in this scope - │ │ - │ ╰ note: this could be a typo, a name used outside its scope, or a missing declaration; if it is a function or type from another module, you may need to import it first + │ ╭▸ + │ 8 │ "x" + │ │ ━ cannot find `x` in this scope + │ │ + │ ╰ note: this could be a typo, a name used outside its scope, or a missing declaration; if it is a function or type from another module, you may need to import it first │ help: a similar imported name exists - │ ╭╴ - │ 13 - ["+", "a", "b"] - │ 13 + ["+", "a", "~↑√∛cbrt"] - │ ╰╴ + │ ╭╴ + │ 8 - "x" + │ 8 + "~" + │ ├╴ + │ 8 - "x" + │ 8 + "↑" + │ ├╴ + │ 8 - "x" + │ 8 + "√" + │ ├╴ + │ 8 - "x" + │ 8 + "∛" + │ ├╴ + │ 8 │ "index" + │ ╰╴ ++++ │ ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:171:21 │ - ├▶ unexpected diagnostic: + ╰▶ unexpected diagnostic: + error[expander::invalid-use-import-binding]: Invalid use import binding + ╭▸ + 6 │ { "#tuple": ["::core::math::sub"], "#type": "Number" }, + │ ━━━━━━━━━━━━━━━━━ expected a simple name to import + │ + ╰ help: each import must be a plain identifier like `foo`, not a qualified path or expression + ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:171:21 + +stderr discrepancy, try to bless the output: +Differences (-Expected|+Received): + ╭▸ + 6 │ { "#tuple": ["::core::math::sub"], "#type": "Number" }, + │ ━━━━━━━━━━━━━━━━━ expected a simple name to import + │ +- ╰ help: each import must be a plain identifier like `foo`, not a qualified path or expression ++ ╰ help: each import must be a plain identifier like `foo`, not a qualified path or expression ++ ++error[expander::use-imports-type-annotation]: Type annotation on use imports ++ ╭▸ ++6 │ { "#tuple": ["::core::math::sub"], "#type": "Number" }, ++ │ ━━━━━━ type annotations are not allowed on the import list ++ │ ++ ╰ help: remove the type annotation; the import list declares which names to bring into scope, not a typed value +├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:140:9 +╰╴1 additional opaque attachment) +2026-06-15T13:31:06.606392Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-mir" trial=["pass", "inline"] result=Ok(()) +2026-06-15T13:31:06.606468Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] +2026-06-15T13:31:06.606474Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-mir" trial=["pass", "inline"] +2026-06-15T13:31:06.606867Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "pre-expansion-name-resolver"] result=Err(Expected trial to pass, but it failed +├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:390:24 +╰╴1 additional opaque attachment) +2026-06-15T13:31:06.606904Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "pre-expansion-name-resolver"] +2026-06-15T13:31:06.607091Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] result=Err(Failed to verify annotation +├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:321:29 +├╴1 additional opaque attachment +│ +╰┬▶ unexpected diagnostic: │ error[expander::unresolved-variable]: Unresolved variable - │ ╭▸ - │ 13 │ ["+", "a", "b"] - │ │ ━ cannot find `a` in this scope - │ │ - │ ╰ note: this could be a typo, a name used outside its scope, or a missing declaration; if it is a function or type from another module, you may need to import it first + │ ╭▸ + │ 9 │ ["+", "a", "b"] + │ │ ━ cannot find `b` in this scope + │ │ + │ ╰ note: this could be a typo, a name used outside its scope, or a missing declaration; if it is a function or type from another module, you may need to import it first │ help: a similar imported name exists - │ ╭╴ - │ 13 - ["+", "a", "b"] - │ 13 + ["+", "↑√∛ccesss", "b"] - │ ╰╴ + │ ╭╴ + │ 9 - ["+", "a", "b"] + │ 9 + ["+", "a", "~"] + │ ├╴ + │ 9 - ["+", "a", "b"] + │ 9 + ["+", "a", "↑"] + │ ├╴ + │ 9 - ["+", "a", "b"] + │ 9 + ["+", "a", "√"] + │ ├╴ + │ 9 - ["+", "a", "b"] + │ 9 + ["+", "a", "∛"] + │ ├╴ + │ 9 - ["+", "a", "b"] + │ 9 + ["+", "a", "cbrt"] + │ ╰╴ │ ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:171:21 │ ╰▶ unexpected diagnostic: - error[expander::invalid-expression-in-type-position]: Invalid expression in type position + error[expander::unresolved-variable]: Unresolved variable ╭▸ - 7 │ "T": { "#literal": 2 } - │ ━━━━━━━━━━━━━━━━━ cannot use a literal value as a type + 9 │ ["+", "a", "b"] + │ ━ cannot find `a` in this scope │ - ├ help: replace this with a type path, tuple type, struct type, `_`, `(| ...)`, or `(& ...)` - ╰ note: valid type forms are: type paths like `String`, tuple types like `(Int, String)`, struct types like `(name: String)`, `_` for inference, unions `(| ...)`, and intersections `(& ...)` - ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:171:21) -2026-06-15T11:12:38.456884Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] -2026-06-15T11:12:38.456916Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "import-resolver"] result=Ok(()) -2026-06-15T11:12:38.456928Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "import-resolver"] -2026-06-15T11:12:38.456953Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] result=Err(Failed to verify annotation + ╰ note: this could be a typo, a name used outside its scope, or a missing declaration; if it is a function or type from another module, you may need to import it first + help: a similar imported name exists + ╭╴ + 9 - ["+", "a", "b"] + 9 + ["+", "↑", "b"] + ├╴ + 9 - ["+", "a", "b"] + 9 + ["+", "√", "b"] + ├╴ + 9 - ["+", "a", "b"] + 9 + ["+", "∛", "b"] + ├╴ + 9 │ ["+", "access", "b"] + ├╴ +++++ + 9 │ ["+", "as", "b"] + ╰╴ + + ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:171:21) +2026-06-15T13:31:06.607170Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] +2026-06-15T13:31:06.607416Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "import-resolver"] result=Ok(()) +2026-06-15T13:31:06.607426Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "import-resolver"] +2026-06-15T13:31:06.607433Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-mir" trial=["reify"] result=Ok(()) +2026-06-15T13:31:06.607445Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-mir" trial=["reify"] +2026-06-15T13:31:06.607469Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "import-resolver"] result=Ok(()) +2026-06-15T13:31:06.607504Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "import-resolver"] +2026-06-15T13:31:06.607868Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "type-extractor", "definition"] result=Ok(()) +2026-06-15T13:31:06.607890Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "type-extractor", "definition"] +2026-06-15T13:31:06.608015Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] result=Err(Failed to verify annotation ├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:321:29 ├╴1 additional opaque attachment │ -╰┬▶ unfulfilled annotation: DiagnosticAnnotation { category: None, severity: Error, message: "Replace with a valid import expression", line: Some(6) } did not match any emitted diagnostics +╰┬▶ unfulfilled annotation: DiagnosticAnnotation { category: None, severity: Error, message: "Remove this extra segment", line: Some(4) } did not match any emitted diagnostics │ ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:151:25 │ ╰▶ unexpected diagnostic: - error[expander::invalid-use-imports]: Invalid use imports + error[expander::module-required]: Module required ╭▸ - 6 │ { "#literal": 1 }, - │ ━━━━━━━━━━━━━━━━━ expected `*`, a tuple of names, or a struct of aliases + 4 │ "::kernel::special_form::if::extra", + │ ┯━ ───── cannot access items inside a non-module + │ │ + │ `::kernel::special_form::if` is a value, not a module │ - ╰ help: use `*` to import everything, `(a, b)` to import specific names, or `(a: alias, b: _)` to import with aliases + ├ help: if you meant to access a field, use `.` instead of `::` + ╰ note: the `::` separator navigates into modules; values and types do not contain sub-items + ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:171:21) +2026-06-15T13:31:06.608082Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] +2026-06-15T13:31:06.608079Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] result=Err(Failed to verify annotation +├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:321:29 +├╴1 additional opaque attachment +│ +╰─▶ unexpected diagnostic: + error[expander::unresolved-variable]: Unresolved variable + ╭▸ + 7 │ ["+", { "#literal": 1 }, { "#literal": 2 }], + │ ━ cannot find `+` in this scope + │ + ╰ note: this could be a typo, a name used outside its scope, or a missing declaration; if it is a function or type from another module, you may need to import it first + help: a similar imported name exists + ╭╴ + 7 - ["+", { "#literal": 1 }, { "#literal": 2 }], + 7 + ["String", { "#literal": 1 }, { "#literal": 2 }], + ├╴ + 7 - ["+", { "#literal": 1 }, { "#literal": 2 }], + 7 + ["Union", { "#literal": 1 }, { "#literal": 2 }], + ├╴ + 7 - ["+", { "#literal": 1 }, { "#literal": 2 }], + 7 + ["Unknown", { "#literal": 1 }, { "#literal": 2 }], + ├╴ + 7 - ["+", { "#literal": 1 }, { "#literal": 2 }], + 7 + ["Url", { "#literal": 1 }, { "#literal": 2 }], + ├╴ + 7 - ["+", { "#literal": 1 }, { "#literal": 2 }], + 7 + ["|", { "#literal": 1 }, { "#literal": 2 }], + ╰╴ ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:171:21) -2026-06-15T11:12:38.456993Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] -2026-06-15T11:12:38.457157Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "ctor"] result=Ok(()) -2026-06-15T11:12:38.457182Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "ctor"] -2026-06-15T11:12:38.457203Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] result=Err(Expected trial to pass, but it failed +2026-06-15T13:31:06.608125Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] +2026-06-15T13:31:06.608323Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] result=Ok(()) +2026-06-15T13:31:06.608332Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] +2026-06-15T13:31:06.608383Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "pre-expansion-name-resolver"] result=Err(Expected trial to pass, but it failed ├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:390:24 ╰╴1 additional opaque attachment) -2026-06-15T11:12:38.457226Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] -2026-06-15T11:12:38.457217Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "normalization"] result=Ok(()) -2026-06-15T11:12:38.457442Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "normalization"] -2026-06-15T11:12:38.457463Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "type-extractor", "definition"] result=Ok(()) -2026-06-15T11:12:38.457478Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "type-extractor", "definition"] -2026-06-15T11:12:38.457564Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] result=Err(Expected trial to pass, but it failed +2026-06-15T13:31:06.608408Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "pre-expansion-name-resolver"] +2026-06-15T13:31:06.608700Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "import-resolver"] result=Ok(()) +2026-06-15T13:31:06.608709Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "import-resolver"] +2026-06-15T13:31:06.608788Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-mir" trial=["pass", "inline"] result=Ok(()) +2026-06-15T13:31:06.608792Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "import-resolver"] result=Ok(()) +2026-06-15T13:31:06.608821Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "import-resolver"] +2026-06-15T13:31:06.608801Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-mir" trial=["pass", "inline"] +2026-06-15T13:31:06.608989Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-mir" trial=["reify"] result=Ok(()) +2026-06-15T13:31:06.609004Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "checking"] +2026-06-15T13:31:06.609196Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "type-extractor", "definition"] result=Ok(()) +2026-06-15T13:31:06.609215Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "type-extractor", "definition"] +2026-06-15T13:31:06.609364Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] result=Ok(()) +2026-06-15T13:31:06.609375Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] +2026-06-15T13:31:06.609539Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] result=Err(Expected trial to pass, but it failed ├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:390:24 ╰╴1 additional opaque attachment) -2026-06-15T11:12:38.457430Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-mir" trial=["pass", "dse"] result=Ok(()) -2026-06-15T11:12:38.457607Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-mir" trial=["pass", "dse"] -2026-06-15T11:12:38.457597Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] -2026-06-15T11:12:38.457578Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "import-resolver"] result=Ok(()) -2026-06-15T11:12:38.457664Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "import-resolver"] -2026-06-15T11:12:38.457683Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-mir" trial=["pass", "inst_simplify"] result=Ok(()) -2026-06-15T11:12:38.457696Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "normalization"] -2026-06-15T11:12:38.457676Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "import-resolver"] result=Err(Failed to verify annotation +2026-06-15T13:31:06.609579Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] +2026-06-15T13:31:06.609885Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "import-resolver"] result=Ok(()) +2026-06-15T13:31:06.609896Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "import-resolver"] +2026-06-15T13:31:06.609857Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] result=Err(Failed to verify annotation ├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:321:29 ├╴1 additional opaque attachment │ -╰┬▶ unfulfilled annotation: DiagnosticAnnotation { category: None, severity: Error, message: "Module 'foo' not found", line: Some(3) } did not match any emitted diagnostics +╰┬▶ unfulfilled annotation: DiagnosticAnnotation { category: None, severity: Error, message: "This special form path is invalid", line: Some(3) } did not match any emitted diagnostics │ ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:151:25 │ ╰▶ unexpected diagnostic: - error[expander::module-not-found]: Module not found + error[expander::item-not-found]: Item not found ╭▸ - 3 │ ["use", "kernel::foo", { "#tuple": ["baz"] }, "_"] - │ ┬───── ━━━ cannot find module `foo` in `kernel` - │ │ - │ looked in this module + 3 │ ["::kernel::special_form::headpat"] + │ ┬─────────── ━━━━━━━ cannot find `headpat` in module `::kernel::special_form` + │ │ + │ looked in this module │ - ├ help: check the module name and ensure it is exported from its parent - ╰ note: only exported sub-modules are reachable via `::` + ╰ help: check the spelling and ensure the item is exported ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:171:21) -2026-06-15T11:12:38.457715Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "import-resolver"] -2026-06-15T11:12:38.457716Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-mir" trial=["reify"] result=Ok(()) -2026-06-15T11:12:38.457727Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-mir" trial=["reify"] -2026-06-15T11:12:38.457903Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "inference"] result=Err(Expected trial to pass, but it failed +2026-06-15T13:31:06.609918Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] +2026-06-15T13:31:06.609921Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "import-resolver"] result=Ok(()) +2026-06-15T13:31:06.609911Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "pre-expansion-name-resolver"] result=Err(Expected trial to pass, but it failed ├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:390:24 ╰╴1 additional opaque attachment) -2026-06-15T11:12:38.457927Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "inference"] -2026-06-15T11:12:38.458164Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "import-resolver"] result=Ok(()) -2026-06-15T11:12:38.458177Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "import-resolver"] -2026-06-15T11:12:38.458292Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] result=Err(Failed to verify annotation +2026-06-15T13:31:06.609946Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "import-resolver"] +2026-06-15T13:31:06.609962Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "pre-expansion-name-resolver"] +2026-06-15T13:31:06.610671Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "checking"] result=Ok(()) +2026-06-15T13:31:06.610682Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "checking"] +2026-06-15T13:31:06.610698Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "type-extractor", "definition"] result=Ok(()) +2026-06-15T13:31:06.610714Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "type-extractor"] +2026-06-15T13:31:06.610801Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] result=Err(Failed to verify annotation ├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:321:29 ├╴1 additional opaque attachment │ -╰┬▶ unfulfilled annotation: DiagnosticAnnotation { category: None, severity: Error, message: "Add missing arguments", line: Some(3) } did not match any emitted diagnostics - │ ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:151:25 - │ - ╰▶ unexpected diagnostic: - error[expander::invalid-argument-count]: Invalid argument count +╰─▶ unexpected diagnostic: + error[expander::unresolved-variable]: Unresolved variable ╭▸ - 3 │ ["::kernel::special_form::index", "x"] - │ ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ expected 2 arguments to `[]`, found 1 + 7 │ { "#struct": { "foo": "Bar" } }, + │ ━━━ cannot find `Bar` in this scope │ - ├ help: use `([] collection index)` - ╰ note: the first argument is the collection and the second is the index + ├ help: check the spelling, or import the name with a `use` statement + ╰ note: this could be a typo, a name used outside its scope, or a missing declaration; if it is a function or type from another module, you may need to import it first ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:171:21) -2026-06-15T11:12:38.458340Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] -2026-06-15T11:12:38.458767Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "type-extractor", "definition"] result=Ok(()) -2026-06-15T11:12:38.458783Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "type-extractor", "definition"] -2026-06-15T11:12:38.458801Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "import-resolver"] result=Ok(()) -2026-06-15T11:12:38.458815Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-mir" trial=["pass", "inst_simplify"] -2026-06-15T11:12:38.458817Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "ctor"] result=Err(Expected trial to pass, but it failed +2026-06-15T13:31:06.610861Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] result=Err(Expected trial to pass, but it failed ├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:390:24 ╰╴1 additional opaque attachment) -2026-06-15T11:12:38.458840Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "ctor"] -2026-06-15T11:12:38.458852Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "import-resolver"] result=Ok(()) -2026-06-15T11:12:38.458861Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "import-resolver"] -2026-06-15T11:12:38.459049Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] result=Err(Failed to verify annotation -├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:321:29 -├╴1 additional opaque attachment +2026-06-15T13:31:06.610876Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] +2026-06-15T13:31:06.610882Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] +2026-06-15T13:31:06.610938Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "import-resolver"] result=Ok(()) +2026-06-15T13:31:06.610950Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "import-resolver"] +2026-06-15T13:31:06.611101Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "pre-expansion-name-resolver"] result=Err(Expected trial to pass, but it failed +├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:390:24 +╰╴1 additional opaque attachment) +2026-06-15T13:31:06.611125Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "pre-expansion-name-resolver"] +2026-06-15T13:31:06.611227Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "import-resolver"] result=Ok(()) +2026-06-15T13:31:06.611244Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "import-resolver"] +2026-06-15T13:31:06.611360Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] result=Ok(()) +2026-06-15T13:31:06.611373Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] +2026-06-15T13:31:06.611991Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "type-extractor"] result=Ok(()) +2026-06-15T13:31:06.612001Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "type-extractor"] +2026-06-15T13:31:06.612075Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "checking"] result=Ok(()) +2026-06-15T13:31:06.612084Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "checking"] +2026-06-15T13:31:06.612142Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] result=Err(Expected trial to pass, but it failed +├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:390:24 +╰╴1 additional opaque attachment) +2026-06-15T13:31:06.612170Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] +2026-06-15T13:31:06.612195Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] result=Ok(()) +2026-06-15T13:31:06.612207Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] +2026-06-15T13:31:06.612203Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "import-resolver"] result=Ok(()) +2026-06-15T13:31:06.612231Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "import-resolver"] +2026-06-15T13:31:06.612322Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "pre-expansion-name-resolver"] result=Ok(()) +2026-06-15T13:31:06.612336Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "pre-expansion-name-resolver"] +2026-06-15T13:31:06.612550Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "import-resolver"] result=Ok(()) +2026-06-15T13:31:06.612566Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "import-resolver"] +2026-06-15T13:31:06.612666Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] result=Err(Expected trial to pass, but it failed +├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:390:24 +╰╴1 additional opaque attachment) +2026-06-15T13:31:06.612699Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "import-resolver", "continue"] +2026-06-15T13:31:06.613032Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "type-extractor"] result=Ok(()) +2026-06-15T13:31:06.613044Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "type-extractor"] +2026-06-15T13:31:06.613428Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] result=Ok(()) +2026-06-15T13:31:06.613436Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] +2026-06-15T13:31:06.613663Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "import-resolver"] result=Ok(()) +2026-06-15T13:31:06.613681Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-mir" trial=["pass", "inline"] +2026-06-15T13:31:06.613721Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] result=Err(Failed to verify annotation +├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:321:29 +├╴1 additional opaque attachment │ -╰┬▶ unfulfilled annotation: DiagnosticAnnotation { category: None, severity: Error, message: "Did you mean to use 'newtype' instead?", line: Some(3) } did not match any emitted diagnostics +╰─▶ unexpected diagnostic: + error[expander::unresolved-variable]: Unresolved variable + ╭▸ + 5 │ "tuple", + │ ━━━━━ cannot find `tuple` in this scope + │ + ├ help: check the spelling, or import the name with a `use` statement + ╰ note: this could be a typo, a name used outside its scope, or a missing declaration; if it is a function or type from another module, you may need to import it first + ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:171:21) +2026-06-15T13:31:06.613755Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] +2026-06-15T13:31:06.613753Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "pre-expansion-name-resolver"] result=Err(Expected trial to pass, but it failed +├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:390:24 +╰╴1 additional opaque attachment) +2026-06-15T13:31:06.613773Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "pre-expansion-name-resolver"] +2026-06-15T13:31:06.613883Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "import-resolver"] result=Ok(()) +2026-06-15T13:31:06.613901Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "import-resolver"] +2026-06-15T13:31:06.614118Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "type-extractor"] result=Ok(()) +2026-06-15T13:31:06.614128Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "type-extractor"] +2026-06-15T13:31:06.614393Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "import-resolver", "continue"] result=Err(Failed to verify annotation +├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:321:29 +├╴1 additional opaque attachment +│ +╰┬▶ unfulfilled annotation: DiagnosticAnnotation { category: None, severity: Error, message: "Cannot find variable 'T'", line: Some(7) } did not match any emitted diagnostics │ ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:151:25 │ ╰▶ unexpected diagnostic: - error[expander::item-not-found]: Item not found + error[expander::unresolved-variable]: Unresolved variable ╭▸ - 3 │ ["::kernel::special_form::nuwtype"] - │ ┬─────────── ━━━━━━━ cannot find `nuwtype` in module `::kernel::special_form` - │ │ - │ looked in this module + 7 │ "T", + │ ━ cannot find `T` in this scope + │ + ╰ note: this could be a typo, a name used outside its scope, or a missing declaration; if it is a function or type from another module, you may need to import it first + help: a similar local binding exists + ╭╴ + 7 - "T", + 7 + "Foo", ╰╴ - help: a similar item exists in this module + help: a similar imported name exists ╭╴ - 3 - ["::kernel::special_form::nuwtype"] - 3 + ["::kernel::special_form::newtype"] + 7 - "T", + 7 + "String", + ├╴ + 7 - "T", + 7 + "Union", + ├╴ + 7 - "T", + 7 + "Unknown", + ├╴ + 7 - "T", + 7 + "Url", + ├╴ + 7 - "T", + 7 + "|", ╰╴ ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:171:21) -2026-06-15T11:12:38.459137Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] -2026-06-15T11:12:38.459165Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "normalization"] result=Ok(()) -2026-06-15T11:12:38.459179Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "normalization"] -2026-06-15T11:12:38.459259Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-mir" trial=["pass", "dse"] result=Ok(()) -2026-06-15T11:12:38.459271Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-mir" trial=["pass", "dse"] -2026-06-15T11:12:38.459285Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "inference"] result=Ok(()) -2026-06-15T11:12:38.459302Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "inference"] -2026-06-15T11:12:38.459367Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-mir" trial=["reify"] result=Ok(()) -2026-06-15T11:12:38.459381Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-mir" trial=["reify"] -2026-06-15T11:12:38.459213Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] result=Err(Failed to verify annotation +2026-06-15T13:31:06.614460Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "import-resolver", "continue"] +2026-06-15T13:31:06.615005Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] result=Ok(()) +2026-06-15T13:31:06.615016Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] +2026-06-15T13:31:06.615089Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "normalization"] result=Ok(()) +2026-06-15T13:31:06.615097Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "normalization"] +2026-06-15T13:31:06.615297Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "pre-expansion-name-resolver"] result=Err(Expected trial to pass, but it failed +├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:390:24 +╰╴1 additional opaque attachment) +2026-06-15T13:31:06.615326Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "pre-expansion-name-resolver"] +2026-06-15T13:31:06.615368Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "type-extractor"] result=Ok(()) +2026-06-15T13:31:06.615380Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-eval" trial=["postgres"] +2026-06-15T13:31:06.615408Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "import-resolver"] result=Ok(()) +2026-06-15T13:31:06.615440Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "import-resolver"] +2026-06-15T13:31:06.615576Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] result=Err(Failed to verify annotation ├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:321:29 ├╴1 additional opaque attachment │ -╰┬▶ unfulfilled annotation: DiagnosticAnnotation { category: None, severity: Error, message: "Use a valid generics expression", line: Some(7) } did not match any emitted diagnostics +╰┬▶ unfulfilled annotation: DiagnosticAnnotation { category: None, severity: Error, message: "expected a simple name to import", line: Some(8) } did not match any emitted diagnostics │ ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:151:25 │ ├▶ unexpected diagnostic: │ error[expander::unresolved-variable]: Unresolved variable │ ╭▸ - │ 13 │ ["+", "a", "b"] - │ │ ━ cannot find `b` in this scope + │ 12 │ "x" + │ │ ━ cannot find `x` in this scope │ │ │ ╰ note: this could be a typo, a name used outside its scope, or a missing declaration; if it is a function or type from another module, you may need to import it first │ help: a similar imported name exists │ ╭╴ - │ 13 - ["+", "a", "b"] - │ 13 + ["+", "a", "~↑√∛cbrt"] - │ ╰╴ + │ 12 - "x" + │ 12 + "~" + │ ├╴ + │ 12 - "x" + │ 12 + "↑" + │ ├╴ + │ 12 - "x" + │ 12 + "√" + │ ├╴ + │ 12 - "x" + │ 12 + "∛" + │ ├╴ + │ 12 │ "index" + │ ╰╴ ++++ │ ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:171:21 │ ├▶ unexpected diagnostic: - │ error[expander::unresolved-variable]: Unresolved variable - │ ╭▸ - │ 13 │ ["+", "a", "b"] - │ │ ━ cannot find `a` in this scope - │ │ - │ ╰ note: this could be a typo, a name used outside its scope, or a missing declaration; if it is a function or type from another module, you may need to import it first - │ help: a similar imported name exists - │ ╭╴ - │ 13 - ["+", "a", "b"] - │ 13 + ["+", "↑√∛ccesss", "b"] - │ ╰╴ + │ error[expander::item-not-found]: Item not found + │ ╭▸ + │ 5 │ "::core", + │ │ ──── looked in this module + │ ‡ + │ 8 │ "x": "::core::math::sub" + │ │ ━ cannot find `x` in module `::core` + │ ╰╴ + │ help: a similar item exists in this module + │ ╭╴ + │ 8 - "x": "::core::math::sub" + │ 8 + "math": "::core::math::sub" + │ ├╴ + │ 8 - "x": "::core::math::sub" + │ 8 + "option": "::core::math::sub" + │ ├╴ + │ 8 - "x": "::core::math::sub" + │ 8 + "result": "::core::math::sub" + │ ├╴ + │ 8 - "x": "::core::math::sub" + │ 8 + "url": "::core::math::sub" + │ ├╴ + │ 8 - "x": "::core::math::sub" + │ 8 + "uuid": "::core::math::sub" + │ ╰╴ │ ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:171:21 │ ╰▶ unexpected diagnostic: - error[expander::invalid-fn-generic-param]: Invalid generic parameter - ╭▸ - 7 │ { "#literal": 1 } - │ ━━━━━━━━━━━━━━━━━ expected a simple type parameter name - │ - ╰ help: each generic parameter must be a plain identifier like `T`, not a qualified path or expression - ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:171:21) -2026-06-15T11:12:38.459446Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] -2026-06-15T11:12:38.459442Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] result=Err(Failed to verify annotation -├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:321:29 -├╴1 additional opaque attachment -│ -╰┬▶ unfulfilled annotation: DiagnosticAnnotation { category: None, severity: Error, message: "Add missing arguments", line: Some(3) } did not match any emitted diagnostics - │ ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:151:25 - │ - ╰▶ unexpected diagnostic: - error[expander::invalid-argument-count]: Invalid argument count + error[expander::invalid-use-alias]: Invalid use alias ╭▸ - 3 │ ["::kernel::special_form::if", { "#literal": true }] - │ ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ expected 2 or 3 arguments to `if`, found 1 + 8 │ "x": "::core::math::sub" + │ ━━━━━━━━━━━━━━━━━ expected `_` or a simple identifier as the alias │ - ├ help: use `(if condition then)` or `(if condition then else)` - ╰ note: the arguments are, in order: the condition, the then branch, and an optional else branch + ╰ help: use `_` to keep the original name or a simple identifier to rename: `(name: alias)` or `(name: _)` ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:171:21) -2026-06-15T11:12:38.459507Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "import-resolver"] result=Ok(()) -2026-06-15T11:12:38.459524Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] -2026-06-15T11:12:38.459526Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "import-resolver"] -2026-06-15T11:12:38.459582Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] result=Ok(()) -2026-06-15T11:12:38.459593Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] -2026-06-15T11:12:38.460009Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "import-resolver"] result=Ok(()) -2026-06-15T11:12:38.460024Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] -2026-06-15T11:12:38.460060Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "type-extractor", "definition"] result=Ok(()) -2026-06-15T11:12:38.460074Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "type-extractor", "definition"] -2026-06-15T11:12:38.460192Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "ctor"] result=Ok(()) -2026-06-15T11:12:38.460204Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "ctor"] -2026-06-15T11:12:38.460299Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-mir" trial=["pass", "inst_simplify"] result=Ok(()) -2026-06-15T11:12:38.460309Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-mir" trial=["pass", "administrative_reduction"] -2026-06-15T11:12:38.460734Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "normalization"] result=Ok(()) -2026-06-15T11:12:38.460747Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "normalization"] -2026-06-15T11:12:38.460760Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "inference"] result=Ok(()) -2026-06-15T11:12:38.460771Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "inference"] -2026-06-15T11:12:38.460840Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "import-resolver"] result=Ok(()) -2026-06-15T11:12:38.460851Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "import-resolver"] -2026-06-15T11:12:38.460944Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] result=Err(Expected trial to pass, but it failed -├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:390:24 -╰╴1 additional opaque attachment) -2026-06-15T11:12:38.461002Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] -2026-06-15T11:12:38.461060Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] result=Err(Failed to verify annotation +2026-06-15T13:31:06.615677Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] +2026-06-15T13:31:06.615989Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "import-resolver", "continue"] result=Err(Failed to verify annotation ├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:321:29 ├╴1 additional opaque attachment │ -╰┬▶ unfulfilled annotation: DiagnosticAnnotation { category: None, severity: Error, message: "Add missing arguments", line: Some(3) } did not match any emitted diagnostics +╰┬▶ unfulfilled annotation: DiagnosticAnnotation { category: None, severity: Error, message: "Cannot find variable 'shl'", line: Some(5) } did not match any emitted diagnostics │ ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:151:25 │ ╰▶ unexpected diagnostic: - error[expander::invalid-argument-count]: Invalid argument count + error[expander::unresolved-variable]: Unresolved variable ╭▸ - 3 │ ["::kernel::special_form::type", "x", "Integer"] - │ ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ expected 3 arguments to `type`, found 2 + 5 │ "shl", + │ ━━━ cannot find `shl` in this scope │ - ├ help: use `(type Name type-expr body)` - ╰ note: the arguments are, in order: the type name (optionally with generic parameters), the type definition, and the body where the name is in scope + ├ help: bring it into scope: `use ::core::bits::shl in` + ╰ note: this could be a typo, a name used outside its scope, or a missing declaration; if it is a function or type from another module, you may need to import it first + help: use one of these fully qualified paths + ╭╴ + 5 │ "::core::bits::shl", + ╰╴ ++++++++++++++ ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:171:21) -2026-06-15T11:12:38.461101Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] -2026-06-15T11:12:38.461154Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] result=Err(Expected trial to pass, but it failed +2026-06-15T13:31:06.616042Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "import-resolver", "continue"] +2026-06-15T13:31:06.616401Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "normalization"] result=Ok(()) +2026-06-15T13:31:06.616408Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "normalization"] +2026-06-15T13:31:06.616453Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "pre-expansion-name-resolver"] result=Err(Expected trial to pass, but it failed ├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:390:24 ╰╴1 additional opaque attachment) -2026-06-15T11:12:38.461172Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] -2026-06-15T11:12:38.461159Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] result=Err(Failed to verify annotation +2026-06-15T13:31:06.616477Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "pre-expansion-name-resolver"] +2026-06-15T13:31:06.616592Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "import-resolver"] result=Ok(()) +2026-06-15T13:31:06.616608Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "specialization"] +2026-06-15T13:31:06.617024Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] result=Ok(()) +2026-06-15T13:31:06.617038Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] +2026-06-15T13:31:06.617517Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] result=Err(Failed to verify annotation ├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:321:29 ├╴1 additional opaque attachment │ -╰┬▶ unfulfilled annotation: DiagnosticAnnotation { category: None, severity: Error, message: "This function cannot be used as a type constructor", line: Some(6) } did not match any emitted diagnostics +╰┬▶ unfulfilled annotation: DiagnosticAnnotation { category: None, severity: Error, message: "`T` is already declared as a generic parameter", line: Some(5) } did not match any emitted diagnostics │ ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:151:25 │ ├▶ unexpected diagnostic: │ error[expander::unresolved-variable]: Unresolved variable │ ╭▸ - │ 6 │ ["::core::math::headpat", "Int", "Float"] - │ │ ━━━━━ cannot find `Float` in this scope + │ 9 │ ["+", "a", "b"] + │ │ ━ cannot find `b` in this scope │ │ - │ ├ help: check the spelling, or import the name with a `use` statement │ ╰ note: this could be a typo, a name used outside its scope, or a missing declaration; if it is a function or type from another module, you may need to import it first + │ help: a similar imported name exists + │ ╭╴ + │ 9 - ["+", "a", "b"] + │ 9 + ["+", "a", "~"] + │ ├╴ + │ 9 - ["+", "a", "b"] + │ 9 + ["+", "a", "↑"] + │ ├╴ + │ 9 - ["+", "a", "b"] + │ 9 + ["+", "a", "√"] + │ ├╴ + │ 9 - ["+", "a", "b"] + │ 9 + ["+", "a", "∛"] + │ ├╴ + │ 9 - ["+", "a", "b"] + │ 9 + ["+", "a", "cbrt"] + │ ╰╴ │ ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:171:21 │ ├▶ unexpected diagnostic: │ error[expander::unresolved-variable]: Unresolved variable │ ╭▸ - │ 6 │ ["::core::math::headpat", "Int", "Float"] - │ │ ━━━ cannot find `Int` in this scope + │ 9 │ ["+", "a", "b"] + │ │ ━ cannot find `a` in this scope │ │ - │ ├ help: check the spelling, or import the name with a `use` statement │ ╰ note: this could be a typo, a name used outside its scope, or a missing declaration; if it is a function or type from another module, you may need to import it first + │ help: a similar imported name exists + │ ╭╴ + │ 9 - ["+", "a", "b"] + │ 9 + ["+", "↑", "b"] + │ ├╴ + │ 9 - ["+", "a", "b"] + │ 9 + ["+", "√", "b"] + │ ├╴ + │ 9 - ["+", "a", "b"] + │ 9 + ["+", "∛", "b"] + │ ├╴ + │ 9 │ ["+", "access", "b"] + │ ├╴ +++++ + │ 9 │ ["+", "as", "b"] + │ ╰╴ + │ ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:171:21 │ ╰▶ unexpected diagnostic: - error[expander::item-not-found]: Item not found + error[expander::duplicate-fn-generic]: Duplicate generic parameter ╭▸ - 6 │ ["::core::math::headpat", "Int", "Float"] - │ ┬─── ━━━━━━━ cannot find `headpat` in module `::core::math` - │ │ - │ looked in this module + 5 │ { "#tuple": ["T", "T"] }, + │ ┬ ━ duplicate generic parameter `T` + │ │ + │ `T` was first declared here │ - ╰ help: check the spelling and ensure the item is exported + ╰ help: remove the duplicate declaration or use a different name ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:171:21) -2026-06-15T11:12:38.461225Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] -2026-06-15T11:12:38.461933Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-mir" trial=["reify"] result=Ok(()) -2026-06-15T11:12:38.461944Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-mir" trial=["reify"] -2026-06-15T11:12:38.461952Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "ctor"] result=Ok(()) -2026-06-15T11:12:38.461959Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-mir" trial=["pass", "administrative_reduction"] result=Ok(()) -2026-06-15T11:12:38.461963Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "ctor"] -2026-06-15T11:12:38.461969Z[0m DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-mir" trial=["pass", "administrative_reduction"] -2026-06-15T11:12:38.461935Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "type-extractor", "definition"] result=Ok(()) -2026-06-15T11:12:38.462002Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "type-extractor", "definition"] -2026-06-15T11:12:38.462218Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "normalization"] result=Ok(()) -2026-06-15T11:12:38.462218Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "import-resolver"] result=Ok(()) -2026-06-15T11:12:38.462235Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "normalization"] -2026-06-15T11:12:38.462245Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "import-resolver"] -2026-06-15T11:12:38.462310Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "inference"] result=Ok(()) -2026-06-15T11:12:38.462326Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "inference"] -2026-06-15T11:12:38.462375Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] result=Err(Failed to verify annotation +2026-06-15T13:31:06.617616Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "import-resolver", "continue"] result=Err(Failed to verify annotation ├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:321:29 ├╴1 additional opaque attachment │ -╰┬▶ unfulfilled annotation: DiagnosticAnnotation { category: None, severity: Error, message: "Remove this type annotation", line: Some(8) } did not match any emitted diagnostics - │ ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:151:25 - │ - ├▶ unexpected diagnostic: - │ error[expander::type-annotation-in-type-position]: Type annotation in type position - │ ╭▸ - │ 6 │ ┌ { - │ 7 │ │ "#tuple": ["Int"], - │ 8 │ │ "#type": "(Int)" - │ │ │ ━━━━━ type annotations are not allowed inside a type expression - │ 9 │ │ //~^ ERROR Remove this type annotation - │ 10 │ │ }, - │ │ └───┘ this tuple is already being used as a type - │ │ - │ ├ help: remove the type annotation - │ ╰ note: in type position, `(Int, String)` already defines a tuple type - │ ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:171:21 - │ - ├▶ unexpected diagnostic: - │ error[expander::unresolved-variable]: Unresolved variable - │ ╭▸ - │ 7 │ "#tuple": ["Int"], - │ │ ━━━ cannot find `Int` in this scope - │ │ - │ ├ help: check the spelling, or import the name with a `use` statement - │ ╰ note: this could be a typo, a name used outside its scope, or a missing declaration; if it is a function or type from another module, you may need to import it first - │ ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:171:21 - │ - ├▶ unexpected diagnostic: - │ error[expander::unresolved-variable]: Unresolved variable - │ ╭▸ - │ 11 │ "x" - │ │ ━ cannot find `x` in this scope - │ │ - │ ╰ note: this could be a typo, a name used outside its scope, or a missing declaration; if it is a function or type from another module, you may need to import it first - │ help: a similar imported name exists - │ ╭╴ - │ 11 - "x" - │ 11 + "~↑√∛index" - │ ╰╴ - │ ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:171:21 - │ - ╰▶ unexpected diagnostic: +╰─▶ unexpected diagnostic: error[expander::unresolved-variable]: Unresolved variable ╭▸ - 8 │ "#type": "(Int)" - │ ━━━ cannot find `Int` in this scope + 9 │ ["add", { "#literal": 1 }, { "#literal": 2 }] + │ ━━━ cannot find `add` in this scope │ - ├ help: check the spelling, or import the name with a `use` statement + ├ help: bring it into scope: `use ::core::math::add in` ╰ note: this could be a typo, a name used outside its scope, or a missing declaration; if it is a function or type from another module, you may need to import it first + help: use one of these fully qualified paths + ╭╴ + 9 │ ["::core::math::add", { "#literal": 1 }, { "#literal": 2 }] + ╰╴ ++++++++++++++ ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:171:21) -2026-06-15T11:12:38.462456Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] -2026-06-15T11:12:38.462458Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] result=Err(Expected trial to pass, but it failed +2026-06-15T13:31:06.617666Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] +2026-06-15T13:31:06.617670Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "import-resolver", "continue"] +2026-06-15T13:31:06.617734Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "normalization"] result=Ok(()) +2026-06-15T13:31:06.617744Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "normalization"] +2026-06-15T13:31:06.617957Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "pre-expansion-name-resolver"] result=Err(Expected trial to pass, but it failed +├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:390:24 +╰╴1 additional opaque attachment) +2026-06-15T13:31:06.617981Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "pre-expansion-name-resolver"] +2026-06-15T13:31:06.618234Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] result=Err(Expected trial to pass, but it failed +├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:390:24 +╰╴1 additional opaque attachment) +2026-06-15T13:31:06.618255Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] +2026-06-15T13:31:06.618293Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "specialization"] result=Ok(()) +2026-06-15T13:31:06.618302Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "specialization"] +2026-06-15T13:31:06.619105Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "normalization"] result=Ok(()) +2026-06-15T13:31:06.619114Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "normalization"] +2026-06-15T13:31:06.619178Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "pre-expansion-name-resolver"] result=Err(Expected trial to pass, but it failed ├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:390:24 ╰╴1 additional opaque attachment) -2026-06-15T11:12:38.462499Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] -2026-06-15T11:12:38.462501Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] result=Err(Failed to verify annotation +2026-06-15T13:31:06.619209Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "pre-expansion-name-resolver"] +2026-06-15T13:31:06.619218Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] result=Ok(()) +2026-06-15T13:31:06.619249Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] +2026-06-15T13:31:06.619228Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "import-resolver", "continue"] result=Err(Failed to verify annotation ├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:321:29 ├╴1 additional opaque attachment │ -╰┬▶ unfulfilled annotation: DiagnosticAnnotation { category: None, severity: Error, message: "exactly 3 segments", line: Some(4) } did not match any emitted diagnostics +╰┬▶ unfulfilled annotation: DiagnosticAnnotation { category: None, severity: Error, message: "Cannot find variable 'Bar'", line: Some(6) } did not match any emitted diagnostics │ ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:151:25 │ ╰▶ unexpected diagnostic: - error[expander::item-not-found]: Item not found + error[expander::unresolved-variable]: Unresolved variable ╭▸ - 4 │ "::kernel::special_form", - │ ┬───── ━━━━━━━━━━━━ cannot find `special_form` in module `::kernel` - │ │ - │ looked in this module + 6 │ "Foo", + │ ━━━ cannot find `Bar` in this scope │ - ╰ help: check the spelling and ensure the item is exported + ├ help: check the spelling, or import the name with a `use` statement + ╰ note: this could be a typo, a name used outside its scope, or a missing declaration; if it is a function or type from another module, you may need to import it first ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:171:21) -2026-06-15T11:12:38.462550Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] -2026-06-15T11:12:38.462661Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] result=Err(Failed to verify annotation +2026-06-15T13:31:06.619275Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "import-resolver"] +2026-06-15T13:31:06.619565Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] result=Ok(()) +2026-06-15T13:31:06.619589Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "ctor"] +2026-06-15T13:31:06.620220Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "specialization"] result=Err(Failed to verify annotation ├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:321:29 ├╴1 additional opaque attachment │ -╰┬▶ unfulfilled annotation: DiagnosticAnnotation { category: None, severity: Error, message: "Add missing arguments", line: Some(3) } did not match any emitted diagnostics +╰┬▶ unfulfilled annotation: DiagnosticAnnotation { category: None, severity: Error, message: "This is not a graph intrinsic operation", line: Some(6) } did not match any emitted diagnostics │ ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:151:25 │ ╰▶ unexpected diagnostic: - error[expander::invalid-argument-count]: Invalid argument count + error[lowering::expander::unresolved-variable]: Unresolved variable ╭▸ - 3 │ ["::kernel::special_form::as", { "#literal": true }] - │ ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ expected 2 arguments to `as`, found 1 + 6 │ ["fn", { "#tuple": [] }, { "#struct": { "graph": "_" } }, "_", "graph"], + │ ━━━━━ cannot find `graph` in this scope │ - ├ help: use `(as value type)` - ╰ note: the first argument is the value to cast and the second is the target type + ├ help: check the spelling, or import the name with a `use` statement + ╰ note: this could be a typo, a name used outside its scope, or a missing declaration; if it is a function or type from another module, you may need to import it first ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:171:21) -2026-06-15T11:12:38.462803Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] -2026-06-15T11:12:38.463277Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "type-extractor", "definition"] result=Ok(()) -2026-06-15T11:12:38.463286Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "type-extractor", "definition"] -2026-06-15T11:12:38.463240Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] result=Err(Failed to verify annotation +2026-06-15T13:31:06.620302Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "specialization"] +2026-06-15T13:31:06.620548Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "import-resolver"] result=Err(Failed to verify annotation ├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:321:29 ├╴1 additional opaque attachment │ -╰┬▶ unfulfilled annotation: DiagnosticAnnotation { category: None, severity: Error, message: "Replace with a valid import expression", line: Some(8) } did not match any emitted diagnostics +╰┬▶ unfulfilled annotation: DiagnosticAnnotation { category: None, severity: Error, message: "'lshift' not found in module 'core::bits'", line: Some(3) } did not match any emitted diagnostics │ ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:151:25 │ - ├▶ unexpected diagnostic: - │ error[expander::unresolved-variable]: Unresolved variable - │ ╭▸ - │ 12 │ "x" - │ │ ━ cannot find `x` in this scope - │ │ - │ ╰ note: this could be a typo, a name used outside its scope, or a missing declaration; if it is a function or type from another module, you may need to import it first - │ help: a similar imported name exists - │ ╭╴ - │ 12 - "x" - │ 12 + "~↑√∛index" - │ ╰╴ - │ ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:171:21 - │ - ├▶ unexpected diagnostic: - │ error[expander::package-not-found]: Package not found - │ ╭▸ - │ 5 │ "::math", - │ │ ┬─┯━━━ - │ │ │ │ - │ │ │ cannot find package `math` - │ │ in this path - │ │ - │ ├ help: check the package name, or add it to the project dependencies - │ ╰ note: absolute paths start from an installed package - │ ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:171:21 - │ ╰▶ unexpected diagnostic: - error[expander::invalid-use-alias]: Invalid use alias + error[expander::item-not-found]: Item not found ╭▸ - 8 │ "x": { "#literal": 1 } - │ ━━━━━━━━━━━━━━━━━ expected `_` or a simple identifier as the alias + 3 │ ["use", "core::bits", { "#tuple": ["lshift"] }, "_"] + │ ┬─── ━━━━━━ cannot find `lshift` in module `core::bits` + │ │ + │ looked in this module │ - ╰ help: use `_` to keep the original name or a simple identifier to rename: `(name: alias)` or `(name: _)` + ╰ help: check the spelling and ensure the item is exported ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:171:21) -2026-06-15T11:12:38.463338Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] -2026-06-15T11:12:38.463609Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "import-resolver"] result=Ok(()) -2026-06-15T11:12:38.463624Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "import-resolver"] -2026-06-15T11:12:38.463707Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] result=Err(Failed to verify annotation +2026-06-15T13:31:06.620592Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "import-resolver"] +2026-06-15T13:31:06.620592Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "pre-expansion-name-resolver"] result=Err(Expected trial to pass, but it failed +├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:390:24 +╰╴1 additional opaque attachment) +2026-06-15T13:31:06.620623Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "pre-expansion-name-resolver"] +2026-06-15T13:31:06.620748Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] result=Ok(()) +2026-06-15T13:31:06.620764Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] +2026-06-15T13:31:06.620946Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "normalization"] result=Ok(()) +2026-06-15T13:31:06.620957Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "normalization"] +2026-06-15T13:31:06.621019Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "ctor"] result=Ok(()) +2026-06-15T13:31:06.621028Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "ctor"] +2026-06-15T13:31:06.621709Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "import-resolver"] result=Ok(()) +2026-06-15T13:31:06.621718Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "import-resolver"] +2026-06-15T13:31:06.621806Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "pre-expansion-name-resolver"] result=Err(Expected trial to pass, but it failed +├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:390:24 +╰╴1 additional opaque attachment) +2026-06-15T13:31:06.621842Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "pre-expansion-name-resolver"] +2026-06-15T13:31:06.622270Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "ctor"] result=Ok(()) +2026-06-15T13:31:06.622280Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "ctor"] +2026-06-15T13:31:06.622433Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] result=Err(Failed to verify annotation +├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:321:29 +├╴1 additional opaque attachment +│ +╰─▶ unfulfilled annotation: DiagnosticAnnotation { category: None, severity: Error, message: "cannot use a literal value as a type", line: Some(3) } did not match any emitted diagnostics + ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:151:25) +2026-06-15T13:31:06.622482Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] +2026-06-15T13:31:06.622490Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "normalization"] result=Ok(()) +2026-06-15T13:31:06.622502Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "normalization"] +2026-06-15T13:31:06.622921Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "import-resolver"] result=Ok(()) +2026-06-15T13:31:06.622935Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "import-resolver"] +2026-06-15T13:31:06.623224Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "pre-expansion-name-resolver"] result=Err(Expected trial to pass, but it failed +├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:390:24 +╰╴1 additional opaque attachment) +2026-06-15T13:31:06.623243Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "pre-expansion-name-resolver"] +2026-06-15T13:31:06.623902Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "normalization"] result=Ok(()) +2026-06-15T13:31:06.623915Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "alias-replacement"] +2026-06-15T13:31:06.624100Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "import-resolver"] result=Ok(()) +2026-06-15T13:31:06.624113Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "import-resolver"] +2026-06-15T13:31:06.624148Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "ctor"] result=Ok(()) +2026-06-15T13:31:06.624158Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "ctor"] +2026-06-15T13:31:06.624781Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "pre-expansion-name-resolver"] result=Err(Expected trial to pass, but it failed +├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:390:24 +╰╴1 additional opaque attachment) +2026-06-15T13:31:06.624816Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "pre-expansion-name-resolver"] +2026-06-15T13:31:06.625159Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "import-resolver"] result=Ok(()) +2026-06-15T13:31:06.625170Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "import-resolver"] +2026-06-15T13:31:06.625214Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "alias-replacement"] result=Ok(()) +2026-06-15T13:31:06.625227Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "alias-replacement"] +2026-06-15T13:31:06.625330Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "ctor"] result=Ok(()) +2026-06-15T13:31:06.625342Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "ctor"] +2026-06-15T13:31:06.625268Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] result=Err(Failed to verify annotation ├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:321:29 ├╴1 additional opaque attachment │ -╰┬▶ unfulfilled annotation: DiagnosticAnnotation { category: None, severity: Error, message: "Replace with a valid import expression", line: Some(6) } did not match any emitted diagnostics - │ ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:151:25 - │ - ╰▶ unexpected diagnostic: - error[expander::invalid-use-imports]: Invalid use imports - ╭▸ - 6 │ "X", - │ ━ expected `*`, a tuple of names, or a struct of aliases - │ - ╰ help: use `*` to import everything, `(a, b)` to import specific names, or `(a: alias, b: _)` to import with aliases - ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:171:21) -2026-06-15T11:12:38.463745Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] -2026-06-15T11:12:38.463763Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "normalization"] result=Ok(()) -2026-06-15T11:12:38.463778Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "normalization"] -2026-06-15T11:12:38.463803Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "inference"] result=Ok(()) -2026-06-15T11:12:38.463814Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "inference"] -2026-06-15T11:12:38.464330Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] result=Err(Failed to verify annotation -├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:321:29 -├╴1 additional opaque attachment -│ -╰┬▶ unfulfilled annotation: DiagnosticAnnotation { category: None, severity: Error, message: "Replace with a valid import expression", line: Some(6) } did not match any emitted diagnostics +╰┬▶ unfulfilled annotation: DiagnosticAnnotation { category: None, severity: Error, message: "`a` is already declared as a parameter", line: Some(6) } did not match any emitted diagnostics │ ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:151:25 │ ├▶ unexpected diagnostic: │ error[expander::unresolved-variable]: Unresolved variable │ ╭▸ - │ 8 │ "x" - │ │ ━ cannot find `x` in this scope + │ 9 │ ["+", "a", "b"] + │ │ ━ cannot find `b` in this scope │ │ │ ╰ note: this could be a typo, a name used outside its scope, or a missing declaration; if it is a function or type from another module, you may need to import it first + │ help: a similar local binding exists + │ ╭╴ + │ 9 - ["+", "a", "b"] + │ 9 + ["+", "a", "a"] + │ ╰╴ │ help: a similar imported name exists │ ╭╴ - │ 8 - "x" - │ 8 + "~↑√∛index" + │ 9 - ["+", "a", "b"] + │ 9 + ["+", "a", "~"] + │ ├╴ + │ 9 - ["+", "a", "b"] + │ 9 + ["+", "a", "↑"] + │ ├╴ + │ 9 - ["+", "a", "b"] + │ 9 + ["+", "a", "√"] + │ ├╴ + │ 9 - ["+", "a", "b"] + │ 9 + ["+", "a", "∛"] + │ ├╴ + │ 9 - ["+", "a", "b"] + │ 9 + ["+", "a", "cbrt"] │ ╰╴ │ ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:171:21 │ - ╰▶ unexpected diagnostic: - error[expander::invalid-use-import-binding]: Invalid use import binding - ╭▸ - 6 │ { "#tuple": [{ "#literal": 1 }] }, - │ ━━━━━━━━━━━━━━━━━ expected a simple name to import - │ - ╰ help: each import must be a plain identifier like `foo`, not a qualified path or expression - ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:171:21) -2026-06-15T11:12:38.464402Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "type-extractor", "definition"] result=Ok(()) -2026-06-15T11:12:38.464414Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] -2026-06-15T11:12:38.464423Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "type-extractor", "definition"] -2026-06-15T11:12:38.464578Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-mir" trial=["pass", "administrative_reduction"] result=Ok(()) -2026-06-15T11:12:38.464587Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-mir" trial=["pass", "administrative_reduction"] -2026-06-15T11:12:38.464577Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "ctor"] result=Err(Failed to verify annotation -├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:321:29 -├╴1 additional opaque attachment -│ -╰┬▶ unfulfilled annotation: DiagnosticAnnotation { category: None, severity: Error, message: "Remove this argument", line: Some(8) } did not match any emitted diagnostics - │ ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:151:25 - │ ├▶ unexpected diagnostic: - │ error[lowering::expander::unresolved-variable]: Unresolved variable + │ error[expander::unresolved-variable]: Unresolved variable │ ╭▸ - │ 8 │ "Person", - │ │ ━━━━━━━ cannot find `Integer` in this scope + │ 6 │ { "#struct": { "a": "Int", "a": "Int" } }, + │ │ ━━━ cannot find `Int` in this scope │ │ │ ├ help: check the spelling, or import the name with a `use` statement │ ╰ note: this could be a typo, a name used outside its scope, or a missing declaration; if it is a function or type from another module, you may need to import it first │ ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:171:21 │ ├▶ unexpected diagnostic: - │ error[lowering::expander::unresolved-variable]: Unresolved variable + │ error[expander::duplicate-fn-parameter]: Duplicate function parameter │ ╭▸ - │ 8 │ "Person", - │ │ ━━━━━━ cannot find `String` in this scope + │ 6 │ { "#struct": { "a": "Int", "a": "Int" } }, + │ │ ┬───────── ━━━━━━━━━━ duplicate parameter `a` + │ │ │ + │ │ `a` was first declared here │ │ - │ ├ help: check the spelling, or import the name with a `use` statement - │ ╰ note: this could be a typo, a name used outside its scope, or a missing declaration; if it is a function or type from another module, you may need to import it first + │ ╰ help: remove the duplicate parameter or use a different name │ ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:171:21 │ ╰▶ unexpected diagnostic: - error[lowering::expander::unresolved-variable]: Unresolved variable + error[expander::unresolved-variable]: Unresolved variable ╭▸ - 8 │ "Person", - │ ━━━━━━ cannot find `Number` in this scope + 6 │ { "#struct": { "a": "Int", "a": "Int" } }, + │ ━━━ cannot find `Int` in this scope │ ├ help: check the spelling, or import the name with a `use` statement ╰ note: this could be a typo, a name used outside its scope, or a missing declaration; if it is a function or type from another module, you may need to import it first ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:171:21) -2026-06-15T11:12:38.464638Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "ctor"] -2026-06-15T11:12:38.464754Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] result=Err(Failed to verify annotation +2026-06-15T13:31:06.625384Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] +2026-06-15T13:31:06.626053Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "pre-expansion-name-resolver"] result=Err(Expected trial to pass, but it failed +├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:390:24 +╰╴1 additional opaque attachment) +2026-06-15T13:31:06.626074Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "pre-expansion-name-resolver"] +2026-06-15T13:31:06.626321Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "import-resolver"] result=Ok(()) +2026-06-15T13:31:06.626337Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] +2026-06-15T13:31:06.626619Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] result=Ok(()) +2026-06-15T13:31:06.626628Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] +2026-06-15T13:31:06.626771Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "alias-replacement"] result=Ok(()) +2026-06-15T13:31:06.626782Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "alias-replacement"] +2026-06-15T13:31:06.627194Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "pre-expansion-name-resolver"] result=Err(Expected trial to pass, but it failed +├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:390:24 +╰╴1 additional opaque attachment) +2026-06-15T13:31:06.627218Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "pre-expansion-name-resolver"] +2026-06-15T13:31:06.627374Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "ctor"] result=Err(Failed to verify annotation ├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:321:29 ├╴1 additional opaque attachment │ -╰┬▶ unfulfilled annotation: DiagnosticAnnotation { category: None, severity: Error, message: "Remove these generic arguments", line: Some(3) } did not match any emitted diagnostics +╰┬▶ unfulfilled annotation: DiagnosticAnnotation { category: None, severity: Error, message: "unexpected argument", line: Some(8) } did not match any emitted diagnostics │ ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:151:25 │ - ├▶ unexpected diagnostic: - │ error[expander::generic-arguments-in-module]: Generic arguments in module path - │ ╭▸ - │ 3 │ ["::kernel::special_form::if"] - │ │ ━ generic argument not allowed here - │ │ - │ ├ help: move the generic arguments to the final segment of the path, or remove them - │ ╰ note: modules are not generic; only the final item in a path can be parameterized - │ ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:171:21 - │ - ├▶ unexpected diagnostic: - │ error[expander::unresolved-variable]: Unresolved variable - │ ╭▸ - │ 3 │ ["::kernel::special_form::if"] - │ │ ━ cannot find `U` in this scope - │ │ - │ ╰ note: this could be a typo, a name used outside its scope, or a missing declaration; if it is a function or type from another module, you may need to import it first - │ help: a similar imported name exists - │ ╭╴ - │ 3 - ["::kernel::special_form::if"] - │ 3 + ["::kernel::special_form::if<~↑√∛rl>"] - │ ╰╴ - │ ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:171:21 - │ ╰▶ unexpected diagnostic: - error[expander::unresolved-variable]: Unresolved variable + error[lower::generic-argument-mismatch]: Incorrect number of type arguments ╭▸ - 3 │ ["::kernel::special_form::if"] - │ ━ cannot find `T` in this scope + 8 │ "Person", + │ ┯━━━━━━━━━━━━━━━━━━━━━━┬──────━ + │ │ │ + │ │ Remove this argument + │ This type constructor requires 2 generic arguments, but 3 were provided │ - ╰ note: this could be a typo, a name used outside its scope, or a missing declaration; if it is a function or type from another module, you may need to import it first - help: a similar imported name exists - ╭╴ - 3 - ["::kernel::special_form::if"] - 3 + ["::kernel::special_form<||~↑√∛>::if"] - ╰╴ + ├ help: This type constructor accepts exactly 2 generic arguments. Remove the extra parameter: Person:0 + ╰ note: Generic type parameters must be provided when instantiating parameterized types. Each parameter corresponds to a specific type that will be substituted throughout the type definition. ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:171:21) -2026-06-15T11:12:38.464817Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] -2026-06-15T11:12:38.464860Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] result=Err(Expected trial to pass, but it failed +2026-06-15T13:31:06.627435Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "ctor"] +2026-06-15T13:31:06.627580Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] result=Err(Expected trial to pass, but it failed +├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:390:24 +╰╴1 additional opaque attachment) +2026-06-15T13:31:06.627608Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] +2026-06-15T13:31:06.627926Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] result=Ok(()) +2026-06-15T13:31:06.627941Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "specialization"] +2026-06-15T13:31:06.628450Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "pre-expansion-name-resolver"] result=Err(Expected trial to pass, but it failed ├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:390:24 ╰╴1 additional opaque attachment) -2026-06-15T11:12:38.464907Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] -2026-06-15T11:12:38.464930Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "import-resolver"] result=Ok(()) -2026-06-15T11:12:38.464943Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "import-resolver"] -2026-06-15T11:12:38.465070Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] result=Err(Failed to verify annotation +2026-06-15T13:31:06.628468Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "pre-expansion-name-resolver"] +2026-06-15T13:31:06.628737Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "alias-replacement"] result=Err(Failed to verify annotation ├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:321:29 ├╴1 additional opaque attachment │ -╰┬▶ unfulfilled annotation: DiagnosticAnnotation { category: None, severity: Error, message: "Replace this expression with a simple identifier", line: Some(5) } did not match any emitted diagnostics +╰┬▶ unfulfilled annotation: DiagnosticAnnotation { category: None, severity: Error, message: "additional type arguments are provided here", line: Some(10) } did not match any emitted diagnostics │ ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:151:25 │ + ├▶ unexpected diagnostic: + │ error[lowering::expander::intrinsic-generic-arguments]: Generic arguments on intrinsic + │ ╭▸ + │ 10 │ "foo", + │ │ ━━━━━━━━━━━ `foo` does not accept generic arguments + │ │ + │ ╰ help: remove the generic arguments from `foo` + │ ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:171:21 + │ ╰▶ unexpected diagnostic: - error[expander::invalid-binding-name]: Invalid binding name + error[lowering::expander::intrinsic-generic-arguments]: Generic arguments on intrinsic ╭▸ - 5 │ { "#literal": true }, - │ ━━━━━━━━━━━━━━━━━━━━ expected a simple identifier for the `let` binding name + 6 │ "core::math::add", + │ ━━━━━━━━━━━━ `add` does not accept generic arguments │ - ├ help: write `(let name value body)` with a plain name such as `x` - ╰ note: the first argument to `let` introduces a new local binding and must be a plain identifier without path qualification or generic arguments + ╰ help: remove the generic arguments from `add` ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:171:21) -2026-06-15T11:12:38.465110Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] -2026-06-15T11:12:38.465329Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "normalization"] result=Ok(()) -2026-06-15T11:12:38.465345Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "normalization"] -2026-06-15T11:12:38.465357Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "inference"] result=Ok(()) -2026-06-15T11:12:38.465370Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "checking"] -2026-06-15T11:12:38.465457Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] result=Err(Failed to verify annotation +2026-06-15T13:31:06.628885Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] result=Ok(()) +2026-06-15T13:31:06.628899Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] +2026-06-15T13:31:06.628884Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "alias-replacement"] +2026-06-15T13:31:06.629840Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "pre-expansion-name-resolver"] result=Err(Expected trial to pass, but it failed +├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:390:24 +╰╴1 additional opaque attachment) +2026-06-15T13:31:06.629864Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "pre-expansion-name-resolver"] +2026-06-15T13:31:06.630011Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "ctor"] result=Ok(()) +2026-06-15T13:31:06.630027Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "ctor"] +2026-06-15T13:31:06.630123Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "specialization"] result=Ok(()) +2026-06-15T13:31:06.630138Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "checking"] +2026-06-15T13:31:06.630569Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "alias-replacement"] result=Ok(()) +2026-06-15T13:31:06.630578Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "alias-replacement"] +2026-06-15T13:31:06.631189Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "pre-expansion-name-resolver"] result=Err(Expected trial to pass, but it failed +├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:390:24 +╰╴1 additional opaque attachment) +2026-06-15T13:31:06.631212Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "pre-expansion-name-resolver"] +2026-06-15T13:31:06.631244Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] result=Err(Failed to verify annotation ├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:321:29 ├╴1 additional opaque attachment │ -╰┬▶ unfulfilled annotation: DiagnosticAnnotation { category: None, severity: Error, message: "Remove this type annotation", line: Some(8) } did not match any emitted diagnostics - │ ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:151:25 - │ - ├▶ unexpected diagnostic: +╰┬▶ unexpected diagnostic: │ error[expander::unresolved-variable]: Unresolved variable │ ╭▸ │ 12 │ ["+", "a", "b"] @@ -1582,137 +2357,79 @@ warning: `hashql-ast` (lib) generated 1 warning │ help: a similar imported name exists │ ╭╴ │ 12 - ["+", "a", "b"] - │ 12 + ["+", "a", "~↑√∛cbrt"] - │ ╰╴ - │ ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:171:21 - │ - ├▶ unexpected diagnostic: - │ error[expander::unresolved-variable]: Unresolved variable - │ ╭▸ - │ 12 │ ["+", "a", "b"] - │ │ ━ cannot find `a` in this scope - │ │ - │ ╰ note: this could be a typo, a name used outside its scope, or a missing declaration; if it is a function or type from another module, you may need to import it first - │ help: a similar imported name exists - │ ╭╴ + │ 12 + ["+", "a", "~"] + │ ├╴ + │ 12 - ["+", "a", "b"] + │ 12 + ["+", "a", "↑"] + │ ├╴ + │ 12 - ["+", "a", "b"] + │ 12 + ["+", "a", "√"] + │ ├╴ │ 12 - ["+", "a", "b"] - │ 12 + ["+", "↑√∛ccesss", "b"] + │ 12 + ["+", "a", "∛"] + │ ├╴ + │ 12 - ["+", "a", "b"] + │ 12 + ["+", "a", "cbrt"] │ ╰╴ │ ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:171:21 │ ╰▶ unexpected diagnostic: - error[expander::fn-params-type-annotation]: Type annotation on parameter list - ╭▸ - 8 │ "#type": "Int" - │ ━━━ type annotation is not allowed on the parameter list - │ - ╰ help: remove the type annotation; each parameter already declares its type individually as `(name: type)` - ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:171:21) -2026-06-15T11:12:38.465577Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] -2026-06-15T11:12:38.465805Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "ctor"] result=Ok(()) -2026-06-15T11:12:38.465817Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "ctor"] -2026-06-15T11:12:38.465823Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "type-extractor", "definition"] result=Ok(()) -2026-06-15T11:12:38.465843Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "type-extractor", "definition"] -2026-06-15T11:12:38.465915Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] result=Err(Failed to verify annotation -├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:321:29 -├╴1 additional opaque attachment -│ -╰┬▶ unfulfilled annotation: DiagnosticAnnotation { category: None, severity: Error, message: "Add missing arguments", line: Some(3) } did not match any emitted diagnostics - │ ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:151:25 - │ - ╰▶ unexpected diagnostic: - error[expander::invalid-argument-count]: Invalid argument count - ╭▸ - 3 │ ["::kernel::special_form::input", "x"] - │ ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ expected 2 or 3 arguments to `input`, found 1 - │ - ├ help: use `(input name type)` or `(input name type default)` - ╰ note: the arguments are, in order: the input name, its type, and an optional default value - ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:171:21) -2026-06-15T11:12:38.465969Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] -2026-06-15T11:12:38.466239Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "import-resolver"] result=Ok(()) -2026-06-15T11:12:38.466251Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "import-resolver"] -2026-06-15T11:12:38.466217Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] result=Err(Failed to verify annotation -├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:321:29 -├╴1 additional opaque attachment -│ -╰┬▶ unfulfilled annotation: DiagnosticAnnotation { category: None, severity: Error, message: "Add missing arguments", line: Some(3) } did not match any emitted diagnostics - │ ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:151:25 - │ - ╰▶ unexpected diagnostic: - error[expander::invalid-argument-count]: Invalid argument count - ╭▸ - 3 │ ["::kernel::special_form::use", "::math", { "#tuple": ["pi"] }] - │ ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ expected 3 arguments to `use`, found 2 - │ - ├ help: use `(use path imports body)` - ╰ note: the arguments are, in order: the module path to import from, the import specifier (`*`, a tuple of names, or a struct of aliases), and the body where the imports are in scope - ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:171:21) -2026-06-15T11:12:38.466267Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] -2026-06-15T11:12:38.466348Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] result=Err(Expected trial to pass, but it failed -├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:390:24 -╰╴1 additional opaque attachment) -2026-06-15T11:12:38.466406Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] -2026-06-15T11:12:38.466434Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-mir" trial=["pass", "administrative_reduction"] result=Ok(()) -2026-06-15T11:12:38.466445Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-mir" trial=["pass", "administrative_reduction"] -2026-06-15T11:12:38.466600Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "normalization"] result=Ok(()) -2026-06-15T11:12:38.466609Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "normalization"] -2026-06-15T11:12:38.466760Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] result=Err(Failed to verify annotation -├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:321:29 -├╴1 additional opaque attachment -│ -╰┬▶ unfulfilled annotation: DiagnosticAnnotation { category: None, severity: Error, message: "Generic arguments must be simple identifiers", line: Some(5) } did not match any emitted diagnostics - │ ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:151:25 - │ - ├▶ unexpected diagnostic: - │ error[expander::unresolved-variable]: Unresolved variable - │ ╭▸ - │ 7 │ { "#struct": { "foo": "Bar" } }, - │ │ ━━━ cannot find `Bar` in this scope - │ │ - │ ├ help: check the spelling, or import the name with a `use` statement - │ ╰ note: this could be a typo, a name used outside its scope, or a missing declaration; if it is a function or type from another module, you may need to import it first - │ ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:171:21 - │ - ╰▶ unexpected diagnostic: - error[expander::invalid-generic-argument]: Invalid generic argument - ╭▸ - 5 │ "Foo", - │ ━━━━━━━━ expected a simple type parameter - │ - ├ help: use a simple identifier like `T`, not a qualified path - ╰ note: generic parameters are declared as `Name` for unconstrained or `Name` for constrained parameters - ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:171:21) -2026-06-15T11:12:38.466826Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] -2026-06-15T11:12:38.467341Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "type-extractor", "definition"] result=Ok(()) -2026-06-15T11:12:38.467356Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "type-extractor", "definition"] -2026-06-15T11:12:38.467368Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "ctor"] result=Err(Failed to verify annotation + error[expander::unresolved-variable]: Unresolved variable + ╭▸ + 12 │ ["+", "a", "b"] + │ ━ cannot find `a` in this scope + │ + ╰ note: this could be a typo, a name used outside its scope, or a missing declaration; if it is a function or type from another module, you may need to import it first + help: a similar imported name exists + ╭╴ + 12 - ["+", "a", "b"] + 12 + ["+", "↑", "b"] + ├╴ + 12 - ["+", "a", "b"] + 12 + ["+", "√", "b"] + ├╴ + 12 - ["+", "a", "b"] + 12 + ["+", "∛", "b"] + ├╴ + 12 │ ["+", "access", "b"] + ├╴ +++++ + 12 │ ["+", "as", "b"] + ╰╴ + + ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:171:21) +2026-06-15T13:31:06.631326Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] +2026-06-15T13:31:06.631539Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "checking"] result=Ok(()) +2026-06-15T13:31:06.631545Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "ctor"] result=Ok(()) +2026-06-15T13:31:06.631554Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "graph-hoisting"] +2026-06-15T13:31:06.631557Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "inference"] +2026-06-15T13:31:06.631834Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "alias-replacement"] result=Ok(()) +2026-06-15T13:31:06.631845Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "alias-replacement"] +2026-06-15T13:31:06.632591Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "pre-expansion-name-resolver"] result=Err(Expected trial to pass, but it failed +├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:390:24 +╰╴1 additional opaque attachment) +2026-06-15T13:31:06.632628Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "pre-expansion-name-resolver"] +2026-06-15T13:31:06.632815Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "inference"] result=Err(Failed to verify annotation ├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:321:29 ├╴1 additional opaque attachment │ -╰┬▶ unfulfilled annotation: DiagnosticAnnotation { category: None, severity: Error, message: "Add missing parameter `U`", line: Some(8) } did not match any emitted diagnostics +╰┬▶ unfulfilled annotation: DiagnosticAnnotation { category: None, severity: Error, message: "Type variable has incompatible upper and lower bounds", line: Some(4) } did not match any emitted diagnostics │ ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:151:25 │ ╰▶ unexpected diagnostic: - error[lowering::expander::unresolved-variable]: Unresolved variable + error[lowering::expander::intrinsic-generic-arguments]: Generic arguments on intrinsic ╭▸ - 8 │ "Person", - │ ━━━━━━ cannot find `Number` in this scope + 4 │ "`+`", + │ ━━━━━━━━━━━━━━━━━━━ `+` does not accept generic arguments │ - ├ help: check the spelling, or import the name with a `use` statement - ╰ note: this could be a typo, a name used outside its scope, or a missing declaration; if it is a function or type from another module, you may need to import it first + ╰ help: remove the generic arguments from `+` ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:171:21) -2026-06-15T11:12:38.467408Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "inference"] -2026-06-15T11:12:38.467481Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "import-resolver"] result=Ok(()) -2026-06-15T11:12:38.467504Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-mir" trial=["pass", "inline"] -2026-06-15T11:12:38.467735Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] result=Err(Failed to verify annotation +2026-06-15T13:31:06.632866Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "inference"] +2026-06-15T13:31:06.633056Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "alias-replacement"] result=Ok(()) +2026-06-15T13:31:06.633064Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "alias-replacement"] +2026-06-15T13:31:06.633470Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] result=Err(Failed to verify annotation ├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:321:29 ├╴1 additional opaque attachment │ -╰┬▶ unfulfilled annotation: DiagnosticAnnotation { category: None, severity: Error, message: "Remove this type annotation", line: Some(8) } did not match any emitted diagnostics - │ ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:151:25 - │ - ├▶ unexpected diagnostic: +╰┬▶ unexpected diagnostic: │ error[expander::unresolved-variable]: Unresolved variable │ ╭▸ │ 11 │ "x" @@ -1722,8 +2439,19 @@ warning: `hashql-ast` (lib) generated 1 warning │ help: a similar imported name exists │ ╭╴ │ 11 - "x" - │ 11 + "~↑√∛index" - │ ╰╴ + │ 11 + "~" + │ ├╴ + │ 11 - "x" + │ 11 + "↑" + │ ├╴ + │ 11 - "x" + │ 11 + "√" + │ ├╴ + │ 11 - "x" + │ 11 + "∛" + │ ├╴ + │ 11 │ "index" + │ ╰╴ ++++ │ ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:171:21 │ ╰▶ unexpected diagnostic: @@ -1737,861 +2465,227 @@ warning: `hashql-ast` (lib) generated 1 warning │ ├ help: check the package name, or add it to the project dependencies ╰ note: absolute paths start from an installed package - ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:171:21) -2026-06-15T11:12:38.467791Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] -2026-06-15T11:12:38.467772Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] result=Err(Failed to verify annotation -├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:321:29 -├╴1 additional opaque attachment -│ -╰┬▶ unfulfilled annotation: DiagnosticAnnotation { category: None, severity: Error, message: "Add missing arguments", line: Some(3) } did not match any emitted diagnostics + ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:171:21 + +stderr discrepancy, try to bless the output: +Differences (-Expected|+Received): + │ │ cannot find package `math` + │ in this path + │ + ├ help: check the package name, or add it to the project dependencies +- ╰ note: absolute paths start from an installed package ++ ╰ note: absolute paths start from an installed package ++ ++error[expander::use-imports-type-annotation]: Type annotation on use imports ++ ╭▸ ++8 │ "#type": "X" ++ │ ━ type annotations are not allowed on the import list ++ │ ++ ╰ help: remove the type annotation; the import list declares which names to bring into scope, not a typed value +├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:140:9 +╰╴1 additional opaque attachment) +2026-06-15T13:31:06.633556Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] +2026-06-15T13:31:06.633796Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "pre-expansion-name-resolver"] result=Err(Expected trial to pass, but it failed +├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:390:24 +╰╴1 additional opaque attachment) +2026-06-15T13:31:06.633813Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "pre-expansion-name-resolver"] +2026-06-15T13:31:06.634167Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "alias-replacement"] result=Ok(()) +2026-06-15T13:31:06.634178Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "alias-replacement"] +2026-06-15T13:31:06.634256Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "checking"] result=Ok(()) +2026-06-15T13:31:06.634266Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "checking"] +2026-06-15T13:31:06.634294Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "inference"] result=Ok(()) +2026-06-15T13:31:06.634304Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "inference"] +2026-06-15T13:31:06.634762Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] result=Ok(()) +2026-06-15T13:31:06.634776Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] +2026-06-15T13:31:06.634976Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "pre-expansion-name-resolver"] result=Ok(()) +2026-06-15T13:31:06.634986Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "node-renumberer"] +2026-06-15T13:31:06.635473Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "checking"] result=Ok(()) +2026-06-15T13:31:06.635486Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "checking"] +2026-06-15T13:31:06.635512Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "alias-replacement"] result=Ok(()) +2026-06-15T13:31:06.635520Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "alias-replacement"] +2026-06-15T13:31:06.635955Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "inference"] result=Ok(()) +2026-06-15T13:31:06.635967Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "inference"] +2026-06-15T13:31:06.636080Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] result=Ok(()) +2026-06-15T13:31:06.636094Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] +2026-06-15T13:31:06.636210Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "node-renumberer"] result=Ok(()) +2026-06-15T13:31:06.636218Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "node-renumberer"] +2026-06-15T13:31:06.636587Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "alias-replacement"] result=Ok(()) +2026-06-15T13:31:06.636596Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "alias-replacement"] +2026-06-15T13:31:06.636732Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "checking"] result=Ok(()) +2026-06-15T13:31:06.636741Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "checking"] +2026-06-15T13:31:06.637406Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "node-renumberer"] result=Ok(()) +2026-06-15T13:31:06.637419Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "node-renumberer"] +2026-06-15T13:31:06.637618Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "alias-replacement"] result=Err(Expected trial to pass, but it failed +├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:390:24 +╰╴1 additional opaque attachment) +2026-06-15T13:31:06.637656Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-eval" trial=["postgres"] +2026-06-15T13:31:06.638104Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "checking"] result=Ok(()) +2026-06-15T13:31:06.638114Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "checking"] +2026-06-15T13:31:06.638222Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "inference"] result=Ok(()) +2026-06-15T13:31:06.638230Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "inference"] +2026-06-15T13:31:06.638559Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "node-renumberer"] result=Ok(()) +2026-06-15T13:31:06.638571Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "type-extractor"] +2026-06-15T13:31:06.639747Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "inference"] result=Ok(()) +2026-06-15T13:31:06.639757Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "checking"] result=Ok(()) +2026-06-15T13:31:06.639769Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "checking"] +2026-06-15T13:31:06.639760Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "inference"] +2026-06-15T13:31:06.639918Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "type-extractor"] result=Ok(()) +2026-06-15T13:31:06.639932Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "type-extractor"] +2026-06-15T13:31:06.640916Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "specialization"] result=Ok(()) +2026-06-15T13:31:06.640933Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "checking"] +2026-06-15T13:31:06.641180Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "inference"] result=Ok(()) +2026-06-15T13:31:06.641190Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "inference"] +2026-06-15T13:31:06.641204Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "type-extractor"] result=Ok(()) +2026-06-15T13:31:06.641212Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "checking"] result=Ok(()) +2026-06-15T13:31:06.641227Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "type-extractor"] +2026-06-15T13:31:06.641235Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "checking"] +2026-06-15T13:31:06.642421Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "checking"] result=Ok(()) +2026-06-15T13:31:06.642438Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "checking"] +2026-06-15T13:31:06.642323Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] result=Err(Failed to verify annotation +├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:321:29 +├╴1 additional opaque attachment +│ +╰┬▶ unfulfilled annotation: DiagnosticAnnotation { category: None, severity: Error, message: "cannot use an `as` expression as a type", line: Some(13) } did not match any emitted diagnostics │ ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:151:25 │ - ╰▶ unexpected diagnostic: - error[expander::invalid-argument-count]: Invalid argument count - ╭▸ - 3 │ ["::kernel::special_form::let", "x", { "#literal": true }] - │ ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ expected 3 or 4 arguments to `let`, found 2 - │ - ├ help: use `(let name value body)` or `(let name type value body)` - ╰ note: the arguments are, in order: the binding name, an optional type annotation, the bound value, and the body expression where the name is in scope - ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:171:21) -2026-06-15T11:12:38.467825Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] -2026-06-15T11:12:38.467874Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] result=Err(Expected trial to pass, but it failed -├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:390:24 -╰╴1 additional opaque attachment) -2026-06-15T11:12:38.467936Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "normalization"] result=Ok(()) -2026-06-15T11:12:38.467940Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] -2026-06-15T11:12:38.467948Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "normalization"] -2026-06-15T11:12:38.468125Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-mir" trial=["pass", "administrative_reduction"] result=Ok(()) -2026-06-15T11:12:38.468134Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-mir" trial=["pass", "administrative_reduction"] -2026-06-15T11:12:38.468221Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] result=Err(Failed to verify annotation -├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:321:29 -├╴1 additional opaque attachment -│ -╰┬▶ unfulfilled annotation: DiagnosticAnnotation { category: None, severity: Error, message: "Use a simple identifier here", line: Some(7) } did not match any emitted diagnostics - │ ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:151:25 + ├▶ unexpected diagnostic: + │ error[expander::item-not-found]: Item not found + │ ╭▸ + │ 13 │ ["::kernel::special_form::as", "x", "X"] + │ │ ┬─────────── ━━ cannot find `as` in module `::kernel::special_form` + │ │ │ + │ │ looked in this module + │ │ + │ ╰ help: check the spelling and ensure the item is exported + │ ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:171:21 │ ├▶ unexpected diagnostic: │ error[expander::unresolved-variable]: Unresolved variable │ ╭▸ - │ 13 │ ["+", "a", "b"] - │ │ ━ cannot find `b` in this scope + │ 13 │ ["::kernel::special_form::as", "x", "X"] + │ │ ━ cannot find `x` in this scope │ │ │ ╰ note: this could be a typo, a name used outside its scope, or a missing declaration; if it is a function or type from another module, you may need to import it first │ help: a similar imported name exists │ ╭╴ - │ 13 - ["+", "a", "b"] - │ 13 + ["+", "a", "~↑√∛cbrt"] + │ 13 - ["::kernel::special_form::as", "x", "X"] + │ 13 + ["::kernel::special_form::as", "String", "X"] + │ ├╴ + │ 13 - ["::kernel::special_form::as", "x", "X"] + │ 13 + ["::kernel::special_form::as", "Union", "X"] + │ ├╴ + │ 13 - ["::kernel::special_form::as", "x", "X"] + │ 13 + ["::kernel::special_form::as", "Unknown", "X"] + │ ├╴ + │ 13 - ["::kernel::special_form::as", "x", "X"] + │ 13 + ["::kernel::special_form::as", "Url", "X"] + │ ├╴ + │ 13 - ["::kernel::special_form::as", "x", "X"] + │ 13 + ["::kernel::special_form::as", "|", "X"] │ ╰╴ │ ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:171:21 │ ├▶ unexpected diagnostic: │ error[expander::unresolved-variable]: Unresolved variable │ ╭▸ - │ 13 │ ["+", "a", "b"] - │ │ ━ cannot find `a` in this scope + │ 13 │ ["::kernel::special_form::as", "x", "X"] + │ │ ━ cannot find `X` in this scope │ │ │ ╰ note: this could be a typo, a name used outside its scope, or a missing declaration; if it is a function or type from another module, you may need to import it first │ help: a similar imported name exists │ ╭╴ - │ 13 - ["+", "a", "b"] - │ 13 + ["+", "↑√∛ccesss", "b"] + │ 13 - ["::kernel::special_form::as", "x", "X"] + │ 13 + ["::kernel::special_form::as", "x", "String"] + │ ├╴ + │ 13 - ["::kernel::special_form::as", "x", "X"] + │ 13 + ["::kernel::special_form::as", "x", "Union"] + │ ├╴ + │ 13 - ["::kernel::special_form::as", "x", "X"] + │ 13 + ["::kernel::special_form::as", "x", "Unknown"] + │ ├╴ + │ 13 - ["::kernel::special_form::as", "x", "X"] + │ 13 + ["::kernel::special_form::as", "x", "Url"] + │ ├╴ + │ 13 - ["::kernel::special_form::as", "x", "X"] + │ 13 + ["::kernel::special_form::as", "x", "|"] │ ╰╴ │ ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:171:21 │ - ╰▶ unexpected diagnostic: - error[expander::invalid-fn-generic-param]: Invalid generic parameter - ╭▸ - 7 │ "::core::math::add" - │ ━━━━━━━━━━━━━━━━━ expected a simple type parameter name - │ - ╰ help: each generic parameter must be a plain identifier like `T`, not a qualified path or expression - ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:171:21) -2026-06-15T11:12:38.468300Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] -2026-06-15T11:12:38.468711Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "type-extractor", "definition"] result=Ok(()) -2026-06-15T11:12:38.468723Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "type-extractor", "definition"] -2026-06-15T11:12:38.468868Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] result=Err(Failed to verify annotation -├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:321:29 -├╴1 additional opaque attachment -│ -╰┬▶ unfulfilled annotation: DiagnosticAnnotation { category: None, severity: Error, message: "Remove this duplicate declaration of 'T'", line: Some(5) } did not match any emitted diagnostics - │ ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:151:25 - │ - ├▶ unexpected diagnostic: - │ error[expander::unresolved-variable]: Unresolved variable - │ ╭▸ - │ 7 │ { "#struct": { "foo": "Bar" } }, - │ │ ━━━ cannot find `Bar` in this scope - │ │ - │ ├ help: check the spelling, or import the name with a `use` statement - │ ╰ note: this could be a typo, a name used outside its scope, or a missing declaration; if it is a function or type from another module, you may need to import it first - │ ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:171:21 - │ - ├▶ unexpected diagnostic: - │ error[expander::unresolved-variable]: Unresolved variable - │ ╭▸ - │ 5 │ "Foo", - │ │ ━━━ cannot find `Bar` in this scope - │ │ - │ ├ help: check the spelling, or import the name with a `use` statement - │ ╰ note: this could be a typo, a name used outside its scope, or a missing declaration; if it is a function or type from another module, you may need to import it first - │ ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:171:21 - │ - ╰▶ unexpected diagnostic: - error[expander::duplicate-generic-constraint]: Duplicate generic constraint - ╭▸ - 5 │ "Foo", - │ ┬ ━ duplicate generic parameter `T` - │ │ - │ `T` was first declared here - │ - ╰ help: remove the duplicate declaration or use a different name - ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:171:21) -2026-06-15T11:12:38.468939Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] -2026-06-15T11:12:38.469288Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] result=Ok(()) -2026-06-15T11:12:38.469299Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] -2026-06-15T11:12:38.469329Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] result=Err(Failed to verify annotation -├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:321:29 -├╴1 additional opaque attachment -│ -╰┬▶ unfulfilled annotation: DiagnosticAnnotation { category: None, severity: Error, message: "Use a valid field index within usize bounds", line: Some(3) } did not match any emitted diagnostics - │ ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:151:25 - │ - ╰▶ unexpected diagnostic: - error[expander::field-index-out-of-bounds]: Field index out of bounds - ╭▸ - 3 │ ["::kernel::special_form::access", "data", { "#literal": 18446744073709551616 }] - │ ━━━━━━━━━━━━━━━━━━━━ field index is out of bounds - │ - ╰ help: use a non-negative integer that fits within platform bounds - ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:171:21) -2026-06-15T11:12:38.469374Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] -2026-06-15T11:12:38.469333Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "inference"] result=Err(Failed to verify annotation -├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:321:29 -├╴1 additional opaque attachment -│ -╰┬▶ unfulfilled annotation: DiagnosticAnnotation { category: None, severity: Error, message: "Type variable has incompatible upper and lower bounds", line: Some(4) } did not match any emitted diagnostics - │ ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:151:25 - │ - ├▶ unexpected diagnostic: - │ error[lowering::expander::intrinsic-generic-arguments]: Generic arguments on intrinsic - │ ╭▸ - │ 4 │ "`+`", - │ │ ━━━━━━━━━━━━━━━━━━━ `+` does not accept generic arguments - │ │ - │ ╰ help: remove the generic arguments from `+` - │ ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:171:21 - │ - ├▶ unexpected diagnostic: - │ error[lowering::expander::unresolved-variable]: Unresolved variable - │ ╭▸ - │ 4 │ "`+`", - │ │ ━━━━━━ cannot find `Number` in this scope - │ │ - │ ├ help: check the spelling, or import the name with a `use` statement - │ ╰ note: this could be a typo, a name used outside its scope, or a missing declaration; if it is a function or type from another module, you may need to import it first - │ ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:171:21 - │ - ╰▶ unexpected diagnostic: - error[lowering::expander::unresolved-variable]: Unresolved variable - ╭▸ - 4 │ "`+`", - │ ━━━━━━ cannot find `Number` in this scope - │ - ├ help: check the spelling, or import the name with a `use` statement - ╰ note: this could be a typo, a name used outside its scope, or a missing declaration; if it is a function or type from another module, you may need to import it first - ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:171:21) -2026-06-15T11:12:38.469401Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "inference"] -2026-06-15T11:12:38.469551Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-mir" trial=["pass", "administrative_reduction"] result=Ok(()) -2026-06-15T11:12:38.469563Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-mir" trial=["pass", "administrative_reduction"] -2026-06-15T11:12:38.469642Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "normalization"] result=Ok(()) -2026-06-15T11:12:38.469686Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] -2026-06-15T11:12:38.469806Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] result=Err(Failed to verify annotation -├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:321:29 -├╴1 additional opaque attachment -│ -╰┬▶ unfulfilled annotation: DiagnosticAnnotation { category: None, severity: Error, message: "Add missing arguments", line: Some(3) } did not match any emitted diagnostics - │ ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:151:25 - │ - ╰▶ unexpected diagnostic: - error[expander::invalid-argument-count]: Invalid argument count - ╭▸ - 3 │ ["::kernel::special_form::newtype", "x", "Integer"] - │ ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ expected 3 arguments to `newtype`, found 2 - │ - ├ help: use `(newtype Name type-expr body)` - ╰ note: the arguments are, in order: the type name (optionally with generic parameters), the underlying type, and the body where the name is in scope - ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:171:21) -2026-06-15T11:12:38.469853Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] -2026-06-15T11:12:38.470074Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "type-extractor", "definition"] result=Ok(()) -2026-06-15T11:12:38.470084Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "type-extractor", "definition"] -2026-06-15T11:12:38.470441Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] result=Ok(()) -2026-06-15T11:12:38.470450Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] -2026-06-15T11:12:38.470627Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] result=Err(Failed to verify annotation -├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:321:29 -├╴1 additional opaque attachment -│ -╰┬▶ unfulfilled annotation: DiagnosticAnnotation { category: None, severity: Error, message: "Generic argument types must be simple path identifiers", line: Some(5) } did not match any emitted diagnostics - │ ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:151:25 - │ - ├▶ unexpected diagnostic: - │ error[expander::unresolved-variable]: Unresolved variable - │ ╭▸ - │ 7 │ { "#struct": { "foo": "Bar" } }, - │ │ ━━━ cannot find `Bar` in this scope - │ │ - │ ├ help: check the spelling, or import the name with a `use` statement - │ ╰ note: this could be a typo, a name used outside its scope, or a missing declaration; if it is a function or type from another module, you may need to import it first - │ ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:171:21 - │ - ╰▶ unexpected diagnostic: - error[expander::invalid-generic-argument]: Invalid generic argument - ╭▸ - 5 │ "Foo<(a: String)>", - │ ━━━━━━━━━━━ expected a simple type parameter - │ - ├ help: use a simple identifier like `T` or a constraint like `T: Bound` - ╰ note: generic parameters are declared as `Name` for unconstrained or `Name` for constrained parameters - ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:171:21) -2026-06-15T11:12:38.470680Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] -2026-06-15T11:12:38.470808Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "inference"] result=Ok(()) -2026-06-15T11:12:38.470817Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "inference"] -2026-06-15T11:12:38.470911Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] result=Err(Failed to verify annotation -├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:321:29 -├╴1 additional opaque attachment -│ -╰┬▶ unfulfilled annotation: DiagnosticAnnotation { category: None, severity: Error, message: "Generic arguments must be simple identifiers", line: Some(5) } did not match any emitted diagnostics - │ ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:151:25 - │ - ├▶ unexpected diagnostic: - │ error[expander::unresolved-variable]: Unresolved variable - │ ╭▸ - │ 7 │ { "#struct": { "foo": "Bar" } }, - │ │ ━━━ cannot find `Bar` in this scope - │ │ - │ ├ help: check the spelling, or import the name with a `use` statement - │ ╰ note: this could be a typo, a name used outside its scope, or a missing declaration; if it is a function or type from another module, you may need to import it first - │ ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:171:21 - │ - ╰▶ unexpected diagnostic: - error[expander::invalid-generic-argument]: Invalid generic argument - ╭▸ - 5 │ "Foo<::foo::Bar>", - │ ━━━━━━━━━━ expected a simple type parameter - │ - ├ help: use a simple identifier like `T`, not a qualified path - ╰ note: generic parameters are declared as `Name` for unconstrained or `Name` for constrained parameters - ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:171:21) -2026-06-15T11:12:38.470960Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] -2026-06-15T11:12:38.471224Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] result=Err(Failed to verify annotation -├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:321:29 -├╴1 additional opaque attachment -│ -╰┬▶ unfulfilled annotation: DiagnosticAnnotation { category: None, severity: Error, message: "Remove this argument", line: Some(8) } did not match any emitted diagnostics - │ ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:151:25 - │ - ╰▶ unexpected diagnostic: - error[expander::invalid-argument-count]: Invalid argument count - ╭▸ - 3 │ ┏ [ - 4 │ ┃ "::kernel::special_form::type", - 5 │ ┃ "x", - 6 │ ┃ "Boolean", - 7 │ ┃ ["+", "x", "x"], - 8 │ ┃ { "#literal": true } - │ ┃ ──────────────────── unexpected argument - 9 │ ┃ //~^ ERROR Remove this argument - 10 │ ┃ ] - │ ┗━┛ expected 3 arguments to `type`, found 4 - │ - ├ help: use `(type Name type-expr body)` - ╰ note: the arguments are, in order: the type name (optionally with generic parameters), the type definition, and the body where the name is in scope - ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:171:21) -2026-06-15T11:12:38.471275Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] -2026-06-15T11:12:38.471228Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] result=Err(Failed to verify annotation -├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:321:29 -├╴1 additional opaque attachment -│ -╰┬▶ unfulfilled annotation: DiagnosticAnnotation { category: None, severity: Error, message: "Use a valid generics expression", line: Some(5) } did not match any emitted diagnostics - │ ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:151:25 - │ - ├▶ unexpected diagnostic: - │ error[expander::unresolved-variable]: Unresolved variable - │ ╭▸ - │ 9 │ ["+", "a", "b"] - │ │ ━ cannot find `b` in this scope - │ │ - │ ╰ note: this could be a typo, a name used outside its scope, or a missing declaration; if it is a function or type from another module, you may need to import it first - │ help: a similar imported name exists - │ ╭╴ - │ 9 - ["+", "a", "b"] - │ 9 + ["+", "a", "~↑√∛cbrt"] - │ ╰╴ - │ ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:171:21 - │ - ├▶ unexpected diagnostic: - │ error[expander::unresolved-variable]: Unresolved variable - │ ╭▸ - │ 9 │ ["+", "a", "b"] - │ │ ━ cannot find `a` in this scope - │ │ - │ ╰ note: this could be a typo, a name used outside its scope, or a missing declaration; if it is a function or type from another module, you may need to import it first - │ help: a similar imported name exists - │ ╭╴ - │ 9 - ["+", "a", "b"] - │ 9 + ["+", "↑√∛ccesss", "b"] - │ ╰╴ - │ ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:171:21 - │ - ╰▶ unexpected diagnostic: - error[expander::invalid-fn-generics]: Invalid generic parameter list - ╭▸ - 5 │ { "#literal": 2 }, - │ ━━━━━━━━━━━━━━━━━ expected a tuple or struct for generic parameters - │ - ╰ help: use a tuple like `(T, U)` for unbounded generics or a struct like `(T: bound, U: _)` for bounded generics - ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:171:21) -2026-06-15T11:12:38.471327Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] -2026-06-15T11:12:38.471775Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-mir" trial=["pass", "administrative_reduction"] result=Ok(()) -2026-06-15T11:12:38.471781Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "type-extractor", "definition"] result=Ok(()) -2026-06-15T11:12:38.471792Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-mir" trial=["pass", "post_inline"] -2026-06-15T11:12:38.471796Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "type-extractor", "definition"] -2026-06-15T11:12:38.472111Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] result=Err(Failed to verify annotation -├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:321:29 -├╴1 additional opaque attachment -│ -╰┬▶ unfulfilled annotation: DiagnosticAnnotation { category: None, severity: Error, message: "Remove this argument", line: Some(9) } did not match any emitted diagnostics - │ ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:151:25 - │ - ╰▶ unexpected diagnostic: - error[expander::invalid-argument-count]: Invalid argument count - ╭▸ - 3 │ ┏ [ - 4 │ ┃ "::kernel::special_form::fn", - 5 │ ┃ { "#tuple": [] }, - 6 │ ┃ { "#struct": {} }, - ‡ ┃ - 9 │ ┃ ["*", "c", "d"] - │ ┃ ─────────────── unexpected argument - 10 │ ┃ //~^ ERROR Remove this argument - 11 │ ┃ ] - │ ┗━┛ expected 4 arguments to `fn`, found 5 - │ - ├ help: use `(fn generics params return-type body)` - ╰ note: the arguments are, in order: the generic parameters (a tuple or struct), the function parameters (a struct), the return type, and the body expression - ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:171:21) -2026-06-15T11:12:38.472159Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] -2026-06-15T11:12:38.472255Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "inference"] result=Ok(()) -2026-06-15T11:12:38.472284Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "inference"] -2026-06-15T11:12:38.472451Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] result=Err(Failed to verify annotation -├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:321:29 -├╴1 additional opaque attachment -│ -╰┬▶ unfulfilled annotation: DiagnosticAnnotation { category: None, severity: Error, message: "Remove this type annotation", line: Some(7) } did not match any emitted diagnostics - │ ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:151:25 - │ - ├▶ unexpected diagnostic: - │ error[expander::unresolved-variable]: Unresolved variable - │ ╭▸ - │ 12 │ ["+", "a", "b"] - │ │ ━ cannot find `b` in this scope - │ │ - │ ╰ note: this could be a typo, a name used outside its scope, or a missing declaration; if it is a function or type from another module, you may need to import it first - │ help: a similar imported name exists - │ ╭╴ - │ 12 - ["+", "a", "b"] - │ 12 + ["+", "a", "~↑√∛cbrt"] - │ ╰╴ - │ ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:171:21 - │ - ├▶ unexpected diagnostic: - │ error[expander::unresolved-variable]: Unresolved variable - │ ╭▸ - │ 6 │ "#struct": { "T": "Int" }, - │ │ ━━━ cannot find `Int` in this scope - │ │ - │ ├ help: check the spelling, or import the name with a `use` statement - │ ╰ note: this could be a typo, a name used outside its scope, or a missing declaration; if it is a function or type from another module, you may need to import it first - │ ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:171:21 - │ ├▶ unexpected diagnostic: │ error[expander::unresolved-variable]: Unresolved variable │ ╭▸ - │ 12 │ ["+", "a", "b"] - │ │ ━ cannot find `a` in this scope + │ 19 │ { "#list": ["a", "b"] } + │ │ ━ cannot find `a` in this scope │ │ │ ╰ note: this could be a typo, a name used outside its scope, or a missing declaration; if it is a function or type from another module, you may need to import it first │ help: a similar imported name exists │ ╭╴ - │ 12 - ["+", "a", "b"] - │ 12 + ["+", "↑√∛ccesss", "b"] + │ 19 - { "#list": ["a", "b"] } + │ 19 + { "#list": ["Union", "b"] } + │ ├╴ + │ 19 - { "#list": ["a", "b"] } + │ 19 + { "#list": ["Unknown", "b"] } + │ ├╴ + │ 19 - { "#list": ["a", "b"] } + │ 19 + { "#list": ["Url", "b"] } + │ ├╴ + │ 19 - { "#list": ["a", "b"] } + │ 19 + { "#list": ["|", "b"] } + │ ├╴ + │ 19 - { "#list": ["a", "b"] } + │ 19 + { "#list": ["Boolean", "b"] } │ ╰╴ │ ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:171:21 │ - ╰▶ unexpected diagnostic: - error[expander::fn-generics-type-annotation]: Type annotation on generic parameter list - ╭▸ - 7 │ "#type": "Int" - │ ━━━ type annotation is not allowed on the generic parameter list - │ - ├ help: remove the type annotation; the generic parameter list declares type variables, not a typed value - ╰ note: write `(fn (T, U) ...)` for unbounded generics or `(fn (T: bound, U: _) ...)` for bounded generics - ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:171:21) -2026-06-15T11:12:38.472563Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] -2026-06-15T11:12:38.472793Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] result=Err(Failed to verify annotation -├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:321:29 -├╴1 additional opaque attachment -│ -╰┬▶ unfulfilled annotation: DiagnosticAnnotation { category: None, severity: Error, message: "Use an integer literal here", line: Some(3) } did not match any emitted diagnostics - │ ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:151:25 - │ - ╰▶ unexpected diagnostic: - error[expander::invalid-field-literal-type]: Invalid field literal type - ╭▸ - 3 │ ["::kernel::special_form::access", "data", { "#literal": "field_name" }] - │ ━━━━━━━━━━━━ expected an integer for field indexing - │ - ╰ help: use an integer index like `0` for tuple field access, or a name like `field` for named field access - ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:171:21) -2026-06-15T11:12:38.472833Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] -2026-06-15T11:12:38.472905Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] result=Err(Failed to verify annotation -├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:321:29 -├╴1 additional opaque attachment -│ -╰┬▶ unfulfilled annotation: DiagnosticAnnotation { category: None, severity: Error, message: "Remove this type annotation", line: Some(7) } did not match any emitted diagnostics - │ ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:151:25 - │ ├▶ unexpected diagnostic: │ error[expander::unresolved-variable]: Unresolved variable │ ╭▸ - │ 12 │ ["+", "a", "b"] - │ │ ━ cannot find `b` in this scope + │ 19 │ { "#list": ["a", "b"] } + │ │ ━ cannot find `b` in this scope │ │ │ ╰ note: this could be a typo, a name used outside its scope, or a missing declaration; if it is a function or type from another module, you may need to import it first │ help: a similar imported name exists │ ╭╴ - │ 12 - ["+", "a", "b"] - │ 12 + ["+", "a", "~↑√∛cbrt"] + │ 19 - { "#list": ["a", "b"] } + │ 19 + { "#list": ["a", "Union"] } + │ ├╴ + │ 19 - { "#list": ["a", "b"] } + │ 19 + { "#list": ["a", "Unknown"] } + │ ├╴ + │ 19 - { "#list": ["a", "b"] } + │ 19 + { "#list": ["a", "Url"] } + │ ├╴ + │ 19 - { "#list": ["a", "b"] } + │ 19 + { "#list": ["a", "|"] } + │ ├╴ + │ 19 - { "#list": ["a", "b"] } + │ 19 + { "#list": ["a", "Number"] } │ ╰╴ │ ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:171:21 │ ├▶ unexpected diagnostic: │ error[expander::unresolved-variable]: Unresolved variable │ ╭▸ - │ 12 │ ["+", "a", "b"] - │ │ ━ cannot find `a` in this scope + │ 22 │ { "#dict": { "a": "b" } } + │ │ ━ cannot find `b` in this scope │ │ │ ╰ note: this could be a typo, a name used outside its scope, or a missing declaration; if it is a function or type from another module, you may need to import it first │ help: a similar imported name exists │ ╭╴ - │ 12 - ["+", "a", "b"] - │ 12 + ["+", "↑√∛ccesss", "b"] - │ ╰╴ - │ ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:171:21 - │ - ╰▶ unexpected diagnostic: - error[expander::fn-generics-type-annotation]: Type annotation on generic parameter list - ╭▸ - 7 │ "#type": "Int" - │ ━━━ type annotation is not allowed on the generic parameter list - │ - ├ help: remove the type annotation; the generic parameter list declares type variables, not a typed value - ╰ note: write `(fn (T, U) ...)` for unbounded generics or `(fn (T: bound, U: _) ...)` for bounded generics - ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:171:21) -2026-06-15T11:12:38.472979Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] -2026-06-15T11:12:38.473148Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "type-extractor", "definition"] result=Ok(()) -2026-06-15T11:12:38.473159Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "type-extractor", "definition"] -2026-06-15T11:12:38.473559Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] result=Err(Failed to verify annotation -├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:321:29 -├╴1 additional opaque attachment -│ -╰┬▶ unfulfilled annotation: DiagnosticAnnotation { category: None, severity: Error, message: "Remove this argument", line: Some(7) } did not match any emitted diagnostics - │ ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:151:25 - │ - ╰▶ unexpected diagnostic: - error[expander::invalid-argument-count]: Invalid argument count - ╭▸ - 3 │ ┏ [ - 4 │ ┃ "::kernel::special_form::index", - 5 │ ┃ "x", - 6 │ ┃ "y", - 7 │ ┃ "z" - │ ┃ ─ unexpected argument - 8 │ ┃ //~^ ERROR Remove this argument - 9 │ ┃ ] - │ ┗━┛ expected 2 arguments to `[]`, found 3 - │ - ├ help: use `([] collection index)` - ╰ note: the first argument is the collection and the second is the index - ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:171:21) -2026-06-15T11:12:38.473602Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] -2026-06-15T11:12:38.474072Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] result=Ok(()) -2026-06-15T11:12:38.474087Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] -2026-06-15T11:12:38.474014Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] result=Err(Failed to verify annotation -├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:321:29 -├╴1 additional opaque attachment -│ -╰┬▶ unfulfilled annotation: DiagnosticAnnotation { category: None, severity: Error, message: "Function call with non-path callee cannot be used as a type", line: Some(7) } did not match any emitted diagnostics - │ ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:151:25 - │ - ├▶ unexpected diagnostic: - │ error[expander::invalid-type-constructor-call]: Invalid type constructor call - │ ╭▸ - │ 6 │ ┌ [ - │ 7 │ │ ["+", { "#literal": 1 }, { "#literal": 2 }], - │ │ │ ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ cannot use this as a type constructor - │ 8 │ │ //~^ ERROR Function call with non-path callee cannot be used as a type - │ 9 │ │ "Int", - │ 10 │ │ "Float" - │ 11 │ │ ] - │ │ └───┘ this call appears in a type position - │ │ - │ ├ help: use a type path directly, or use `(| ...)` / `(& ...)` for unions and intersections - │ ╰ note: generic type arguments belong on the type path itself, for example `Foo`, not `(Foo T)` - │ ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:171:21 - │ - ├▶ unexpected diagnostic: - │ error[expander::unresolved-variable]: Unresolved variable - │ ╭▸ - │ 9 │ "Int", - │ │ ━━━ cannot find `Int` in this scope - │ │ - │ ├ help: check the spelling, or import the name with a `use` statement - │ ╰ note: this could be a typo, a name used outside its scope, or a missing declaration; if it is a function or type from another module, you may need to import it first - │ ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:171:21 - │ - ├▶ unexpected diagnostic: - │ error[expander::unresolved-variable]: Unresolved variable - │ ╭▸ - │ 10 │ "Float" - │ │ ━━━━━ cannot find `Float` in this scope - │ │ - │ ├ help: check the spelling, or import the name with a `use` statement - │ ╰ note: this could be a typo, a name used outside its scope, or a missing declaration; if it is a function or type from another module, you may need to import it first - │ ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:171:21 - │ - ╰▶ unexpected diagnostic: - error[expander::unresolved-variable]: Unresolved variable - ╭▸ - 7 │ ["+", { "#literal": 1 }, { "#literal": 2 }], - │ ━ cannot find `+` in this scope - │ - ╰ note: this could be a typo, a name used outside its scope, or a missing declaration; if it is a function or type from another module, you may need to import it first - help: a similar imported name exists - ╭╴ - 7 - ["+", { "#literal": 1 }, { "#literal": 2 }], - 7 + ["StringUnionUnknownUrl|", { "#literal": 1 }, { "#literal": 2 }], - ╰╴ - ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:171:21) -2026-06-15T11:12:38.474143Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "inference"] result=Ok(()) -2026-06-15T11:12:38.474176Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] -2026-06-15T11:12:38.474181Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "inference"] -2026-06-15T11:12:38.474361Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] result=Err(Expected trial to pass, but it failed -├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:390:24 -╰╴1 additional opaque attachment) -2026-06-15T11:12:38.474381Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] -2026-06-15T11:12:38.474546Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "type-extractor", "definition"] result=Ok(()) -2026-06-15T11:12:38.474560Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "type-extractor", "definition"] -2026-06-15T11:12:38.474846Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-mir" trial=["pass", "post_inline"] result=Ok(()) -2026-06-15T11:12:38.474859Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-mir" trial=["pass", "post_inline"] -2026-06-15T11:12:38.474839Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] result=Err(Failed to verify annotation -├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:321:29 -├╴1 additional opaque attachment -│ -╰┬▶ unfulfilled annotation: DiagnosticAnnotation { category: None, severity: Error, message: "Use a struct expression for parameters", line: Some(6) } did not match any emitted diagnostics - │ ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:151:25 - │ - ├▶ unexpected diagnostic: - │ error[expander::unresolved-variable]: Unresolved variable - │ ╭▸ - │ 9 │ ["+", "a", "b"] - │ │ ━ cannot find `b` in this scope - │ │ - │ ╰ note: this could be a typo, a name used outside its scope, or a missing declaration; if it is a function or type from another module, you may need to import it first - │ help: a similar imported name exists - │ ╭╴ - │ 9 - ["+", "a", "b"] - │ 9 + ["+", "a", "~↑√∛cbrt"] - │ ╰╴ - │ ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:171:21 - │ - ├▶ unexpected diagnostic: - │ error[expander::unresolved-variable]: Unresolved variable - │ ╭▸ - │ 9 │ ["+", "a", "b"] - │ │ ━ cannot find `a` in this scope - │ │ - │ ╰ note: this could be a typo, a name used outside its scope, or a missing declaration; if it is a function or type from another module, you may need to import it first - │ help: a similar imported name exists - │ ╭╴ - │ 9 - ["+", "a", "b"] - │ 9 + ["+", "↑√∛ccesss", "b"] - │ ╰╴ - │ ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:171:21 - │ - ╰▶ unexpected diagnostic: - error[expander::invalid-fn-params]: Invalid parameter list - ╭▸ - 6 │ { "#tuple": [] }, - │ ━━━━━━━━━━━━━━━━ expected a struct for function parameters - │ - ╰ help: write parameters as `(x: int, y: string)` where each field declares a parameter and its type - ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:171:21) -2026-06-15T11:12:38.474916Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] -2026-06-15T11:12:38.475182Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] result=Err(Failed to verify annotation -├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:321:29 -├╴1 additional opaque attachment -│ -╰┬▶ unfulfilled annotation: DiagnosticAnnotation { category: None, severity: Error, message: "Use a simple identifier here", line: Some(6) } did not match any emitted diagnostics - │ ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:151:25 - │ - ├▶ unexpected diagnostic: - │ error[expander::unresolved-variable]: Unresolved variable - │ ╭▸ - │ 8 │ "x" - │ │ ━ cannot find `x` in this scope - │ │ - │ ╰ note: this could be a typo, a name used outside its scope, or a missing declaration; if it is a function or type from another module, you may need to import it first - │ help: a similar imported name exists - │ ╭╴ - │ 8 - "x" - │ 8 + "~↑√∛index" - │ ╰╴ - │ ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:171:21 - │ - ╰▶ unexpected diagnostic: - error[expander::invalid-use-import-binding]: Invalid use import binding - ╭▸ - 6 │ { "#tuple": ["::core::math::sub"] }, - │ ━━━━━━━━━━━━━━━━━ expected a simple name to import - │ - ╰ help: each import must be a plain identifier like `foo`, not a qualified path or expression - ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:171:21) -2026-06-15T11:12:38.475238Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "pre-expansion-name-resolver"] -2026-06-15T11:12:38.475641Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] result=Err(Failed to verify annotation -├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:321:29 -├╴1 additional opaque attachment -│ -╰┬▶ unfulfilled annotation: DiagnosticAnnotation { category: None, severity: Error, message: "this labeled argument", line: Some(6) } did not match any emitted diagnostics - │ ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:151:25 - │ - ╰▶ unexpected diagnostic: - error[expander::labeled-arguments-not-supported]: Labeled arguments not supported - ╭▸ - 6 │ ":test": { "#literal": true } - │ ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ labeled arguments are not allowed in `if` - │ - ╰ help: pass the arguments positionally: `(if condition then)` or `(if condition then else)` - ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:171:21) -2026-06-15T11:12:38.475678Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] -2026-06-15T11:12:38.475826Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "type-extractor", "definition"] result=Ok(()) -2026-06-15T11:12:38.475838Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "type-extractor", "definition"] -2026-06-15T11:12:38.475930Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] result=Err(Failed to verify annotation -├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:321:29 -├╴1 additional opaque attachment -│ -╰┬▶ unfulfilled annotation: DiagnosticAnnotation { category: None, severity: Error, message: "Generic arguments must be simple identifiers", line: Some(5) } did not match any emitted diagnostics - │ ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:151:25 - │ - ├▶ unexpected diagnostic: - │ error[expander::unresolved-variable]: Unresolved variable - │ ╭▸ - │ 7 │ { "#struct": { "foo": "Bar" } }, - │ │ ━━━ cannot find `Bar` in this scope - │ │ - │ ├ help: check the spelling, or import the name with a `use` statement - │ ╰ note: this could be a typo, a name used outside its scope, or a missing declaration; if it is a function or type from another module, you may need to import it first - │ ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:171:21 - │ - ╰▶ unexpected diagnostic: - error[expander::invalid-generic-argument]: Invalid generic argument - ╭▸ - 5 │ "Foo>", - │ ━━━━━━━━ expected a simple type parameter - │ - ├ help: use a simple identifier like `T`, not a qualified path - ╰ note: generic parameters are declared as `Name` for unconstrained or `Name` for constrained parameters - ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:171:21) -2026-06-15T11:12:38.476000Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] -2026-06-15T11:12:38.476009Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "inference"] result=Ok(()) -2026-06-15T11:12:38.476071Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "inference"] -2026-06-15T11:12:38.476008Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] result=Err(Failed to verify annotation -├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:321:29 -├╴1 additional opaque attachment -│ -╰┬▶ unfulfilled annotation: DiagnosticAnnotation { category: None, severity: Error, message: "This special form path is invalid", line: Some(3) } did not match any emitted diagnostics - │ ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:151:25 - │ - ╰▶ unexpected diagnostic: - error[expander::item-not-found]: Item not found - ╭▸ - 3 │ ["::kernel::special_form::headpat"] - │ ┬─────────── ━━━━━━━ cannot find `headpat` in module `::kernel::special_form` - │ │ - │ looked in this module - │ - ╰ help: check the spelling and ensure the item is exported - ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:171:21) -2026-06-15T11:12:38.476140Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] -2026-06-15T11:12:38.476462Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "normalization"] result=Ok(()) -2026-06-15T11:12:38.476471Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "normalization"] -2026-06-15T11:12:38.476480Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "pre-expansion-name-resolver"] result=Err(Expected trial to pass, but it failed -├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:390:24 -╰╴1 additional opaque attachment) -2026-06-15T11:12:38.476498Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "pre-expansion-name-resolver"] -2026-06-15T11:12:38.476519Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] result=Err(Failed to verify annotation -├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:321:29 -├╴1 additional opaque attachment -│ -╰┬▶ unfulfilled annotation: DiagnosticAnnotation { category: None, severity: Error, message: "Remove this type annotation", line: Some(6) } did not match any emitted diagnostics - │ ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:151:25 - │ - ├▶ unexpected diagnostic: - │ error[expander::unresolved-variable]: Unresolved variable - │ ╭▸ - │ 8 │ "x" - │ │ ━ cannot find `x` in this scope - │ │ - │ ╰ note: this could be a typo, a name used outside its scope, or a missing declaration; if it is a function or type from another module, you may need to import it first - │ help: a similar imported name exists - │ ╭╴ - │ 8 - "x" - │ 8 + "~↑√∛index" - │ ╰╴ - │ ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:171:21 - │ - ╰▶ unexpected diagnostic: - error[expander::invalid-use-import-binding]: Invalid use import binding - ╭▸ - 6 │ { "#tuple": ["::core::math::sub"], "#type": "Number" }, - │ ━━━━━━━━━━━━━━━━━ expected a simple name to import - │ - ╰ help: each import must be a plain identifier like `foo`, not a qualified path or expression - ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:171:21) -2026-06-15T11:12:38.476369Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] result=Err(Failed to verify annotation -├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:321:29 -├╴1 additional opaque attachment -│ -╰┬▶ unfulfilled annotation: DiagnosticAnnotation { category: None, severity: Error, message: "Replace this as with a proper type expression", line: Some(13) } did not match any emitted diagnostics - │ ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:151:25 - │ - ├▶ unfulfilled annotation: DiagnosticAnnotation { category: None, severity: Error, message: "Replace this literal with a type name", line: Some(16) } did not match any emitted diagnostics - │ ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:151:25 - │ - ├▶ unfulfilled annotation: DiagnosticAnnotation { category: None, severity: Error, message: "Replace this list with a proper type expression", line: Some(19) } did not match any emitted diagnostics - │ ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:151:25 - │ - ├▶ unfulfilled annotation: DiagnosticAnnotation { category: None, severity: Error, message: "Replace this dictionary with a proper type expression", line: Some(22) } did not match any emitted diagnostics - │ ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:151:25 - │ - ├▶ unexpected diagnostic: - │ error[expander::invalid-expression-in-type-position]: Invalid expression in type position - │ ╭▸ - │ 22 │ { "#dict": { "a": "b" } } - │ │ ━━━━━━━━━━━━━━━━━━━━━━━━━ cannot use a dictionary expression as a type - │ │ - │ ├ help: replace this with a type path, tuple type, struct type, `_`, `(| ...)`, or `(& ...)` - │ ╰ note: valid type forms are: type paths like `String`, tuple types like `(Int, String)`, struct types like `(name: String)`, `_` for inference, unions `(| ...)`, and intersections `(& ...)` - │ ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:171:21 - │ - ├▶ unexpected diagnostic: - │ error[expander::item-not-found]: Item not found - │ ╭▸ - │ 13 │ ["::kernel::special_form::as", "x", "X"] - │ │ ┬─────────── ━━ cannot find `as` in module `::kernel::special_form` - │ │ │ - │ │ looked in this module - │ │ - │ ╰ help: check the spelling and ensure the item is exported - │ ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:171:21 - │ - ├▶ unexpected diagnostic: - │ error[expander::unresolved-variable]: Unresolved variable - │ ╭▸ - │ 13 │ ["::kernel::special_form::as", "x", "X"] - │ │ ━ cannot find `x` in this scope - │ │ - │ ╰ note: this could be a typo, a name used outside its scope, or a missing declaration; if it is a function or type from another module, you may need to import it first - │ help: a similar imported name exists - │ ╭╴ - │ 13 - ["::kernel::special_form::as", "x", "X"] - │ 13 + ["::kernel::special_form::as", "StringUnionUnknownUrl|", "X"] - │ ╰╴ - │ ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:171:21 - │ - ├▶ unexpected diagnostic: - │ error[expander::unresolved-variable]: Unresolved variable - │ ╭▸ - │ 13 │ ["::kernel::special_form::as", "x", "X"] - │ │ ━ cannot find `X` in this scope - │ │ - │ ╰ note: this could be a typo, a name used outside its scope, or a missing declaration; if it is a function or type from another module, you may need to import it first - │ help: a similar imported name exists - │ ╭╴ - │ 13 - ["::kernel::special_form::as", "x", "X"] - │ 13 + ["::kernel::special_form::as", "x", "StringUnionUnknownUrl|"] - │ ╰╴ - │ ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:171:21 - │ - ├▶ unexpected diagnostic: - │ error[expander::invalid-expression-in-type-position]: Invalid expression in type position - │ ╭▸ - │ 16 │ { "#literal": 1 } - │ │ ━━━━━━━━━━━━━━━━━ cannot use a literal value as a type - │ │ - │ ├ help: replace this with a type path, tuple type, struct type, `_`, `(| ...)`, or `(& ...)` - │ ╰ note: valid type forms are: type paths like `String`, tuple types like `(Int, String)`, struct types like `(name: String)`, `_` for inference, unions `(| ...)`, and intersections `(& ...)` - │ ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:171:21 - │ - ├▶ unexpected diagnostic: - │ error[expander::unresolved-variable]: Unresolved variable - │ ╭▸ - │ 19 │ { "#list": ["a", "b"] } - │ │ ━ cannot find `a` in this scope - │ │ - │ ╰ note: this could be a typo, a name used outside its scope, or a missing declaration; if it is a function or type from another module, you may need to import it first - │ help: a similar imported name exists - │ ╭╴ - │ 19 - { "#list": ["a", "b"] } - │ 19 + { "#list": ["UnionUnknownUrl|Boolean", "b"] } - │ ╰╴ - │ ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:171:21 - │ - ├▶ unexpected diagnostic: - │ error[expander::unresolved-variable]: Unresolved variable - │ ╭▸ - │ 19 │ { "#list": ["a", "b"] } - │ │ ━ cannot find `b` in this scope - │ │ - │ ╰ note: this could be a typo, a name used outside its scope, or a missing declaration; if it is a function or type from another module, you may need to import it first - │ help: a similar imported name exists - │ ╭╴ - │ 19 - { "#list": ["a", "b"] } - │ 19 + { "#list": ["a", "UnionUnknownUrl|Number"] } - │ ╰╴ - │ ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:171:21 - │ - ├▶ unexpected diagnostic: - │ error[expander::invalid-expression-in-type-position]: Invalid expression in type position - │ ╭▸ - │ 19 │ { "#list": ["a", "b"] } - │ │ ━━━━━━━━━━━━━━━━━━━━━━━ cannot use a list expression as a type - │ │ - │ ├ help: replace this with a type path, tuple type, struct type, `_`, `(| ...)`, or `(& ...)` - │ ╰ note: valid type forms are: type paths like `String`, tuple types like `(Int, String)`, struct types like `(name: String)`, `_` for inference, unions `(| ...)`, and intersections `(& ...)` - │ ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:171:21 - │ - ├▶ unexpected diagnostic: - │ error[expander::unresolved-variable]: Unresolved variable - │ ╭▸ - │ 22 │ { "#dict": { "a": "b" } } - │ │ ━ cannot find `b` in this scope - │ │ - │ ╰ note: this could be a typo, a name used outside its scope, or a missing declaration; if it is a function or type from another module, you may need to import it first - │ help: a similar imported name exists - │ ╭╴ - │ 22 - { "#dict": { "a": "b" } } - │ 22 + { "#dict": { "a": "UnionUnknownUrl|Number" } } + │ 22 - { "#dict": { "a": "b" } } + │ 22 + { "#dict": { "a": "Union" } } + │ ├╴ + │ 22 - { "#dict": { "a": "b" } } + │ 22 + { "#dict": { "a": "Unknown" } } + │ ├╴ + │ 22 - { "#dict": { "a": "b" } } + │ 22 + { "#dict": { "a": "Url" } } + │ ├╴ + │ 22 - { "#dict": { "a": "b" } } + │ 22 + { "#dict": { "a": "|" } } + │ ├╴ + │ 22 - { "#dict": { "a": "b" } } + │ 22 + { "#dict": { "a": "Number" } } │ ╰╴ │ ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:171:21 │ @@ -2605,5069 +2699,1013 @@ warning: `hashql-ast` (lib) generated 1 warning help: a similar imported name exists ╭╴ 11 - "x", - 11 + "~↑√∛index", - ╰╴ - ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:171:21) -2026-06-15T11:12:38.476577Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] -2026-06-15T11:12:38.476602Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-mir" trial=["pass", "inst_simplify"] -2026-06-15T11:12:38.476792Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] result=Err(Expected trial to pass, but it failed -├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:390:24 -╰╴1 additional opaque attachment) -2026-06-15T11:12:38.476811Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "pre-expansion-name-resolver"] -2026-06-15T11:12:38.477162Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "type-extractor", "definition"] result=Ok(()) -2026-06-15T11:12:38.477171Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "type-extractor"] -2026-06-15T11:12:38.477260Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] result=Ok(()) -2026-06-15T11:12:38.477274Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] -2026-06-15T11:12:38.477509Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "pre-expansion-name-resolver"] result=Err(Expected trial to pass, but it failed -├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:390:24 -╰╴1 additional opaque attachment) -2026-06-15T11:12:38.477529Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "pre-expansion-name-resolver"] -2026-06-15T11:12:38.477656Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] result=Err(Failed to verify annotation -├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:321:29 -├╴1 additional opaque attachment -│ -╰┬▶ unfulfilled annotation: DiagnosticAnnotation { category: None, severity: Error, message: "Remove this argument", line: Some(9) } did not match any emitted diagnostics - │ ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:151:25 - │ - ╰▶ unexpected diagnostic: - error[expander::invalid-argument-count]: Invalid argument count - ╭▸ - 3 │ ┏ [ - 4 │ ┃ "::kernel::special_form::let", - 5 │ ┃ "x", - 6 │ ┃ "Boolean", - ‡ ┃ - 9 │ ┃ { "#literal": true } - │ ┃ ──────────────────── unexpected argument - 10 │ ┃ //~^ ERROR Remove this argument - 11 │ ┃ ] - │ ┗━┛ expected 3 or 4 arguments to `let`, found 5 - │ - ├ help: use `(let name value body)` or `(let name type value body)` - ╰ note: the arguments are, in order: the binding name, an optional type annotation, the bound value, and the body expression where the name is in scope - ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:171:21) -2026-06-15T11:12:38.477696Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] -2026-06-15T11:12:38.477710Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "normalization"] result=Ok(()) -2026-06-15T11:12:38.477719Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "normalization"] -2026-06-15T11:12:38.477880Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-mir" trial=["pass", "post_inline"] result=Ok(()) -2026-06-15T11:12:38.477899Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-mir" trial=["pass", "post_inline"] -2026-06-15T11:12:38.478044Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "inference"] result=Ok(()) -2026-06-15T11:12:38.478067Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "inference"] -2026-06-15T11:12:38.478074Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "pre-expansion-name-resolver"] result=Err(Expected trial to pass, but it failed -├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:390:24 -╰╴1 additional opaque attachment) -2026-06-15T11:12:38.478094Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "pre-expansion-name-resolver"] -2026-06-15T11:12:38.478189Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-mir" trial=["pass", "inst_simplify"] result=Ok(()) -2026-06-15T11:12:38.478202Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-mir" trial=["pass", "inst_simplify"] -2026-06-15T11:12:38.478419Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] result=Err(Failed to verify annotation -├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:321:29 -├╴1 additional opaque attachment -│ -╰┬▶ unfulfilled annotation: DiagnosticAnnotation { category: None, severity: Error, message: "Remove this extra segment", line: Some(4) } did not match any emitted diagnostics - │ ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:151:25 - │ - ╰▶ unexpected diagnostic: - error[expander::module-required]: Module required - ╭▸ - 4 │ "::kernel::special_form::if::extra", - │ ┯━ ───── cannot access items inside a non-module - │ │ - │ `::kernel::special_form::if` is a value, not a module - │ - ├ help: if you meant to access a field, use `.` instead of `::` - ╰ note: the `::` separator navigates into modules; values and types do not contain sub-items - ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:171:21) -2026-06-15T11:12:38.478497Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "type-extractor"] result=Ok(()) -2026-06-15T11:12:38.478524Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] -2026-06-15T11:12:38.478536Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "type-extractor"] -2026-06-15T11:12:38.478769Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "pre-expansion-name-resolver"] result=Err(Expected trial to pass, but it failed -├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:390:24 -╰╴1 additional opaque attachment) -2026-06-15T11:12:38.478788Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "pre-expansion-name-resolver"] -2026-06-15T11:12:38.478865Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] result=Err(Failed to verify annotation -├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:321:29 -├╴1 additional opaque attachment -│ -╰┬▶ unfulfilled annotation: DiagnosticAnnotation { category: None, severity: Error, message: "Remove this argument", line: Some(8) } did not match any emitted diagnostics - │ ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:151:25 - │ - ╰▶ unexpected diagnostic: - error[expander::invalid-argument-count]: Invalid argument count - ╭▸ - 3 │ ┏ [ - 4 │ ┃ "::kernel::special_form::use", - 5 │ ┃ "::math", - 6 │ ┃ { "#tuple": ["pi"] }, - 7 │ ┃ "x", - 8 │ ┃ "y" - │ ┃ ─ unexpected argument - 9 │ ┃ //~^ ERROR Remove this argument - 10 │ ┃ ] - │ ┗━┛ expected 3 arguments to `use`, found 4 - │ - ├ help: use `(use path imports body)` - ╰ note: the arguments are, in order: the module path to import from, the import specifier (`*`, a tuple of names, or a struct of aliases), and the body where the imports are in scope - ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:171:21) -2026-06-15T11:12:38.478907Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] result=Err(Expected trial to pass, but it failed -├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:390:24 -╰╴1 additional opaque attachment) -2026-06-15T11:12:38.478927Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] -2026-06-15T11:12:38.478942Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "type-extractor"] -2026-06-15T11:12:38.479053Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "normalization"] result=Ok(()) -2026-06-15T11:12:38.479066Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "normalization"] -2026-06-15T11:12:38.479133Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "pre-expansion-name-resolver"] result=Err(Expected trial to pass, but it failed -├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:390:24 -╰╴1 additional opaque attachment) -2026-06-15T11:12:38.479152Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "pre-expansion-name-resolver"] -2026-06-15T11:12:38.479648Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "inference"] result=Ok(()) -2026-06-15T11:12:38.479657Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "inference"] -2026-06-15T11:12:38.479771Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-mir" trial=["pass", "post_inline"] result=Ok(()) -2026-06-15T11:12:38.479782Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-mir" trial=["pass", "post_inline"] -2026-06-15T11:12:38.479850Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-mir" trial=["pass", "inst_simplify"] result=Ok(()) -2026-06-15T11:12:38.479870Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "checking"] -2026-06-15T11:12:38.480080Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "type-extractor"] result=Ok(()) -2026-06-15T11:12:38.480108Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "type-extractor"] -2026-06-15T11:12:38.480150Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "type-extractor"] result=Ok(()) -2026-06-15T11:12:38.480160Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "type-extractor"] -2026-06-15T11:12:38.480146Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] result=Err(Expected trial to pass, but it failed -├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:390:24 -╰╴1 additional opaque attachment) -2026-06-15T11:12:38.480193Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] -2026-06-15T11:12:38.480218Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "pre-expansion-name-resolver"] result=Err(Expected trial to pass, but it failed -├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:390:24 -╰╴1 additional opaque attachment) -2026-06-15T11:12:38.480239Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "pre-expansion-name-resolver"] -2026-06-15T11:12:38.480384Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "pre-expansion-name-resolver"] result=Err(Expected trial to pass, but it failed -├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:390:24 -╰╴1 additional opaque attachment) -2026-06-15T11:12:38.480414Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "pre-expansion-name-resolver"] -2026-06-15T11:12:38.480536Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "normalization"] result=Ok(()) -2026-06-15T11:12:38.480548Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "normalization"] -2026-06-15T11:12:38.480823Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "inference"] result=Ok(()) -2026-06-15T11:12:38.480833Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "inference"] -2026-06-15T11:12:38.480917Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] result=Err(Failed to verify annotation -├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:321:29 -├╴1 additional opaque attachment -│ -╰┬▶ unfulfilled annotation: DiagnosticAnnotation { category: None, severity: Error, message: "Use a simple identifier here", line: Some(8) } did not match any emitted diagnostics - │ ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:151:25 - │ - ├▶ unexpected diagnostic: - │ error[expander::unresolved-variable]: Unresolved variable - │ ╭▸ - │ 12 │ "x" - │ │ ━ cannot find `x` in this scope - │ │ - │ ╰ note: this could be a typo, a name used outside its scope, or a missing declaration; if it is a function or type from another module, you may need to import it first - │ help: a similar imported name exists - │ ╭╴ - │ 12 - "x" - │ 12 + "~↑√∛index" - │ ╰╴ - │ ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:171:21 - │ - ├▶ unexpected diagnostic: - │ error[expander::item-not-found]: Item not found - │ ╭▸ - │ 5 │ "::core", - │ │ ──── looked in this module - │ ‡ - │ 8 │ "x": "::core::math::sub" - │ │ ━ cannot find `x` in module `::core` - │ ╰╴ - │ help: a similar item exists in this module - │ ╭╴ - │ 8 - "x": "::core::math::sub" - │ 8 + "mathoptionresulturluuid": "::core::math::sub" - │ ╰╴ - │ ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:171:21 - │ - ╰▶ unexpected diagnostic: - error[expander::invalid-use-alias]: Invalid use alias - ╭▸ - 8 │ "x": "::core::math::sub" - │ ━━━━━━━━━━━━━━━━━ expected `_` or a simple identifier as the alias - │ - ╰ help: use `_` to keep the original name or a simple identifier to rename: `(name: alias)` or `(name: _)` - ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:171:21) -2026-06-15T11:12:38.480980Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] -2026-06-15T11:12:38.481242Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "pre-expansion-name-resolver"] result=Err(Expected trial to pass, but it failed -├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:390:24 -╰╴1 additional opaque attachment) -2026-06-15T11:12:38.481258Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "pre-expansion-name-resolver"] -2026-06-15T11:12:38.481443Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-mir" trial=["pass", "post_inline"] result=Ok(()) -2026-06-15T11:12:38.481456Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-eval" trial=["postgres"] -2026-06-15T11:12:38.481595Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "type-extractor"] result=Err(Expected trial to pass, but it failed -├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:390:24 -╰╴1 additional opaque attachment) -2026-06-15T11:12:38.481629Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "type-extractor"] -2026-06-15T11:12:38.481655Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] result=Err(Expected trial to pass, but it failed -├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:390:24 -╰╴1 additional opaque attachment) -2026-06-15T11:12:38.481704Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] -2026-06-15T11:12:38.481725Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "type-extractor"] result=Ok(()) -2026-06-15T11:12:38.481740Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "type-extractor"] -2026-06-15T11:12:38.481788Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "checking"] result=Ok(()) -2026-06-15T11:12:38.481802Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "checking"] -2026-06-15T11:12:38.481894Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "pre-expansion-name-resolver"] result=Err(Expected trial to pass, but it failed -├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:390:24 -╰╴1 additional opaque attachment) -2026-06-15T11:12:38.481914Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "pre-expansion-name-resolver"] -2026-06-15T11:12:38.482130Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "normalization"] result=Ok(()) -2026-06-15T11:12:38.482141Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "normalization"] -2026-06-15T11:12:38.482284Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "pre-expansion-name-resolver"] result=Err(Expected trial to pass, but it failed -├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:390:24 -╰╴1 additional opaque attachment) -2026-06-15T11:12:38.482303Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "pre-expansion-name-resolver"] -2026-06-15T11:12:38.482382Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] result=Err(Failed to verify annotation -├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:321:29 -├╴1 additional opaque attachment -│ -╰┬▶ unfulfilled annotation: DiagnosticAnnotation { category: None, severity: Error, message: "Remove this argument", line: Some(8) } did not match any emitted diagnostics - │ ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:151:25 - │ - ╰▶ unexpected diagnostic: - error[expander::invalid-argument-count]: Invalid argument count - ╭▸ - 3 │ ┏ [ - 4 │ ┃ "::kernel::special_form::if", - 5 │ ┃ { "#literal": true }, - 6 │ ┃ { "#literal": true }, - 7 │ ┃ { "#literal": true }, - 8 │ ┃ { "#literal": true } - │ ┃ ──────────────────── unexpected argument - 9 │ ┃ //~^ ERROR Remove this argument - 10 │ ┃ ] - │ ┗━┛ expected 2 or 3 arguments to `if`, found 4 - │ - ├ help: use `(if condition then)` or `(if condition then else)` - ╰ note: the arguments are, in order: the condition, the then branch, and an optional else branch - ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:171:21) -2026-06-15T11:12:38.482424Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] -2026-06-15T11:12:38.482682Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "inference"] result=Ok(()) -2026-06-15T11:12:38.482690Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "inference"] -2026-06-15T11:12:38.483159Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] result=Err(Expected trial to pass, but it failed -├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:390:24 -╰╴1 additional opaque attachment) -2026-06-15T11:12:38.483182Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] -2026-06-15T11:12:38.483286Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "type-extractor"] result=Ok(()) -2026-06-15T11:12:38.483303Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "type-extractor"] -2026-06-15T11:12:38.483351Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "type-extractor"] result=Ok(()) -2026-06-15T11:12:38.483379Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-eval" trial=["postgres"] -2026-06-15T11:12:38.483425Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "pre-expansion-name-resolver"] result=Err(Expected trial to pass, but it failed -├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:390:24 -╰╴1 additional opaque attachment) -2026-06-15T11:12:38.483454Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "pre-expansion-name-resolver"] -2026-06-15T11:12:38.483513Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "checking"] result=Ok(()) -2026-06-15T11:12:38.483546Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "checking"] -2026-06-15T11:12:38.483562Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "normalization"] result=Ok(()) -2026-06-15T11:12:38.483556Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "pre-expansion-name-resolver"] result=Err(Expected trial to pass, but it failed -├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:390:24 -╰╴1 additional opaque attachment) -2026-06-15T11:12:38.483577Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "normalization"] -2026-06-15T11:12:38.483583Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "pre-expansion-name-resolver"] -2026-06-15T11:12:38.483678Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] result=Err(Expected trial to pass, but it failed -├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:390:24 -╰╴1 additional opaque attachment) -2026-06-15T11:12:38.483729Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] -2026-06-15T11:12:38.483893Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "inference"] result=Ok(()) -2026-06-15T11:12:38.483904Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "inference"] -2026-06-15T11:12:38.484594Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "pre-expansion-name-resolver"] result=Err(Expected trial to pass, but it failed -├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:390:24 -╰╴1 additional opaque attachment) -2026-06-15T11:12:38.484616Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "pre-expansion-name-resolver"] -2026-06-15T11:12:38.484650Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "type-extractor"] result=Ok(()) -2026-06-15T11:12:38.484665Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "type-extractor"] -2026-06-15T11:12:38.484704Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] result=Err(Failed to verify annotation -├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:321:29 -├╴1 additional opaque attachment -│ -╰┬▶ unfulfilled annotation: DiagnosticAnnotation { category: None, severity: Error, message: "Remove this type annotation", line: Some(6) } did not match any emitted diagnostics - │ ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:151:25 - │ - ├▶ unexpected diagnostic: - │ error[expander::unresolved-variable]: Unresolved variable - │ ╭▸ - │ 5 │ "tuple", - │ │ ━━━━━ cannot find `tuple` in this scope - │ │ - │ ├ help: check the spelling, or import the name with a `use` statement - │ ╰ note: this could be a typo, a name used outside its scope, or a missing declaration; if it is a function or type from another module, you may need to import it first - │ ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:171:21 - │ - ╰▶ unexpected diagnostic: - error[expander::field-literal-type-annotation]: Field literal with type annotation - ╭▸ - 6 │ { "#literal": 0, "#type": "Integer" } - │ ━ type annotations are not allowed on field index literals - │ - ╰ help: remove the type annotation and use a plain integer like `0` - ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:171:21) -2026-06-15T11:12:38.484754Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] -2026-06-15T11:12:38.485023Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "normalization"] result=Ok(()) -2026-06-15T11:12:38.485037Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "alias-replacement"] -2026-06-15T11:12:38.485050Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "pre-expansion-name-resolver"] result=Err(Expected trial to pass, but it failed -├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:390:24 -╰╴1 additional opaque attachment) -2026-06-15T11:12:38.485076Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "pre-expansion-name-resolver"] -2026-06-15T11:12:38.485097Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] result=Ok(()) -2026-06-15T11:12:38.485135Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-eval" trial=["postgres"] -2026-06-15T11:12:38.485148Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "inference"] result=Err(Expected trial to pass, but it failed -├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:390:24 -╰╴1 additional opaque attachment) -2026-06-15T11:12:38.485170Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "inference"] -2026-06-15T11:12:38.485862Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "pre-expansion-name-resolver"] result=Ok(()) -2026-06-15T11:12:38.485875Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "pre-expansion-name-resolver"] -2026-06-15T11:12:38.486014Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "type-extractor"] result=Ok(()) -2026-06-15T11:12:38.486024Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "type-extractor", "definition"] -2026-06-15T11:12:38.486345Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "alias-replacement"] result=Ok(()) -2026-06-15T11:12:38.486357Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "alias-replacement"] -2026-06-15T11:12:38.486419Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "pre-expansion-name-resolver"] result=Err(Expected trial to pass, but it failed -├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:390:24 -╰╴1 additional opaque attachment) -2026-06-15T11:12:38.486444Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "pre-expansion-name-resolver"] -2026-06-15T11:12:38.486524Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] result=Err(Failed to verify annotation -├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:321:29 -├╴1 additional opaque attachment -│ -╰┬▶ unfulfilled annotation: DiagnosticAnnotation { category: None, severity: Error, message: "Add missing arguments", line: Some(3) } did not match any emitted diagnostics - │ ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:151:25 - │ - ╰▶ unexpected diagnostic: - error[expander::invalid-argument-count]: Invalid argument count - ╭▸ - 3 │ ["::kernel::special_form::access", "x"] - │ ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ expected 2 arguments to `.`, found 1 - │ - ├ help: use `(. value field)` - ╰ note: the first argument is the value and the second is the field name or index - ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:171:21) -2026-06-15T11:12:38.486609Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] -2026-06-15T11:12:38.486928Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "inference"] result=Ok(()) -2026-06-15T11:12:38.486939Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "inference"] -2026-06-15T11:12:38.487234Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "type-extractor", "definition"] result=Ok(()) -2026-06-15T11:12:38.487246Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "type-extractor", "definition"] -2026-06-15T11:12:38.487287Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "pre-expansion-name-resolver"] result=Err(Expected trial to pass, but it failed -├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:390:24 -╰╴1 additional opaque attachment) -2026-06-15T11:12:38.487306Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "pre-expansion-name-resolver"] -2026-06-15T11:12:38.487591Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "alias-replacement"] result=Ok(()) -2026-06-15T11:12:38.487601Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "alias-replacement"] -2026-06-15T11:12:38.487811Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "pre-expansion-name-resolver"] result=Err(Expected trial to pass, but it failed -├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:390:24 -╰╴1 additional opaque attachment) -2026-06-15T11:12:38.487832Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "pre-expansion-name-resolver"] -2026-06-15T11:12:38.488401Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "inference"] result=Ok(()) -2026-06-15T11:12:38.488412Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "inference"] -2026-06-15T11:12:38.488741Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "type-extractor", "definition"] result=Ok(()) -2026-06-15T11:12:38.488754Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "type-extractor", "definition"] -2026-06-15T11:12:38.488809Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "pre-expansion-name-resolver"] result=Err(Expected trial to pass, but it failed -├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:390:24 -╰╴1 additional opaque attachment) -2026-06-15T11:12:38.488830Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "pre-expansion-name-resolver"] -2026-06-15T11:12:38.488966Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "pre-expansion-name-resolver"] result=Err(Expected trial to pass, but it failed -├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:390:24 -╰╴1 additional opaque attachment) -2026-06-15T11:12:38.488987Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "pre-expansion-name-resolver"] -2026-06-15T11:12:38.489541Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] result=Err(Failed to verify annotation -├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:321:29 -├╴1 additional opaque attachment -│ -╰┬▶ unfulfilled annotation: DiagnosticAnnotation { category: None, severity: Error, message: "Remove this duplicate generic parameter 'T'", line: Some(5) } did not match any emitted diagnostics - │ ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:151:25 - │ - ├▶ unexpected diagnostic: - │ error[expander::unresolved-variable]: Unresolved variable - │ ╭▸ - │ 9 │ ["+", "a", "b"] - │ │ ━ cannot find `b` in this scope - │ │ - │ ╰ note: this could be a typo, a name used outside its scope, or a missing declaration; if it is a function or type from another module, you may need to import it first - │ help: a similar imported name exists - │ ╭╴ - │ 9 - ["+", "a", "b"] - │ 9 + ["+", "a", "~↑√∛cbrt"] - │ ╰╴ - │ ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:171:21 - │ - ├▶ unexpected diagnostic: - │ error[expander::unresolved-variable]: Unresolved variable - │ ╭▸ - │ 9 │ ["+", "a", "b"] - │ │ ━ cannot find `a` in this scope - │ │ - │ ╰ note: this could be a typo, a name used outside its scope, or a missing declaration; if it is a function or type from another module, you may need to import it first - │ help: a similar imported name exists - │ ╭╴ - │ 9 - ["+", "a", "b"] - │ 9 + ["+", "↑√∛ccesss", "b"] - │ ╰╴ - │ ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:171:21 - │ - ╰▶ unexpected diagnostic: - error[expander::duplicate-fn-generic]: Duplicate generic parameter - ╭▸ - 5 │ { "#tuple": ["T", "T"] }, - │ ┬ ━ duplicate generic parameter `T` - │ │ - │ `T` was first declared here - │ - ╰ help: remove the duplicate declaration or use a different name - ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:171:21) -2026-06-15T11:12:38.489657Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] -2026-06-15T11:12:38.489876Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "inference"] result=Ok(()) -2026-06-15T11:12:38.489891Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "inference"] -2026-06-15T11:12:38.489824Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "alias-replacement"] result=Err(Failed to verify annotation -├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:321:29 -├╴1 additional opaque attachment -│ -╰┬▶ unfulfilled annotation: DiagnosticAnnotation { category: None, severity: Error, message: "additional type arguments are provided here", line: Some(10) } did not match any emitted diagnostics - │ ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:151:25 - │ - ├▶ unexpected diagnostic: - │ error[lowering::expander::intrinsic-generic-arguments]: Generic arguments on intrinsic - │ ╭▸ - │ 10 │ "foo", - │ │ ━━━━━━━━━━━ `foo` does not accept generic arguments - │ │ - │ ╰ help: remove the generic arguments from `foo` - │ ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:171:21 - │ - ├▶ unexpected diagnostic: - │ error[lowering::expander::intrinsic-generic-arguments]: Generic arguments on intrinsic - │ ╭▸ - │ 6 │ "core::math::add", - │ │ ━━━━━━━━━━━━ `add` does not accept generic arguments - │ │ - │ ╰ help: remove the generic arguments from `add` - │ ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:171:21 - │ - ├▶ unexpected diagnostic: - │ error[lowering::expander::unresolved-variable]: Unresolved variable - │ ╭▸ - │ 10 │ "foo", - │ │ ━━━━━━ cannot find `Number` in this scope - │ │ - │ ├ help: check the spelling, or import the name with a `use` statement - │ ╰ note: this could be a typo, a name used outside its scope, or a missing declaration; if it is a function or type from another module, you may need to import it first - │ ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:171:21 - │ - ╰▶ unexpected diagnostic: - error[lowering::expander::unresolved-variable]: Unresolved variable - ╭▸ - 6 │ "core::math::add", - │ ━━━━━━━ cannot find `Integer` in this scope - │ - ├ help: check the spelling, or import the name with a `use` statement - ╰ note: this could be a typo, a name used outside its scope, or a missing declaration; if it is a function or type from another module, you may need to import it first - ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:171:21) -2026-06-15T11:12:38.489910Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "alias-replacement"] -2026-06-15T11:12:38.489925Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "pre-expansion-name-resolver"] result=Err(Expected trial to pass, but it failed -├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:390:24 -╰╴1 additional opaque attachment) -2026-06-15T11:12:38.489943Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "pre-expansion-name-resolver"] -2026-06-15T11:12:38.489989Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "type-extractor", "definition"] result=Ok(()) -2026-06-15T11:12:38.490000Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "type-extractor", "definition"] -2026-06-15T11:12:38.490181Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "pre-expansion-name-resolver"] result=Err(Expected trial to pass, but it failed -├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:390:24 -╰╴1 additional opaque attachment) -2026-06-15T11:12:38.490202Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "node-renumberer"] -2026-06-15T11:12:38.491244Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "type-extractor", "definition"] result=Ok(()) -2026-06-15T11:12:38.491254Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "type-extractor", "definition"] -2026-06-15T11:12:38.491396Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "alias-replacement"] result=Ok(()) -2026-06-15T11:12:38.491394Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "pre-expansion-name-resolver"] result=Err(Expected trial to pass, but it failed -├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:390:24 -╰╴1 additional opaque attachment) -2026-06-15T11:12:38.491406Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "alias-replacement"] -2026-06-15T11:12:38.491413Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "pre-expansion-name-resolver"] -2026-06-15T11:12:38.491490Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "node-renumberer"] result=Ok(()) -2026-06-15T11:12:38.491500Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "node-renumberer"] -2026-06-15T11:12:38.491637Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] result=Err(Failed to verify annotation -├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:321:29 -├╴1 additional opaque attachment -│ -╰┬▶ unfulfilled annotation: DiagnosticAnnotation { category: None, severity: Error, message: "Remove this argument", line: Some(7) } did not match any emitted diagnostics - │ ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:151:25 - │ - ╰▶ unexpected diagnostic: - error[expander::invalid-argument-count]: Invalid argument count - ╭▸ - 3 │ ┏ [ - 4 │ ┃ "::kernel::special_form::access", - 5 │ ┃ "x", - 6 │ ┃ "y", - 7 │ ┃ "z" - │ ┃ ─ unexpected argument - 8 │ ┃ //~^ ERROR Remove this argument - 9 │ ┃ ] - │ ┗━┛ expected 2 arguments to `.`, found 3 - │ - ├ help: use `(. value field)` - ╰ note: the first argument is the value and the second is the field name or index - ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:171:21) -2026-06-15T11:12:38.491724Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] -2026-06-15T11:12:38.491861Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "inference"] result=Ok(()) -2026-06-15T11:12:38.491876Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "inference"] -2026-06-15T11:12:38.492511Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "type-extractor", "definition"] result=Err(Expected trial to pass, but it failed -├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:390:24 -╰╴1 additional opaque attachment) -2026-06-15T11:12:38.492536Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "type-extractor", "definition"] -2026-06-15T11:12:38.492598Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "pre-expansion-name-resolver"] result=Err(Expected trial to pass, but it failed -├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:390:24 -╰╴1 additional opaque attachment) -2026-06-15T11:12:38.492624Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "inference"] -2026-06-15T11:12:38.492730Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "alias-replacement"] result=Ok(()) -2026-06-15T11:12:38.492741Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "alias-replacement"] -2026-06-15T11:12:38.492817Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "node-renumberer"] result=Ok(()) -2026-06-15T11:12:38.492836Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "node-renumberer"] -2026-06-15T11:12:38.493675Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] result=Err(Failed to verify annotation -├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:321:29 -├╴1 additional opaque attachment -│ -╰┬▶ unfulfilled annotation: DiagnosticAnnotation { category: None, severity: Error, message: "Remove this argument", line: Some(8) } did not match any emitted diagnostics - │ ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:151:25 - │ - ╰▶ unexpected diagnostic: - error[expander::invalid-argument-count]: Invalid argument count - ╭▸ - 3 │ ┏ [ - 4 │ ┃ "::kernel::special_form::input", - 5 │ ┃ "x", - 6 │ ┃ "Y", - 7 │ ┃ "z", - 8 │ ┃ "w" - │ ┃ ─ unexpected argument - 9 │ ┃ //~^ ERROR Remove this argument - 10 │ ┃ ] - │ ┗━┛ expected 2 or 3 arguments to `input`, found 4 - │ - ├ help: use `(input name type)` or `(input name type default)` - ╰ note: the arguments are, in order: the input name, its type, and an optional default value - ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:171:21) -2026-06-15T11:12:38.493768Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] -2026-06-15T11:12:38.493827Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "type-extractor", "definition"] result=Ok(()) -2026-06-15T11:12:38.493842Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "type-extractor", "definition"] -2026-06-15T11:12:38.493892Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "inference"] result=Ok(()) -2026-06-15T11:12:38.493904Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "inference"] -2026-06-15T11:12:38.493913Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "inference"] result=Ok(()) -2026-06-15T11:12:38.493932Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "inference"] -2026-06-15T11:12:38.494044Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "alias-replacement"] result=Ok(()) -2026-06-15T11:12:38.494061Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "alias-replacement"] -2026-06-15T11:12:38.494046Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "node-renumberer"] result=Ok(()) -2026-06-15T11:12:38.494122Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "type-extractor"] -2026-06-15T11:12:38.495265Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "type-extractor", "definition"] result=Ok(()) -2026-06-15T11:12:38.495277Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "type-extractor", "definition"] -2026-06-15T11:12:38.495360Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "alias-replacement"] result=Ok(()) -2026-06-15T11:12:38.495353Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "inference"] result=Err(Expected trial to pass, but it failed -├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:390:24 -╰╴1 additional opaque attachment) -2026-06-15T11:12:38.495381Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "inference"] -2026-06-15T11:12:38.495370Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "alias-replacement"] -2026-06-15T11:12:38.495548Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "type-extractor"] result=Ok(()) -2026-06-15T11:12:38.495560Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "type-extractor"] -2026-06-15T11:12:38.495691Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] result=Err(Failed to verify annotation -├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:321:29 -├╴1 additional opaque attachment -│ -╰┬▶ unfulfilled annotation: DiagnosticAnnotation { category: None, severity: Error, message: "Replace this qualified path with a simple identifier", line: Some(3) } did not match any emitted diagnostics - │ ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:151:25 - │ - ├▶ unfulfilled annotation: DiagnosticAnnotation { category: None, severity: Error, message: "Replace this literal with a type name", line: Some(3) } did not match any emitted diagnostics - │ ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:151:25 - │ - ╰▶ unexpected diagnostic: - error[expander::invalid-binding-name]: Invalid binding name - ╭▸ - 3 │ ["::kernel::special_form::newtype", "::x", { "#literal": 1 }, "x"] - │ ━━━ expected a type name for the `newtype` binding - │ - ├ help: write `(newtype Name type-expr body)` with a name like `UserId` or `Pair` - ╰ note: the first argument to `newtype` introduces a new distinct type and must be a simple identifier, optionally with generic parameters - ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:171:21) -2026-06-15T11:12:38.495775Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] -2026-06-15T11:12:38.496210Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "inference"] result=Ok(()) -2026-06-15T11:12:38.496223Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "inference"] -2026-06-15T11:12:38.496523Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "type-extractor", "definition"] result=Ok(()) -2026-06-15T11:12:38.496537Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "type-extractor", "definition"] -2026-06-15T11:12:38.496662Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "inference"] result=Ok(()) -2026-06-15T11:12:38.496672Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "inference"] -2026-06-15T11:12:38.496859Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "type-extractor"] result=Ok(()) -2026-06-15T11:12:38.496863Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "alias-replacement"] result=Ok(()) -2026-06-15T11:12:38.496877Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "alias-replacement"] -2026-06-15T11:12:38.496878Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-eval" trial=["postgres"] -2026-06-15T11:12:38.497413Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "inference"] result=Ok(()) -2026-06-15T11:12:38.497430Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "type-extractor", "definition"] -2026-06-15T11:12:38.497839Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "type-extractor", "definition"] result=Ok(()) -2026-06-15T11:12:38.497856Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "alias-replacement"] -2026-06-15T11:12:38.498062Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "inference"] result=Ok(()) -2026-06-15T11:12:38.498079Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "inference"] -2026-06-15T11:12:38.498102Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "alias-replacement"] result=Ok(()) -2026-06-15T11:12:38.498116Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-mir" trial=["pass", "dse"] -2026-06-15T11:12:38.498645Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "type-extractor", "definition"] result=Ok(()) -2026-06-15T11:12:38.498653Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "type-extractor", "definition"] -2026-06-15T11:12:38.498866Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] result=Err(Failed to verify annotation -├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:321:29 -├╴1 additional opaque attachment -│ -╰┬▶ unfulfilled annotation: DiagnosticAnnotation { category: None, severity: Error, message: "Remove this duplicate parameter 'a'", line: Some(6) } did not match any emitted diagnostics - │ ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:151:25 - │ - ├▶ unexpected diagnostic: - │ error[expander::unresolved-variable]: Unresolved variable - │ ╭▸ - │ 9 │ ["+", "a", "b"] - │ │ ━ cannot find `b` in this scope - │ │ - │ ╰ note: this could be a typo, a name used outside its scope, or a missing declaration; if it is a function or type from another module, you may need to import it first - │ help: a similar local binding exists - │ ╭╴ - │ 9 - ["+", "a", "b"] - │ 9 + ["+", "a", "a"] - │ ╰╴ - │ help: a similar imported name exists - │ ╭╴ - │ 9 - ["+", "a", "b"] - │ 9 + ["+", "a", "~↑√∛cbrt"] - │ ╰╴ - │ ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:171:21 - │ - ├▶ unexpected diagnostic: - │ error[expander::unresolved-variable]: Unresolved variable - │ ╭▸ - │ 6 │ { "#struct": { "a": "Int", "a": "Int" } }, - │ │ ━━━ cannot find `Int` in this scope - │ │ - │ ├ help: check the spelling, or import the name with a `use` statement - │ ╰ note: this could be a typo, a name used outside its scope, or a missing declaration; if it is a function or type from another module, you may need to import it first - │ ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:171:21 - │ - ├▶ unexpected diagnostic: - │ error[expander::duplicate-fn-parameter]: Duplicate function parameter - │ ╭▸ - │ 6 │ { "#struct": { "a": "Int", "a": "Int" } }, - │ │ ┬───────── ━━━━━━━━━━ duplicate parameter `a` - │ │ │ - │ │ `a` was first declared here - │ │ - │ ╰ help: remove the duplicate parameter or use a different name - │ ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:171:21 - │ - ╰▶ unexpected diagnostic: - error[expander::unresolved-variable]: Unresolved variable - ╭▸ - 6 │ { "#struct": { "a": "Int", "a": "Int" } }, - │ ━━━ cannot find `Int` in this scope - │ - ├ help: check the spelling, or import the name with a `use` statement - ╰ note: this could be a typo, a name used outside its scope, or a missing declaration; if it is a function or type from another module, you may need to import it first - ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:171:21) -2026-06-15T11:12:38.498955Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] -2026-06-15T11:12:38.499201Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "alias-replacement"] result=Err(Expected trial to pass, but it failed -├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:390:24 -╰╴1 additional opaque attachment) -2026-06-15T11:12:38.499259Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "checking"] -2026-06-15T11:12:38.499487Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "inference"] result=Ok(()) -2026-06-15T11:12:38.499499Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "inference"] -2026-06-15T11:12:38.499589Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-mir" trial=["pass", "dse"] result=Ok(()) -2026-06-15T11:12:38.499598Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-mir" trial=["pass", "cfg_simplify"] -2026-06-15T11:12:38.499937Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "type-extractor", "definition"] result=Ok(()) -2026-06-15T11:12:38.499951Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "type-extractor", "definition"] -2026-06-15T11:12:38.500395Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] result=Err(Expected trial to pass, but it failed -├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:390:24 -╰╴1 additional opaque attachment) -2026-06-15T11:12:38.500452Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] -2026-06-15T11:12:38.500776Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "checking"] result=Ok(()) -2026-06-15T11:12:38.500788Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "checking"] -2026-06-15T11:12:38.500869Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "inference"] result=Ok(()) -2026-06-15T11:12:38.500881Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "inference", "intrinsics"] -2026-06-15T11:12:38.501340Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "type-extractor", "definition"] result=Ok(()) -2026-06-15T11:12:38.501356Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "checking"] -2026-06-15T11:12:38.501379Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-mir" trial=["pass", "cfg_simplify"] result=Ok(()) -2026-06-15T11:12:38.501394Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-mir" trial=["pass", "cfg_simplify"] -2026-06-15T11:12:38.502200Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "inference", "intrinsics"] result=Ok(()) -2026-06-15T11:12:38.502214Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "inference", "intrinsics"] -2026-06-15T11:12:38.502307Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "checking"] result=Err(Expected trial to pass, but it failed -├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:390:24 -╰╴1 additional opaque attachment) -2026-06-15T11:12:38.502340Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "checking"] -2026-06-15T11:12:38.502369Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] result=Err(Failed to verify annotation -├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:321:29 -├╴1 additional opaque attachment -│ -╰┬▶ unfulfilled annotation: DiagnosticAnnotation { category: None, severity: Error, message: "Add missing arguments", line: Some(3) } did not match any emitted diagnostics - │ ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:151:25 - │ - ╰▶ unexpected diagnostic: - error[expander::invalid-argument-count]: Invalid argument count - ╭▸ - 3 │ ["::kernel::special_form::fn", { "#tuple": [] }, { "#struct": {} }, "_"] - │ ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ expected 4 arguments to `fn`, found 3 - │ - ├ help: use `(fn generics params return-type body)` - ╰ note: the arguments are, in order: the generic parameters (a tuple or struct), the function parameters (a struct), the return type, and the body expression - ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:171:21) -2026-06-15T11:12:38.502457Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-eval" trial=["postgres"] -2026-06-15T11:12:38.502809Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "checking"] result=Ok(()) -2026-06-15T11:12:38.502821Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "checking"] -2026-06-15T11:12:38.503282Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-mir" trial=["pass", "cfg_simplify"] result=Ok(()) -2026-06-15T11:12:38.503309Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-mir" trial=["pass", "cfg_simplify"] -2026-06-15T11:12:38.503544Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "inference", "intrinsics"] result=Ok(()) -2026-06-15T11:12:38.503554Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "inference", "intrinsics"] -2026-06-15T11:12:38.503805Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "checking"] result=Ok(()) -2026-06-15T11:12:38.503818Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "checking"] -2026-06-15T11:12:38.504680Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "inference", "intrinsics"] result=Ok(()) -2026-06-15T11:12:38.504696Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-mir" trial=["pass", "cfg_simplify"] -2026-06-15T11:12:38.505335Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "checking"] result=Ok(()) -2026-06-15T11:12:38.505353Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "checking"] -2026-06-15T11:12:38.505945Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-mir" trial=["pass", "cfg_simplify"] result=Ok(()) -2026-06-15T11:12:38.505978Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "checking"] -2026-06-15T11:12:38.506082Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-mir" trial=["pass", "cfg_simplify"] result=Ok(()) -2026-06-15T11:12:38.506092Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-mir" trial=["pass", "cfg_simplify"] -2026-06-15T11:12:38.506232Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "checking"] result=Ok(()) -2026-06-15T11:12:38.506250Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "checking"] -2026-06-15T11:12:38.506640Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "checking"] result=Ok(()) -2026-06-15T11:12:38.506650Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "checking"] -2026-06-15T11:12:38.507591Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-mir" trial=["pass", "inline"] result=Ok(()) -2026-06-15T11:12:38.507606Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-eval" trial=["postgres"] -2026-06-15T11:12:38.507816Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "checking"] result=Ok(()) -2026-06-15T11:12:38.507847Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "checking"] -2026-06-15T11:12:38.507931Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-mir" trial=["pass", "cfg_simplify"] result=Ok(()) -2026-06-15T11:12:38.507952Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "checking"] result=Ok(()) -2026-06-15T11:12:38.507968Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "checking"] -2026-06-15T11:12:38.507956Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-mir" trial=["pass", "cfg_simplify"] -2026-06-15T11:12:38.508222Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "checking"] result=Ok(()) -2026-06-15T11:12:38.508232Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "checking"] -2026-06-15T11:12:38.509311Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "checking"] result=Ok(()) -2026-06-15T11:12:38.509325Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "checking"] -2026-06-15T11:12:38.509455Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "checking"] result=Err(Expected trial to pass, but it failed -├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:390:24 -╰╴1 additional opaque attachment) -2026-06-15T11:12:38.509493Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "checking"] -2026-06-15T11:12:38.509470Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "checking"] result=Err(Expected trial to pass, but it failed -├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:390:24 -╰╴1 additional opaque attachment) -2026-06-15T11:12:38.509673Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "checking"] -2026-06-15T11:12:38.510767Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "checking"] result=Ok(()) -2026-06-15T11:12:38.510782Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "checking"] -2026-06-15T11:12:38.510989Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "checking"] result=Ok(()) -2026-06-15T11:12:38.510998Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "checking"] -2026-06-15T11:12:38.511244Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "checking"] result=Ok(()) -2026-06-15T11:12:38.511259Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "checking"] -2026-06-15T11:12:38.512169Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "checking"] result=Err(Expected trial to pass, but it failed -├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:390:24 -╰╴1 additional opaque attachment) -2026-06-15T11:12:38.512212Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "checking"] -2026-06-15T11:12:38.512238Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "checking"] result=Err(Expected trial to pass, but it failed -├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:390:24 -╰╴1 additional opaque attachment) -2026-06-15T11:12:38.512264Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "checking"] -2026-06-15T11:12:38.512492Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "checking"] result=Ok(()) -2026-06-15T11:12:38.512500Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "graph-hoisting"] -2026-06-15T11:12:38.513528Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "checking"] result=Ok(()) -2026-06-15T11:12:38.513536Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "checking"] -2026-06-15T11:12:38.513729Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "checking"] result=Ok(()) -2026-06-15T11:12:38.513747Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "checking"] -2026-06-15T11:12:38.515022Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "checking"] result=Ok(()) -2026-06-15T11:12:38.515036Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "checking"] -2026-06-15T11:12:38.516032Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "checking"] result=Ok(()) -2026-06-15T11:12:38.516058Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "checking"] -2026-06-15T11:12:38.516660Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "checking"] result=Err(Expected trial to pass, but it failed -├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:390:24 -╰╴1 additional opaque attachment) -2026-06-15T11:12:38.516722Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "checking"] -2026-06-15T11:12:38.517272Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "checking"] result=Ok(()) -2026-06-15T11:12:38.517282Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "checking"] -2026-06-15T11:12:38.518423Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "checking"] result=Ok(()) -2026-06-15T11:12:38.518431Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "checking"] -2026-06-15T11:12:38.519765Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "checking"] result=Ok(()) -2026-06-15T11:12:38.519783Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-mir" trial=["pass", "inst_simplify"] -2026-06-15T11:12:38.519832Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "checking"] result=Err(Failed to verify annotation -├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:321:29 -├╴1 additional opaque attachment -│ -╰┬▶ unfulfilled annotation: DiagnosticAnnotation { category: None, severity: Error, message: "Type variable has incompatible upper and lower bounds", line: Some(3) } did not match any emitted diagnostics - │ ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:151:25 - │ - ├▶ unexpected diagnostic: - │ error[lowering::type-extractor::unbound-type-variable]: Unbound type variable - │ ╭▸ - │ 3 │ ["newtype", "Person", "T", ["Person", { "#literal": "2" }]] - │ │ ━━━━━━ Cannot find type 'Number' - │ │ - │ ├ note: This is likely a compiler bug in the name resolution system. The type checker has encountered a name that wasn't properly resolved earlier in compilation. The name resolution pass should have caught this error or provided a more specific error message. - │ ├ help: This is a bug in the compiler, not an issue with your code. - │ ├ help: Please report this issue along with a minimal code example that reproduces the error. - │ ╰ note: Internal compiler errors indicate a bug in the compiler itself that needs to be fixed. - │ - │ We would appreciate if you could file a GitHub or Linear issue and reference this error. - │ - │ When reporting this issue, please include your query, any relevant type definitions, and the complete error message shown above. - │ ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:171:21 - │ - ├▶ unexpected diagnostic: - │ error[lowering::type-extractor::unused-generic-parameter]: Generic parameter not used in type definition - │ ╭▸ - │ 1 │ //@ run: fail - │ │ ─ ...but never used in this type definition - │ 2 │ //@ description: Checks that type constructor bounded generic parameter (T: Number) violation is caught during type checking. - │ 3 │ ["newtype", "Person", "T", ["Person", { "#literal": "2" }]] - │ │ ━━━━━━━━━ Generic parameter `T` declared here... - │ │ - │ ├ help: Generic parameter `T` is declared but not referenced. Either remove the unused parameter or incorporate it into your type definition. - │ ╰ note: Each generic parameter should serve a purpose in parameterizing the type. Unused parameters can make code harder to understand and may indicate a design oversight or incomplete implementation. They are unconstrained variables, and therefore considered erroneous. - │ ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:171:21 - │ - ╰▶ unexpected diagnostic: - error[lowering::expander::unresolved-variable]: Unresolved variable - ╭▸ - 3 │ ["newtype", "Person", "T", ["Person", { "#literal": "2" }]] - │ ━━━━━━ cannot find `Number` in this scope - │ - ├ help: check the spelling, or import the name with a `use` statement - ╰ note: this could be a typo, a name used outside its scope, or a missing declaration; if it is a function or type from another module, you may need to import it first - ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:171:21) -2026-06-15T11:12:38.519939Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "checking"] -2026-06-15T11:12:38.520257Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-mir" trial=["pass", "inline"] result=Ok(()) -2026-06-15T11:12:38.520269Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-mir" trial=["pass", "inline"] -2026-06-15T11:12:38.521259Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-mir" trial=["pass", "inst_simplify"] result=Ok(()) -2026-06-15T11:12:38.521274Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-mir" trial=["pass", "data-dependency"] -2026-06-15T11:12:38.521423Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-eval" trial=["postgres"] result=Ok(()) -2026-06-15T11:12:38.521452Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "checking"] -2026-06-15T11:12:38.521778Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "checking"] result=Err(Failed to verify annotation -├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:321:29 -├╴1 additional opaque attachment -│ -╰┬▶ unfulfilled annotation: DiagnosticAnnotation { category: None, severity: Error, message: "This closure requires exactly 2 generic arguments", line: Some(14) } did not match any emitted diagnostics - │ ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:151:25 - │ - ╰▶ unexpected diagnostic: - error[lowering::expander::unresolved-variable]: Unresolved variable - ╭▸ - 14 │ "foo", - │ ━━━━━━━ cannot find `Integer` in this scope - │ - ├ help: check the spelling, or import the name with a `use` statement - ╰ note: this could be a typo, a name used outside its scope, or a missing declaration; if it is a function or type from another module, you may need to import it first - ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:171:21) -2026-06-15T11:12:38.521833Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["reify"] -2026-06-15T11:12:38.522421Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-mir" trial=["pass", "data-dependency"] result=Ok(()) -2026-06-15T11:12:38.522430Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-mir" trial=["pass", "data-dependency"] -2026-06-15T11:12:38.523089Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["reify"] result=Ok(()) -2026-06-15T11:12:38.523080Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "checking"] result=Err(Expected trial to pass, but it failed -├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:390:24 -╰╴1 additional opaque attachment) -2026-06-15T11:12:38.523101Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["reify"] -2026-06-15T11:12:38.523110Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "checking"] -2026-06-15T11:12:38.524345Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["reify"] result=Err(Expected trial to pass, but it failed -├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:390:24 -╰╴1 additional opaque attachment) -2026-06-15T11:12:38.524373Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["reify"] -2026-06-15T11:12:38.524641Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "checking"] result=Ok(()) -2026-06-15T11:12:38.524654Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "checking"] -2026-06-15T11:12:38.526240Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["reify"] result=Ok(()) -2026-06-15T11:12:38.526261Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["reify"] -2026-06-15T11:12:38.526273Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "checking"] result=Err(Expected trial to pass, but it failed -├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:390:24 -╰╴1 additional opaque attachment) -2026-06-15T11:12:38.526311Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "checking"] -2026-06-15T11:12:38.527529Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["reify"] result=Ok(()) -2026-06-15T11:12:38.527543Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["reify"] -2026-06-15T11:12:38.527633Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "checking"] result=Err(Expected trial to pass, but it failed -├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:390:24 -╰╴1 additional opaque attachment) -2026-06-15T11:12:38.527665Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "checking"] -2026-06-15T11:12:38.528804Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["reify"] result=Ok(()) -2026-06-15T11:12:38.528813Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["reify"] -2026-06-15T11:12:38.529437Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "checking"] result=Ok(()) -2026-06-15T11:12:38.529454Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-eval" trial=["postgres"] -2026-06-15T11:12:38.529865Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["reify"] result=Ok(()) -2026-06-15T11:12:38.529873Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["reify"] -2026-06-15T11:12:38.530060Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "checking"] result=Ok(()) -2026-06-15T11:12:38.530080Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "checking"] -2026-06-15T11:12:38.530936Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["reify"] result=Ok(()) -2026-06-15T11:12:38.530945Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["reify"] -2026-06-15T11:12:38.531990Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["reify"] result=Ok(()) -2026-06-15T11:12:38.531999Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["reify"] -2026-06-15T11:12:38.532259Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "checking"] result=Ok(()) -2026-06-15T11:12:38.532287Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-eval" trial=["postgres"] -2026-06-15T11:12:38.533084Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["reify"] result=Ok(()) -2026-06-15T11:12:38.533093Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["reify"] -2026-06-15T11:12:38.534169Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["reify"] result=Ok(()) -2026-06-15T11:12:38.534178Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["reify"] -2026-06-15T11:12:38.536540Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["reify"] result=Ok(()) -2026-06-15T11:12:38.536570Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["reify"] -2026-06-15T11:12:38.538194Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["reify"] result=Ok(()) -2026-06-15T11:12:38.538222Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["reify"] -2026-06-15T11:12:38.539807Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["reify"] result=Err(Expected trial to pass, but it failed -├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:390:24 -╰╴1 additional opaque attachment) -2026-06-15T11:12:38.539869Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["reify"] -2026-06-15T11:12:38.541402Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["reify"] result=Ok(()) -2026-06-15T11:12:38.541434Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["reify"] -2026-06-15T11:12:38.542861Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["reify"] result=Ok(()) -2026-06-15T11:12:38.542881Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["reify"] -2026-06-15T11:12:38.544411Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["reify"] result=Ok(()) -2026-06-15T11:12:38.544434Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["reify"] -2026-06-15T11:12:38.545977Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["reify"] result=Ok(()) -2026-06-15T11:12:38.546005Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["reify"] -2026-06-15T11:12:38.547408Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["reify"] result=Ok(()) -2026-06-15T11:12:38.547433Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["reify"] -2026-06-15T11:12:38.550066Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["reify"] result=Ok(()) -2026-06-15T11:12:38.550091Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["reify"] -2026-06-15T11:12:38.551344Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["reify"] result=Ok(()) -2026-06-15T11:12:38.551354Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "specialization"] -2026-06-15T11:12:38.572933Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-mir" trial=["pass", "data-dependency"] result=Ok(()) -2026-06-15T11:12:38.572966Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-mir" trial=["pass", "data-dependency"] -2026-06-15T11:12:38.573080Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-eval" trial=["postgres"] result=Ok(()) -2026-06-15T11:12:38.573116Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-mir" trial=["pass", "data-dependency"] -2026-06-15T11:12:38.574854Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-mir" trial=["pass", "data-dependency"] result=Ok(()) -2026-06-15T11:12:38.574870Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-mir" trial=["pass", "data-dependency"] -2026-06-15T11:12:38.575941Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-mir" trial=["pass", "data-dependency"] result=Ok(()) -2026-06-15T11:12:38.575960Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-mir" trial=["pass", "data-dependency"] -2026-06-15T11:12:38.576337Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-eval" trial=["postgres"] result=Ok(()) -2026-06-15T11:12:38.576359Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-eval" trial=["postgres"] -2026-06-15T11:12:38.576730Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-mir" trial=["pass", "data-dependency"] result=Ok(()) -2026-06-15T11:12:38.576749Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-mir" trial=["pass", "data-dependency"] -2026-06-15T11:12:38.577418Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-mir" trial=["pass", "data-dependency"] result=Ok(()) -2026-06-15T11:12:38.577431Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-mir" trial=["pass", "data-dependency"] -2026-06-15T11:12:38.578854Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-mir" trial=["pass", "data-dependency"] result=Ok(()) -2026-06-15T11:12:38.578875Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-mir" trial=["pass", "data-dependency"] -2026-06-15T11:12:38.579033Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-mir" trial=["pass", "data-dependency"] result=Ok(()) -2026-06-15T11:12:38.579047Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-mir" trial=["pass", "data-dependency"] -2026-06-15T11:12:38.580677Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-mir" trial=["pass", "data-dependency"] result=Ok(()) -2026-06-15T11:12:38.580696Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-mir" trial=["pass", "data-dependency"] -2026-06-15T11:12:38.580751Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-mir" trial=["pass", "data-dependency"] result=Ok(()) -2026-06-15T11:12:38.580775Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-mir" trial=["pass", "data-dependency"] -2026-06-15T11:12:38.582146Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-mir" trial=["pass", "data-dependency"] result=Ok(()) -2026-06-15T11:12:38.582156Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-mir" trial=["pass", "data-dependency"] -2026-06-15T11:12:38.582515Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-mir" trial=["pass", "data-dependency"] result=Ok(()) -2026-06-15T11:12:38.582535Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-mir" trial=["pass", "data-dependency"] -2026-06-15T11:12:38.584320Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-mir" trial=["pass", "data-dependency"] result=Ok(()) -2026-06-15T11:12:38.584349Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-eval" trial=["postgres"] -2026-06-15T11:12:38.603749Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-mir" trial=["pass", "data-dependency"] result=Ok(()) -2026-06-15T11:12:38.603784Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-mir" trial=["pass", "data-dependency"] -2026-06-15T11:12:38.606454Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-mir" trial=["pass", "data-dependency"] result=Ok(()) -2026-06-15T11:12:38.606482Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-mir" trial=["pass", "data-dependency"] -2026-06-15T11:12:38.608405Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-mir" trial=["pass", "data-dependency"] result=Ok(()) -2026-06-15T11:12:38.608430Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-mir" trial=["interpret"] -2026-06-15T11:12:38.611737Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-mir" trial=["interpret"] result=Ok(()) -2026-06-15T11:12:38.611772Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-eval" trial=["postgres"] -2026-06-15T11:12:38.614972Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "checking"] result=Ok(()) -2026-06-15T11:12:38.615095Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-mir" trial=["pass", "cfg_simplify"] -2026-06-15T11:12:38.621887Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-mir" trial=["pass", "cfg_simplify"] result=Ok(()) -2026-06-15T11:12:38.621912Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-mir" trial=["pass", "cfg_simplify"] -2026-06-15T11:12:38.623875Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-mir" trial=["pass", "cfg_simplify"] result=Ok(()) -2026-06-15T11:12:38.623908Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-eval" trial=["postgres"] -2026-06-15T11:12:38.641710Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-eval" trial=["postgres"] result=Ok(()) -2026-06-15T11:12:38.641737Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-eval" trial=["postgres"] -2026-06-15T11:12:38.644930Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "specialization"] result=Ok(()) -2026-06-15T11:12:38.644960Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "specialization"] -2026-06-15T11:12:38.646841Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "specialization"] result=Ok(()) -2026-06-15T11:12:38.646855Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "specialization"] -2026-06-15T11:12:38.648302Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-eval" trial=["postgres"] result=Ok(()) -2026-06-15T11:12:38.648325Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-eval" trial=["postgres"] -2026-06-15T11:12:38.648633Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "specialization"] result=Err(Failed to verify annotation -├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:321:29 -├╴1 additional opaque attachment -│ -╰┬▶ unfulfilled annotation: DiagnosticAnnotation { category: None, severity: Error, message: "This is not a graph intrinsic operation", line: Some(6) } did not match any emitted diagnostics - │ ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:151:25 - │ - ╰▶ unexpected diagnostic: - error[lowering::expander::unresolved-variable]: Unresolved variable - ╭▸ - 6 │ ["fn", { "#tuple": [] }, { "#struct": { "graph": "_" } }, "_", "graph"], - │ ━━━━━ cannot find `graph` in this scope - │ - ├ help: check the spelling, or import the name with a `use` statement - ╰ note: this could be a typo, a name used outside its scope, or a missing declaration; if it is a function or type from another module, you may need to import it first - ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:171:21) -2026-06-15T11:12:38.648703Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "specialization"] -2026-06-15T11:12:38.651853Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-mir" trial=["pass", "inline"] result=Ok(()) -2026-06-15T11:12:38.651878Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-mir" trial=["pass", "inline"] -2026-06-15T11:12:38.654346Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-mir" trial=["pass", "inline"] result=Ok(()) -2026-06-15T11:12:38.654365Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-mir" trial=["pass", "inline"] -2026-06-15T11:12:38.654976Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-eval" trial=["postgres"] result=Ok(()) -2026-06-15T11:12:38.654995Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-eval" trial=["postgres"] -2026-06-15T11:12:38.656252Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-mir" trial=["pass", "inline"] result=Ok(()) -2026-06-15T11:12:38.656278Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-eval" trial=["postgres"] -2026-06-15T11:12:38.660270Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-eval" trial=["postgres"] result=Ok(()) -2026-06-15T11:12:38.660294Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-eval" trial=["postgres"] -2026-06-15T11:12:38.675560Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-eval" trial=["postgres"] result=Ok(()) -2026-06-15T11:12:38.675591Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-eval" trial=["postgres"] -2026-06-15T11:12:38.685793Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-eval" trial=["postgres"] result=Ok(()) -2026-06-15T11:12:38.685834Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-mir" trial=["pass", "data-dependency"] -2026-06-15T11:12:38.688218Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-mir" trial=["pass", "data-dependency"] result=Ok(()) -2026-06-15T11:12:38.688248Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-mir" trial=["pass", "data-dependency"] -2026-06-15T11:12:38.690214Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-mir" trial=["pass", "data-dependency"] result=Ok(()) -2026-06-15T11:12:38.690246Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-eval" trial=["postgres"] -2026-06-15T11:12:38.715894Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-eval" trial=["postgres"] result=Ok(()) -2026-06-15T11:12:38.717571Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-eval" trial=["postgres"] result=Ok(()) -2026-06-15T11:12:38.717670Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "specialization"] -2026-06-15T11:12:38.720441Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-eval" trial=["postgres"] -2026-06-15T11:12:38.720767Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "specialization"] result=Ok(()) -2026-06-15T11:12:38.720804Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "specialization"] -2026-06-15T11:12:38.722784Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "specialization"] result=Ok(()) -2026-06-15T11:12:38.722811Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "specialization"] -2026-06-15T11:12:38.723597Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "graph-hoisting"] result=Ok(()) -2026-06-15T11:12:38.723900Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "graph-hoisting"] -2026-06-15T11:12:38.728623Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-eval" trial=["postgres"] result=Ok(()) -2026-06-15T11:12:38.728651Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-eval" trial=["postgres"] -2026-06-15T11:12:38.737636Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-eval" trial=["postgres"] result=Ok(()) -2026-06-15T11:12:38.737673Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-mir" trial=["reify"] -2026-06-15T11:12:38.737636Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-eval" trial=["postgres"] result=Ok(()) -2026-06-15T11:12:38.737927Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-mir" trial=["reify"] -2026-06-15T11:12:38.739652Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-mir" trial=["reify"] result=Ok(()) -2026-06-15T11:12:38.739668Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-mir" trial=["reify"] -2026-06-15T11:12:38.741160Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-mir" trial=["reify"] result=Ok(()) -2026-06-15T11:12:38.741178Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-mir" trial=["reify"] -2026-06-15T11:12:38.742799Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-mir" trial=["reify"] result=Ok(()) -2026-06-15T11:12:38.742810Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-mir" trial=["reify"] -2026-06-15T11:12:38.743943Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-mir" trial=["reify"] result=Ok(()) -2026-06-15T11:12:38.743955Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["reify"] -2026-06-15T11:12:38.745094Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["reify"] result=Err(Expected trial to pass, but it failed -├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:390:24 -╰╴1 additional opaque attachment) -2026-06-15T11:12:38.745136Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["reify"] -2026-06-15T11:12:38.745620Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "specialization"] result=Ok(()) -2026-06-15T11:12:38.745647Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "specialization"] -2026-06-15T11:12:38.746217Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["reify"] result=Ok(()) -2026-06-15T11:12:38.746227Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["reify"] -2026-06-15T11:12:38.747395Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "specialization"] result=Ok(()) -2026-06-15T11:12:38.747411Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "specialization"] -2026-06-15T11:12:38.747434Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-eval" trial=["postgres"] result=Ok(()) -2026-06-15T11:12:38.747454Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-eval" trial=["postgres"] -2026-06-15T11:12:38.747395Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["reify"] result=Ok(()) -2026-06-15T11:12:38.747513Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["reify"] -2026-06-15T11:12:38.752709Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-eval" trial=["postgres"] result=Ok(()) -2026-06-15T11:12:38.752740Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "specialization"] -2026-06-15T11:12:38.753349Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["reify"] result=Ok(()) -2026-06-15T11:12:38.753436Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["reify"] -2026-06-15T11:12:38.754204Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-eval" trial=["postgres"] result=Ok(()) -2026-06-15T11:12:38.754229Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-mir" trial=["reify"] -2026-06-15T11:12:38.754585Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-mir" trial=["reify"] result=Ok(()) -2026-06-15T11:12:38.754606Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-mir" trial=["reify"] -2026-06-15T11:12:38.754776Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "specialization"] result=Ok(()) -2026-06-15T11:12:38.754790Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "thunking"] -2026-06-15T11:12:38.755034Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "specialization"] result=Ok(()) -2026-06-15T11:12:38.755054Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "graph-hoisting"] -2026-06-15T11:12:38.755338Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["reify"] result=Ok(()) -2026-06-15T11:12:38.755388Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "graph-hoisting"] -2026-06-15T11:12:38.755994Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "thunking"] result=Ok(()) -2026-06-15T11:12:38.756006Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "thunking"] -2026-06-15T11:12:38.756092Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-mir" trial=["reify"] result=Ok(()) -2026-06-15T11:12:38.756103Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-mir" trial=["reify"] -2026-06-15T11:12:38.756145Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-mir" trial=["reify"] result=Ok(()) -2026-06-15T11:12:38.756160Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-mir" trial=["reify"] -2026-06-15T11:12:38.757623Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-mir" trial=["reify"] result=Ok(()) -2026-06-15T11:12:38.757637Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-mir" trial=["reify"] -2026-06-15T11:12:38.757954Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-mir" trial=["reify"] result=Ok(()) -2026-06-15T11:12:38.757968Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-mir" trial=["reify"] -2026-06-15T11:12:38.757968Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "thunking"] result=Ok(()) -2026-06-15T11:12:38.758045Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "thunking"] -2026-06-15T11:12:38.759282Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-mir" trial=["reify"] result=Err(Expected trial to pass, but it failed -├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:390:24 -╰╴1 additional opaque attachment) -2026-06-15T11:12:38.759325Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-mir" trial=["reify"] -2026-06-15T11:12:38.759395Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-mir" trial=["reify"] result=Ok(()) -2026-06-15T11:12:38.759409Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-mir" trial=["reify"] -2026-06-15T11:12:38.759534Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "thunking"] result=Ok(()) -2026-06-15T11:12:38.759545Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "thunking"] -2026-06-15T11:12:38.761044Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "thunking"] result=Ok(()) -2026-06-15T11:12:38.761059Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-mir" trial=["reify"] result=Ok(()) -2026-06-15T11:12:38.761080Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "name-mangler"] -2026-06-15T11:12:38.762328Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-mir" trial=["reify"] result=Ok(()) -2026-06-15T11:12:38.762343Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-mir" trial=["reify"] -2026-06-15T11:12:38.761064Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "graph-hoisting"] -2026-06-15T11:12:38.765652Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-eval" trial=["postgres"] result=Ok(()) -2026-06-15T11:12:38.765673Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "graph-hoisting"] -2026-06-15T11:12:38.766185Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "name-mangler"] result=Err(Expected trial to pass, but it failed -├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:390:24 -╰╴1 additional opaque attachment) -2026-06-15T11:12:38.768751Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "graph-hoisting"] result=Ok(()) -2026-06-15T11:12:38.768781Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "graph-hoisting"] -2026-06-15T11:12:38.770006Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "name-mangler"] -2026-06-15T11:12:38.771869Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "name-mangler"] result=Ok(()) -2026-06-15T11:12:38.771896Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "name-mangler"] -2026-06-15T11:12:38.776160Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "name-mangler"] result=Err(Expected trial to pass, but it failed -├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:390:24 -╰╴1 additional opaque attachment) -2026-06-15T11:12:38.776230Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "name-mangler"] -2026-06-15T11:12:38.777492Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "name-mangler"] result=Err(Expected trial to pass, but it failed -├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:390:24 -╰╴1 additional opaque attachment) -2026-06-15T11:12:38.777521Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "name-mangler"] -2026-06-15T11:12:38.780694Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "specialization"] result=Ok(()) -2026-06-15T11:12:38.780716Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-mir" trial=["reify"] -2026-06-15T11:12:38.782154Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-mir" trial=["reify"] result=Ok(()) -2026-06-15T11:12:38.782162Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-mir" trial=["reify"] -2026-06-15T11:12:38.782930Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "name-mangler"] result=Ok(()) -2026-06-15T11:12:38.782963Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-mir" trial=["reify"] -2026-06-15T11:12:38.783281Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-mir" trial=["reify"] result=Ok(()) -2026-06-15T11:12:38.783295Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "graph-hoisting"] -2026-06-15T11:12:38.785176Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-mir" trial=["reify"] result=Ok(()) -2026-06-15T11:12:38.785199Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-mir" trial=["reify"] -2026-06-15T11:12:38.787210Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-mir" trial=["reify"] result=Ok(()) -2026-06-15T11:12:38.787238Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "graph-hoisting"] -2026-06-15T11:12:38.788956Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-eval" trial=["postgres"] result=Ok(()) -2026-06-15T11:12:38.788976Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "name-mangler"] -2026-06-15T11:12:38.790226Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "name-mangler"] result=Err(Expected trial to pass, but it failed -├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:390:24 -╰╴1 additional opaque attachment) -2026-06-15T11:12:38.790278Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "graph-hoisting"] -2026-06-15T11:12:38.792121Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "graph-hoisting"] result=Ok(()) -2026-06-15T11:12:38.796829Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-eval" trial=["postgres"] result=Ok(()) -2026-06-15T11:12:38.799285Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "graph-hoisting"] result=Ok(()) -2026-06-15T11:12:38.799594Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "graph-hoisting"] result=Ok(()) -2026-06-15T11:12:38.801740Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-eval" trial=["postgres"] result=Ok(()) -2026-06-15T11:12:38.812871Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "graph-hoisting"] result=Ok(()) -2026-06-15T11:12:38.816183Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "graph-hoisting"] result=Ok(()) -2026-06-15T11:12:38.829313Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "graph-hoisting"] result=Ok(()) -2026-06-15T11:12:38.831402Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-eval" trial=["postgres"] result=Ok(()) -2026-06-15T11:12:38.844445Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "graph-hoisting"] result=Ok(()) -2026-06-15T11:12:38.845257Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-mir" trial=["reify"] result=Ok(()) -2026-06-15T11:12:38.861509Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "graph-hoisting"] result=Ok(()) -2026-06-15T11:12:39.277419Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-mir" trial=["pass", "inst_simplify"] result=Ok(()) -2026-06-15T11:12:39.331580Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-mir" trial=["pass", "dse"] result=Ok(()) -2026-06-15T11:12:39.345206Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-mir" trial=["pass", "cfg_simplify"] result=Ok(()) -2026-06-15T11:12:39.546104Z  INFO run{namespace="reify" name="nested-if"}: hashql_compiletest::suite::mir_reify: time taken to generate diagram: 1.082437583s -2026-06-15T11:12:39.546460Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-mir" trial=["reify"] result=Ok(()) -2026-06-15T11:12:39.662257Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-mir" trial=["pass", "forward_substitution"] result=Ok(()) -2026-06-15T11:12:39.662280Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-mir" trial=["pass", "forward_substitution"] -2026-06-15T11:12:39.664519Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-mir" trial=["pass", "forward_substitution"] result=Ok(()) -2026-06-15T11:12:39.664537Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-mir" trial=["pass", "forward_substitution"] -2026-06-15T11:12:39.666354Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-mir" trial=["pass", "forward_substitution"] result=Ok(()) -2026-06-15T11:12:39.666374Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-mir" trial=["pass", "forward_substitution"] -2026-06-15T11:12:39.668496Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-mir" trial=["pass", "forward_substitution"] result=Ok(()) -2026-06-15T11:12:43.973382Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-mir" trial=["pass", "post_inline"] result=Ok(()) -[FAIL] hashql-ast::lower::name-mangler::diverging -[FAIL] hashql-ast::lower::name-mangler::path -[FAIL] hashql-ast::lower::name-mangler::newtype -[FAIL] hashql-ast::lower::name-mangler::fn-args -[FAIL] hashql-ast::lower::expander::special-form-expander::fn-generics-tuple -[FAIL] hashql-ast::lower::name-mangler::type-generics-nested -[FAIL] hashql-ast::lower::name-mangler::type-generics-interdependent-generics -[FAIL] hashql-ast::lower::name-mangler::newtype-generics -[PASS] hashql-ast::lower::expander::import-resolver::closure-generic-not-resolved -[PASS] hashql-ast::lower::expander::import-resolver::universe-ambiguity-resolution -[PASS] hashql-ast::lower::expander::special-form-expander::let-4 -[PASS] hashql-ast::lower::name-mangler::fn-types-of-ret -[FAIL] hashql-ast::lower::sanitizer::special-form-value -[PASS] hashql-hir::lower::thunking::nested-call -[PASS] hashql-ast::lower::name-mangler::simple -[PASS] hashql-ast::lower::name-mangler::fn-types-of-args -[FAIL] hashql-ast::lower::expander::import-resolver::rollback -[FAIL] hashql-ast::lower::expander::special-form-expander::newtype-4 -[FAIL] hashql-ast::lower::expander::import-resolver::continue::unresolved-type -[PASS] hashql-ast::lower::expander::import-resolver::nested-resolution -[PASS] hashql-ast::lower::name-mangler::overwrite -[FAIL] hashql-ast::lower::expander::special-form-expander::type-expr-tuple -[PASS] hashql-mir::pass::inst_simplify::identity-and-true -[PASS] hashql-mir::pass::inst_simplify::const-fold-ne -[PASS] hashql-ast::lower::name-mangler::let -[PASS] hashql-hir::lower::thunking::return-primitive -[PASS] hashql-mir::pass::cfg_simplify::closure-with-const-branch -[PASS] hashql-hir::lower::inference::intrinsics::unrelated -[FAIL] hashql-ast::lower::sanitizer::special-form-type-position -[PASS] hashql-ast::lower::type-extractor::definition::contractive-union -[PASS] hashql-mir::pass::post_inline::closure-env-cleanup -[PASS] hashql-ast::lower::expander::import-resolver::local-binding-recursive-value -[FAIL] hashql-ast::lower::name-mangler::fn-types -[PASS] hashql-ast::lower::expander::import-resolver::use-shadowing-let -[PASS] hashql-ast::lower::expander::import-resolver::closure-mixed-resolution -[FAIL] hashql-ast::lower::expander::special-form-expander::use-glob-not-ident -[FAIL] hashql-ast::lower::name-mangler::type -[FAIL] hashql-ast::lower::expander::special-form-expander::use-tuple -[PASS] hashql-mir::pass::inst_simplify::chained-const-fold -[PASS] hashql-ast::lower::type-extractor::definition::translation-intersection -[PASS] hashql-hir::lower::inference::literal -[PASS] hashql-hir::lower::normalization::binary-operation-left -[PASS] hashql-mir::pass::inst_simplify::identical-operand-eq -[FAIL] hashql-ast::lower::expander::import-resolver::continue::unresolved-value -[PASS] hashql-ast::lower::expander::import-resolver::local-binding-value -[PASS] hashql-ast::lower::expander::import-resolver::use-shadowing-use -[PASS] hashql-ast::lower::name-mangler::type-generics -[FAIL] hashql-ast::lower::expander::import-resolver::generic-arguments-in-final-segment -[PASS] hashql-mir::reify::closure-captured-var -[FAIL] hashql-ast::lower::sanitizer::constraint -[PASS] hashql-ast::lower::name-mangler::overwrite-body -[PASS] hashql-mir::pass::pre_inline::thunk-with-dead-code -[FAIL] hashql-ast::lower::expander::special-form-expander::as-3 -[FAIL] hashql-ast::lower::expander::special-form-expander::let-argument-not-ident -[PASS] hashql-mir::pass::inst_simplify::const-fold-gt -[PASS] hashql-ast::lower::type-extractor::definition::translation-tuple -[PASS] hashql-mir::pass::inst_simplify::const-propagation-locals -[PASS] hashql-ast::lower::expander::import-resolver::local-binding-recursive-type -[PASS] hashql-hir::lower::inference::tuple -[PASS] hashql-ast::lower::expander::import-resolver::generic-constraints.newtype -[FAIL] hashql-ast::lower::expander::special-form-expander::type-expr-call-union -[PASS] hashql-hir::lower::normalization::let-nested -[FAIL] hashql-ast::lower::expander::import-resolver::unresolver-variable -[PASS] hashql-mir::reify::dict-index -[PASS] hashql-mir::pass::pre_inline::nested-if-constant -[PASS] hashql-mir::pass::pre_inline::nested-let-cleanup -[FAIL] hashql-ast::lower::expander::import-resolver::continue::use-not-found -[PASS] hashql-mir::pass::forward_substitution::param-const-agree -[PASS] hashql-mir::pass::inst_simplify::identical-operand-lte -[FAIL] hashql-ast::lower::expander::special-form-expander::type-struct-has-type -[PASS] hashql-ast::lower::type-extractor::definition::result -[PASS] hashql-ast::lower::expander::import-resolver::basic-glob-import -[PASS] hashql-mir::pass::inst_simplify::annihilator-or-true -[FAIL] hashql-ast::lower::expander::special-form-expander::input-3 -[PASS] hashql-ast::lower::expander::import-resolver::local-binding-type -[PASS] hashql-ast::lower::expander::import-resolver::multiple-named-imports -[PASS] hashql-mir::reify::ctor -[PASS] hashql-mir::pass::pre_inline::inst-simplify-with-propagation -[PASS] hashql-hir::lower::normalization::closure -[PASS] hashql-mir::pass::forward_substitution::chained-projection -[PASS] hashql-mir::pass::inst_simplify::identity-or-false -[FAIL] hashql-ast::lower::expander::import-resolver::continue::unresolved-nested -[PASS] hashql-mir::pass::pre_inline::chain-simplification -[FAIL] hashql-ast::lower::expander::special-form-expander::access-field-literal-boolean -[FAIL] hashql-ast::lower::expander::special-form-expander::index-2 -[FAIL] hashql-hir::lower::inference::ctor-bounded-invalid -[PASS] hashql-ast::lower::type-extractor::definition::unused-generic-parameter -[PASS] hashql-ast::lower::expander::import-resolver::newtype-scope -[PASS] hashql-mir::pass::inline::too-large-to-inline -[FAIL] hashql-ast::lower::expander::import-resolver::generic-argument-absolute-path -[PASS] hashql-mir::pass::inline::closure-inline -[PASS] hashql-mir::pass::pre_inline::dead-code-after-propagation -[PASS] hashql-mir::pass::inst_simplify::const-fold-lte -[PASS] hashql-mir::reify::nested-let -[PASS] hashql-hir::lower::normalization::field-access -[FAIL] hashql-ast::lower::expander::special-form-expander::fn-4 -[PASS] hashql-mir::pass::pre_inline::basic-constant-folding -[FAIL] hashql-ast::lower::expander::import-resolver::item-not-found -[FAIL] hashql-ast::lower::expander::special-form-expander::let-collect-all-errors -[PASS] hashql-mir::pass::inst_simplify::identical-operand-gte -[PASS] hashql-ast::lower::type-extractor::definition::generics-with-params -[PASS] hashql-hir::lower::inference::if-test -[PASS] hashql-ast::lower::expander::import-resolver::substitution -[PASS] hashql-mir::pass::inline::simple-ctor -[FAIL] hashql-ast::lower::expander::special-form-expander::use-glob -[PASS] hashql-mir::pass::inst_simplify::identical-operand-lt -[PASS] hashql-mir::pass::dse::used-local-preserved -[FAIL] hashql-ast::lower::expander::special-form-expander::type-collect-all-errors -[PASS] hashql-mir::pass::inst_simplify::const-fold-gte -[PASS] hashql-hir::lower::normalization::dict -[PASS] hashql-ast::lower::type-extractor::definition::non-contractive-type -[PASS] hashql-hir::lower::inference::collect-variable -[PASS] hashql-mir::reify::ctor-cached-closure -[PASS] hashql-mir::pass::pre_inline::closure-with-dead-branch -[FAIL] hashql-ast::lower::expander::import-resolver::generic-argument-use-path -[FAIL] hashql-ast::lower::expander::import-resolver::glob-not-found -[FAIL] hashql-ast::lower::expander::special-form-expander::fn-generics-struct-literal -[PASS] hashql-ast::lower::expander::import-resolver::path-normalization -[FAIL] hashql-ast::lower::expander::special-form-expander::use-literal -[PASS] hashql-hir::lower::ctor::local -[FAIL] hashql-ast::lower::expander::special-form-expander::access-field-literal-valid -[PASS] hashql-hir::lower::normalization::if-then -[PASS] hashql-mir::pass::dse::nested-tuple-projection -[PASS] hashql-ast::lower::type-extractor::definition::dict-parameter-count-mismatch-too-many -[FAIL] hashql-ast::lower::expander::special-form-expander::use-struct -[PASS] hashql-ast::lower::expander::import-resolver::basic-relative-import -[FAIL] hashql-ast::lower::expander::import-resolver::module-not-found -[PASS] hashql-mir::pass::inst_simplify::const-fold-eq -[PASS] hashql-mir::reify::closure -[FAIL] hashql-hir::lower::inference::closure-call-unconstrained-direct -[PASS] hashql-ast::lower::expander::import-resolver::shadowed-imports -[FAIL] hashql-ast::lower::expander::special-form-expander::index-1 -[PASS] hashql-ast::lower::type-extractor::definition::locals-generic-params -[PASS] hashql-ast::lower::expander::import-resolver::basic-renamed-import -[FAIL] hashql-hir::lower::ctor::explicit-type -[PASS] hashql-ast::lower::expander::import-resolver::complex-path-resolution -[FAIL] hashql-ast::lower::expander::special-form-expander::unknown-special-form-typo -[PASS] hashql-hir::lower::normalization::binary-operation -[FAIL] hashql-ast::lower::expander::special-form-expander::fn-generics-tuple-literal -[PASS] hashql-mir::pass::dse::live-in-branch -[PASS] hashql-hir::lower::inference::dict-multi-value -[PASS] hashql-mir::reify::extermal-module-export -[FAIL] hashql-ast::lower::expander::special-form-expander::if-1 -[PASS] hashql-ast::lower::expander::import-resolver::shadowed-prelude -[PASS] hashql-ast::lower::expander::special-form-expander::newtype-3 -[PASS] hashql-ast::lower::expander::import-resolver::closure-param-not-resolved -[PASS] hashql-ast::lower::type-extractor::definition::path-global-resolution -[PASS] hashql-hir::lower::ctor::null -[PASS] hashql-mir::pass::inst_simplify::annihilator-and-false -[PASS] hashql-hir::lower::normalization::binding-value -[PASS] hashql-hir::lower::inference::call -[PASS] hashql-ast::lower::expander::import-resolver::closure-complex-return-type -[FAIL] hashql-ast::lower::expander::special-form-expander::type-expr-struct -[FAIL] hashql-ast::lower::expander::special-form-expander::type-2 -[FAIL] hashql-ast::lower::expander::special-form-expander::access-2 -[FAIL] hashql-ast::lower::expander::special-form-expander::type-expr-call-arbitrary -[PASS] hashql-mir::reify::tuple-index -[PASS] hashql-ast::lower::type-extractor::definition::list-parameter-count-mismatch-too-many -[PASS] hashql-hir::lower::ctor::absolute -[PASS] hashql-mir::pass::administrative_reduction::thunk-aggregate -[PASS] hashql-hir::lower::normalization::index-access -[PASS] hashql-ast::lower::expander::import-resolver::basic-absolute-imports -[PASS] hashql-hir::lower::inference::struct -[FAIL] hashql-ast::lower::expander::special-form-expander::type-tuple-has-type -[FAIL] hashql-ast::lower::expander::special-form-expander::type-generic-constraint -[FAIL] hashql-ast::lower::expander::special-form-expander::not-enough-segments -[FAIL] hashql-ast::lower::expander::special-form-expander::as-1 -[FAIL] hashql-ast::lower::expander::special-form-expander::use-struct-literal -[PASS] hashql-ast::lower::type-extractor::definition::env-type-interning -[PASS] hashql-ast::lower::expander::import-resolver::complex-nested-type-parameters -[FAIL] hashql-ast::lower::expander::special-form-expander::use-glob-not-star -[PASS] hashql-hir::lower::normalization::list -[PASS] hashql-hir::lower::inference::list-empty -[FAIL] hashql-ast::lower::expander::special-form-expander::use-tuple-literal -[PASS] hashql-ast::lower::type-extractor::definition::path-local-resolution -[FAIL] hashql-hir::lower::ctor::too-many-arguments -[PASS] hashql-mir::pass::administrative_reduction::closure-chain -[FAIL] hashql-ast::lower::expander::special-form-expander::generics -[FAIL] hashql-ast::lower::expander::special-form-expander::use-3 -[PASS] hashql-ast::lower::expander::import-resolver::prelude -[FAIL] hashql-ast::lower::expander::special-form-expander::let-argument-not-path -[PASS] hashql-hir::lower::normalization::input -[PASS] hashql-hir::lower::inference::qualified-variable -[FAIL] hashql-ast::lower::expander::special-form-expander::fn-params-type -[PASS] hashql-hir::lower::ctor::imported-item-not-a-constructor -[PASS] hashql-ast::lower::type-extractor::definition::translation-struct -[FAIL] hashql-ast::lower::expander::special-form-expander::input-1 -[FAIL] hashql-ast::lower::expander::special-form-expander::use-2 -[PASS] hashql-ast::lower::expander::import-resolver::regression-generic-arguments-identifier -[FAIL] hashql-ast::lower::expander::special-form-expander::input-2 -[PASS] hashql-mir::pass::administrative_reduction::forwarding-closure -[PASS] hashql-hir::lower::normalization::type-assertion-erase -[FAIL] hashql-ast::lower::expander::special-form-expander::type-generic-relative-path -[PASS] hashql-ast::lower::type-extractor::definition::global-generic-constraint-too-many -[FAIL] hashql-hir::lower::ctor::not-enough-arguments -[PASS] hashql-ast::lower::expander::import-resolver::generic-constraints-type -[FAIL] hashql-ast::lower::expander::special-form-expander::use-struct-type -[FAIL] hashql-ast::lower::expander::special-form-expander::let-2 -[FAIL] hashql-ast::lower::expander::special-form-expander::type-unknown -[PASS] hashql-hir::lower::normalization::binding-body -[PASS] hashql-mir::pass::administrative_reduction::non-reducible-computation -[FAIL] hashql-ast::lower::expander::special-form-expander::fn-generics-tuple-path -[PASS] hashql-ast::lower::type-extractor::definition::constraints-invalid-location -[FAIL] hashql-ast::lower::expander::special-form-expander::type-generic-duplicate -[PASS] hashql-ast::lower::expander::special-form-expander::type-generic -[FAIL] hashql-ast::lower::expander::special-form-expander::access-field-index-out-of-bounds -[FAIL] hashql-hir::lower::inference::bind-arguments-explicit -[PASS] hashql-mir::pass::administrative_reduction::thunk-simple -[PASS] hashql-hir::lower::normalization::binary-operation-right -[FAIL] hashql-ast::lower::expander::special-form-expander::newtype-2 -[PASS] hashql-ast::lower::type-extractor::definition::global-generic-constraint-not-enough -[PASS] hashql-ast::lower::expander::special-form-expander::if-2 -[FAIL] hashql-ast::lower::expander::special-form-expander::type-generic-struct -[PASS] hashql-hir::lower::inference::unsatisfiable-upper-constraint -[FAIL] hashql-ast::lower::expander::special-form-expander::type-generic-absolute-path -[FAIL] hashql-ast::lower::expander::special-form-expander::type-4 -[FAIL] hashql-ast::lower::expander::special-form-expander::fn-generics-literal -[PASS] hashql-mir::pass::administrative_reduction::multiple-thunks -[PASS] hashql-ast::lower::type-extractor::definition::duplicate-fields -[FAIL] hashql-ast::lower::expander::special-form-expander::fn-5 -[PASS] hashql-hir::lower::inference::if -[FAIL] hashql-ast::lower::expander::special-form-expander::fn-generics-struct-type -[FAIL] hashql-ast::lower::expander::special-form-expander::access-field-literal-string -[FAIL] hashql-ast::lower::expander::special-form-expander::fn-generics-tuple-type -[PASS] hashql-ast::lower::type-extractor::definition::dict-parameter-count-mismatch -[FAIL] hashql-ast::lower::expander::special-form-expander::index-3 -[FAIL] hashql-ast::lower::expander::special-form-expander::type-expr-call-not-path -[PASS] hashql-ast::lower::expander::special-form-expander::if-3 -[PASS] hashql-hir::lower::inference::closure-constrained -[FAIL] hashql-ast::lower::expander::special-form-expander::fn-generics-struct -[PASS] hashql-ast::lower::type-extractor::definition::generics-apply-params -[FAIL] hashql-ast::lower::expander::special-form-expander::fn-params-tuple -[PASS] hashql-mir::pass::post_inline::cascading-simplification -[FAIL] hashql-ast::lower::expander::special-form-expander::use-tuple-path -[FAIL] hashql-ast::lower::expander::special-form-expander::labeled-argument -[PASS] hashql-ast::lower::type-extractor::definition::locals-type-extraction -[FAIL] hashql-ast::lower::expander::special-form-expander::type-generic-generic-ident -[FAIL] hashql-ast::lower::expander::special-form-expander::unknown-special-form -[PASS] hashql-hir::lower::inference::ctor -[FAIL] hashql-ast::lower::expander::special-form-expander::type-expr-invalid -[PASS] hashql-hir::lower::normalization::graph-read-head -[FAIL] hashql-ast::lower::expander::pre-expansion-name-resolver::resolve-symbol -[FAIL] hashql-ast::lower::expander::special-form-expander::use-tuple-type -[FAIL] hashql-ast::lower::expander::special-form-expander::type-3 -[PASS] hashql-ast::lower::type-extractor::definition::generics-param-count-mismatch -[PASS] hashql-ast::lower::expander::special-form-expander::let-3 -[FAIL] hashql-ast::lower::expander::pre-expansion-name-resolver::type-4 -[FAIL] hashql-ast::lower::expander::special-form-expander::let-5 -[PASS] hashql-hir::lower::normalization::tuple -[PASS] hashql-mir::pass::post_inline::nested-branch-elimination -[PASS] hashql-hir::lower::inference::field-access -[FAIL] hashql-ast::lower::expander::pre-expansion-name-resolver::re-assign-prelude -[PASS] hashql-mir::pass::inst_simplify::const-fold-lt -[FAIL] hashql-ast::lower::expander::special-form-expander::too-many-segments -[PASS] hashql-ast::lower::type-extractor::graph-pipeline-inferred-closure -[FAIL] hashql-ast::lower::expander::pre-expansion-name-resolver::alias-symbol -[FAIL] hashql-ast::lower::expander::special-form-expander::use-4 -[FAIL] hashql-ast::lower::expander::special-form-expander::type-expr-call-intersection -[PASS] hashql-hir::lower::normalization::if-test -[FAIL] hashql-ast::lower::expander::pre-expansion-name-resolver::newtype-4 -[PASS] hashql-hir::lower::inference::input-default-invalid -[PASS] hashql-mir::pass::post_inline::dead-code-from-inline -[PASS] hashql-mir::pass::inst_simplify::identical-operand-ne -[PASS] hashql-ast::lower::type-extractor::let-binding-type -[FAIL] hashql-ast::lower::expander::special-form-expander::fn-generics-struct-underscore -[PASS] hashql-ast::lower::type-extractor::closure -[FAIL] hashql-ast::lower::expander::pre-expansion-name-resolver::let-4-alias -[FAIL] hashql-ast::lower::expander::pre-expansion-name-resolver::re-assign -[PASS] hashql-hir::lower::normalization::nested-and-or -[PASS] hashql-hir::lower::inference::local-variable -[FAIL] hashql-ast::lower::expander::special-form-expander::use-struct-path -[FAIL] hashql-ast::lower::expander::pre-expansion-name-resolver::resolve-generics -[PASS] hashql-mir::pass::post_inline::constant-propagation-after-inline -[FAIL] hashql-ast::lower::type-extractor::generic-type-resolution -[FAIL] hashql-ast::lower::expander::special-form-expander::type-infer -[PASS] hashql-ast::lower::type-extractor::union-type -[PASS] hashql-hir::lower::checking::closure-not-generic -[FAIL] hashql-ast::lower::expander::pre-expansion-name-resolver::let-absolute -[PASS] hashql-hir::lower::normalization::call -[FAIL] hashql-ast::lower::expander::pre-expansion-name-resolver::invalid-let-expr -[FAIL] hashql-ast::lower::expander::special-form-expander::if-4 -[PASS] hashql-hir::lower::inference::dict-multi-key -[FAIL] hashql-ast::lower::expander::special-form-expander::as-2 -[PASS] hashql-ast::lower::type-extractor::closure-unused-generic -[PASS] hashql-ast::lower::type-extractor::closure-generics -[FAIL] hashql-ast::lower::expander::pre-expansion-name-resolver::nested-let -[PASS] hashql-hir::lower::checking::input-default -[FAIL] hashql-ast::lower::expander::pre-expansion-name-resolver::let-3 -[PASS] hashql-hir::lower::normalization::if-else -[FAIL] hashql-ast::lower::expander::special-form-expander::type-never -[PASS] hashql-hir::lower::inference::dict-single -[FAIL] hashql-ast::lower::expander::pre-expansion-name-resolver::absolute-path -[PASS] hashql-ast::lower::type-extractor::global-type-resolution -[FAIL] hashql-ast::lower::expander::special-form-expander::access-field-literal-type-annotation -[PASS] hashql-hir::lower::normalization::struct -[FAIL] hashql-ast::lower::expander::pre-expansion-name-resolver::re-assign-prelude-diverging -[PASS] hashql-ast::lower::expander::special-form-expander::does-not-touch-non-kernel -[FAIL] hashql-hir::lower::inference::bind-arguments -[PASS] hashql-ast::lower::expander::pre-expansion-name-resolver::alias-absolute-path -[PASS] hashql-ast::lower::type-extractor::nested-type-nodes -[PASS] hashql-hir::lower::alias-replacement::replace-alias -[FAIL] hashql-ast::lower::expander::pre-expansion-name-resolver::let-4 -[FAIL] hashql-ast::lower::expander::special-form-expander::access-1 -[PASS] hashql-hir::lower::inference::closure-unconstrained -[PASS] hashql-ast::lower::type-extractor::definition::translation-infer -[FAIL] hashql-ast::lower::expander::pre-expansion-name-resolver::newtype-3-alias -[PASS] hashql-hir::lower::alias-replacement::immediate-usage -[FAIL] hashql-ast::lower::expander::pre-expansion-name-resolver::restoration-bindings -[PASS] hashql-hir::lower::inference::dict-key-var -[PASS] hashql-ast::lower::type-extractor::definition::non-contractive-self -[FAIL] hashql-ast::lower::expander::pre-expansion-name-resolver::type-3-alias -[FAIL] hashql-ast::lower::expander::pre-expansion-name-resolver::let-ident-generic -[FAIL] hashql-ast::lower::expander::special-form-expander::fn-generics-duplicates -[FAIL] hashql-hir::lower::alias-replacement::generic-reassignment -[PASS] hashql-hir::lower::inference::dict-empty -[FAIL] hashql-ast::lower::expander::pre-expansion-name-resolver::multi-segment-resolution -[PASS] hashql-ast::lower::type-extractor::definition::identity-nominal -[FAIL] hashql-ast::lower::expander::pre-expansion-name-resolver::type-3 -[PASS] hashql-ast::lower::type-extractor::definition::intrinsic-dict-translation -[FAIL] hashql-ast::lower::expander::pre-expansion-name-resolver::let-3-alias -[PASS] hashql-hir::lower::alias-replacement::complex-mixed -[PASS] hashql-ast::lower::node-renumberer::nested -[FAIL] hashql-ast::lower::expander::special-form-expander::access-3 -[PASS] hashql-hir::lower::inference::index-access -[FAIL] hashql-ast::lower::type-extractor::definition::constraints-parsing -[FAIL] hashql-ast::lower::expander::pre-expansion-name-resolver::newtype-3 -[PASS] hashql-hir::lower::alias-replacement::preserve-non-alias -[PASS] hashql-ast::lower::node-renumberer::diverging -[FAIL] hashql-ast::lower::expander::special-form-expander::input-4 -[PASS] hashql-ast::lower::type-extractor::definition::locals-generic-params-struct -[PASS] hashql-hir::lower::inference::input -[PASS] hashql-hir::lower::inference::closure-integer -[PASS] hashql-hir::lower::alias-replacement::unused-alias -[PASS] hashql-ast::lower::node-renumberer::basic -[PASS] hashql-ast::lower::type-extractor::definition::infer-with-arguments -[FAIL] hashql-hir::lower::inference::infer-argument -[PASS] hashql-hir::lower::alias-replacement::nested-aliases -[PASS] hashql-ast::lower::type-extractor::local-type-resolution -[FAIL] hashql-ast::lower::expander::special-form-expander::newtype-collect-all-errors -[PASS] hashql-hir::lower::inference::closure-call-unconstrained -[PASS] hashql-ast::lower::type-extractor::definition::intrinsic-list-translation -[PASS] hashql-hir::lower::inference::as -[PASS] hashql-ast::lower::type-extractor::complex-types -[PASS] hashql-hir::lower::alias-replacement::multiple-aliases -[PASS] hashql-hir::lower::inference::list-single -[PASS] hashql-ast::lower::type-extractor::definition::translation-union -[PASS] hashql-hir::lower::inference::input-default -[PASS] hashql-hir::lower::alias-replacement::qualified-variable-alias -[PASS] hashql-ast::lower::type-extractor::definition::list-parameter-count-mismatch -[FAIL] hashql-ast::lower::expander::special-form-expander::fn-params-duplicates -[FAIL] hashql-hir::lower::alias-replacement::generics -[PASS] hashql-hir::lower::inference::let -[PASS] hashql-mir::pass::dse::simple-dead-local -[PASS] hashql-ast::lower::type-extractor::definition::identity-structural -[FAIL] hashql-ast::lower::expander::special-form-expander::newtype-constraints -[PASS] hashql-hir::lower::checking::field-access -[PASS] hashql-hir::lower::inference::list-multi -[PASS] hashql-ast::lower::type-extractor::definition::contractive-guarded -[PASS] hashql-mir::pass::cfg_simplify::diamond-cfg-no-merge -[PASS] hashql-hir::lower::inference::intrinsics::assignment -[FAIL] hashql-hir::lower::checking::dict -[FAIL] hashql-ast::lower::expander::special-form-expander::fn-3 -[PASS] hashql-hir::lower::checking::ctor -[PASS] hashql-mir::pass::cfg_simplify::const-if-false -[PASS] hashql-hir::lower::inference::intrinsics::re-assignment -[PASS] hashql-hir::lower::checking::if-non-boolean -[PASS] hashql-hir::lower::inference::intrinsics::simple -[PASS] hashql-hir::lower::checking::input-default-invalid -[PASS] hashql-mir::pass::cfg_simplify::cascade-switch-then-goto -[PASS] hashql-mir::pass::cfg_simplify::let-in-branch -[PASS] hashql-hir::lower::checking::minimal-graph -[PASS] hashql-hir::lower::checking::local-variable -[PASS] hashql-mir::pass::inline::excessive-depth -[PASS] hashql-hir::lower::checking::let -[PASS] hashql-mir::pass::cfg_simplify::const-nested-if -[PASS] hashql-hir::lower::checking::closure-invalid-return-type -[PASS] hashql-hir::lower::checking::call-invalid -[PASS] hashql-hir::lower::checking::type-assertion -[FAIL] hashql-hir::lower::checking::bind-arguments -[FAIL] hashql-hir::lower::checking::dict-empty -[PASS] hashql-hir::lower::checking::input-multiple -[PASS] hashql-hir::lower::checking::index-access -[PASS] hashql-hir::lower::checking::closure-unconstrained -[FAIL] hashql-hir::lower::checking::ctor-bounded -[FAIL] hashql-hir::lower::checking::list -[PASS] hashql-hir::lower::checking::qualified-variable -[PASS] hashql-hir::lower::checking::type-assertion-smaller -[PASS] hashql-hir::lower::checking::field-access-tuple -[PASS] hashql-hir::lower::checking::literal -[PASS] hashql-hir::lower::checking::closure-call-unconstrained -[FAIL] hashql-hir::lower::checking::tuple -[PASS] hashql-hir::lower::checking::input -[PASS] hashql-hir::lower::checking::if-simplify -[PASS] hashql-hir::lower::checking::type-assertion-unrelated -[FAIL] hashql-hir::lower::checking::ctor-bounded-invalid -[PASS] hashql-mir::pass::inline::filter-aggressive -[PASS] hashql-mir::pass::inst_simplify::identical-operand-gt -[PASS] hashql-eval::postgres::input-parameter-exists -[FAIL] hashql-hir::lower::checking::argument-count-mismatch -[PASS] hashql-mir::pass::data-dependency::input-no-deps -[FAIL] hashql-hir::lower::checking::closure-call-unconstrained-direct -[PASS] hashql-hir::reify::local-variable -[FAIL] hashql-hir::reify::variable-generics -[PASS] hashql-hir::lower::checking::call -[PASS] hashql-hir::reify::binding-type-assertion -[FAIL] hashql-hir::lower::checking::struct -[PASS] hashql-hir::reify::field -[FAIL] hashql-hir::lower::checking::list-empty -[PASS] hashql-hir::reify::closure-multiple-inputs -[PASS] hashql-hir::lower::checking::closure-call-constrained -[PASS] hashql-hir::reify::list -[PASS] hashql-hir::lower::checking::filter-graph -[PASS] hashql-hir::reify::input -[PASS] hashql-hir::reify::as -[PASS] hashql-hir::lower::checking::closure-constrained -[PASS] hashql-hir::reify::let-type-annotation -[PASS] hashql-hir::reify::input-default -[PASS] hashql-hir::reify::if-partial -[PASS] hashql-hir::reify::let -[FAIL] hashql-hir::reify::nested-expressions -[PASS] hashql-hir::reify::literal -[PASS] hashql-hir::reify::tuple -[PASS] hashql-hir::reify::call -[PASS] hashql-hir::reify::struct -[PASS] hashql-hir::reify::qualified-variable -[PASS] hashql-hir::reify::call-multiple-arguments -[PASS] hashql-hir::reify::underscore -[PASS] hashql-mir::pass::data-dependency::graph-read-filter -[PASS] hashql-eval::postgres::tuple-construction -[PASS] hashql-mir::pass::data-dependency::block-params -[PASS] hashql-mir::pass::data-dependency::deeply-nested-tuple -[PASS] hashql-eval::postgres::entity-uuid-equality -[PASS] hashql-mir::pass::data-dependency::mixed-projection-chain -[PASS] hashql-mir::pass::data-dependency::binary-operation -[PASS] hashql-mir::pass::data-dependency::function-apply -[PASS] hashql-mir::pass::data-dependency::nested-tuple-projection -[PASS] hashql-mir::pass::data-dependency::struct-projection -[PASS] hashql-mir::pass::data-dependency::comparison-operators -[PASS] hashql-mir::pass::data-dependency::list-construction -[PASS] hashql-mir::pass::data-dependency::multiple-uses -[PASS] hashql-mir::pass::data-dependency::tuple-projection -[PASS] hashql-mir::pass::data-dependency::graph-read-head -[PASS] hashql-mir::pass::data-dependency::function-multiple-args -[PASS] hashql-mir::pass::data-dependency::struct-construction -[PASS] hashql-mir::interpret::access-struct-through-opaque -[PASS] hashql-hir::lower::checking::collect-filter-graph -[PASS] hashql-mir::pass::cfg_simplify::mixed-const-runtime-if -[PASS] hashql-mir::pass::cfg_simplify::const-if-true -[PASS] hashql-eval::postgres::dict-construction -[PASS] hashql-hir::lower::specialization::filter-graph -[PASS] hashql-hir::lower::specialization::math -[PASS] hashql-eval::postgres::comparison-no-cast -[FAIL] hashql-hir::lower::specialization::collect-custom-collect -[PASS] hashql-mir::pass::inline::filter-with-ctor -[PASS] hashql-mir::pass::inline::heuristic-inline -[PASS] hashql-eval::postgres::multiple-filters -[PASS] hashql-mir::pass::inline::nested-ctor -[PASS] hashql-eval::postgres::constant-true-filter -[PASS] hashql-eval::postgres::entity-draft-id-equality -[PASS] hashql-eval::postgres::entity-web-id-equality -[PASS] hashql-mir::pass::data-dependency::closure-construction -[PASS] hashql-mir::pass::data-dependency::tuple-construction -[PASS] hashql-eval::postgres::logical-and-inputs -[PASS] hashql-eval::postgres::env-captured-variable -[PASS] hashql-hir::lower::specialization::complex -[PASS] hashql-hir::lower::specialization::unary -[PASS] hashql-hir::lower::graph-hoisting::double-hoist-deny -[PASS] hashql-eval::postgres::opaque-passthrough -[PASS] hashql-eval::postgres::input-parameter-load -[PASS] hashql-eval::postgres::mixed-sources-filter -[PASS] hashql-mir::reify::input-required -[PASS] hashql-mir::reify::if-else -[PASS] hashql-mir::reify::top-level-external-module -[PASS] hashql-mir::reify::empty-tuple -[FAIL] hashql-hir::reify::literal-type-annotation -[PASS] hashql-hir::lower::specialization::minimal-graph -[PASS] hashql-hir::reify::if -[PASS] hashql-hir::reify::index -[PASS] hashql-hir::lower::specialization::bool -[PASS] hashql-eval::postgres::entity-type-ids-lateral -[PASS] hashql-eval::postgres::struct-construction -[PASS] hashql-hir::reify::closure -[PASS] hashql-eval::postgres::entity-archived-check -[PASS] hashql-mir::reify::binary -[PASS] hashql-hir::lower::specialization::bits -[PASS] hashql-hir::lower::specialization::cmp -[PASS] hashql-hir::reify::dict -[PASS] hashql-hir::lower::thunking::return-local -[PASS] hashql-mir::reify::null-value-in-binary -[PASS] hashql-mir::reify::input-default -[PASS] hashql-mir::reify::list-index -[PASS] hashql-mir::reify::nested-tuple-index -[PASS] hashql-hir::lower::thunking::closure -[FAIL] hashql-mir::reify::monomorphized-closure -[PASS] hashql-mir::reify::ctor-empty -[PASS] hashql-hir::lower::thunking::dependent-call -[PASS] hashql-hir::lower::thunking::tuple-index -[PASS] hashql-mir::reify::null-value -[PASS] hashql-mir::reify::external-module -[PASS] hashql-eval::postgres::minimal-select-no-extra-joins -[FAIL] hashql-ast::lower::name-mangler::onion -[PASS] hashql-hir::lower::graph-hoisting::nested-boolean-expression -[PASS] hashql-ast::lower::name-mangler::type-generics-recursive -[FAIL] hashql-ast::lower::name-mangler::absolute-path -[FAIL] hashql-ast::lower::name-mangler::type-generics-constraints -[PASS] hashql-hir::lower::specialization::collect-filter-graph -[PASS] hashql-mir::reify::struct-index -[PASS] hashql-ast::lower::name-mangler::scopes-no-include -[PASS] hashql-mir::reify::literal -[PASS] hashql-mir::reify::reassign -[PASS] hashql-mir::reify::dict-computed-key -[PASS] hashql-eval::postgres::nested-if-input-branches -[FAIL] hashql-ast::lower::name-mangler::path-arguments -[PASS] hashql-hir::lower::graph-hoisting::no-hoist-closure -[PASS] hashql-eval::postgres::list-construction -[PASS] hashql-hir::lower::graph-hoisting::no-hoist-closure-inside-read -[PASS] hashql-hir::lower::graph-hoisting::hoist -[PASS] hashql-eval::postgres::let-binding-propagation -[PASS] hashql-hir::lower::graph-hoisting::hoist-inside-boundary -[PASS] hashql-hir::lower::graph-hoisting::sequential-filter -[PASS] hashql-hir::lower::graph-hoisting::nested-boolean-expression-outer-let -[PASS] hashql-eval::postgres::if-input-branches -[PASS] hashql-hir::lower::graph-hoisting::partial -[PASS] hashql-mir::reify::graph-read -[PASS] hashql-hir::lower::graph-hoisting::double-hoist -[PASS] hashql-mir::pass::inst_simplify::showcase -[PASS] hashql-mir::pass::dse::showcase -[PASS] hashql-mir::pass::cfg_simplify::dead-block-elimination -[PASS] hashql-mir::reify::nested-if -[PASS] hashql-mir::pass::forward_substitution::closure-env-capture -[PASS] hashql-mir::pass::forward_substitution::nested -[PASS] hashql-mir::pass::forward_substitution::tuple-projection -[PASS] hashql-mir::pass::forward_substitution::param-const-diverge -[PASS] hashql-mir::pass::post_inline::showcase - -═════════════════════════════ Test Results Summary ═════════════════════════════ - -Results: - ✓ Passed: 367 - ✗ Failed: 167 - Total: 534 - -Timing: - Elapsed: 5.54s - Throughput: 96.4 tests/sec - Avg/test: 28.14ms - -Phase Breakdown: - Run: 27.71ms avg ( 98.5%) - Parse: 95.24µs avg ( 0.3%) - Read: 43.10µs avg ( 0.2%) - Verify: 48.01µs avg ( 0.2%) - Assert: 127.46µs avg ( 0.5%) - Render: 47.43µs avg ( 0.2%) - -I/O Statistics: - Files read: 534 (134.2 KiB total) - Files written: 487 (1.0 MiB total) - -Slowest Tests: - 5.53s hashql-mir::pass::post_inline::showcase - 1.22s hashql-mir::pass::forward_substitution::closure-env-capture - 1.08s hashql-mir::reify::nested-if - 872.26ms hashql-mir::pass::dse::showcase - 837.09ms hashql-mir::pass::cfg_simplify::dead-block-elimination - -Failed Tests: - ✗ hashql-mir::reify::monomorphized-closure - ✗ hashql-hir::reify::literal-type-annotation - ✗ hashql-hir::reify::variable-generics - ✗ hashql-hir::reify::nested-expressions - ✗ hashql-hir::lower::specialization::collect-custom-collect - ✗ hashql-hir::lower::alias-replacement::generic-reassignment - ✗ hashql-hir::lower::alias-replacement::generics - ✗ hashql-hir::lower::ctor::explicit-type - ✗ hashql-hir::lower::ctor::too-many-arguments - ✗ hashql-hir::lower::ctor::not-enough-arguments - ✗ hashql-hir::lower::inference::bind-arguments-explicit - ✗ hashql-hir::lower::inference::bind-arguments - ✗ hashql-hir::lower::inference::infer-argument - ✗ hashql-hir::lower::inference::ctor-bounded-invalid - ✗ hashql-hir::lower::inference::closure-call-unconstrained-direct - ✗ hashql-hir::lower::checking::dict - ✗ hashql-hir::lower::checking::bind-arguments - ✗ hashql-hir::lower::checking::dict-empty - ✗ hashql-hir::lower::checking::list - ✗ hashql-hir::lower::checking::ctor-bounded - ✗ hashql-hir::lower::checking::tuple - ✗ hashql-hir::lower::checking::ctor-bounded-invalid - ✗ hashql-hir::lower::checking::argument-count-mismatch - ✗ hashql-hir::lower::checking::closure-call-unconstrained-direct - ✗ hashql-hir::lower::checking::struct - ✗ hashql-hir::lower::checking::list-empty - ✗ hashql-ast::lower::name-mangler::path-arguments - ✗ hashql-ast::lower::name-mangler::onion - ✗ hashql-ast::lower::name-mangler::absolute-path - ✗ hashql-ast::lower::name-mangler::type-generics-constraints - ✗ hashql-ast::lower::name-mangler::type-generics-nested - ✗ hashql-ast::lower::name-mangler::type - ✗ hashql-ast::lower::name-mangler::newtype - ✗ hashql-ast::lower::name-mangler::diverging - ✗ hashql-ast::lower::name-mangler::newtype-generics - ✗ hashql-ast::lower::name-mangler::fn-args - ✗ hashql-ast::lower::name-mangler::type-generics-interdependent-generics - ✗ hashql-ast::lower::name-mangler::path - ✗ hashql-ast::lower::name-mangler::fn-types - ✗ hashql-ast::lower::sanitizer::special-form-value - ✗ hashql-ast::lower::sanitizer::special-form-type-position - ✗ hashql-ast::lower::sanitizer::constraint - ✗ hashql-ast::lower::expander::import-resolver::generic-argument-absolute-path - ✗ hashql-ast::lower::expander::import-resolver::generic-argument-use-path - ✗ hashql-ast::lower::expander::import-resolver::module-not-found - ✗ hashql-ast::lower::expander::import-resolver::generic-arguments-in-final-segment - ✗ hashql-ast::lower::expander::import-resolver::unresolver-variable - ✗ hashql-ast::lower::expander::import-resolver::rollback - ✗ hashql-ast::lower::expander::import-resolver::continue::unresolved-type - ✗ hashql-ast::lower::expander::import-resolver::continue::unresolved-value - ✗ hashql-ast::lower::expander::import-resolver::continue::use-not-found - ✗ hashql-ast::lower::expander::import-resolver::continue::unresolved-nested - ✗ hashql-ast::lower::expander::import-resolver::item-not-found - ✗ hashql-ast::lower::expander::import-resolver::glob-not-found - ✗ hashql-ast::lower::expander::special-form-expander::access-2 - ✗ hashql-ast::lower::expander::special-form-expander::as-1 - ✗ hashql-ast::lower::expander::special-form-expander::fn-params-type - ✗ hashql-ast::lower::expander::special-form-expander::use-struct-type - ✗ hashql-ast::lower::expander::special-form-expander::type-generic-absolute-path - ✗ hashql-ast::lower::expander::special-form-expander::type-expr-invalid - ✗ hashql-ast::lower::expander::special-form-expander::fn-generics-tuple - ✗ hashql-ast::lower::expander::special-form-expander::newtype-4 - ✗ hashql-ast::lower::expander::special-form-expander::use-glob-not-ident - ✗ hashql-ast::lower::expander::special-form-expander::as-3 - ✗ hashql-ast::lower::expander::special-form-expander::type-expr-call-union - ✗ hashql-ast::lower::expander::special-form-expander::input-3 - ✗ hashql-ast::lower::expander::special-form-expander::index-2 - ✗ hashql-ast::lower::expander::special-form-expander::fn-4 - ✗ hashql-ast::lower::expander::special-form-expander::use-glob - ✗ hashql-ast::lower::expander::special-form-expander::use-literal - ✗ hashql-ast::lower::expander::special-form-expander::fn-generics-tuple-literal - ✗ hashql-ast::lower::expander::special-form-expander::type-expr-struct - ✗ hashql-ast::lower::expander::special-form-expander::type-generic-constraint - ✗ hashql-ast::lower::expander::special-form-expander::use-tuple-literal - ✗ hashql-ast::lower::expander::special-form-expander::input-1 - ✗ hashql-ast::lower::expander::special-form-expander::fn-generics-tuple-path - ✗ hashql-ast::lower::expander::special-form-expander::newtype-2 - ✗ hashql-ast::lower::expander::special-form-expander::fn-generics-struct-type - ✗ hashql-ast::lower::expander::special-form-expander::fn-params-tuple - ✗ hashql-ast::lower::expander::special-form-expander::use-tuple-type - ✗ hashql-ast::lower::expander::special-form-expander::too-many-segments - ✗ hashql-ast::lower::expander::special-form-expander::fn-generics-struct-underscore - ✗ hashql-ast::lower::expander::special-form-expander::type-infer - ✗ hashql-ast::lower::expander::special-form-expander::as-2 - ✗ hashql-ast::lower::expander::special-form-expander::access-field-literal-type-annotation - ✗ hashql-ast::lower::expander::special-form-expander::access-1 - ✗ hashql-ast::lower::expander::special-form-expander::fn-generics-duplicates - ✗ hashql-ast::lower::expander::special-form-expander::access-3 - ✗ hashql-ast::lower::expander::special-form-expander::input-4 - ✗ hashql-ast::lower::expander::special-form-expander::newtype-collect-all-errors - ✗ hashql-ast::lower::expander::special-form-expander::fn-params-duplicates - ✗ hashql-ast::lower::expander::special-form-expander::newtype-constraints - ✗ hashql-ast::lower::expander::special-form-expander::fn-3 - ✗ hashql-ast::lower::expander::special-form-expander::fn-generics-struct-literal - ✗ hashql-ast::lower::expander::special-form-expander::index-1 - ✗ hashql-ast::lower::expander::special-form-expander::type-tuple-has-type - ✗ hashql-ast::lower::expander::special-form-expander::use-glob-not-star - ✗ hashql-ast::lower::expander::special-form-expander::let-argument-not-path - ✗ hashql-ast::lower::expander::special-form-expander::input-2 - ✗ hashql-ast::lower::expander::special-form-expander::type-unknown - ✗ hashql-ast::lower::expander::special-form-expander::type-generic-struct - ✗ hashql-ast::lower::expander::special-form-expander::fn-5 - ✗ hashql-ast::lower::expander::special-form-expander::index-3 - ✗ hashql-ast::lower::expander::special-form-expander::use-tuple-path - ✗ hashql-ast::lower::expander::special-form-expander::type-4 - ✗ hashql-ast::lower::expander::special-form-expander::type-expr-call-not-path - ✗ hashql-ast::lower::expander::special-form-expander::unknown-special-form - ✗ hashql-ast::lower::expander::special-form-expander::let-5 - ✗ hashql-ast::lower::expander::special-form-expander::type-expr-call-intersection - ✗ hashql-ast::lower::expander::special-form-expander::use-struct - ✗ hashql-ast::lower::expander::special-form-expander::if-1 - ✗ hashql-ast::lower::expander::special-form-expander::type-2 - ✗ hashql-ast::lower::expander::special-form-expander::use-struct-literal - ✗ hashql-ast::lower::expander::special-form-expander::use-3 - ✗ hashql-ast::lower::expander::special-form-expander::type-generic-relative-path - ✗ hashql-ast::lower::expander::special-form-expander::type-generic-duplicate - ✗ hashql-ast::lower::expander::special-form-expander::fn-generics-literal - ✗ hashql-ast::lower::expander::special-form-expander::access-field-literal-string - ✗ hashql-ast::lower::expander::special-form-expander::type-generic-generic-ident - ✗ hashql-ast::lower::expander::special-form-expander::use-4 - ✗ hashql-ast::lower::expander::special-form-expander::use-struct-path - ✗ hashql-ast::lower::expander::special-form-expander::if-4 - ✗ hashql-ast::lower::expander::special-form-expander::type-never - ✗ hashql-ast::lower::expander::special-form-expander::type-expr-tuple - ✗ hashql-ast::lower::expander::special-form-expander::use-tuple - ✗ hashql-ast::lower::expander::special-form-expander::let-argument-not-ident - ✗ hashql-ast::lower::expander::special-form-expander::type-struct-has-type - ✗ hashql-ast::lower::expander::special-form-expander::access-field-literal-boolean - ✗ hashql-ast::lower::expander::special-form-expander::let-collect-all-errors - ✗ hashql-ast::lower::expander::special-form-expander::type-collect-all-errors - ✗ hashql-ast::lower::expander::special-form-expander::access-field-literal-valid - ✗ hashql-ast::lower::expander::special-form-expander::unknown-special-form-typo - ✗ hashql-ast::lower::expander::special-form-expander::type-expr-call-arbitrary - ✗ hashql-ast::lower::expander::special-form-expander::not-enough-segments - ✗ hashql-ast::lower::expander::special-form-expander::generics - ✗ hashql-ast::lower::expander::special-form-expander::use-2 - ✗ hashql-ast::lower::expander::special-form-expander::let-2 - ✗ hashql-ast::lower::expander::special-form-expander::access-field-index-out-of-bounds - ✗ hashql-ast::lower::expander::special-form-expander::fn-generics-tuple-type - ✗ hashql-ast::lower::expander::special-form-expander::fn-generics-struct - ✗ hashql-ast::lower::expander::special-form-expander::labeled-argument - ✗ hashql-ast::lower::expander::special-form-expander::type-3 - ✗ hashql-ast::lower::expander::pre-expansion-name-resolver::re-assign-prelude - ✗ hashql-ast::lower::expander::pre-expansion-name-resolver::newtype-4 - ✗ hashql-ast::lower::expander::pre-expansion-name-resolver::re-assign - ✗ hashql-ast::lower::expander::pre-expansion-name-resolver::let-absolute - ✗ hashql-ast::lower::expander::pre-expansion-name-resolver::nested-let - ✗ hashql-ast::lower::expander::pre-expansion-name-resolver::absolute-path - ✗ hashql-ast::lower::expander::pre-expansion-name-resolver::newtype-3-alias - ✗ hashql-ast::lower::expander::pre-expansion-name-resolver::type-3-alias - ✗ hashql-ast::lower::expander::pre-expansion-name-resolver::multi-segment-resolution - ✗ hashql-ast::lower::expander::pre-expansion-name-resolver::let-3-alias - ✗ hashql-ast::lower::expander::pre-expansion-name-resolver::newtype-3 - ✗ hashql-ast::lower::expander::pre-expansion-name-resolver::resolve-symbol - ✗ hashql-ast::lower::expander::pre-expansion-name-resolver::type-4 - ✗ hashql-ast::lower::expander::pre-expansion-name-resolver::alias-symbol - ✗ hashql-ast::lower::expander::pre-expansion-name-resolver::let-4-alias - ✗ hashql-ast::lower::expander::pre-expansion-name-resolver::resolve-generics - ✗ hashql-ast::lower::expander::pre-expansion-name-resolver::invalid-let-expr - ✗ hashql-ast::lower::expander::pre-expansion-name-resolver::let-3 - ✗ hashql-ast::lower::expander::pre-expansion-name-resolver::re-assign-prelude-diverging - ✗ hashql-ast::lower::expander::pre-expansion-name-resolver::let-4 - ✗ hashql-ast::lower::expander::pre-expansion-name-resolver::restoration-bindings - ✗ hashql-ast::lower::expander::pre-expansion-name-resolver::let-ident-generic - ✗ hashql-ast::lower::expander::pre-expansion-name-resolver::type-3 - ✗ hashql-ast::lower::type-extractor::generic-type-resolution - ✗ hashql-ast::lower::type-extractor::definition::constraints-parsing - -167 of 534 tests failed. - - -━━━━━━━━━━━━━━━━━━━━━━━━ FAILURES (167 of 544) ━━━━━━━━━━━━━━━━━━━━━━━━ - -[1/167] hashql-mir reify::monomorphized-closure -──────────────────────────────────────────────────────────────────────────────── -Expected trial to pass, but it failed -├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:390:24 -╰╴1 additional opaque attachment - -[2/167] hashql-hir reify::literal-type-annotation -──────────────────────────────────────────────────────────────────────────────── -Expected trial to pass, but it failed -├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:390:24 -╰╴1 additional opaque attachment - -[3/167] hashql-hir reify::variable-generics -──────────────────────────────────────────────────────────────────────────────── -Expected trial to pass, but it failed -├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:390:24 -╰╴1 additional opaque attachment - -[4/167] hashql-hir reify::nested-expressions -──────────────────────────────────────────────────────────────────────────────── -Expected trial to pass, but it failed -├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:390:24 -╰╴1 additional opaque attachment - -[5/167] hashql-hir lower::specialization::collect-custom-collect -──────────────────────────────────────────────────────────────────────────────── -Failed to verify annotation -├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:321:29 -├╴1 additional opaque attachment -│ -╰┬▶ unfulfilled annotation: DiagnosticAnnotation { category: None, severity: Error, message: "This is not a graph intrinsic operation", line: Some(6) } did not match any emitted diagnostics - │ ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:151:25 - │ - ╰▶ unexpected diagnostic: - error[lowering::expander::unresolved-variable]: Unresolved variable - ╭▸ - 6 │ ["fn", { "#tuple": [] }, { "#struct": { "graph": "_" } }, "_", "graph"], - │ ━━━━━ cannot find `graph` in this scope - │ - ├ help: check the spelling, or import the name with a `use` statement - ╰ note: this could be a typo, a name used outside its scope, or a missing declaration; if it is a function or type from another module, you may need to import it first - ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:171:21 - -[6/167] hashql-hir lower::alias-replacement::generic-reassignment -──────────────────────────────────────────────────────────────────────────────── -Failed to verify annotation -├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:321:29 -├╴1 additional opaque attachment -│ -╰┬▶ unfulfilled annotation: DiagnosticAnnotation { category: None, severity: Error, message: "additional type arguments are provided here", line: Some(10) } did not match any emitted diagnostics - │ ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:151:25 - │ - ├▶ unexpected diagnostic: - │ error[lowering::expander::intrinsic-generic-arguments]: Generic arguments on intrinsic - │ ╭▸ - │ 10 │ "foo", - │ │ ━━━━━━━━━━━ `foo` does not accept generic arguments - │ │ - │ ╰ help: remove the generic arguments from `foo` - │ ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:171:21 - │ - ├▶ unexpected diagnostic: - │ error[lowering::expander::intrinsic-generic-arguments]: Generic arguments on intrinsic - │ ╭▸ - │ 6 │ "core::math::add", - │ │ ━━━━━━━━━━━━ `add` does not accept generic arguments - │ │ - │ ╰ help: remove the generic arguments from `add` - │ ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:171:21 - │ - ├▶ unexpected diagnostic: - │ error[lowering::expander::unresolved-variable]: Unresolved variable - │ ╭▸ - │ 10 │ "foo", - │ │ ━━━━━━ cannot find `Number` in this scope - │ │ - │ ├ help: check the spelling, or import the name with a `use` statement - │ ╰ note: this could be a typo, a name used outside its scope, or a missing declaration; if it is a function or type from another module, you may need to import it first - │ ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:171:21 - │ - ╰▶ unexpected diagnostic: - error[lowering::expander::unresolved-variable]: Unresolved variable - ╭▸ - 6 │ "core::math::add", - │ ━━━━━━━ cannot find `Integer` in this scope - │ - ├ help: check the spelling, or import the name with a `use` statement - ╰ note: this could be a typo, a name used outside its scope, or a missing declaration; if it is a function or type from another module, you may need to import it first - ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:171:21 - -[7/167] hashql-hir lower::alias-replacement::generics -──────────────────────────────────────────────────────────────────────────────── -Expected trial to pass, but it failed -├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:390:24 -╰╴1 additional opaque attachment - -[8/167] hashql-hir lower::ctor::explicit-type -──────────────────────────────────────────────────────────────────────────────── -Expected trial to pass, but it failed -├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:390:24 -╰╴1 additional opaque attachment - -[9/167] hashql-hir lower::ctor::too-many-arguments -──────────────────────────────────────────────────────────────────────────────── -Failed to verify annotation -├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:321:29 -├╴1 additional opaque attachment -│ -╰┬▶ unfulfilled annotation: DiagnosticAnnotation { category: None, severity: Error, message: "Remove this argument", line: Some(8) } did not match any emitted diagnostics - │ ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:151:25 - │ - ├▶ unexpected diagnostic: - │ error[lowering::expander::unresolved-variable]: Unresolved variable - │ ╭▸ - │ 8 │ "Person", - │ │ ━━━━━━━ cannot find `Integer` in this scope - │ │ - │ ├ help: check the spelling, or import the name with a `use` statement - │ ╰ note: this could be a typo, a name used outside its scope, or a missing declaration; if it is a function or type from another module, you may need to import it first - │ ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:171:21 - │ - ├▶ unexpected diagnostic: - │ error[lowering::expander::unresolved-variable]: Unresolved variable - │ ╭▸ - │ 8 │ "Person", - │ │ ━━━━━━ cannot find `String` in this scope - │ │ - │ ├ help: check the spelling, or import the name with a `use` statement - │ ╰ note: this could be a typo, a name used outside its scope, or a missing declaration; if it is a function or type from another module, you may need to import it first - │ ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:171:21 - │ - ╰▶ unexpected diagnostic: - error[lowering::expander::unresolved-variable]: Unresolved variable - ╭▸ - 8 │ "Person", - │ ━━━━━━ cannot find `Number` in this scope - │ - ├ help: check the spelling, or import the name with a `use` statement - ╰ note: this could be a typo, a name used outside its scope, or a missing declaration; if it is a function or type from another module, you may need to import it first - ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:171:21 - -[10/167] hashql-hir lower::ctor::not-enough-arguments -──────────────────────────────────────────────────────────────────────────────── -Failed to verify annotation -├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:321:29 -├╴1 additional opaque attachment -│ -╰┬▶ unfulfilled annotation: DiagnosticAnnotation { category: None, severity: Error, message: "Add missing parameter `U`", line: Some(8) } did not match any emitted diagnostics - │ ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:151:25 - │ - ╰▶ unexpected diagnostic: - error[lowering::expander::unresolved-variable]: Unresolved variable - ╭▸ - 8 │ "Person", - │ ━━━━━━ cannot find `Number` in this scope - │ - ├ help: check the spelling, or import the name with a `use` statement - ╰ note: this could be a typo, a name used outside its scope, or a missing declaration; if it is a function or type from another module, you may need to import it first - ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:171:21 - -[11/167] hashql-hir lower::inference::bind-arguments-explicit -──────────────────────────────────────────────────────────────────────────────── -Failed to verify annotation -├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:321:29 -├╴1 additional opaque attachment -│ -╰┬▶ unfulfilled annotation: DiagnosticAnnotation { category: None, severity: Error, message: "Type variable has incompatible upper and lower bounds", line: Some(4) } did not match any emitted diagnostics - │ ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:151:25 - │ - ├▶ unexpected diagnostic: - │ error[lowering::expander::intrinsic-generic-arguments]: Generic arguments on intrinsic - │ ╭▸ - │ 4 │ "`+`", - │ │ ━━━━━━━━━━━━━━━━━━━ `+` does not accept generic arguments - │ │ - │ ╰ help: remove the generic arguments from `+` - │ ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:171:21 - │ - ├▶ unexpected diagnostic: - │ error[lowering::expander::unresolved-variable]: Unresolved variable - │ ╭▸ - │ 4 │ "`+`", - │ │ ━━━━━━ cannot find `Number` in this scope - │ │ - │ ├ help: check the spelling, or import the name with a `use` statement - │ ╰ note: this could be a typo, a name used outside its scope, or a missing declaration; if it is a function or type from another module, you may need to import it first - │ ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:171:21 - │ - ╰▶ unexpected diagnostic: - error[lowering::expander::unresolved-variable]: Unresolved variable - ╭▸ - 4 │ "`+`", - │ ━━━━━━ cannot find `Number` in this scope - │ - ├ help: check the spelling, or import the name with a `use` statement - ╰ note: this could be a typo, a name used outside its scope, or a missing declaration; if it is a function or type from another module, you may need to import it first - ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:171:21 - -[12/167] hashql-hir lower::inference::bind-arguments -──────────────────────────────────────────────────────────────────────────────── -Expected trial to pass, but it failed -├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:390:24 -╰╴1 additional opaque attachment - -[13/167] hashql-hir lower::inference::infer-argument -──────────────────────────────────────────────────────────────────────────────── -Expected trial to pass, but it failed -├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:390:24 -╰╴1 additional opaque attachment - -[14/167] hashql-hir lower::inference::ctor-bounded-invalid -──────────────────────────────────────────────────────────────────────────────── -Failed to verify annotation -├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:321:29 -├╴1 additional opaque attachment -│ -╰┬▶ unfulfilled annotation: DiagnosticAnnotation { category: None, severity: Error, message: "Type variable has incompatible upper and lower bounds", line: Some(3) } did not match any emitted diagnostics - │ ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:151:25 - │ - ├▶ unexpected diagnostic: - │ error[lowering::type-extractor::unbound-type-variable]: Unbound type variable - │ ╭▸ - │ 3 │ ["newtype", "Person", "T", ["Person", { "#literal": "2" }]] - │ │ ━━━━━━ Cannot find type 'Number' - │ │ - │ ├ note: This is likely a compiler bug in the name resolution system. The type checker has encountered a name that wasn't properly resolved earlier in compilation. The name resolution pass should have caught this error or provided a more specific error message. - │ ├ help: This is a bug in the compiler, not an issue with your code. - │ ├ help: Please report this issue along with a minimal code example that reproduces the error. - │ ╰ note: Internal compiler errors indicate a bug in the compiler itself that needs to be fixed. - │ - │ We would appreciate if you could file a GitHub or Linear issue and reference this error. - │ - │ When reporting this issue, please include your query, any relevant type definitions, and the complete error message shown above. - │ ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:171:21 - │ - ├▶ unexpected diagnostic: - │ error[lowering::type-extractor::unused-generic-parameter]: Generic parameter not used in type definition - │ ╭▸ - │ 1 │ //@ run: fail - │ │ ─ ...but never used in this type definition - │ 2 │ //@ description: Checks that type constructor bounded generic parameter (T: Number) violation is caught during type inference. - │ 3 │ ["newtype", "Person", "T", ["Person", { "#literal": "2" }]] - │ │ ━━━━━━━━━ Generic parameter `T` declared here... - │ │ - │ ├ help: Generic parameter `T` is declared but not referenced. Either remove the unused parameter or incorporate it into your type definition. - │ ╰ note: Each generic parameter should serve a purpose in parameterizing the type. Unused parameters can make code harder to understand and may indicate a design oversight or incomplete implementation. They are unconstrained variables, and therefore considered erroneous. - │ ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:171:21 - │ - ╰▶ unexpected diagnostic: - error[lowering::expander::unresolved-variable]: Unresolved variable - ╭▸ - 3 │ ["newtype", "Person", "T", ["Person", { "#literal": "2" }]] - │ ━━━━━━ cannot find `Number` in this scope - │ - ├ help: check the spelling, or import the name with a `use` statement - ╰ note: this could be a typo, a name used outside its scope, or a missing declaration; if it is a function or type from another module, you may need to import it first - ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:171:21 - -[15/167] hashql-hir lower::inference::closure-call-unconstrained-direct -──────────────────────────────────────────────────────────────────────────────── -Expected trial to pass, but it failed -├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:390:24 -╰╴1 additional opaque attachment - -[16/167] hashql-hir lower::checking::dict -──────────────────────────────────────────────────────────────────────────────── -Expected trial to pass, but it failed -├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:390:24 -╰╴1 additional opaque attachment - -[17/167] hashql-hir lower::checking::bind-arguments -──────────────────────────────────────────────────────────────────────────────── -Expected trial to pass, but it failed -├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:390:24 -╰╴1 additional opaque attachment - -[18/167] hashql-hir lower::checking::dict-empty -──────────────────────────────────────────────────────────────────────────────── -Expected trial to pass, but it failed -├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:390:24 -╰╴1 additional opaque attachment - -[19/167] hashql-hir lower::checking::list -──────────────────────────────────────────────────────────────────────────────── -Expected trial to pass, but it failed -├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:390:24 -╰╴1 additional opaque attachment - -[20/167] hashql-hir lower::checking::ctor-bounded -──────────────────────────────────────────────────────────────────────────────── -Expected trial to pass, but it failed -├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:390:24 -╰╴1 additional opaque attachment - -[21/167] hashql-hir lower::checking::tuple -──────────────────────────────────────────────────────────────────────────────── -Expected trial to pass, but it failed -├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:390:24 -╰╴1 additional opaque attachment - -[22/167] hashql-hir lower::checking::ctor-bounded-invalid -──────────────────────────────────────────────────────────────────────────────── -Failed to verify annotation -├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:321:29 -├╴1 additional opaque attachment -│ -╰┬▶ unfulfilled annotation: DiagnosticAnnotation { category: None, severity: Error, message: "Type variable has incompatible upper and lower bounds", line: Some(3) } did not match any emitted diagnostics - │ ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:151:25 - │ - ├▶ unexpected diagnostic: - │ error[lowering::type-extractor::unbound-type-variable]: Unbound type variable - │ ╭▸ - │ 3 │ ["newtype", "Person", "T", ["Person", { "#literal": "2" }]] - │ │ ━━━━━━ Cannot find type 'Number' - │ │ - │ ├ note: This is likely a compiler bug in the name resolution system. The type checker has encountered a name that wasn't properly resolved earlier in compilation. The name resolution pass should have caught this error or provided a more specific error message. - │ ├ help: This is a bug in the compiler, not an issue with your code. - │ ├ help: Please report this issue along with a minimal code example that reproduces the error. - │ ╰ note: Internal compiler errors indicate a bug in the compiler itself that needs to be fixed. - │ - │ We would appreciate if you could file a GitHub or Linear issue and reference this error. - │ - │ When reporting this issue, please include your query, any relevant type definitions, and the complete error message shown above. - │ ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:171:21 - │ - ├▶ unexpected diagnostic: - │ error[lowering::type-extractor::unused-generic-parameter]: Generic parameter not used in type definition - │ ╭▸ - │ 1 │ //@ run: fail - │ │ ─ ...but never used in this type definition - │ 2 │ //@ description: Checks that type constructor bounded generic parameter (T: Number) violation is caught during type checking. - │ 3 │ ["newtype", "Person", "T", ["Person", { "#literal": "2" }]] - │ │ ━━━━━━━━━ Generic parameter `T` declared here... - │ │ - │ ├ help: Generic parameter `T` is declared but not referenced. Either remove the unused parameter or incorporate it into your type definition. - │ ╰ note: Each generic parameter should serve a purpose in parameterizing the type. Unused parameters can make code harder to understand and may indicate a design oversight or incomplete implementation. They are unconstrained variables, and therefore considered erroneous. - │ ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:171:21 - │ - ╰▶ unexpected diagnostic: - error[lowering::expander::unresolved-variable]: Unresolved variable - ╭▸ - 3 │ ["newtype", "Person", "T", ["Person", { "#literal": "2" }]] - │ ━━━━━━ cannot find `Number` in this scope - │ - ├ help: check the spelling, or import the name with a `use` statement - ╰ note: this could be a typo, a name used outside its scope, or a missing declaration; if it is a function or type from another module, you may need to import it first - ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:171:21 - -[23/167] hashql-hir lower::checking::argument-count-mismatch -──────────────────────────────────────────────────────────────────────────────── -Failed to verify annotation -├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:321:29 -├╴1 additional opaque attachment -│ -╰┬▶ unfulfilled annotation: DiagnosticAnnotation { category: None, severity: Error, message: "This closure requires exactly 2 generic arguments", line: Some(14) } did not match any emitted diagnostics - │ ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:151:25 - │ - ╰▶ unexpected diagnostic: - error[lowering::expander::unresolved-variable]: Unresolved variable - ╭▸ - 14 │ "foo", - │ ━━━━━━━ cannot find `Integer` in this scope - │ - ├ help: check the spelling, or import the name with a `use` statement - ╰ note: this could be a typo, a name used outside its scope, or a missing declaration; if it is a function or type from another module, you may need to import it first - ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:171:21 - -[24/167] hashql-hir lower::checking::closure-call-unconstrained-direct -──────────────────────────────────────────────────────────────────────────────── -Expected trial to pass, but it failed -├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:390:24 -╰╴1 additional opaque attachment - -[25/167] hashql-hir lower::checking::struct -──────────────────────────────────────────────────────────────────────────────── -Expected trial to pass, but it failed -├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:390:24 -╰╴1 additional opaque attachment - -[26/167] hashql-hir lower::checking::list-empty -──────────────────────────────────────────────────────────────────────────────── -Expected trial to pass, but it failed -├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:390:24 -╰╴1 additional opaque attachment - -[27/167] hashql-ast lower::name-mangler::path-arguments -──────────────────────────────────────────────────────────────────────────────── -Expected trial to pass, but it failed -├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:390:24 -╰╴1 additional opaque attachment - -[28/167] hashql-ast lower::name-mangler::onion -──────────────────────────────────────────────────────────────────────────────── -Expected trial to pass, but it failed -├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:390:24 -╰╴1 additional opaque attachment - -[29/167] hashql-ast lower::name-mangler::absolute-path -──────────────────────────────────────────────────────────────────────────────── -Expected trial to pass, but it failed -├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:390:24 -╰╴1 additional opaque attachment - -[30/167] hashql-ast lower::name-mangler::type-generics-constraints -──────────────────────────────────────────────────────────────────────────────── -Expected trial to pass, but it failed -├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:390:24 -╰╴1 additional opaque attachment - -[31/167] hashql-ast lower::name-mangler::type-generics-nested -──────────────────────────────────────────────────────────────────────────────── -Expected trial to pass, but it failed -├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:390:24 -╰╴1 additional opaque attachment - -[32/167] hashql-ast lower::name-mangler::type -──────────────────────────────────────────────────────────────────────────────── -Expected trial to pass, but it failed -├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:390:24 -╰╴1 additional opaque attachment - -[33/167] hashql-ast lower::name-mangler::newtype -──────────────────────────────────────────────────────────────────────────────── -Expected trial to pass, but it failed -├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:390:24 -╰╴1 additional opaque attachment - -[34/167] hashql-ast lower::name-mangler::diverging -──────────────────────────────────────────────────────────────────────────────── -Expected trial to pass, but it failed -├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:390:24 -╰╴1 additional opaque attachment - -[35/167] hashql-ast lower::name-mangler::newtype-generics -──────────────────────────────────────────────────────────────────────────────── -Expected trial to pass, but it failed -├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:390:24 -╰╴1 additional opaque attachment - -[36/167] hashql-ast lower::name-mangler::fn-args -──────────────────────────────────────────────────────────────────────────────── -Expected trial to pass, but it failed -├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:390:24 -╰╴1 additional opaque attachment - -[37/167] hashql-ast lower::name-mangler::type-generics-interdependent-generics -──────────────────────────────────────────────────────────────────────────────── -Expected trial to pass, but it failed -├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:390:24 -╰╴1 additional opaque attachment - -[38/167] hashql-ast lower::name-mangler::path -──────────────────────────────────────────────────────────────────────────────── -Expected trial to pass, but it failed -├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:390:24 -╰╴1 additional opaque attachment - -[39/167] hashql-ast lower::name-mangler::fn-types -──────────────────────────────────────────────────────────────────────────────── -Expected trial to pass, but it failed -├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:390:24 -╰╴1 additional opaque attachment - -[40/167] hashql-ast lower::sanitizer::special-form-value -──────────────────────────────────────────────────────────────────────────────── -Failed to verify annotation -├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:321:29 -├╴1 additional opaque attachment -│ -╰┬▶ unfulfilled annotation: DiagnosticAnnotation { category: None, severity: Error, message: "Special form cannot be used as a value", line: Some(5) } did not match any emitted diagnostics - │ ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:151:25 - │ - ├▶ unexpected diagnostic: - │ error[expander::unresolved-variable]: Unresolved variable - │ ╭▸ - │ 7 │ "a" - │ │ ━ cannot find `a` in this scope - │ │ - │ ╰ note: this could be a typo, a name used outside its scope, or a missing declaration; if it is a function or type from another module, you may need to import it first - │ help: a similar imported name exists - │ ╭╴ - │ 7 - "a" - │ 7 + "↑√∛ccesss" - │ ╰╴ - │ ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:171:21 - │ - ╰▶ unexpected diagnostic: - error[expander::unresolved-variable]: Unresolved variable - ╭▸ - 4 │ "add", - │ ━━━ cannot find `add` in this scope - │ - ├ help: bring it into scope: `use ::core::math::add in` - ╰ note: this could be a typo, a name used outside its scope, or a missing declaration; if it is a function or type from another module, you may need to import it first - help: use one of these fully qualified paths - ╭╴ - 4 │ "::core::math::add", - ╰╴ ++++++++++++++ - ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:171:21 - -[41/167] hashql-ast lower::sanitizer::special-form-type-position -──────────────────────────────────────────────────────────────────────────────── -Failed to verify annotation -├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:321:29 -├╴1 additional opaque attachment -│ -╰┬▶ unfulfilled annotation: DiagnosticAnnotation { category: None, severity: Error, message: "Special form cannot be used as a type", line: Some(6) } did not match any emitted diagnostics - │ ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:151:25 - │ - ╰▶ unexpected diagnostic: - error[expander::item-not-found]: Item not found - ╭▸ - 6 │ "::kernel::special_form::let", - │ ┬─────────── ━━━ cannot find `let` in module `::kernel::special_form` - │ │ - │ looked in this module - │ - ╰ help: check the spelling and ensure the item is exported - ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:171:21 - -[42/167] hashql-ast lower::sanitizer::constraint -──────────────────────────────────────────────────────────────────────────────── -Failed to verify annotation -├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:321:29 -├╴1 additional opaque attachment -│ -╰┬▶ unfulfilled annotation: DiagnosticAnnotation { category: None, severity: Error, message: "Remove this constraint from 'T'", line: Some(4) } did not match any emitted diagnostics - │ ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:151:25 - │ - ├▶ unexpected diagnostic: - │ error[expander::unresolved-variable]: Unresolved variable - │ ╭▸ - │ 4 │ "add", - │ │ ━━━ cannot find `add` in this scope - │ │ - │ ├ help: bring it into scope: `use ::core::math::add in` - │ ╰ note: this could be a typo, a name used outside its scope, or a missing declaration; if it is a function or type from another module, you may need to import it first - │ help: use one of these fully qualified paths - │ ╭╴ - │ 4 │ "::core::math::add", - │ ╰╴ ++++++++++++++ - │ ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:171:21 - │ - ╰▶ unexpected diagnostic: - error[expander::unresolved-variable]: Unresolved variable - ╭▸ - 4 │ "add", - │ ━━━━━━ cannot find `Number` in this scope - │ - ├ help: check the spelling, or import the name with a `use` statement - ╰ note: this could be a typo, a name used outside its scope, or a missing declaration; if it is a function or type from another module, you may need to import it first - ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:171:21 - -[43/167] hashql-ast lower::expander::import-resolver::generic-argument-absolute-path -──────────────────────────────────────────────────────────────────────────────── -Failed to verify annotation -├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:321:29 -├╴1 additional opaque attachment -│ -╰┬▶ unfulfilled annotation: DiagnosticAnnotation { category: None, severity: Error, message: "Remove this generic argument", line: Some(3) } did not match any emitted diagnostics - │ ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:151:25 - │ - ├▶ unexpected diagnostic: - │ error[expander::generic-arguments-in-module]: Generic arguments in module path - │ ╭▸ - │ 3 │ ["::math::add", { "#literal": 2 }, { "#literal": 3 }] - │ │ ━ generic argument not allowed here - │ │ - │ ├ help: move the generic arguments to the final segment of the path, or remove them - │ ╰ note: modules are not generic; only the final item in a path can be parameterized - │ ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:171:21 - │ - ╰▶ unexpected diagnostic: - error[expander::unresolved-variable]: Unresolved variable - ╭▸ - 3 │ ["::math::add", { "#literal": 2 }, { "#literal": 3 }] - │ ━ cannot find `T` in this scope - │ - ╰ note: this could be a typo, a name used outside its scope, or a missing declaration; if it is a function or type from another module, you may need to import it first - help: a similar imported name exists - ╭╴ - 3 - ["::math::add", { "#literal": 2 }, { "#literal": 3 }] - 3 + ["::math<||~↑√∛>::add", { "#literal": 2 }, { "#literal": 3 }] - ╰╴ - ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:171:21 - -[44/167] hashql-ast lower::expander::import-resolver::generic-argument-use-path -──────────────────────────────────────────────────────────────────────────────── -Failed to verify annotation -├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:321:29 -├╴1 additional opaque attachment -│ -╰┬▶ unfulfilled annotation: DiagnosticAnnotation { category: None, severity: Error, message: "Generic arguments are not allowed here", line: Some(3) } did not match any emitted diagnostics - │ ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:151:25 - │ - ├▶ unexpected diagnostic: - │ error[expander::item-not-found]: Item not found - │ ╭▸ - │ 3 │ ["use", "kernel::type", { "#tuple": ["T"] }, "_"] - │ │ ┬─── ━ cannot find `T` in module `kernel::type` - │ │ │ - │ │ looked in this module - │ ╰╴ - │ help: a similar item exists in this module - │ ╭╴ - │ 3 - ["use", "kernel::type", { "#tuple": ["T"] }, "_"] - │ 3 + ["use", "kernel::type", { "#tuple": ["NumberStringUnionUnknown|"] }, "_"] - │ ╰╴ - │ ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:171:21 - │ - ╰▶ unexpected diagnostic: - error[expander::use-path-generic-arguments]: Generic arguments in use path - ╭▸ - 3 │ ["use", "kernel::type", { "#tuple": ["T"] }, "_"] - │ ━━━━━━━━━━━━━━━ generic arguments are not allowed in `use` paths - │ - ╰ help: remove the generic arguments; `use` imports modules and items, which do not take type parameters at the import site - ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:171:21 - -[45/167] hashql-ast lower::expander::import-resolver::module-not-found -──────────────────────────────────────────────────────────────────────────────── -Failed to verify annotation -├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:321:29 -├╴1 additional opaque attachment -│ -╰┬▶ unfulfilled annotation: DiagnosticAnnotation { category: None, severity: Error, message: "Module 'foo' not found", line: Some(3) } did not match any emitted diagnostics - │ ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:151:25 - │ - ╰▶ unexpected diagnostic: - error[expander::module-not-found]: Module not found - ╭▸ - 3 │ ["use", "kernel::foo", { "#tuple": ["baz"] }, "_"] - │ ┬───── ━━━ cannot find module `foo` in `kernel` - │ │ - │ looked in this module - │ - ├ help: check the module name and ensure it is exported from its parent - ╰ note: only exported sub-modules are reachable via `::` - ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:171:21 - -[46/167] hashql-ast lower::expander::import-resolver::generic-arguments-in-final-segment -──────────────────────────────────────────────────────────────────────────────── -Expected trial to pass, but it failed -├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:390:24 -╰╴1 additional opaque attachment - -[47/167] hashql-ast lower::expander::import-resolver::unresolver-variable -──────────────────────────────────────────────────────────────────────────────── -Failed to verify annotation -├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:321:29 -├╴1 additional opaque attachment -│ -╰┬▶ unfulfilled annotation: DiagnosticAnnotation { category: None, severity: Error, message: "Cannot find variable 'föo'", line: Some(11) } did not match any emitted diagnostics - │ ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:151:25 - │ - ╰▶ unexpected diagnostic: - error[expander::unresolved-variable]: Unresolved variable - ╭▸ - 11 │ "föo" - │ ━━━ cannot find `föo` in this scope - │ - ╰ note: this could be a typo, a name used outside its scope, or a missing declaration; if it is a function or type from another module, you may need to import it first - help: a similar local binding exists - ╭╴ - 11 - "föo" - 11 + "foo" - ╰╴ - ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:171:21 - -[48/167] hashql-ast lower::expander::import-resolver::rollback -──────────────────────────────────────────────────────────────────────────────── -Failed to verify annotation -├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:321:29 -├╴1 additional opaque attachment -│ -╰┬▶ unfulfilled annotation: DiagnosticAnnotation { category: None, severity: Error, message: "Cannot find variable 'shl'", line: Some(7) } did not match any emitted diagnostics - │ ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:151:25 - │ - ╰▶ unexpected diagnostic: - error[expander::unresolved-variable]: Unresolved variable - ╭▸ - 7 │ "shl" - │ ━━━ cannot find `shl` in this scope - │ - ├ help: bring it into scope: `use ::core::bits::shl in` - ╰ note: this could be a typo, a name used outside its scope, or a missing declaration; if it is a function or type from another module, you may need to import it first - help: use one of these fully qualified paths - ╭╴ - 7 │ "::core::bits::shl" - ╰╴ ++++++++++++++ - ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:171:21 - -[49/167] hashql-ast lower::expander::import-resolver::continue::unresolved-type -──────────────────────────────────────────────────────────────────────────────── -Failed to verify annotation -├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:321:29 -├╴1 additional opaque attachment -│ -╰┬▶ unfulfilled annotation: DiagnosticAnnotation { category: None, severity: Error, message: "Cannot find variable 'T'", line: Some(7) } did not match any emitted diagnostics - │ ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:151:25 - │ - ╰▶ unexpected diagnostic: - error[expander::unresolved-variable]: Unresolved variable - ╭▸ - 7 │ "T", - │ ━ cannot find `T` in this scope - │ - ╰ note: this could be a typo, a name used outside its scope, or a missing declaration; if it is a function or type from another module, you may need to import it first - help: a similar local binding exists - ╭╴ - 7 - "T", - 7 + "Foo", - ╰╴ - help: a similar imported name exists - ╭╴ - 7 - "T", - 7 + "StringUnionUnknownUrl|", - ╰╴ - ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:171:21 - -[50/167] hashql-ast lower::expander::import-resolver::continue::unresolved-value -──────────────────────────────────────────────────────────────────────────────── -Failed to verify annotation -├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:321:29 -├╴1 additional opaque attachment -│ -╰┬▶ unfulfilled annotation: DiagnosticAnnotation { category: None, severity: Error, message: "Cannot find variable 'shl'", line: Some(5) } did not match any emitted diagnostics - │ ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:151:25 - │ - ╰▶ unexpected diagnostic: - error[expander::unresolved-variable]: Unresolved variable - ╭▸ - 5 │ "shl", - │ ━━━ cannot find `shl` in this scope - │ - ├ help: bring it into scope: `use ::core::bits::shl in` - ╰ note: this could be a typo, a name used outside its scope, or a missing declaration; if it is a function or type from another module, you may need to import it first - help: use one of these fully qualified paths - ╭╴ - 5 │ "::core::bits::shl", - ╰╴ ++++++++++++++ - ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:171:21 - -[51/167] hashql-ast lower::expander::import-resolver::continue::use-not-found -──────────────────────────────────────────────────────────────────────────────── -Failed to verify annotation -├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:321:29 -├╴1 additional opaque attachment -│ -╰┬▶ unfulfilled annotation: DiagnosticAnnotation { category: None, severity: Error, message: "Module 'foo' not found", line: Some(6) } did not match any emitted diagnostics - │ ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:151:25 - │ - ├▶ unexpected diagnostic: - │ error[expander::unresolved-variable]: Unresolved variable - │ ╭▸ - │ 9 │ ["add", { "#literal": 1 }, { "#literal": 2 }] - │ │ ━━━ cannot find `add` in this scope - │ │ - │ ├ help: bring it into scope: `use ::core::math::add in` - │ ╰ note: this could be a typo, a name used outside its scope, or a missing declaration; if it is a function or type from another module, you may need to import it first - │ help: use one of these fully qualified paths - │ ╭╴ - │ 9 │ ["::core::math::add", { "#literal": 1 }, { "#literal": 2 }] - │ ╰╴ ++++++++++++++ - │ ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:171:21 - │ - ╰▶ unexpected diagnostic: - error[expander::module-not-found]: Module not found - ╭▸ - 6 │ "kernel::foo", - │ ┬───── ━━━ cannot find module `foo` in `kernel` - │ │ - │ looked in this module - │ - ├ help: check the module name and ensure it is exported from its parent - ╰ note: only exported sub-modules are reachable via `::` - ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:171:21 - -[52/167] hashql-ast lower::expander::import-resolver::continue::unresolved-nested -──────────────────────────────────────────────────────────────────────────────── -Failed to verify annotation -├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:321:29 -├╴1 additional opaque attachment -│ -╰┬▶ unfulfilled annotation: DiagnosticAnnotation { category: None, severity: Error, message: "Cannot find variable 'Bar'", line: Some(6) } did not match any emitted diagnostics - │ ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:151:25 - │ - ╰▶ unexpected diagnostic: - error[expander::unresolved-variable]: Unresolved variable - ╭▸ - 6 │ "Foo", - │ ━━━ cannot find `Bar` in this scope - │ - ├ help: check the spelling, or import the name with a `use` statement - ╰ note: this could be a typo, a name used outside its scope, or a missing declaration; if it is a function or type from another module, you may need to import it first - ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:171:21 - -[53/167] hashql-ast lower::expander::import-resolver::item-not-found -──────────────────────────────────────────────────────────────────────────────── -Failed to verify annotation -├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:321:29 -├╴1 additional opaque attachment -│ -╰┬▶ unfulfilled annotation: DiagnosticAnnotation { category: None, severity: Error, message: "'lshift' not found in module 'core::bits'", line: Some(3) } did not match any emitted diagnostics - │ ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:151:25 - │ - ╰▶ unexpected diagnostic: - error[expander::item-not-found]: Item not found - ╭▸ - 3 │ ["use", "core::bits", { "#tuple": ["lshift"] }, "_"] - │ ┬─── ━━━━━━ cannot find `lshift` in module `core::bits` - │ │ - │ looked in this module - │ - ╰ help: check the spelling and ensure the item is exported - ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:171:21 - -[54/167] hashql-ast lower::expander::import-resolver::glob-not-found -──────────────────────────────────────────────────────────────────────────────── -Failed to verify annotation -├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:321:29 -├╴1 additional opaque attachment -│ -╰┬▶ unfulfilled annotation: DiagnosticAnnotation { category: None, severity: Error, message: "Module 'foo' not found", line: Some(3) } did not match any emitted diagnostics - │ ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:151:25 - │ - ╰▶ unexpected diagnostic: - error[expander::module-not-found]: Module not found - ╭▸ - 3 │ ["use", "kernel::foo", "*", "_"] - │ ┬───── ━━━ cannot find module `foo` in `kernel` - │ │ - │ looked in this module - │ - ├ help: check the module name and ensure it is exported from its parent - ╰ note: only exported sub-modules are reachable via `::` - ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:171:21 - -[55/167] hashql-ast lower::expander::special-form-expander::access-2 -──────────────────────────────────────────────────────────────────────────────── -Expected trial to pass, but it failed -├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:390:24 -╰╴1 additional opaque attachment - -[56/167] hashql-ast lower::expander::special-form-expander::as-1 -──────────────────────────────────────────────────────────────────────────────── -Failed to verify annotation -├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:321:29 -├╴1 additional opaque attachment -│ -╰┬▶ unfulfilled annotation: DiagnosticAnnotation { category: None, severity: Error, message: "Add missing arguments", line: Some(3) } did not match any emitted diagnostics - │ ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:151:25 - │ - ╰▶ unexpected diagnostic: - error[expander::invalid-argument-count]: Invalid argument count - ╭▸ - 3 │ ["::kernel::special_form::as", { "#literal": true }] - │ ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ expected 2 arguments to `as`, found 1 - │ - ├ help: use `(as value type)` - ╰ note: the first argument is the value to cast and the second is the target type - ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:171:21 - -[57/167] hashql-ast lower::expander::special-form-expander::fn-params-type -──────────────────────────────────────────────────────────────────────────────── -Failed to verify annotation -├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:321:29 -├╴1 additional opaque attachment -│ -╰┬▶ unfulfilled annotation: DiagnosticAnnotation { category: None, severity: Error, message: "Remove this type annotation", line: Some(8) } did not match any emitted diagnostics - │ ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:151:25 - │ - ├▶ unexpected diagnostic: - │ error[expander::unresolved-variable]: Unresolved variable - │ ╭▸ - │ 12 │ ["+", "a", "b"] - │ │ ━ cannot find `b` in this scope - │ │ - │ ╰ note: this could be a typo, a name used outside its scope, or a missing declaration; if it is a function or type from another module, you may need to import it first - │ help: a similar imported name exists - │ ╭╴ - │ 12 - ["+", "a", "b"] - │ 12 + ["+", "a", "~↑√∛cbrt"] - │ ╰╴ - │ ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:171:21 - │ - ├▶ unexpected diagnostic: - │ error[expander::unresolved-variable]: Unresolved variable - │ ╭▸ - │ 12 │ ["+", "a", "b"] - │ │ ━ cannot find `a` in this scope - │ │ - │ ╰ note: this could be a typo, a name used outside its scope, or a missing declaration; if it is a function or type from another module, you may need to import it first - │ help: a similar imported name exists - │ ╭╴ - │ 12 - ["+", "a", "b"] - │ 12 + ["+", "↑√∛ccesss", "b"] - │ ╰╴ - │ ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:171:21 - │ - ╰▶ unexpected diagnostic: - error[expander::fn-params-type-annotation]: Type annotation on parameter list - ╭▸ - 8 │ "#type": "Int" - │ ━━━ type annotation is not allowed on the parameter list - │ - ╰ help: remove the type annotation; each parameter already declares its type individually as `(name: type)` - ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:171:21 - -[58/167] hashql-ast lower::expander::special-form-expander::use-struct-type -──────────────────────────────────────────────────────────────────────────────── -Failed to verify annotation -├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:321:29 -├╴1 additional opaque attachment -│ -╰┬▶ unfulfilled annotation: DiagnosticAnnotation { category: None, severity: Error, message: "Remove this type annotation", line: Some(8) } did not match any emitted diagnostics - │ ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:151:25 - │ - ├▶ unexpected diagnostic: - │ error[expander::unresolved-variable]: Unresolved variable - │ ╭▸ - │ 11 │ "x" - │ │ ━ cannot find `x` in this scope - │ │ - │ ╰ note: this could be a typo, a name used outside its scope, or a missing declaration; if it is a function or type from another module, you may need to import it first - │ help: a similar imported name exists - │ ╭╴ - │ 11 - "x" - │ 11 + "~↑√∛index" - │ ╰╴ - │ ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:171:21 - │ - ╰▶ unexpected diagnostic: - error[expander::package-not-found]: Package not found - ╭▸ - 5 │ "::math", - │ ┬─┯━━━ - │ │ │ - │ │ cannot find package `math` - │ in this path - │ - ├ help: check the package name, or add it to the project dependencies - ╰ note: absolute paths start from an installed package - ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:171:21 - -[59/167] hashql-ast lower::expander::special-form-expander::type-generic-absolute-path -──────────────────────────────────────────────────────────────────────────────── -Failed to verify annotation -├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:321:29 -├╴1 additional opaque attachment -│ -╰┬▶ unfulfilled annotation: DiagnosticAnnotation { category: None, severity: Error, message: "Generic arguments must be simple identifiers", line: Some(5) } did not match any emitted diagnostics - │ ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:151:25 - │ - ├▶ unexpected diagnostic: - │ error[expander::unresolved-variable]: Unresolved variable - │ ╭▸ - │ 7 │ { "#struct": { "foo": "Bar" } }, - │ │ ━━━ cannot find `Bar` in this scope - │ │ - │ ├ help: check the spelling, or import the name with a `use` statement - │ ╰ note: this could be a typo, a name used outside its scope, or a missing declaration; if it is a function or type from another module, you may need to import it first - │ ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:171:21 - │ - ╰▶ unexpected diagnostic: - error[expander::invalid-generic-argument]: Invalid generic argument - ╭▸ - 5 │ "Foo<::foo::Bar>", - │ ━━━━━━━━━━ expected a simple type parameter - │ - ├ help: use a simple identifier like `T`, not a qualified path - ╰ note: generic parameters are declared as `Name` for unconstrained or `Name` for constrained parameters - ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:171:21 - -[60/167] hashql-ast lower::expander::special-form-expander::type-expr-invalid -──────────────────────────────────────────────────────────────────────────────── -Failed to verify annotation -├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:321:29 -├╴1 additional opaque attachment -│ -╰┬▶ unfulfilled annotation: DiagnosticAnnotation { category: None, severity: Error, message: "Replace this as with a proper type expression", line: Some(13) } did not match any emitted diagnostics - │ ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:151:25 - │ - ├▶ unfulfilled annotation: DiagnosticAnnotation { category: None, severity: Error, message: "Replace this literal with a type name", line: Some(16) } did not match any emitted diagnostics - │ ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:151:25 - │ - ├▶ unfulfilled annotation: DiagnosticAnnotation { category: None, severity: Error, message: "Replace this list with a proper type expression", line: Some(19) } did not match any emitted diagnostics - │ ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:151:25 - │ - ├▶ unfulfilled annotation: DiagnosticAnnotation { category: None, severity: Error, message: "Replace this dictionary with a proper type expression", line: Some(22) } did not match any emitted diagnostics - │ ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:151:25 - │ - ├▶ unexpected diagnostic: - │ error[expander::invalid-expression-in-type-position]: Invalid expression in type position - │ ╭▸ - │ 22 │ { "#dict": { "a": "b" } } - │ │ ━━━━━━━━━━━━━━━━━━━━━━━━━ cannot use a dictionary expression as a type - │ │ - │ ├ help: replace this with a type path, tuple type, struct type, `_`, `(| ...)`, or `(& ...)` - │ ╰ note: valid type forms are: type paths like `String`, tuple types like `(Int, String)`, struct types like `(name: String)`, `_` for inference, unions `(| ...)`, and intersections `(& ...)` - │ ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:171:21 - │ - ├▶ unexpected diagnostic: - │ error[expander::item-not-found]: Item not found - │ ╭▸ - │ 13 │ ["::kernel::special_form::as", "x", "X"] - │ │ ┬─────────── ━━ cannot find `as` in module `::kernel::special_form` - │ │ │ - │ │ looked in this module - │ │ - │ ╰ help: check the spelling and ensure the item is exported - │ ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:171:21 - │ - ├▶ unexpected diagnostic: - │ error[expander::unresolved-variable]: Unresolved variable - │ ╭▸ - │ 13 │ ["::kernel::special_form::as", "x", "X"] - │ │ ━ cannot find `x` in this scope - │ │ - │ ╰ note: this could be a typo, a name used outside its scope, or a missing declaration; if it is a function or type from another module, you may need to import it first - │ help: a similar imported name exists - │ ╭╴ - │ 13 - ["::kernel::special_form::as", "x", "X"] - │ 13 + ["::kernel::special_form::as", "StringUnionUnknownUrl|", "X"] - │ ╰╴ - │ ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:171:21 - │ - ├▶ unexpected diagnostic: - │ error[expander::unresolved-variable]: Unresolved variable - │ ╭▸ - │ 13 │ ["::kernel::special_form::as", "x", "X"] - │ │ ━ cannot find `X` in this scope - │ │ - │ ╰ note: this could be a typo, a name used outside its scope, or a missing declaration; if it is a function or type from another module, you may need to import it first - │ help: a similar imported name exists - │ ╭╴ - │ 13 - ["::kernel::special_form::as", "x", "X"] - │ 13 + ["::kernel::special_form::as", "x", "StringUnionUnknownUrl|"] - │ ╰╴ - │ ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:171:21 - │ - ├▶ unexpected diagnostic: - │ error[expander::invalid-expression-in-type-position]: Invalid expression in type position - │ ╭▸ - │ 16 │ { "#literal": 1 } - │ │ ━━━━━━━━━━━━━━━━━ cannot use a literal value as a type - │ │ - │ ├ help: replace this with a type path, tuple type, struct type, `_`, `(| ...)`, or `(& ...)` - │ ╰ note: valid type forms are: type paths like `String`, tuple types like `(Int, String)`, struct types like `(name: String)`, `_` for inference, unions `(| ...)`, and intersections `(& ...)` - │ ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:171:21 - │ - ├▶ unexpected diagnostic: - │ error[expander::unresolved-variable]: Unresolved variable - │ ╭▸ - │ 19 │ { "#list": ["a", "b"] } - │ │ ━ cannot find `a` in this scope - │ │ - │ ╰ note: this could be a typo, a name used outside its scope, or a missing declaration; if it is a function or type from another module, you may need to import it first - │ help: a similar imported name exists - │ ╭╴ - │ 19 - { "#list": ["a", "b"] } - │ 19 + { "#list": ["UnionUnknownUrl|Boolean", "b"] } - │ ╰╴ - │ ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:171:21 - │ - ├▶ unexpected diagnostic: - │ error[expander::unresolved-variable]: Unresolved variable - │ ╭▸ - │ 19 │ { "#list": ["a", "b"] } - │ │ ━ cannot find `b` in this scope - │ │ - │ ╰ note: this could be a typo, a name used outside its scope, or a missing declaration; if it is a function or type from another module, you may need to import it first - │ help: a similar imported name exists - │ ╭╴ - │ 19 - { "#list": ["a", "b"] } - │ 19 + { "#list": ["a", "UnionUnknownUrl|Number"] } - │ ╰╴ - │ ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:171:21 - │ - ├▶ unexpected diagnostic: - │ error[expander::invalid-expression-in-type-position]: Invalid expression in type position - │ ╭▸ - │ 19 │ { "#list": ["a", "b"] } - │ │ ━━━━━━━━━━━━━━━━━━━━━━━ cannot use a list expression as a type - │ │ - │ ├ help: replace this with a type path, tuple type, struct type, `_`, `(| ...)`, or `(& ...)` - │ ╰ note: valid type forms are: type paths like `String`, tuple types like `(Int, String)`, struct types like `(name: String)`, `_` for inference, unions `(| ...)`, and intersections `(& ...)` - │ ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:171:21 - │ - ├▶ unexpected diagnostic: - │ error[expander::unresolved-variable]: Unresolved variable - │ ╭▸ - │ 22 │ { "#dict": { "a": "b" } } - │ │ ━ cannot find `b` in this scope - │ │ - │ ╰ note: this could be a typo, a name used outside its scope, or a missing declaration; if it is a function or type from another module, you may need to import it first - │ help: a similar imported name exists - │ ╭╴ - │ 22 - { "#dict": { "a": "b" } } - │ 22 + { "#dict": { "a": "UnionUnknownUrl|Number" } } - │ ╰╴ - │ ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:171:21 - │ - ╰▶ unexpected diagnostic: - error[expander::unresolved-variable]: Unresolved variable - ╭▸ - 11 │ "x", - │ ━ cannot find `x` in this scope - │ - ╰ note: this could be a typo, a name used outside its scope, or a missing declaration; if it is a function or type from another module, you may need to import it first - help: a similar imported name exists - ╭╴ - 11 - "x", - 11 + "~↑√∛index", - ╰╴ - ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:171:21 - -[61/167] hashql-ast lower::expander::special-form-expander::fn-generics-tuple -──────────────────────────────────────────────────────────────────────────────── -Expected trial to pass, but it failed -├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:390:24 -╰╴1 additional opaque attachment - -[62/167] hashql-ast lower::expander::special-form-expander::newtype-4 -──────────────────────────────────────────────────────────────────────────────── -Failed to verify annotation -├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:321:29 -├╴1 additional opaque attachment -│ -╰┬▶ unfulfilled annotation: DiagnosticAnnotation { category: None, severity: Error, message: "Remove this argument", line: Some(8) } did not match any emitted diagnostics - │ ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:151:25 - │ - ╰▶ unexpected diagnostic: - error[expander::invalid-argument-count]: Invalid argument count - ╭▸ - 3 │ ┏ [ - 4 │ ┃ "::kernel::special_form::newtype", - 5 │ ┃ "x", - 6 │ ┃ "Boolean", - 7 │ ┃ ["+", "x", "x"], - 8 │ ┃ { "#literal": true } - │ ┃ ──────────────────── unexpected argument - 9 │ ┃ //~^ ERROR Remove this argument - 10 │ ┃ ] - │ ┗━┛ expected 3 arguments to `newtype`, found 4 - │ - ├ help: use `(newtype Name type-expr body)` - ╰ note: the arguments are, in order: the type name (optionally with generic parameters), the underlying type, and the body where the name is in scope - ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:171:21 - -[63/167] hashql-ast lower::expander::special-form-expander::use-glob-not-ident -──────────────────────────────────────────────────────────────────────────────── -Failed to verify annotation -├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:321:29 -├╴1 additional opaque attachment -│ -╰┬▶ unfulfilled annotation: DiagnosticAnnotation { category: None, severity: Error, message: "Use a simple identifier here", line: Some(6) } did not match any emitted diagnostics - │ ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:151:25 - │ - ╰▶ unexpected diagnostic: - error[expander::invalid-use-imports]: Invalid use imports - ╭▸ - 6 │ "::core::math::X", - │ ━━━━━━━━━━━━━━━ expected `*`, a tuple of names, or a struct of aliases - │ - ╰ help: use `*` to import everything, `(a, b)` to import specific names, or `(a: alias, b: _)` to import with aliases - ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:171:21 - -[64/167] hashql-ast lower::expander::special-form-expander::as-3 -──────────────────────────────────────────────────────────────────────────────── -Failed to verify annotation -├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:321:29 -├╴1 additional opaque attachment -│ -╰┬▶ unfulfilled annotation: DiagnosticAnnotation { category: None, severity: Error, message: "Remove this argument", line: Some(7) } did not match any emitted diagnostics - │ ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:151:25 - │ - ╰▶ unexpected diagnostic: - error[expander::invalid-argument-count]: Invalid argument count - ╭▸ - 3 │ ┏ [ - 4 │ ┃ "::kernel::special_form::as", - 5 │ ┃ { "#literal": true }, - 6 │ ┃ { "#literal": true }, - 7 │ ┃ { "#literal": true } - │ ┃ ──────────────────── unexpected argument - 8 │ ┃ //~^ ERROR Remove this argument - 9 │ ┃ ] - │ ┗━┛ expected 2 arguments to `as`, found 3 - │ - ├ help: use `(as value type)` - ╰ note: the first argument is the value to cast and the second is the target type - ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:171:21 - -[65/167] hashql-ast lower::expander::special-form-expander::type-expr-call-union -──────────────────────────────────────────────────────────────────────────────── -Expected trial to pass, but it failed -├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:390:24 -╰╴1 additional opaque attachment - -[66/167] hashql-ast lower::expander::special-form-expander::input-3 -──────────────────────────────────────────────────────────────────────────────── -Expected trial to pass, but it failed -├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:390:24 -╰╴1 additional opaque attachment - -[67/167] hashql-ast lower::expander::special-form-expander::index-2 -──────────────────────────────────────────────────────────────────────────────── -Expected trial to pass, but it failed -├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:390:24 -╰╴1 additional opaque attachment - -[68/167] hashql-ast lower::expander::special-form-expander::fn-4 -──────────────────────────────────────────────────────────────────────────────── -Expected trial to pass, but it failed -├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:390:24 -╰╴1 additional opaque attachment - -[69/167] hashql-ast lower::expander::special-form-expander::use-glob -──────────────────────────────────────────────────────────────────────────────── -Expected trial to pass, but it failed -├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:390:24 -╰╴1 additional opaque attachment - -[70/167] hashql-ast lower::expander::special-form-expander::use-literal -──────────────────────────────────────────────────────────────────────────────── -Failed to verify annotation -├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:321:29 -├╴1 additional opaque attachment -│ -╰┬▶ unfulfilled annotation: DiagnosticAnnotation { category: None, severity: Error, message: "Replace with a valid import expression", line: Some(6) } did not match any emitted diagnostics - │ ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:151:25 - │ - ╰▶ unexpected diagnostic: - error[expander::invalid-use-imports]: Invalid use imports - ╭▸ - 6 │ { "#literal": 1 }, - │ ━━━━━━━━━━━━━━━━━ expected `*`, a tuple of names, or a struct of aliases - │ - ╰ help: use `*` to import everything, `(a, b)` to import specific names, or `(a: alias, b: _)` to import with aliases - ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:171:21 - -[71/167] hashql-ast lower::expander::special-form-expander::fn-generics-tuple-literal -──────────────────────────────────────────────────────────────────────────────── -Failed to verify annotation -├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:321:29 -├╴1 additional opaque attachment -│ -╰┬▶ unfulfilled annotation: DiagnosticAnnotation { category: None, severity: Error, message: "Use a valid generics expression", line: Some(7) } did not match any emitted diagnostics - │ ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:151:25 - │ - ├▶ unexpected diagnostic: - │ error[expander::unresolved-variable]: Unresolved variable - │ ╭▸ - │ 13 │ ["+", "a", "b"] - │ │ ━ cannot find `b` in this scope - │ │ - │ ╰ note: this could be a typo, a name used outside its scope, or a missing declaration; if it is a function or type from another module, you may need to import it first - │ help: a similar imported name exists - │ ╭╴ - │ 13 - ["+", "a", "b"] - │ 13 + ["+", "a", "~↑√∛cbrt"] - │ ╰╴ - │ ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:171:21 - │ - ├▶ unexpected diagnostic: - │ error[expander::unresolved-variable]: Unresolved variable - │ ╭▸ - │ 13 │ ["+", "a", "b"] - │ │ ━ cannot find `a` in this scope - │ │ - │ ╰ note: this could be a typo, a name used outside its scope, or a missing declaration; if it is a function or type from another module, you may need to import it first - │ help: a similar imported name exists - │ ╭╴ - │ 13 - ["+", "a", "b"] - │ 13 + ["+", "↑√∛ccesss", "b"] - │ ╰╴ - │ ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:171:21 - │ - ╰▶ unexpected diagnostic: - error[expander::invalid-fn-generic-param]: Invalid generic parameter - ╭▸ - 7 │ { "#literal": 1 } - │ ━━━━━━━━━━━━━━━━━ expected a simple type parameter name - │ - ╰ help: each generic parameter must be a plain identifier like `T`, not a qualified path or expression - ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:171:21 - -[72/167] hashql-ast lower::expander::special-form-expander::type-expr-struct -──────────────────────────────────────────────────────────────────────────────── -Expected trial to pass, but it failed -├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:390:24 -╰╴1 additional opaque attachment - -[73/167] hashql-ast lower::expander::special-form-expander::type-generic-constraint -──────────────────────────────────────────────────────────────────────────────── -Expected trial to pass, but it failed -├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:390:24 -╰╴1 additional opaque attachment - -[74/167] hashql-ast lower::expander::special-form-expander::use-tuple-literal -──────────────────────────────────────────────────────────────────────────────── -Failed to verify annotation -├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:321:29 -├╴1 additional opaque attachment -│ -╰┬▶ unfulfilled annotation: DiagnosticAnnotation { category: None, severity: Error, message: "Replace with a valid import expression", line: Some(6) } did not match any emitted diagnostics - │ ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:151:25 - │ - ├▶ unexpected diagnostic: - │ error[expander::unresolved-variable]: Unresolved variable - │ ╭▸ - │ 8 │ "x" - │ │ ━ cannot find `x` in this scope - │ │ - │ ╰ note: this could be a typo, a name used outside its scope, or a missing declaration; if it is a function or type from another module, you may need to import it first - │ help: a similar imported name exists - │ ╭╴ - │ 8 - "x" - │ 8 + "~↑√∛index" - │ ╰╴ - │ ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:171:21 - │ - ╰▶ unexpected diagnostic: - error[expander::invalid-use-import-binding]: Invalid use import binding - ╭▸ - 6 │ { "#tuple": [{ "#literal": 1 }] }, - │ ━━━━━━━━━━━━━━━━━ expected a simple name to import - │ - ╰ help: each import must be a plain identifier like `foo`, not a qualified path or expression - ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:171:21 - -[75/167] hashql-ast lower::expander::special-form-expander::input-1 -──────────────────────────────────────────────────────────────────────────────── -Failed to verify annotation -├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:321:29 -├╴1 additional opaque attachment -│ -╰┬▶ unfulfilled annotation: DiagnosticAnnotation { category: None, severity: Error, message: "Add missing arguments", line: Some(3) } did not match any emitted diagnostics - │ ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:151:25 - │ - ╰▶ unexpected diagnostic: - error[expander::invalid-argument-count]: Invalid argument count - ╭▸ - 3 │ ["::kernel::special_form::input", "x"] - │ ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ expected 2 or 3 arguments to `input`, found 1 - │ - ├ help: use `(input name type)` or `(input name type default)` - ╰ note: the arguments are, in order: the input name, its type, and an optional default value - ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:171:21 - -[76/167] hashql-ast lower::expander::special-form-expander::fn-generics-tuple-path -──────────────────────────────────────────────────────────────────────────────── -Failed to verify annotation -├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:321:29 -├╴1 additional opaque attachment -│ -╰┬▶ unfulfilled annotation: DiagnosticAnnotation { category: None, severity: Error, message: "Use a simple identifier here", line: Some(7) } did not match any emitted diagnostics - │ ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:151:25 - │ - ├▶ unexpected diagnostic: - │ error[expander::unresolved-variable]: Unresolved variable - │ ╭▸ - │ 13 │ ["+", "a", "b"] - │ │ ━ cannot find `b` in this scope - │ │ - │ ╰ note: this could be a typo, a name used outside its scope, or a missing declaration; if it is a function or type from another module, you may need to import it first - │ help: a similar imported name exists - │ ╭╴ - │ 13 - ["+", "a", "b"] - │ 13 + ["+", "a", "~↑√∛cbrt"] - │ ╰╴ - │ ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:171:21 - │ - ├▶ unexpected diagnostic: - │ error[expander::unresolved-variable]: Unresolved variable - │ ╭▸ - │ 13 │ ["+", "a", "b"] - │ │ ━ cannot find `a` in this scope - │ │ - │ ╰ note: this could be a typo, a name used outside its scope, or a missing declaration; if it is a function or type from another module, you may need to import it first - │ help: a similar imported name exists - │ ╭╴ - │ 13 - ["+", "a", "b"] - │ 13 + ["+", "↑√∛ccesss", "b"] - │ ╰╴ - │ ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:171:21 - │ - ╰▶ unexpected diagnostic: - error[expander::invalid-fn-generic-param]: Invalid generic parameter - ╭▸ - 7 │ "::core::math::add" - │ ━━━━━━━━━━━━━━━━━ expected a simple type parameter name - │ - ╰ help: each generic parameter must be a plain identifier like `T`, not a qualified path or expression - ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:171:21 - -[77/167] hashql-ast lower::expander::special-form-expander::newtype-2 -──────────────────────────────────────────────────────────────────────────────── -Failed to verify annotation -├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:321:29 -├╴1 additional opaque attachment -│ -╰┬▶ unfulfilled annotation: DiagnosticAnnotation { category: None, severity: Error, message: "Add missing arguments", line: Some(3) } did not match any emitted diagnostics - │ ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:151:25 - │ - ╰▶ unexpected diagnostic: - error[expander::invalid-argument-count]: Invalid argument count - ╭▸ - 3 │ ["::kernel::special_form::newtype", "x", "Integer"] - │ ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ expected 3 arguments to `newtype`, found 2 - │ - ├ help: use `(newtype Name type-expr body)` - ╰ note: the arguments are, in order: the type name (optionally with generic parameters), the underlying type, and the body where the name is in scope - ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:171:21 - -[78/167] hashql-ast lower::expander::special-form-expander::fn-generics-struct-type -──────────────────────────────────────────────────────────────────────────────── -Failed to verify annotation -├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:321:29 -├╴1 additional opaque attachment -│ -╰┬▶ unfulfilled annotation: DiagnosticAnnotation { category: None, severity: Error, message: "Remove this type annotation", line: Some(7) } did not match any emitted diagnostics - │ ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:151:25 - │ - ├▶ unexpected diagnostic: - │ error[expander::unresolved-variable]: Unresolved variable - │ ╭▸ - │ 12 │ ["+", "a", "b"] - │ │ ━ cannot find `b` in this scope - │ │ - │ ╰ note: this could be a typo, a name used outside its scope, or a missing declaration; if it is a function or type from another module, you may need to import it first - │ help: a similar imported name exists - │ ╭╴ - │ 12 - ["+", "a", "b"] - │ 12 + ["+", "a", "~↑√∛cbrt"] - │ ╰╴ - │ ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:171:21 - │ - ├▶ unexpected diagnostic: - │ error[expander::unresolved-variable]: Unresolved variable - │ ╭▸ - │ 6 │ "#struct": { "T": "Int" }, - │ │ ━━━ cannot find `Int` in this scope - │ │ - │ ├ help: check the spelling, or import the name with a `use` statement - │ ╰ note: this could be a typo, a name used outside its scope, or a missing declaration; if it is a function or type from another module, you may need to import it first - │ ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:171:21 - │ - ├▶ unexpected diagnostic: - │ error[expander::unresolved-variable]: Unresolved variable - │ ╭▸ - │ 12 │ ["+", "a", "b"] - │ │ ━ cannot find `a` in this scope - │ │ - │ ╰ note: this could be a typo, a name used outside its scope, or a missing declaration; if it is a function or type from another module, you may need to import it first - │ help: a similar imported name exists - │ ╭╴ - │ 12 - ["+", "a", "b"] - │ 12 + ["+", "↑√∛ccesss", "b"] - │ ╰╴ - │ ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:171:21 - │ - ╰▶ unexpected diagnostic: - error[expander::fn-generics-type-annotation]: Type annotation on generic parameter list - ╭▸ - 7 │ "#type": "Int" - │ ━━━ type annotation is not allowed on the generic parameter list - │ - ├ help: remove the type annotation; the generic parameter list declares type variables, not a typed value - ╰ note: write `(fn (T, U) ...)` for unbounded generics or `(fn (T: bound, U: _) ...)` for bounded generics - ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:171:21 - -[79/167] hashql-ast lower::expander::special-form-expander::fn-params-tuple -──────────────────────────────────────────────────────────────────────────────── -Failed to verify annotation -├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:321:29 -├╴1 additional opaque attachment -│ -╰┬▶ unfulfilled annotation: DiagnosticAnnotation { category: None, severity: Error, message: "Use a struct expression for parameters", line: Some(6) } did not match any emitted diagnostics - │ ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:151:25 - │ - ├▶ unexpected diagnostic: - │ error[expander::unresolved-variable]: Unresolved variable - │ ╭▸ - │ 9 │ ["+", "a", "b"] - │ │ ━ cannot find `b` in this scope - │ │ - │ ╰ note: this could be a typo, a name used outside its scope, or a missing declaration; if it is a function or type from another module, you may need to import it first - │ help: a similar imported name exists - │ ╭╴ - │ 9 - ["+", "a", "b"] - │ 9 + ["+", "a", "~↑√∛cbrt"] - │ ╰╴ - │ ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:171:21 - │ - ├▶ unexpected diagnostic: - │ error[expander::unresolved-variable]: Unresolved variable - │ ╭▸ - │ 9 │ ["+", "a", "b"] - │ │ ━ cannot find `a` in this scope - │ │ - │ ╰ note: this could be a typo, a name used outside its scope, or a missing declaration; if it is a function or type from another module, you may need to import it first - │ help: a similar imported name exists - │ ╭╴ - │ 9 - ["+", "a", "b"] - │ 9 + ["+", "↑√∛ccesss", "b"] - │ ╰╴ - │ ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:171:21 - │ - ╰▶ unexpected diagnostic: - error[expander::invalid-fn-params]: Invalid parameter list - ╭▸ - 6 │ { "#tuple": [] }, - │ ━━━━━━━━━━━━━━━━ expected a struct for function parameters - │ - ╰ help: write parameters as `(x: int, y: string)` where each field declares a parameter and its type - ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:171:21 - -[80/167] hashql-ast lower::expander::special-form-expander::use-tuple-type -──────────────────────────────────────────────────────────────────────────────── -Failed to verify annotation -├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:321:29 -├╴1 additional opaque attachment -│ -╰┬▶ unfulfilled annotation: DiagnosticAnnotation { category: None, severity: Error, message: "Remove this type annotation", line: Some(6) } did not match any emitted diagnostics - │ ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:151:25 - │ - ├▶ unexpected diagnostic: - │ error[expander::unresolved-variable]: Unresolved variable - │ ╭▸ - │ 8 │ "x" - │ │ ━ cannot find `x` in this scope - │ │ - │ ╰ note: this could be a typo, a name used outside its scope, or a missing declaration; if it is a function or type from another module, you may need to import it first - │ help: a similar imported name exists - │ ╭╴ - │ 8 - "x" - │ 8 + "~↑√∛index" - │ ╰╴ - │ ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:171:21 - │ - ╰▶ unexpected diagnostic: - error[expander::invalid-use-import-binding]: Invalid use import binding - ╭▸ - 6 │ { "#tuple": ["::core::math::sub"], "#type": "Number" }, - │ ━━━━━━━━━━━━━━━━━ expected a simple name to import - │ - ╰ help: each import must be a plain identifier like `foo`, not a qualified path or expression - ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:171:21 - -[81/167] hashql-ast lower::expander::special-form-expander::too-many-segments -──────────────────────────────────────────────────────────────────────────────── -Failed to verify annotation -├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:321:29 -├╴1 additional opaque attachment -│ -╰┬▶ unfulfilled annotation: DiagnosticAnnotation { category: None, severity: Error, message: "Remove this extra segment", line: Some(4) } did not match any emitted diagnostics - │ ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:151:25 - │ - ╰▶ unexpected diagnostic: - error[expander::module-required]: Module required - ╭▸ - 4 │ "::kernel::special_form::if::extra", - │ ┯━ ───── cannot access items inside a non-module - │ │ - │ `::kernel::special_form::if` is a value, not a module - │ - ├ help: if you meant to access a field, use `.` instead of `::` - ╰ note: the `::` separator navigates into modules; values and types do not contain sub-items - ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:171:21 - -[82/167] hashql-ast lower::expander::special-form-expander::fn-generics-struct-underscore -──────────────────────────────────────────────────────────────────────────────── -Expected trial to pass, but it failed -├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:390:24 -╰╴1 additional opaque attachment - -[83/167] hashql-ast lower::expander::special-form-expander::type-infer -──────────────────────────────────────────────────────────────────────────────── -Expected trial to pass, but it failed -├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:390:24 -╰╴1 additional opaque attachment - -[84/167] hashql-ast lower::expander::special-form-expander::as-2 -──────────────────────────────────────────────────────────────────────────────── -Expected trial to pass, but it failed -├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:390:24 -╰╴1 additional opaque attachment - -[85/167] hashql-ast lower::expander::special-form-expander::access-field-literal-type-annotation -──────────────────────────────────────────────────────────────────────────────── -Failed to verify annotation -├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:321:29 -├╴1 additional opaque attachment -│ -╰┬▶ unfulfilled annotation: DiagnosticAnnotation { category: None, severity: Error, message: "Remove this type annotation", line: Some(6) } did not match any emitted diagnostics - │ ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:151:25 - │ - ├▶ unexpected diagnostic: - │ error[expander::unresolved-variable]: Unresolved variable - │ ╭▸ - │ 5 │ "tuple", - │ │ ━━━━━ cannot find `tuple` in this scope - │ │ - │ ├ help: check the spelling, or import the name with a `use` statement - │ ╰ note: this could be a typo, a name used outside its scope, or a missing declaration; if it is a function or type from another module, you may need to import it first - │ ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:171:21 - │ - ╰▶ unexpected diagnostic: - error[expander::field-literal-type-annotation]: Field literal with type annotation - ╭▸ - 6 │ { "#literal": 0, "#type": "Integer" } - │ ━ type annotations are not allowed on field index literals - │ - ╰ help: remove the type annotation and use a plain integer like `0` - ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:171:21 - -[86/167] hashql-ast lower::expander::special-form-expander::access-1 -──────────────────────────────────────────────────────────────────────────────── -Failed to verify annotation -├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:321:29 -├╴1 additional opaque attachment -│ -╰┬▶ unfulfilled annotation: DiagnosticAnnotation { category: None, severity: Error, message: "Add missing arguments", line: Some(3) } did not match any emitted diagnostics - │ ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:151:25 - │ - ╰▶ unexpected diagnostic: - error[expander::invalid-argument-count]: Invalid argument count - ╭▸ - 3 │ ["::kernel::special_form::access", "x"] - │ ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ expected 2 arguments to `.`, found 1 - │ - ├ help: use `(. value field)` - ╰ note: the first argument is the value and the second is the field name or index - ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:171:21 - -[87/167] hashql-ast lower::expander::special-form-expander::fn-generics-duplicates -──────────────────────────────────────────────────────────────────────────────── -Failed to verify annotation -├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:321:29 -├╴1 additional opaque attachment -│ -╰┬▶ unfulfilled annotation: DiagnosticAnnotation { category: None, severity: Error, message: "Remove this duplicate generic parameter 'T'", line: Some(5) } did not match any emitted diagnostics - │ ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:151:25 - │ - ├▶ unexpected diagnostic: - │ error[expander::unresolved-variable]: Unresolved variable - │ ╭▸ - │ 9 │ ["+", "a", "b"] - │ │ ━ cannot find `b` in this scope - │ │ - │ ╰ note: this could be a typo, a name used outside its scope, or a missing declaration; if it is a function or type from another module, you may need to import it first - │ help: a similar imported name exists - │ ╭╴ - │ 9 - ["+", "a", "b"] - │ 9 + ["+", "a", "~↑√∛cbrt"] - │ ╰╴ - │ ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:171:21 - │ - ├▶ unexpected diagnostic: - │ error[expander::unresolved-variable]: Unresolved variable - │ ╭▸ - │ 9 │ ["+", "a", "b"] - │ │ ━ cannot find `a` in this scope - │ │ - │ ╰ note: this could be a typo, a name used outside its scope, or a missing declaration; if it is a function or type from another module, you may need to import it first - │ help: a similar imported name exists - │ ╭╴ - │ 9 - ["+", "a", "b"] - │ 9 + ["+", "↑√∛ccesss", "b"] - │ ╰╴ - │ ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:171:21 - │ - ╰▶ unexpected diagnostic: - error[expander::duplicate-fn-generic]: Duplicate generic parameter - ╭▸ - 5 │ { "#tuple": ["T", "T"] }, - │ ┬ ━ duplicate generic parameter `T` - │ │ - │ `T` was first declared here - │ - ╰ help: remove the duplicate declaration or use a different name - ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:171:21 - -[88/167] hashql-ast lower::expander::special-form-expander::access-3 -──────────────────────────────────────────────────────────────────────────────── -Failed to verify annotation -├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:321:29 -├╴1 additional opaque attachment -│ -╰┬▶ unfulfilled annotation: DiagnosticAnnotation { category: None, severity: Error, message: "Remove this argument", line: Some(7) } did not match any emitted diagnostics - │ ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:151:25 - │ - ╰▶ unexpected diagnostic: - error[expander::invalid-argument-count]: Invalid argument count - ╭▸ - 3 │ ┏ [ - 4 │ ┃ "::kernel::special_form::access", - 5 │ ┃ "x", - 6 │ ┃ "y", - 7 │ ┃ "z" - │ ┃ ─ unexpected argument - 8 │ ┃ //~^ ERROR Remove this argument - 9 │ ┃ ] - │ ┗━┛ expected 2 arguments to `.`, found 3 - │ - ├ help: use `(. value field)` - ╰ note: the first argument is the value and the second is the field name or index - ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:171:21 - -[89/167] hashql-ast lower::expander::special-form-expander::input-4 -──────────────────────────────────────────────────────────────────────────────── -Failed to verify annotation -├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:321:29 -├╴1 additional opaque attachment -│ -╰┬▶ unfulfilled annotation: DiagnosticAnnotation { category: None, severity: Error, message: "Remove this argument", line: Some(8) } did not match any emitted diagnostics - │ ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:151:25 - │ - ╰▶ unexpected diagnostic: - error[expander::invalid-argument-count]: Invalid argument count - ╭▸ - 3 │ ┏ [ - 4 │ ┃ "::kernel::special_form::input", - 5 │ ┃ "x", - 6 │ ┃ "Y", - 7 │ ┃ "z", - 8 │ ┃ "w" - │ ┃ ─ unexpected argument - 9 │ ┃ //~^ ERROR Remove this argument - 10 │ ┃ ] - │ ┗━┛ expected 2 or 3 arguments to `input`, found 4 - │ - ├ help: use `(input name type)` or `(input name type default)` - ╰ note: the arguments are, in order: the input name, its type, and an optional default value - ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:171:21 - -[90/167] hashql-ast lower::expander::special-form-expander::newtype-collect-all-errors -──────────────────────────────────────────────────────────────────────────────── -Failed to verify annotation -├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:321:29 -├╴1 additional opaque attachment -│ -╰┬▶ unfulfilled annotation: DiagnosticAnnotation { category: None, severity: Error, message: "Replace this qualified path with a simple identifier", line: Some(3) } did not match any emitted diagnostics - │ ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:151:25 - │ - ├▶ unfulfilled annotation: DiagnosticAnnotation { category: None, severity: Error, message: "Replace this literal with a type name", line: Some(3) } did not match any emitted diagnostics - │ ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:151:25 - │ - ╰▶ unexpected diagnostic: - error[expander::invalid-binding-name]: Invalid binding name - ╭▸ - 3 │ ["::kernel::special_form::newtype", "::x", { "#literal": 1 }, "x"] - │ ━━━ expected a type name for the `newtype` binding - │ - ├ help: write `(newtype Name type-expr body)` with a name like `UserId` or `Pair` - ╰ note: the first argument to `newtype` introduces a new distinct type and must be a simple identifier, optionally with generic parameters - ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:171:21 - -[91/167] hashql-ast lower::expander::special-form-expander::fn-params-duplicates -──────────────────────────────────────────────────────────────────────────────── -Failed to verify annotation -├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:321:29 -├╴1 additional opaque attachment -│ -╰┬▶ unfulfilled annotation: DiagnosticAnnotation { category: None, severity: Error, message: "Remove this duplicate parameter 'a'", line: Some(6) } did not match any emitted diagnostics - │ ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:151:25 - │ - ├▶ unexpected diagnostic: - │ error[expander::unresolved-variable]: Unresolved variable - │ ╭▸ - │ 9 │ ["+", "a", "b"] - │ │ ━ cannot find `b` in this scope - │ │ - │ ╰ note: this could be a typo, a name used outside its scope, or a missing declaration; if it is a function or type from another module, you may need to import it first - │ help: a similar local binding exists - │ ╭╴ - │ 9 - ["+", "a", "b"] - │ 9 + ["+", "a", "a"] - │ ╰╴ - │ help: a similar imported name exists - │ ╭╴ - │ 9 - ["+", "a", "b"] - │ 9 + ["+", "a", "~↑√∛cbrt"] - │ ╰╴ - │ ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:171:21 - │ - ├▶ unexpected diagnostic: - │ error[expander::unresolved-variable]: Unresolved variable - │ ╭▸ - │ 6 │ { "#struct": { "a": "Int", "a": "Int" } }, - │ │ ━━━ cannot find `Int` in this scope - │ │ - │ ├ help: check the spelling, or import the name with a `use` statement - │ ╰ note: this could be a typo, a name used outside its scope, or a missing declaration; if it is a function or type from another module, you may need to import it first - │ ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:171:21 - │ - ├▶ unexpected diagnostic: - │ error[expander::duplicate-fn-parameter]: Duplicate function parameter - │ ╭▸ - │ 6 │ { "#struct": { "a": "Int", "a": "Int" } }, - │ │ ┬───────── ━━━━━━━━━━ duplicate parameter `a` - │ │ │ - │ │ `a` was first declared here - │ │ - │ ╰ help: remove the duplicate parameter or use a different name - │ ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:171:21 - │ - ╰▶ unexpected diagnostic: - error[expander::unresolved-variable]: Unresolved variable - ╭▸ - 6 │ { "#struct": { "a": "Int", "a": "Int" } }, - │ ━━━ cannot find `Int` in this scope - │ - ├ help: check the spelling, or import the name with a `use` statement - ╰ note: this could be a typo, a name used outside its scope, or a missing declaration; if it is a function or type from another module, you may need to import it first - ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:171:21 - -[92/167] hashql-ast lower::expander::special-form-expander::newtype-constraints -──────────────────────────────────────────────────────────────────────────────── -Expected trial to pass, but it failed -├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:390:24 -╰╴1 additional opaque attachment - -[93/167] hashql-ast lower::expander::special-form-expander::fn-3 -──────────────────────────────────────────────────────────────────────────────── -Failed to verify annotation -├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:321:29 -├╴1 additional opaque attachment -│ -╰┬▶ unfulfilled annotation: DiagnosticAnnotation { category: None, severity: Error, message: "Add missing arguments", line: Some(3) } did not match any emitted diagnostics - │ ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:151:25 - │ - ╰▶ unexpected diagnostic: - error[expander::invalid-argument-count]: Invalid argument count - ╭▸ - 3 │ ["::kernel::special_form::fn", { "#tuple": [] }, { "#struct": {} }, "_"] - │ ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ expected 4 arguments to `fn`, found 3 - │ - ├ help: use `(fn generics params return-type body)` - ╰ note: the arguments are, in order: the generic parameters (a tuple or struct), the function parameters (a struct), the return type, and the body expression - ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:171:21 - -[94/167] hashql-ast lower::expander::special-form-expander::fn-generics-struct-literal -──────────────────────────────────────────────────────────────────────────────── -Failed to verify annotation -├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:321:29 -├╴1 additional opaque attachment -│ -╰┬▶ unfulfilled annotation: DiagnosticAnnotation { category: None, severity: Error, message: "Replace this literal with a type name", line: Some(7) } did not match any emitted diagnostics - │ ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:151:25 - │ - ├▶ unexpected diagnostic: - │ error[expander::unresolved-variable]: Unresolved variable - │ ╭▸ - │ 13 │ ["+", "a", "b"] - │ │ ━ cannot find `b` in this scope - │ │ - │ ╰ note: this could be a typo, a name used outside its scope, or a missing declaration; if it is a function or type from another module, you may need to import it first - │ help: a similar imported name exists - │ ╭╴ - │ 13 - ["+", "a", "b"] - │ 13 + ["+", "a", "~↑√∛cbrt"] - │ ╰╴ - │ ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:171:21 - │ - ├▶ unexpected diagnostic: - │ error[expander::unresolved-variable]: Unresolved variable - │ ╭▸ - │ 13 │ ["+", "a", "b"] - │ │ ━ cannot find `a` in this scope - │ │ - │ ╰ note: this could be a typo, a name used outside its scope, or a missing declaration; if it is a function or type from another module, you may need to import it first - │ help: a similar imported name exists - │ ╭╴ - │ 13 - ["+", "a", "b"] - │ 13 + ["+", "↑√∛ccesss", "b"] - │ ╰╴ - │ ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:171:21 - │ - ╰▶ unexpected diagnostic: - error[expander::invalid-expression-in-type-position]: Invalid expression in type position - ╭▸ - 7 │ "T": { "#literal": 2 } - │ ━━━━━━━━━━━━━━━━━ cannot use a literal value as a type - │ - ├ help: replace this with a type path, tuple type, struct type, `_`, `(| ...)`, or `(& ...)` - ╰ note: valid type forms are: type paths like `String`, tuple types like `(Int, String)`, struct types like `(name: String)`, `_` for inference, unions `(| ...)`, and intersections `(& ...)` - ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:171:21 - -[95/167] hashql-ast lower::expander::special-form-expander::index-1 -──────────────────────────────────────────────────────────────────────────────── -Failed to verify annotation -├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:321:29 -├╴1 additional opaque attachment -│ -╰┬▶ unfulfilled annotation: DiagnosticAnnotation { category: None, severity: Error, message: "Add missing arguments", line: Some(3) } did not match any emitted diagnostics - │ ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:151:25 - │ - ╰▶ unexpected diagnostic: - error[expander::invalid-argument-count]: Invalid argument count - ╭▸ - 3 │ ["::kernel::special_form::index", "x"] - │ ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ expected 2 arguments to `[]`, found 1 - │ - ├ help: use `([] collection index)` - ╰ note: the first argument is the collection and the second is the index - ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:171:21 - -[96/167] hashql-ast lower::expander::special-form-expander::type-tuple-has-type -──────────────────────────────────────────────────────────────────────────────── -Failed to verify annotation -├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:321:29 -├╴1 additional opaque attachment -│ -╰┬▶ unfulfilled annotation: DiagnosticAnnotation { category: None, severity: Error, message: "Remove this type annotation", line: Some(8) } did not match any emitted diagnostics - │ ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:151:25 - │ - ├▶ unexpected diagnostic: - │ error[expander::type-annotation-in-type-position]: Type annotation in type position - │ ╭▸ - │ 6 │ ┌ { - │ 7 │ │ "#tuple": ["Int"], - │ 8 │ │ "#type": "(Int)" - │ │ │ ━━━━━ type annotations are not allowed inside a type expression - │ 9 │ │ //~^ ERROR Remove this type annotation - │ 10 │ │ }, - │ │ └───┘ this tuple is already being used as a type - │ │ - │ ├ help: remove the type annotation - │ ╰ note: in type position, `(Int, String)` already defines a tuple type - │ ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:171:21 - │ - ├▶ unexpected diagnostic: - │ error[expander::unresolved-variable]: Unresolved variable - │ ╭▸ - │ 7 │ "#tuple": ["Int"], - │ │ ━━━ cannot find `Int` in this scope - │ │ - │ ├ help: check the spelling, or import the name with a `use` statement - │ ╰ note: this could be a typo, a name used outside its scope, or a missing declaration; if it is a function or type from another module, you may need to import it first - │ ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:171:21 - │ - ├▶ unexpected diagnostic: - │ error[expander::unresolved-variable]: Unresolved variable - │ ╭▸ - │ 11 │ "x" - │ │ ━ cannot find `x` in this scope - │ │ - │ ╰ note: this could be a typo, a name used outside its scope, or a missing declaration; if it is a function or type from another module, you may need to import it first - │ help: a similar imported name exists - │ ╭╴ - │ 11 - "x" - │ 11 + "~↑√∛index" - │ ╰╴ - │ ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:171:21 - │ - ╰▶ unexpected diagnostic: - error[expander::unresolved-variable]: Unresolved variable - ╭▸ - 8 │ "#type": "(Int)" - │ ━━━ cannot find `Int` in this scope - │ - ├ help: check the spelling, or import the name with a `use` statement - ╰ note: this could be a typo, a name used outside its scope, or a missing declaration; if it is a function or type from another module, you may need to import it first - ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:171:21 - -[97/167] hashql-ast lower::expander::special-form-expander::use-glob-not-star -──────────────────────────────────────────────────────────────────────────────── -Failed to verify annotation -├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:321:29 -├╴1 additional opaque attachment -│ -╰┬▶ unfulfilled annotation: DiagnosticAnnotation { category: None, severity: Error, message: "Replace with a valid import expression", line: Some(6) } did not match any emitted diagnostics - │ ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:151:25 - │ - ╰▶ unexpected diagnostic: - error[expander::invalid-use-imports]: Invalid use imports - ╭▸ - 6 │ "X", - │ ━ expected `*`, a tuple of names, or a struct of aliases - │ - ╰ help: use `*` to import everything, `(a, b)` to import specific names, or `(a: alias, b: _)` to import with aliases - ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:171:21 - -[98/167] hashql-ast lower::expander::special-form-expander::let-argument-not-path -──────────────────────────────────────────────────────────────────────────────── -Failed to verify annotation -├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:321:29 -├╴1 additional opaque attachment -│ -╰┬▶ unfulfilled annotation: DiagnosticAnnotation { category: None, severity: Error, message: "Replace this expression with a simple identifier", line: Some(5) } did not match any emitted diagnostics - │ ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:151:25 - │ - ╰▶ unexpected diagnostic: - error[expander::invalid-binding-name]: Invalid binding name - ╭▸ - 5 │ { "#literal": true }, - │ ━━━━━━━━━━━━━━━━━━━━ expected a simple identifier for the `let` binding name - │ - ├ help: write `(let name value body)` with a plain name such as `x` - ╰ note: the first argument to `let` introduces a new local binding and must be a plain identifier without path qualification or generic arguments - ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:171:21 - -[99/167] hashql-ast lower::expander::special-form-expander::input-2 -──────────────────────────────────────────────────────────────────────────────── -Expected trial to pass, but it failed -├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:390:24 -╰╴1 additional opaque attachment - -[100/167] hashql-ast lower::expander::special-form-expander::type-unknown -──────────────────────────────────────────────────────────────────────────────── -Expected trial to pass, but it failed -├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:390:24 -╰╴1 additional opaque attachment - -[101/167] hashql-ast lower::expander::special-form-expander::type-generic-struct -──────────────────────────────────────────────────────────────────────────────── -Failed to verify annotation -├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:321:29 -├╴1 additional opaque attachment -│ -╰┬▶ unfulfilled annotation: DiagnosticAnnotation { category: None, severity: Error, message: "Generic argument types must be simple path identifiers", line: Some(5) } did not match any emitted diagnostics - │ ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:151:25 - │ - ├▶ unexpected diagnostic: - │ error[expander::unresolved-variable]: Unresolved variable - │ ╭▸ - │ 7 │ { "#struct": { "foo": "Bar" } }, - │ │ ━━━ cannot find `Bar` in this scope - │ │ - │ ├ help: check the spelling, or import the name with a `use` statement - │ ╰ note: this could be a typo, a name used outside its scope, or a missing declaration; if it is a function or type from another module, you may need to import it first - │ ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:171:21 - │ - ╰▶ unexpected diagnostic: - error[expander::invalid-generic-argument]: Invalid generic argument - ╭▸ - 5 │ "Foo<(a: String)>", - │ ━━━━━━━━━━━ expected a simple type parameter - │ - ├ help: use a simple identifier like `T` or a constraint like `T: Bound` - ╰ note: generic parameters are declared as `Name` for unconstrained or `Name` for constrained parameters - ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:171:21 - -[102/167] hashql-ast lower::expander::special-form-expander::fn-5 -──────────────────────────────────────────────────────────────────────────────── -Failed to verify annotation -├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:321:29 -├╴1 additional opaque attachment -│ -╰┬▶ unfulfilled annotation: DiagnosticAnnotation { category: None, severity: Error, message: "Remove this argument", line: Some(9) } did not match any emitted diagnostics - │ ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:151:25 - │ - ╰▶ unexpected diagnostic: - error[expander::invalid-argument-count]: Invalid argument count - ╭▸ - 3 │ ┏ [ - 4 │ ┃ "::kernel::special_form::fn", - 5 │ ┃ { "#tuple": [] }, - 6 │ ┃ { "#struct": {} }, - ‡ ┃ - 9 │ ┃ ["*", "c", "d"] - │ ┃ ─────────────── unexpected argument - 10 │ ┃ //~^ ERROR Remove this argument - 11 │ ┃ ] - │ ┗━┛ expected 4 arguments to `fn`, found 5 - │ - ├ help: use `(fn generics params return-type body)` - ╰ note: the arguments are, in order: the generic parameters (a tuple or struct), the function parameters (a struct), the return type, and the body expression - ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:171:21 - -[103/167] hashql-ast lower::expander::special-form-expander::index-3 -──────────────────────────────────────────────────────────────────────────────── -Failed to verify annotation -├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:321:29 -├╴1 additional opaque attachment -│ -╰┬▶ unfulfilled annotation: DiagnosticAnnotation { category: None, severity: Error, message: "Remove this argument", line: Some(7) } did not match any emitted diagnostics - │ ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:151:25 - │ - ╰▶ unexpected diagnostic: - error[expander::invalid-argument-count]: Invalid argument count - ╭▸ - 3 │ ┏ [ - 4 │ ┃ "::kernel::special_form::index", - 5 │ ┃ "x", - 6 │ ┃ "y", - 7 │ ┃ "z" - │ ┃ ─ unexpected argument - 8 │ ┃ //~^ ERROR Remove this argument - 9 │ ┃ ] - │ ┗━┛ expected 2 arguments to `[]`, found 3 - │ - ├ help: use `([] collection index)` - ╰ note: the first argument is the collection and the second is the index - ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:171:21 - -[104/167] hashql-ast lower::expander::special-form-expander::use-tuple-path -──────────────────────────────────────────────────────────────────────────────── -Failed to verify annotation -├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:321:29 -├╴1 additional opaque attachment -│ -╰┬▶ unfulfilled annotation: DiagnosticAnnotation { category: None, severity: Error, message: "Use a simple identifier here", line: Some(6) } did not match any emitted diagnostics - │ ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:151:25 - │ - ├▶ unexpected diagnostic: - │ error[expander::unresolved-variable]: Unresolved variable - │ ╭▸ - │ 8 │ "x" - │ │ ━ cannot find `x` in this scope - │ │ - │ ╰ note: this could be a typo, a name used outside its scope, or a missing declaration; if it is a function or type from another module, you may need to import it first - │ help: a similar imported name exists - │ ╭╴ - │ 8 - "x" - │ 8 + "~↑√∛index" - │ ╰╴ - │ ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:171:21 - │ - ╰▶ unexpected diagnostic: - error[expander::invalid-use-import-binding]: Invalid use import binding - ╭▸ - 6 │ { "#tuple": ["::core::math::sub"] }, - │ ━━━━━━━━━━━━━━━━━ expected a simple name to import - │ - ╰ help: each import must be a plain identifier like `foo`, not a qualified path or expression - ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:171:21 - -[105/167] hashql-ast lower::expander::special-form-expander::type-4 -──────────────────────────────────────────────────────────────────────────────── -Failed to verify annotation -├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:321:29 -├╴1 additional opaque attachment -│ -╰┬▶ unfulfilled annotation: DiagnosticAnnotation { category: None, severity: Error, message: "Remove this argument", line: Some(8) } did not match any emitted diagnostics - │ ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:151:25 - │ - ╰▶ unexpected diagnostic: - error[expander::invalid-argument-count]: Invalid argument count - ╭▸ - 3 │ ┏ [ - 4 │ ┃ "::kernel::special_form::type", - 5 │ ┃ "x", - 6 │ ┃ "Boolean", - 7 │ ┃ ["+", "x", "x"], - 8 │ ┃ { "#literal": true } - │ ┃ ──────────────────── unexpected argument - 9 │ ┃ //~^ ERROR Remove this argument - 10 │ ┃ ] - │ ┗━┛ expected 3 arguments to `type`, found 4 - │ - ├ help: use `(type Name type-expr body)` - ╰ note: the arguments are, in order: the type name (optionally with generic parameters), the type definition, and the body where the name is in scope - ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:171:21 - -[106/167] hashql-ast lower::expander::special-form-expander::type-expr-call-not-path -──────────────────────────────────────────────────────────────────────────────── -Failed to verify annotation -├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:321:29 -├╴1 additional opaque attachment -│ -╰┬▶ unfulfilled annotation: DiagnosticAnnotation { category: None, severity: Error, message: "Function call with non-path callee cannot be used as a type", line: Some(7) } did not match any emitted diagnostics - │ ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:151:25 - │ - ├▶ unexpected diagnostic: - │ error[expander::invalid-type-constructor-call]: Invalid type constructor call - │ ╭▸ - │ 6 │ ┌ [ - │ 7 │ │ ["+", { "#literal": 1 }, { "#literal": 2 }], - │ │ │ ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ cannot use this as a type constructor - │ 8 │ │ //~^ ERROR Function call with non-path callee cannot be used as a type - │ 9 │ │ "Int", - │ 10 │ │ "Float" - │ 11 │ │ ] - │ │ └───┘ this call appears in a type position - │ │ - │ ├ help: use a type path directly, or use `(| ...)` / `(& ...)` for unions and intersections - │ ╰ note: generic type arguments belong on the type path itself, for example `Foo`, not `(Foo T)` - │ ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:171:21 - │ - ├▶ unexpected diagnostic: - │ error[expander::unresolved-variable]: Unresolved variable - │ ╭▸ - │ 9 │ "Int", - │ │ ━━━ cannot find `Int` in this scope - │ │ - │ ├ help: check the spelling, or import the name with a `use` statement - │ ╰ note: this could be a typo, a name used outside its scope, or a missing declaration; if it is a function or type from another module, you may need to import it first - │ ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:171:21 - │ - ├▶ unexpected diagnostic: - │ error[expander::unresolved-variable]: Unresolved variable - │ ╭▸ - │ 10 │ "Float" - │ │ ━━━━━ cannot find `Float` in this scope - │ │ - │ ├ help: check the spelling, or import the name with a `use` statement - │ ╰ note: this could be a typo, a name used outside its scope, or a missing declaration; if it is a function or type from another module, you may need to import it first - │ ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:171:21 - │ - ╰▶ unexpected diagnostic: - error[expander::unresolved-variable]: Unresolved variable - ╭▸ - 7 │ ["+", { "#literal": 1 }, { "#literal": 2 }], - │ ━ cannot find `+` in this scope - │ - ╰ note: this could be a typo, a name used outside its scope, or a missing declaration; if it is a function or type from another module, you may need to import it first - help: a similar imported name exists - ╭╴ - 7 - ["+", { "#literal": 1 }, { "#literal": 2 }], - 7 + ["StringUnionUnknownUrl|", { "#literal": 1 }, { "#literal": 2 }], - ╰╴ - ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:171:21 - -[107/167] hashql-ast lower::expander::special-form-expander::unknown-special-form -──────────────────────────────────────────────────────────────────────────────── -Failed to verify annotation -├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:321:29 -├╴1 additional opaque attachment -│ -╰┬▶ unfulfilled annotation: DiagnosticAnnotation { category: None, severity: Error, message: "This special form path is invalid", line: Some(3) } did not match any emitted diagnostics - │ ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:151:25 - │ - ╰▶ unexpected diagnostic: - error[expander::item-not-found]: Item not found - ╭▸ - 3 │ ["::kernel::special_form::headpat"] - │ ┬─────────── ━━━━━━━ cannot find `headpat` in module `::kernel::special_form` - │ │ - │ looked in this module - │ - ╰ help: check the spelling and ensure the item is exported - ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:171:21 - -[108/167] hashql-ast lower::expander::special-form-expander::let-5 -──────────────────────────────────────────────────────────────────────────────── -Failed to verify annotation -├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:321:29 -├╴1 additional opaque attachment -│ -╰┬▶ unfulfilled annotation: DiagnosticAnnotation { category: None, severity: Error, message: "Remove this argument", line: Some(9) } did not match any emitted diagnostics - │ ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:151:25 - │ - ╰▶ unexpected diagnostic: - error[expander::invalid-argument-count]: Invalid argument count - ╭▸ - 3 │ ┏ [ - 4 │ ┃ "::kernel::special_form::let", - 5 │ ┃ "x", - 6 │ ┃ "Boolean", - ‡ ┃ - 9 │ ┃ { "#literal": true } - │ ┃ ──────────────────── unexpected argument - 10 │ ┃ //~^ ERROR Remove this argument - 11 │ ┃ ] - │ ┗━┛ expected 3 or 4 arguments to `let`, found 5 - │ - ├ help: use `(let name value body)` or `(let name type value body)` - ╰ note: the arguments are, in order: the binding name, an optional type annotation, the bound value, and the body expression where the name is in scope - ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:171:21 - -[109/167] hashql-ast lower::expander::special-form-expander::type-expr-call-intersection -──────────────────────────────────────────────────────────────────────────────── -Expected trial to pass, but it failed -├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:390:24 -╰╴1 additional opaque attachment - -[110/167] hashql-ast lower::expander::special-form-expander::use-struct -──────────────────────────────────────────────────────────────────────────────── -Expected trial to pass, but it failed -├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:390:24 -╰╴1 additional opaque attachment - -[111/167] hashql-ast lower::expander::special-form-expander::if-1 -──────────────────────────────────────────────────────────────────────────────── -Failed to verify annotation -├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:321:29 -├╴1 additional opaque attachment -│ -╰┬▶ unfulfilled annotation: DiagnosticAnnotation { category: None, severity: Error, message: "Add missing arguments", line: Some(3) } did not match any emitted diagnostics - │ ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:151:25 - │ - ╰▶ unexpected diagnostic: - error[expander::invalid-argument-count]: Invalid argument count - ╭▸ - 3 │ ["::kernel::special_form::if", { "#literal": true }] - │ ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ expected 2 or 3 arguments to `if`, found 1 - │ - ├ help: use `(if condition then)` or `(if condition then else)` - ╰ note: the arguments are, in order: the condition, the then branch, and an optional else branch - ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:171:21 - -[112/167] hashql-ast lower::expander::special-form-expander::type-2 -──────────────────────────────────────────────────────────────────────────────── -Failed to verify annotation -├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:321:29 -├╴1 additional opaque attachment -│ -╰┬▶ unfulfilled annotation: DiagnosticAnnotation { category: None, severity: Error, message: "Add missing arguments", line: Some(3) } did not match any emitted diagnostics - │ ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:151:25 - │ - ╰▶ unexpected diagnostic: - error[expander::invalid-argument-count]: Invalid argument count - ╭▸ - 3 │ ["::kernel::special_form::type", "x", "Integer"] - │ ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ expected 3 arguments to `type`, found 2 - │ - ├ help: use `(type Name type-expr body)` - ╰ note: the arguments are, in order: the type name (optionally with generic parameters), the type definition, and the body where the name is in scope - ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:171:21 - -[113/167] hashql-ast lower::expander::special-form-expander::use-struct-literal -──────────────────────────────────────────────────────────────────────────────── -Failed to verify annotation -├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:321:29 -├╴1 additional opaque attachment -│ -╰┬▶ unfulfilled annotation: DiagnosticAnnotation { category: None, severity: Error, message: "Replace with a valid import expression", line: Some(8) } did not match any emitted diagnostics - │ ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:151:25 - │ - ├▶ unexpected diagnostic: - │ error[expander::unresolved-variable]: Unresolved variable - │ ╭▸ - │ 12 │ "x" - │ │ ━ cannot find `x` in this scope - │ │ - │ ╰ note: this could be a typo, a name used outside its scope, or a missing declaration; if it is a function or type from another module, you may need to import it first - │ help: a similar imported name exists - │ ╭╴ - │ 12 - "x" - │ 12 + "~↑√∛index" - │ ╰╴ - │ ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:171:21 - │ - ├▶ unexpected diagnostic: - │ error[expander::package-not-found]: Package not found - │ ╭▸ - │ 5 │ "::math", - │ │ ┬─┯━━━ - │ │ │ │ - │ │ │ cannot find package `math` - │ │ in this path - │ │ - │ ├ help: check the package name, or add it to the project dependencies - │ ╰ note: absolute paths start from an installed package - │ ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:171:21 - │ - ╰▶ unexpected diagnostic: - error[expander::invalid-use-alias]: Invalid use alias - ╭▸ - 8 │ "x": { "#literal": 1 } - │ ━━━━━━━━━━━━━━━━━ expected `_` or a simple identifier as the alias - │ - ╰ help: use `_` to keep the original name or a simple identifier to rename: `(name: alias)` or `(name: _)` - ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:171:21 - -[114/167] hashql-ast lower::expander::special-form-expander::use-3 -──────────────────────────────────────────────────────────────────────────────── -Expected trial to pass, but it failed -├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:390:24 -╰╴1 additional opaque attachment - -[115/167] hashql-ast lower::expander::special-form-expander::type-generic-relative-path -──────────────────────────────────────────────────────────────────────────────── -Failed to verify annotation -├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:321:29 -├╴1 additional opaque attachment -│ -╰┬▶ unfulfilled annotation: DiagnosticAnnotation { category: None, severity: Error, message: "Generic arguments must be simple identifiers", line: Some(5) } did not match any emitted diagnostics - │ ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:151:25 - │ - ├▶ unexpected diagnostic: - │ error[expander::unresolved-variable]: Unresolved variable - │ ╭▸ - │ 7 │ { "#struct": { "foo": "Bar" } }, - │ │ ━━━ cannot find `Bar` in this scope - │ │ - │ ├ help: check the spelling, or import the name with a `use` statement - │ ╰ note: this could be a typo, a name used outside its scope, or a missing declaration; if it is a function or type from another module, you may need to import it first - │ ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:171:21 - │ - ╰▶ unexpected diagnostic: - error[expander::invalid-generic-argument]: Invalid generic argument - ╭▸ - 5 │ "Foo", - │ ━━━━━━━━ expected a simple type parameter - │ - ├ help: use a simple identifier like `T`, not a qualified path - ╰ note: generic parameters are declared as `Name` for unconstrained or `Name` for constrained parameters - ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:171:21 - -[116/167] hashql-ast lower::expander::special-form-expander::type-generic-duplicate -──────────────────────────────────────────────────────────────────────────────── -Failed to verify annotation -├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:321:29 -├╴1 additional opaque attachment -│ -╰┬▶ unfulfilled annotation: DiagnosticAnnotation { category: None, severity: Error, message: "Remove this duplicate declaration of 'T'", line: Some(5) } did not match any emitted diagnostics - │ ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:151:25 - │ - ├▶ unexpected diagnostic: - │ error[expander::unresolved-variable]: Unresolved variable - │ ╭▸ - │ 7 │ { "#struct": { "foo": "Bar" } }, - │ │ ━━━ cannot find `Bar` in this scope - │ │ - │ ├ help: check the spelling, or import the name with a `use` statement - │ ╰ note: this could be a typo, a name used outside its scope, or a missing declaration; if it is a function or type from another module, you may need to import it first - │ ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:171:21 - │ - ├▶ unexpected diagnostic: - │ error[expander::unresolved-variable]: Unresolved variable - │ ╭▸ - │ 5 │ "Foo", - │ │ ━━━ cannot find `Bar` in this scope - │ │ - │ ├ help: check the spelling, or import the name with a `use` statement - │ ╰ note: this could be a typo, a name used outside its scope, or a missing declaration; if it is a function or type from another module, you may need to import it first - │ ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:171:21 - │ - ╰▶ unexpected diagnostic: - error[expander::duplicate-generic-constraint]: Duplicate generic constraint - ╭▸ - 5 │ "Foo", - │ ┬ ━ duplicate generic parameter `T` - │ │ - │ `T` was first declared here - │ - ╰ help: remove the duplicate declaration or use a different name - ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:171:21 - -[117/167] hashql-ast lower::expander::special-form-expander::fn-generics-literal -──────────────────────────────────────────────────────────────────────────────── -Failed to verify annotation -├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:321:29 -├╴1 additional opaque attachment -│ -╰┬▶ unfulfilled annotation: DiagnosticAnnotation { category: None, severity: Error, message: "Use a valid generics expression", line: Some(5) } did not match any emitted diagnostics - │ ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:151:25 - │ - ├▶ unexpected diagnostic: - │ error[expander::unresolved-variable]: Unresolved variable - │ ╭▸ - │ 9 │ ["+", "a", "b"] - │ │ ━ cannot find `b` in this scope - │ │ - │ ╰ note: this could be a typo, a name used outside its scope, or a missing declaration; if it is a function or type from another module, you may need to import it first - │ help: a similar imported name exists - │ ╭╴ - │ 9 - ["+", "a", "b"] - │ 9 + ["+", "a", "~↑√∛cbrt"] - │ ╰╴ - │ ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:171:21 - │ - ├▶ unexpected diagnostic: - │ error[expander::unresolved-variable]: Unresolved variable - │ ╭▸ - │ 9 │ ["+", "a", "b"] - │ │ ━ cannot find `a` in this scope - │ │ - │ ╰ note: this could be a typo, a name used outside its scope, or a missing declaration; if it is a function or type from another module, you may need to import it first - │ help: a similar imported name exists - │ ╭╴ - │ 9 - ["+", "a", "b"] - │ 9 + ["+", "↑√∛ccesss", "b"] - │ ╰╴ - │ ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:171:21 - │ - ╰▶ unexpected diagnostic: - error[expander::invalid-fn-generics]: Invalid generic parameter list - ╭▸ - 5 │ { "#literal": 2 }, - │ ━━━━━━━━━━━━━━━━━ expected a tuple or struct for generic parameters - │ - ╰ help: use a tuple like `(T, U)` for unbounded generics or a struct like `(T: bound, U: _)` for bounded generics - ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:171:21 - -[118/167] hashql-ast lower::expander::special-form-expander::access-field-literal-string -──────────────────────────────────────────────────────────────────────────────── -Failed to verify annotation -├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:321:29 -├╴1 additional opaque attachment -│ -╰┬▶ unfulfilled annotation: DiagnosticAnnotation { category: None, severity: Error, message: "Use an integer literal here", line: Some(3) } did not match any emitted diagnostics - │ ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:151:25 - │ - ╰▶ unexpected diagnostic: - error[expander::invalid-field-literal-type]: Invalid field literal type - ╭▸ - 3 │ ["::kernel::special_form::access", "data", { "#literal": "field_name" }] - │ ━━━━━━━━━━━━ expected an integer for field indexing - │ - ╰ help: use an integer index like `0` for tuple field access, or a name like `field` for named field access - ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:171:21 - -[119/167] hashql-ast lower::expander::special-form-expander::type-generic-generic-ident -──────────────────────────────────────────────────────────────────────────────── -Failed to verify annotation -├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:321:29 -├╴1 additional opaque attachment -│ -╰┬▶ unfulfilled annotation: DiagnosticAnnotation { category: None, severity: Error, message: "Generic arguments must be simple identifiers", line: Some(5) } did not match any emitted diagnostics - │ ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:151:25 - │ - ├▶ unexpected diagnostic: - │ error[expander::unresolved-variable]: Unresolved variable - │ ╭▸ - │ 7 │ { "#struct": { "foo": "Bar" } }, - │ │ ━━━ cannot find `Bar` in this scope - │ │ - │ ├ help: check the spelling, or import the name with a `use` statement - │ ╰ note: this could be a typo, a name used outside its scope, or a missing declaration; if it is a function or type from another module, you may need to import it first - │ ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:171:21 - │ - ╰▶ unexpected diagnostic: - error[expander::invalid-generic-argument]: Invalid generic argument - ╭▸ - 5 │ "Foo>", - │ ━━━━━━━━ expected a simple type parameter - │ - ├ help: use a simple identifier like `T`, not a qualified path - ╰ note: generic parameters are declared as `Name` for unconstrained or `Name` for constrained parameters - ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:171:21 - -[120/167] hashql-ast lower::expander::special-form-expander::use-4 -──────────────────────────────────────────────────────────────────────────────── -Failed to verify annotation -├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:321:29 -├╴1 additional opaque attachment -│ -╰┬▶ unfulfilled annotation: DiagnosticAnnotation { category: None, severity: Error, message: "Remove this argument", line: Some(8) } did not match any emitted diagnostics - │ ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:151:25 - │ - ╰▶ unexpected diagnostic: - error[expander::invalid-argument-count]: Invalid argument count - ╭▸ - 3 │ ┏ [ - 4 │ ┃ "::kernel::special_form::use", - 5 │ ┃ "::math", - 6 │ ┃ { "#tuple": ["pi"] }, - 7 │ ┃ "x", - 8 │ ┃ "y" - │ ┃ ─ unexpected argument - 9 │ ┃ //~^ ERROR Remove this argument - 10 │ ┃ ] - │ ┗━┛ expected 3 arguments to `use`, found 4 - │ - ├ help: use `(use path imports body)` - ╰ note: the arguments are, in order: the module path to import from, the import specifier (`*`, a tuple of names, or a struct of aliases), and the body where the imports are in scope - ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:171:21 - -[121/167] hashql-ast lower::expander::special-form-expander::use-struct-path -──────────────────────────────────────────────────────────────────────────────── -Failed to verify annotation -├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:321:29 -├╴1 additional opaque attachment -│ -╰┬▶ unfulfilled annotation: DiagnosticAnnotation { category: None, severity: Error, message: "Use a simple identifier here", line: Some(8) } did not match any emitted diagnostics - │ ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:151:25 - │ - ├▶ unexpected diagnostic: - │ error[expander::unresolved-variable]: Unresolved variable - │ ╭▸ - │ 12 │ "x" - │ │ ━ cannot find `x` in this scope - │ │ - │ ╰ note: this could be a typo, a name used outside its scope, or a missing declaration; if it is a function or type from another module, you may need to import it first - │ help: a similar imported name exists - │ ╭╴ - │ 12 - "x" - │ 12 + "~↑√∛index" - │ ╰╴ - │ ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:171:21 - │ - ├▶ unexpected diagnostic: - │ error[expander::item-not-found]: Item not found - │ ╭▸ - │ 5 │ "::core", - │ │ ──── looked in this module - │ ‡ - │ 8 │ "x": "::core::math::sub" - │ │ ━ cannot find `x` in module `::core` - │ ╰╴ - │ help: a similar item exists in this module - │ ╭╴ - │ 8 - "x": "::core::math::sub" - │ 8 + "mathoptionresulturluuid": "::core::math::sub" - │ ╰╴ - │ ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:171:21 - │ - ╰▶ unexpected diagnostic: - error[expander::invalid-use-alias]: Invalid use alias - ╭▸ - 8 │ "x": "::core::math::sub" - │ ━━━━━━━━━━━━━━━━━ expected `_` or a simple identifier as the alias - │ - ╰ help: use `_` to keep the original name or a simple identifier to rename: `(name: alias)` or `(name: _)` - ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:171:21 - -[122/167] hashql-ast lower::expander::special-form-expander::if-4 -──────────────────────────────────────────────────────────────────────────────── -Failed to verify annotation -├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:321:29 -├╴1 additional opaque attachment -│ -╰┬▶ unfulfilled annotation: DiagnosticAnnotation { category: None, severity: Error, message: "Remove this argument", line: Some(8) } did not match any emitted diagnostics - │ ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:151:25 - │ - ╰▶ unexpected diagnostic: - error[expander::invalid-argument-count]: Invalid argument count - ╭▸ - 3 │ ┏ [ - 4 │ ┃ "::kernel::special_form::if", - 5 │ ┃ { "#literal": true }, - 6 │ ┃ { "#literal": true }, - 7 │ ┃ { "#literal": true }, - 8 │ ┃ { "#literal": true } - │ ┃ ──────────────────── unexpected argument - 9 │ ┃ //~^ ERROR Remove this argument - 10 │ ┃ ] - │ ┗━┛ expected 2 or 3 arguments to `if`, found 4 - │ - ├ help: use `(if condition then)` or `(if condition then else)` - ╰ note: the arguments are, in order: the condition, the then branch, and an optional else branch - ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:171:21 - -[123/167] hashql-ast lower::expander::special-form-expander::type-never -──────────────────────────────────────────────────────────────────────────────── -Expected trial to pass, but it failed -├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:390:24 -╰╴1 additional opaque attachment - -[124/167] hashql-ast lower::expander::special-form-expander::type-expr-tuple -──────────────────────────────────────────────────────────────────────────────── -Expected trial to pass, but it failed -├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:390:24 -╰╴1 additional opaque attachment - -[125/167] hashql-ast lower::expander::special-form-expander::use-tuple -──────────────────────────────────────────────────────────────────────────────── -Expected trial to pass, but it failed -├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:390:24 -╰╴1 additional opaque attachment - -[126/167] hashql-ast lower::expander::special-form-expander::let-argument-not-ident -──────────────────────────────────────────────────────────────────────────────── -Failed to verify annotation -├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:321:29 -├╴1 additional opaque attachment -│ -╰┬▶ unfulfilled annotation: DiagnosticAnnotation { category: None, severity: Error, message: "Replace this with a simple identifier", line: Some(5) } did not match any emitted diagnostics - │ ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:151:25 - │ - ├▶ unfulfilled annotation: DiagnosticAnnotation { category: None, severity: Error, message: "Replace this with a simple identifier", line: Some(10) } did not match any emitted diagnostics - │ ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:151:25 - │ - ├▶ unfulfilled annotation: DiagnosticAnnotation { category: None, severity: Error, message: "Replace this with a simple identifier", line: Some(15) } did not match any emitted diagnostics - │ ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:151:25 - │ - ╰▶ unexpected diagnostic: - error[expander::invalid-binding-name]: Invalid binding name - ╭▸ - 5 │ "Int", - │ ━━━━━━ expected a simple identifier for the `let` binding name - │ - ├ help: write `(let name value body)` with a plain name such as `x` - ╰ note: the first argument to `let` introduces a new local binding and must be a plain identifier without path qualification or generic arguments - ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:171:21 - -[127/167] hashql-ast lower::expander::special-form-expander::type-struct-has-type -──────────────────────────────────────────────────────────────────────────────── -Failed to verify annotation -├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:321:29 -├╴1 additional opaque attachment -│ -╰┬▶ unfulfilled annotation: DiagnosticAnnotation { category: None, severity: Error, message: "Remove this type annotation", line: Some(8) } did not match any emitted diagnostics - │ ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:151:25 - │ - ├▶ unexpected diagnostic: - │ error[expander::type-annotation-in-type-position]: Type annotation in type position - │ ╭▸ - │ 6 │ ┌ { - │ 7 │ │ "#struct": { "name": "String" }, - │ 8 │ │ "#type": "(name: String)" - │ │ │ ━━━━━━━━━━━━━━ type annotations are not allowed inside a type expression - │ 9 │ │ //~^ ERROR Remove this type annotation - │ 10 │ │ }, - │ │ └───┘ this struct is already being used as a type - │ │ - │ ├ help: remove the type annotation - │ ╰ note: in type position, `(name: String)` already defines a struct type - │ ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:171:21 - │ - ╰▶ unexpected diagnostic: - error[expander::unresolved-variable]: Unresolved variable - ╭▸ - 11 │ "x" - │ ━ cannot find `x` in this scope - │ - ╰ note: this could be a typo, a name used outside its scope, or a missing declaration; if it is a function or type from another module, you may need to import it first - help: a similar imported name exists - ╭╴ - 11 - "x" - 11 + "~↑√∛index" - ╰╴ - ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:171:21 - -[128/167] hashql-ast lower::expander::special-form-expander::access-field-literal-boolean -──────────────────────────────────────────────────────────────────────────────── -Failed to verify annotation -├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:321:29 -├╴1 additional opaque attachment -│ -╰┬▶ unfulfilled annotation: DiagnosticAnnotation { category: None, severity: Error, message: "Use an integer literal here", line: Some(3) } did not match any emitted diagnostics - │ ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:151:25 - │ - ╰▶ unexpected diagnostic: - error[expander::invalid-field-literal-type]: Invalid field literal type - ╭▸ - 3 │ ["::kernel::special_form::access", "data", { "#literal": true }] - │ ━━━━ expected an integer for field indexing - │ - ╰ help: use an integer index like `0` for tuple field access, or a name like `field` for named field access - ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:171:21 - -[129/167] hashql-ast lower::expander::special-form-expander::let-collect-all-errors -──────────────────────────────────────────────────────────────────────────────── -Failed to verify annotation -├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:321:29 -├╴1 additional opaque attachment -│ -╰┬▶ unfulfilled annotation: DiagnosticAnnotation { category: None, severity: Error, message: "Replace this with a simple identifier", line: Some(5) } did not match any emitted diagnostics - │ ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:151:25 - │ - ├▶ unfulfilled annotation: DiagnosticAnnotation { category: None, severity: Error, message: "Replace this literal with a type name", line: Some(7) } did not match any emitted diagnostics - │ ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:151:25 - │ - ╰▶ unexpected diagnostic: - error[expander::invalid-binding-name]: Invalid binding name - ╭▸ - 5 │ "::x", - │ ━━━ expected a simple identifier for the `let` binding name - │ - ├ help: write `(let name value body)` with a plain name such as `x` - ╰ note: the first argument to `let` introduces a new local binding and must be a plain identifier without path qualification or generic arguments - ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:171:21 - -[130/167] hashql-ast lower::expander::special-form-expander::type-collect-all-errors -──────────────────────────────────────────────────────────────────────────────── -Failed to verify annotation -├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:321:29 -├╴1 additional opaque attachment -│ -╰┬▶ unfulfilled annotation: DiagnosticAnnotation { category: None, severity: Error, message: "Replace this qualified path with a simple identifier", line: Some(3) } did not match any emitted diagnostics - │ ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:151:25 - │ - ├▶ unfulfilled annotation: DiagnosticAnnotation { category: None, severity: Error, message: "Replace this literal with a type name", line: Some(3) } did not match any emitted diagnostics - │ ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:151:25 - │ - ╰▶ unexpected diagnostic: - error[expander::invalid-binding-name]: Invalid binding name - ╭▸ - 3 │ ["::kernel::special_form::type", "::x", { "#literal": 1 }, "x"] - │ ━━━ expected a type name for the `type` binding - │ - ├ help: write `(type Name type-expr body)` with a name like `MyType` or `Pair` - ╰ note: the first argument to `type` introduces a new type alias and must be a simple identifier, optionally with generic parameters - ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:171:21 - -[131/167] hashql-ast lower::expander::special-form-expander::access-field-literal-valid -──────────────────────────────────────────────────────────────────────────────── -Expected trial to pass, but it failed -├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:390:24 -╰╴1 additional opaque attachment - -[132/167] hashql-ast lower::expander::special-form-expander::unknown-special-form-typo -──────────────────────────────────────────────────────────────────────────────── -Failed to verify annotation -├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:321:29 -├╴1 additional opaque attachment -│ -╰┬▶ unfulfilled annotation: DiagnosticAnnotation { category: None, severity: Error, message: "Did you mean to use 'newtype' instead?", line: Some(3) } did not match any emitted diagnostics - │ ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:151:25 - │ - ╰▶ unexpected diagnostic: - error[expander::item-not-found]: Item not found - ╭▸ - 3 │ ["::kernel::special_form::nuwtype"] - │ ┬─────────── ━━━━━━━ cannot find `nuwtype` in module `::kernel::special_form` - │ │ - │ looked in this module - ╰╴ - help: a similar item exists in this module - ╭╴ - 3 - ["::kernel::special_form::nuwtype"] - 3 + ["::kernel::special_form::newtype"] - ╰╴ - ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:171:21 - -[133/167] hashql-ast lower::expander::special-form-expander::type-expr-call-arbitrary -──────────────────────────────────────────────────────────────────────────────── -Failed to verify annotation -├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:321:29 -├╴1 additional opaque attachment -│ -╰┬▶ unfulfilled annotation: DiagnosticAnnotation { category: None, severity: Error, message: "This function cannot be used as a type constructor", line: Some(6) } did not match any emitted diagnostics - │ ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:151:25 - │ - ├▶ unexpected diagnostic: - │ error[expander::unresolved-variable]: Unresolved variable - │ ╭▸ - │ 6 │ ["::core::math::headpat", "Int", "Float"] - │ │ ━━━━━ cannot find `Float` in this scope - │ │ - │ ├ help: check the spelling, or import the name with a `use` statement - │ ╰ note: this could be a typo, a name used outside its scope, or a missing declaration; if it is a function or type from another module, you may need to import it first - │ ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:171:21 - │ - ├▶ unexpected diagnostic: - │ error[expander::unresolved-variable]: Unresolved variable - │ ╭▸ - │ 6 │ ["::core::math::headpat", "Int", "Float"] - │ │ ━━━ cannot find `Int` in this scope - │ │ - │ ├ help: check the spelling, or import the name with a `use` statement - │ ╰ note: this could be a typo, a name used outside its scope, or a missing declaration; if it is a function or type from another module, you may need to import it first - │ ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:171:21 - │ - ╰▶ unexpected diagnostic: - error[expander::item-not-found]: Item not found - ╭▸ - 6 │ ["::core::math::headpat", "Int", "Float"] - │ ┬─── ━━━━━━━ cannot find `headpat` in module `::core::math` - │ │ - │ looked in this module - │ - ╰ help: check the spelling and ensure the item is exported - ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:171:21 - -[134/167] hashql-ast lower::expander::special-form-expander::not-enough-segments -──────────────────────────────────────────────────────────────────────────────── -Failed to verify annotation -├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:321:29 -├╴1 additional opaque attachment -│ -╰┬▶ unfulfilled annotation: DiagnosticAnnotation { category: None, severity: Error, message: "exactly 3 segments", line: Some(4) } did not match any emitted diagnostics - │ ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:151:25 - │ - ╰▶ unexpected diagnostic: - error[expander::item-not-found]: Item not found - ╭▸ - 4 │ "::kernel::special_form", - │ ┬───── ━━━━━━━━━━━━ cannot find `special_form` in module `::kernel` - │ │ - │ looked in this module - │ - ╰ help: check the spelling and ensure the item is exported - ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:171:21 - -[135/167] hashql-ast lower::expander::special-form-expander::generics -──────────────────────────────────────────────────────────────────────────────── -Failed to verify annotation -├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:321:29 -├╴1 additional opaque attachment -│ -╰┬▶ unfulfilled annotation: DiagnosticAnnotation { category: None, severity: Error, message: "Remove these generic arguments", line: Some(3) } did not match any emitted diagnostics - │ ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:151:25 - │ - ├▶ unexpected diagnostic: - │ error[expander::generic-arguments-in-module]: Generic arguments in module path - │ ╭▸ - │ 3 │ ["::kernel::special_form::if"] - │ │ ━ generic argument not allowed here - │ │ - │ ├ help: move the generic arguments to the final segment of the path, or remove them - │ ╰ note: modules are not generic; only the final item in a path can be parameterized - │ ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:171:21 - │ - ├▶ unexpected diagnostic: - │ error[expander::unresolved-variable]: Unresolved variable - │ ╭▸ - │ 3 │ ["::kernel::special_form::if"] - │ │ ━ cannot find `U` in this scope - │ │ - │ ╰ note: this could be a typo, a name used outside its scope, or a missing declaration; if it is a function or type from another module, you may need to import it first - │ help: a similar imported name exists - │ ╭╴ - │ 3 - ["::kernel::special_form::if"] - │ 3 + ["::kernel::special_form::if<~↑√∛rl>"] - │ ╰╴ - │ ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:171:21 - │ - ╰▶ unexpected diagnostic: - error[expander::unresolved-variable]: Unresolved variable - ╭▸ - 3 │ ["::kernel::special_form::if"] - │ ━ cannot find `T` in this scope - │ - ╰ note: this could be a typo, a name used outside its scope, or a missing declaration; if it is a function or type from another module, you may need to import it first - help: a similar imported name exists - ╭╴ - 3 - ["::kernel::special_form::if"] - 3 + ["::kernel::special_form<||~↑√∛>::if"] - ╰╴ - ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:171:21 - -[136/167] hashql-ast lower::expander::special-form-expander::use-2 -──────────────────────────────────────────────────────────────────────────────── -Failed to verify annotation -├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:321:29 -├╴1 additional opaque attachment -│ -╰┬▶ unfulfilled annotation: DiagnosticAnnotation { category: None, severity: Error, message: "Add missing arguments", line: Some(3) } did not match any emitted diagnostics - │ ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:151:25 - │ - ╰▶ unexpected diagnostic: - error[expander::invalid-argument-count]: Invalid argument count - ╭▸ - 3 │ ["::kernel::special_form::use", "::math", { "#tuple": ["pi"] }] - │ ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ expected 3 arguments to `use`, found 2 - │ - ├ help: use `(use path imports body)` - ╰ note: the arguments are, in order: the module path to import from, the import specifier (`*`, a tuple of names, or a struct of aliases), and the body where the imports are in scope - ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:171:21 - -[137/167] hashql-ast lower::expander::special-form-expander::let-2 -──────────────────────────────────────────────────────────────────────────────── -Failed to verify annotation -├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:321:29 -├╴1 additional opaque attachment -│ -╰┬▶ unfulfilled annotation: DiagnosticAnnotation { category: None, severity: Error, message: "Add missing arguments", line: Some(3) } did not match any emitted diagnostics - │ ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:151:25 - │ - ╰▶ unexpected diagnostic: - error[expander::invalid-argument-count]: Invalid argument count - ╭▸ - 3 │ ["::kernel::special_form::let", "x", { "#literal": true }] - │ ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ expected 3 or 4 arguments to `let`, found 2 - │ - ├ help: use `(let name value body)` or `(let name type value body)` - ╰ note: the arguments are, in order: the binding name, an optional type annotation, the bound value, and the body expression where the name is in scope - ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:171:21 - -[138/167] hashql-ast lower::expander::special-form-expander::access-field-index-out-of-bounds -──────────────────────────────────────────────────────────────────────────────── -Failed to verify annotation -├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:321:29 -├╴1 additional opaque attachment -│ -╰┬▶ unfulfilled annotation: DiagnosticAnnotation { category: None, severity: Error, message: "Use a valid field index within usize bounds", line: Some(3) } did not match any emitted diagnostics - │ ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:151:25 - │ - ╰▶ unexpected diagnostic: - error[expander::field-index-out-of-bounds]: Field index out of bounds - ╭▸ - 3 │ ["::kernel::special_form::access", "data", { "#literal": 18446744073709551616 }] - │ ━━━━━━━━━━━━━━━━━━━━ field index is out of bounds - │ - ╰ help: use a non-negative integer that fits within platform bounds - ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:171:21 - -[139/167] hashql-ast lower::expander::special-form-expander::fn-generics-tuple-type -──────────────────────────────────────────────────────────────────────────────── -Failed to verify annotation -├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:321:29 -├╴1 additional opaque attachment -│ -╰┬▶ unfulfilled annotation: DiagnosticAnnotation { category: None, severity: Error, message: "Remove this type annotation", line: Some(7) } did not match any emitted diagnostics - │ ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:151:25 - │ - ├▶ unexpected diagnostic: - │ error[expander::unresolved-variable]: Unresolved variable - │ ╭▸ - │ 12 │ ["+", "a", "b"] - │ │ ━ cannot find `b` in this scope - │ │ - │ ╰ note: this could be a typo, a name used outside its scope, or a missing declaration; if it is a function or type from another module, you may need to import it first - │ help: a similar imported name exists - │ ╭╴ - │ 12 - ["+", "a", "b"] - │ 12 + ["+", "a", "~↑√∛cbrt"] - │ ╰╴ - │ ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:171:21 - │ - ├▶ unexpected diagnostic: - │ error[expander::unresolved-variable]: Unresolved variable - │ ╭▸ - │ 12 │ ["+", "a", "b"] - │ │ ━ cannot find `a` in this scope - │ │ - │ ╰ note: this could be a typo, a name used outside its scope, or a missing declaration; if it is a function or type from another module, you may need to import it first - │ help: a similar imported name exists - │ ╭╴ - │ 12 - ["+", "a", "b"] - │ 12 + ["+", "↑√∛ccesss", "b"] - │ ╰╴ - │ ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:171:21 - │ - ╰▶ unexpected diagnostic: - error[expander::fn-generics-type-annotation]: Type annotation on generic parameter list - ╭▸ - 7 │ "#type": "Int" - │ ━━━ type annotation is not allowed on the generic parameter list - │ - ├ help: remove the type annotation; the generic parameter list declares type variables, not a typed value - ╰ note: write `(fn (T, U) ...)` for unbounded generics or `(fn (T: bound, U: _) ...)` for bounded generics - ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:171:21 - -[140/167] hashql-ast lower::expander::special-form-expander::fn-generics-struct -──────────────────────────────────────────────────────────────────────────────── -Expected trial to pass, but it failed -├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:390:24 -╰╴1 additional opaque attachment - -[141/167] hashql-ast lower::expander::special-form-expander::labeled-argument -──────────────────────────────────────────────────────────────────────────────── -Failed to verify annotation -├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:321:29 -├╴1 additional opaque attachment -│ -╰┬▶ unfulfilled annotation: DiagnosticAnnotation { category: None, severity: Error, message: "this labeled argument", line: Some(6) } did not match any emitted diagnostics - │ ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:151:25 - │ - ╰▶ unexpected diagnostic: - error[expander::labeled-arguments-not-supported]: Labeled arguments not supported - ╭▸ - 6 │ ":test": { "#literal": true } - │ ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ labeled arguments are not allowed in `if` - │ - ╰ help: pass the arguments positionally: `(if condition then)` or `(if condition then else)` - ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:171:21 - -[142/167] hashql-ast lower::expander::special-form-expander::type-3 -──────────────────────────────────────────────────────────────────────────────── -Expected trial to pass, but it failed -├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:390:24 -╰╴1 additional opaque attachment - -[143/167] hashql-ast lower::expander::pre-expansion-name-resolver::re-assign-prelude -──────────────────────────────────────────────────────────────────────────────── -Expected trial to pass, but it failed -├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:390:24 -╰╴1 additional opaque attachment - -[144/167] hashql-ast lower::expander::pre-expansion-name-resolver::newtype-4 -──────────────────────────────────────────────────────────────────────────────── -Expected trial to pass, but it failed -├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:390:24 -╰╴1 additional opaque attachment - -[145/167] hashql-ast lower::expander::pre-expansion-name-resolver::re-assign -──────────────────────────────────────────────────────────────────────────────── -Expected trial to pass, but it failed -├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:390:24 -╰╴1 additional opaque attachment - -[146/167] hashql-ast lower::expander::pre-expansion-name-resolver::let-absolute -──────────────────────────────────────────────────────────────────────────────── -Expected trial to pass, but it failed -├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:390:24 -╰╴1 additional opaque attachment - -[147/167] hashql-ast lower::expander::pre-expansion-name-resolver::nested-let -──────────────────────────────────────────────────────────────────────────────── -Expected trial to pass, but it failed -├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:390:24 -╰╴1 additional opaque attachment - -[148/167] hashql-ast lower::expander::pre-expansion-name-resolver::absolute-path -──────────────────────────────────────────────────────────────────────────────── -Expected trial to pass, but it failed -├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:390:24 -╰╴1 additional opaque attachment - -[149/167] hashql-ast lower::expander::pre-expansion-name-resolver::newtype-3-alias -──────────────────────────────────────────────────────────────────────────────── -Expected trial to pass, but it failed -├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:390:24 -╰╴1 additional opaque attachment - -[150/167] hashql-ast lower::expander::pre-expansion-name-resolver::type-3-alias -──────────────────────────────────────────────────────────────────────────────── -Expected trial to pass, but it failed -├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:390:24 -╰╴1 additional opaque attachment - -[151/167] hashql-ast lower::expander::pre-expansion-name-resolver::multi-segment-resolution -──────────────────────────────────────────────────────────────────────────────── -Expected trial to pass, but it failed -├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:390:24 -╰╴1 additional opaque attachment - -[152/167] hashql-ast lower::expander::pre-expansion-name-resolver::let-3-alias -──────────────────────────────────────────────────────────────────────────────── -Expected trial to pass, but it failed -├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:390:24 -╰╴1 additional opaque attachment - -[153/167] hashql-ast lower::expander::pre-expansion-name-resolver::newtype-3 -──────────────────────────────────────────────────────────────────────────────── -Expected trial to pass, but it failed -├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:390:24 -╰╴1 additional opaque attachment - -[154/167] hashql-ast lower::expander::pre-expansion-name-resolver::resolve-symbol -──────────────────────────────────────────────────────────────────────────────── -Expected trial to pass, but it failed -├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:390:24 -╰╴1 additional opaque attachment - -[155/167] hashql-ast lower::expander::pre-expansion-name-resolver::type-4 -──────────────────────────────────────────────────────────────────────────────── -Expected trial to pass, but it failed -├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:390:24 -╰╴1 additional opaque attachment - -[156/167] hashql-ast lower::expander::pre-expansion-name-resolver::alias-symbol -──────────────────────────────────────────────────────────────────────────────── -Expected trial to pass, but it failed -├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:390:24 -╰╴1 additional opaque attachment - -[157/167] hashql-ast lower::expander::pre-expansion-name-resolver::let-4-alias -──────────────────────────────────────────────────────────────────────────────── -Expected trial to pass, but it failed -├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:390:24 -╰╴1 additional opaque attachment - -[158/167] hashql-ast lower::expander::pre-expansion-name-resolver::resolve-generics -──────────────────────────────────────────────────────────────────────────────── -Expected trial to pass, but it failed -├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:390:24 -╰╴1 additional opaque attachment + 11 + "~", + ├╴ + 11 - "x", + 11 + "↑", + ├╴ + 11 - "x", + 11 + "√", + ├╴ + 11 - "x", + 11 + "∛", + ├╴ + 11 │ "index", + ╰╴ ++++ + ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:171:21) +2026-06-15T13:31:06.642539Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "type-extractor"] result=Ok(()) +2026-06-15T13:31:06.642570Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "checking"] +2026-06-15T13:31:06.642595Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "type-extractor"] +2026-06-15T13:31:06.642829Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "inference"] result=Ok(()) +2026-06-15T13:31:06.642840Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "inference"] +2026-06-15T13:31:06.642861Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "checking"] result=Ok(()) +2026-06-15T13:31:06.642870Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "checking"] +2026-06-15T13:31:06.644041Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "checking"] result=Ok(()) +2026-06-15T13:31:06.644051Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "checking"] +2026-06-15T13:31:06.644116Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "checking"] result=Ok(()) +2026-06-15T13:31:06.644126Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "checking"] +2026-06-15T13:31:06.644149Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "inference"] result=Ok(()) +2026-06-15T13:31:06.644158Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "inference"] +2026-06-15T13:31:06.644281Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "type-extractor"] result=Ok(()) +2026-06-15T13:31:06.644311Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "type-extractor"] +2026-06-15T13:31:06.644463Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "checking"] result=Ok(()) +2026-06-15T13:31:06.644475Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "checking"] +2026-06-15T13:31:06.645648Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "checking"] result=Ok(()) +2026-06-15T13:31:06.645657Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "checking"] +2026-06-15T13:31:06.645760Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "checking"] result=Ok(()) +2026-06-15T13:31:06.645767Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "checking"] +2026-06-15T13:31:06.646536Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "type-extractor"] result=Ok(()) +2026-06-15T13:31:06.646561Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "type-extractor"] +2026-06-15T13:31:06.647156Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "checking"] result=Ok(()) +2026-06-15T13:31:06.647168Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "checking"] +2026-06-15T13:31:06.647713Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "inference"] result=Ok(()) +2026-06-15T13:31:06.647721Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "inference"] +2026-06-15T13:31:06.647901Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "type-extractor"] result=Ok(()) +2026-06-15T13:31:06.647927Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "type-extractor"] +2026-06-15T13:31:06.648391Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "checking"] result=Ok(()) +2026-06-15T13:31:06.648401Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "checking"] +2026-06-15T13:31:06.649043Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "inference"] result=Ok(()) +2026-06-15T13:31:06.649053Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "inference"] +2026-06-15T13:31:06.649110Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "checking"] result=Ok(()) +2026-06-15T13:31:06.649120Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "checking"] +2026-06-15T13:31:06.649288Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "type-extractor"] result=Ok(()) +2026-06-15T13:31:06.649304Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "type-extractor", "definition"] +2026-06-15T13:31:06.649950Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "checking"] result=Ok(()) +2026-06-15T13:31:06.649962Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "checking"] +2026-06-15T13:31:06.650053Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "inference"] result=Err(Expected trial to pass, but it failed +├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:390:24 +╰╴1 additional opaque attachment) +2026-06-15T13:31:06.650084Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "inference"] +2026-06-15T13:31:06.650310Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-mir" trial=["reify"] result=Ok(()) +2026-06-15T13:31:06.650325Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-mir" trial=["pass", "post_inline"] +2026-06-15T13:31:06.650434Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "checking"] result=Err(Expected trial to pass, but it failed +├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:390:24 +╰╴1 additional opaque attachment) +2026-06-15T13:31:06.650456Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "checking"] +2026-06-15T13:31:06.650507Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "type-extractor", "definition"] result=Ok(()) +2026-06-15T13:31:06.650527Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "type-extractor", "definition"] +2026-06-15T13:31:06.650956Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "checking"] result=Err(Expected trial to pass, but it failed +├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:390:24 +╰╴1 additional opaque attachment) +2026-06-15T13:31:06.650978Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "checking"] +2026-06-15T13:31:06.651809Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "checking"] result=Ok(()) +2026-06-15T13:31:06.651818Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "checking"] +2026-06-15T13:31:06.652072Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "type-extractor", "definition"] result=Ok(()) +2026-06-15T13:31:06.652091Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "type-extractor", "definition"] +2026-06-15T13:31:06.652221Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-mir" trial=["pass", "post_inline"] result=Ok(()) +2026-06-15T13:31:06.652232Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-mir" trial=["pass", "post_inline"] +2026-06-15T13:31:06.652826Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "inference"] result=Ok(()) +2026-06-15T13:31:06.652836Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "inference"] +2026-06-15T13:31:06.653129Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "checking"] result=Ok(()) +2026-06-15T13:31:06.653137Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "checking"] +2026-06-15T13:31:06.653192Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "checking"] result=Ok(()) +2026-06-15T13:31:06.653203Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "checking"] +2026-06-15T13:31:06.653274Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-eval" trial=["postgres"] result=Ok(()) +2026-06-15T13:31:06.653284Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-eval" trial=["postgres"] +2026-06-15T13:31:06.653397Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "type-extractor", "definition"] result=Ok(()) +2026-06-15T13:31:06.653421Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "type-extractor", "definition"] +2026-06-15T13:31:06.654503Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "checking"] result=Ok(()) +2026-06-15T13:31:06.654515Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "checking"] +2026-06-15T13:31:06.654629Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "checking"] result=Ok(()) +2026-06-15T13:31:06.654638Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "checking"] +2026-06-15T13:31:06.654645Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "type-extractor", "definition"] result=Ok(()) +2026-06-15T13:31:06.654658Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "type-extractor", "definition"] +2026-06-15T13:31:06.654732Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-mir" trial=["pass", "post_inline"] result=Ok(()) +2026-06-15T13:31:06.654748Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-mir" trial=["pass", "pre_inline"] +2026-06-15T13:31:06.654973Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "inference"] result=Ok(()) +2026-06-15T13:31:06.654982Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "inference"] +2026-06-15T13:31:06.655932Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "checking"] result=Ok(()) +2026-06-15T13:31:06.655941Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "checking"] +2026-06-15T13:31:06.655943Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "checking"] result=Ok(()) +2026-06-15T13:31:06.655953Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "checking"] +2026-06-15T13:31:06.656003Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "type-extractor", "definition"] result=Ok(()) +2026-06-15T13:31:06.656024Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "type-extractor", "definition"] +2026-06-15T13:31:06.656276Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-mir" trial=["pass", "pre_inline"] result=Ok(()) +2026-06-15T13:31:06.656287Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-mir" trial=["pass", "pre_inline"] +2026-06-15T13:31:06.656465Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "inference"] result=Ok(()) +2026-06-15T13:31:06.656475Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "inference"] +2026-06-15T13:31:06.656970Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "checking"] result=Ok(()) +2026-06-15T13:31:06.656984Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-mir" trial=["pass", "inline"] +2026-06-15T13:31:06.657303Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "type-extractor", "definition"] result=Ok(()) +2026-06-15T13:31:06.657320Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "type-extractor", "definition"] +2026-06-15T13:31:06.657616Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "checking"] result=Ok(()) +2026-06-15T13:31:06.657627Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "checking"] +2026-06-15T13:31:06.657773Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-mir" trial=["pass", "pre_inline"] result=Ok(()) +2026-06-15T13:31:06.657783Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-mir" trial=["pass", "pre_inline"] +2026-06-15T13:31:06.657819Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "inference"] result=Ok(()) +2026-06-15T13:31:06.657827Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "inference"] +2026-06-15T13:31:06.658553Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "checking"] result=Ok(()) +2026-06-15T13:31:06.658570Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-mir" trial=["pass", "inline"] +2026-06-15T13:31:06.658793Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "type-extractor", "definition"] result=Ok(()) +2026-06-15T13:31:06.658818Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "type-extractor", "definition"] +2026-06-15T13:31:06.659158Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-mir" trial=["pass", "pre_inline"] result=Ok(()) +2026-06-15T13:31:06.659170Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-mir" trial=["pass", "pre_inline"] +2026-06-15T13:31:06.659213Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "checking"] result=Ok(()) +2026-06-15T13:31:06.659223Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "checking"] +2026-06-15T13:31:06.659271Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-mir" trial=["pass", "inline"] result=Ok(()) +2026-06-15T13:31:06.659283Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-mir" trial=["pass", "inline"] +2026-06-15T13:31:06.659345Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "inference"] result=Ok(()) +2026-06-15T13:31:06.659355Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "inference"] +2026-06-15T13:31:06.660121Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "type-extractor", "definition"] result=Ok(()) +2026-06-15T13:31:06.660139Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "type-extractor", "definition"] +2026-06-15T13:31:06.660346Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-mir" trial=["pass", "inline"] result=Ok(()) +2026-06-15T13:31:06.660360Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-mir" trial=["pass", "data-dependency"] +2026-06-15T13:31:06.660875Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "checking"] result=Ok(()) +2026-06-15T13:31:06.660876Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-mir" trial=["pass", "pre_inline"] result=Ok(()) +2026-06-15T13:31:06.660884Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "checking"] +2026-06-15T13:31:06.660892Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-mir" trial=["pass", "data-dependency"] +2026-06-15T13:31:06.661102Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "inference"] result=Ok(()) +2026-06-15T13:31:06.661111Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "inference"] +2026-06-15T13:31:06.661387Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "type-extractor", "definition"] result=Ok(()) +2026-06-15T13:31:06.661402Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "type-extractor", "definition"] +2026-06-15T13:31:06.662343Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "inference"] result=Ok(()) +2026-06-15T13:31:06.662355Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "inference"] +2026-06-15T13:31:06.662592Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-mir" trial=["pass", "data-dependency"] result=Ok(()) +2026-06-15T13:31:06.662600Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-mir" trial=["pass", "data-dependency"] +2026-06-15T13:31:06.662637Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-mir" trial=["pass", "data-dependency"] result=Ok(()) +2026-06-15T13:31:06.662638Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "checking"] result=Ok(()) +2026-06-15T13:31:06.662644Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-mir" trial=["pass", "data-dependency"] +2026-06-15T13:31:06.662649Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "checking"] +2026-06-15T13:31:06.662748Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "type-extractor", "definition"] result=Ok(()) +2026-06-15T13:31:06.662761Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "type-extractor", "definition"] +2026-06-15T13:31:06.663724Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "inference"] result=Ok(()) +2026-06-15T13:31:06.663733Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "inference"] +2026-06-15T13:31:06.663833Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "checking"] result=Ok(()) +2026-06-15T13:31:06.663848Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "checking"] +2026-06-15T13:31:06.663956Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "type-extractor", "definition"] result=Ok(()) +2026-06-15T13:31:06.663971Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "type-extractor", "definition"] +2026-06-15T13:31:06.663837Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-mir" trial=["pass", "inline"] result=Ok(()) +2026-06-15T13:31:06.664156Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-mir" trial=["pass", "data-dependency"] +2026-06-15T13:31:06.665086Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "checking"] result=Ok(()) +2026-06-15T13:31:06.665094Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "checking"] +2026-06-15T13:31:06.665226Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "type-extractor", "definition"] result=Ok(()) +2026-06-15T13:31:06.665249Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-mir" trial=["pass", "data-dependency"] +2026-06-15T13:31:06.665054Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "inference"] result=Err(Expected trial to pass, but it failed +├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:390:24 +╰╴1 additional opaque attachment) +2026-06-15T13:31:06.665540Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "inference"] +2026-06-15T13:31:06.665544Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-mir" trial=["pass", "data-dependency"] result=Ok(()) +2026-06-15T13:31:06.665554Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-mir" trial=["pass", "data-dependency"] +2026-06-15T13:31:06.666328Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-mir" trial=["pass", "data-dependency"] result=Ok(()) +2026-06-15T13:31:06.666336Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-mir" trial=["pass", "data-dependency"] +2026-06-15T13:31:06.666679Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "checking"] result=Ok(()) +2026-06-15T13:31:06.666694Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-eval" trial=["postgres"] +2026-06-15T13:31:06.666743Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "inference"] result=Ok(()) +2026-06-15T13:31:06.666752Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "inference"] +2026-06-15T13:31:06.666987Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-mir" trial=["pass", "data-dependency"] result=Ok(()) +2026-06-15T13:31:06.666996Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-mir" trial=["pass", "data-dependency"] +2026-06-15T13:31:06.667298Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-mir" trial=["pass", "data-dependency"] result=Ok(()) +2026-06-15T13:31:06.667307Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-mir" trial=["pass", "data-dependency"] +2026-06-15T13:31:06.668483Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-mir" trial=["pass", "data-dependency"] result=Ok(()) +2026-06-15T13:31:06.668496Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "inference"] +2026-06-15T13:31:06.668510Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-mir" trial=["pass", "inline"] result=Ok(()) +2026-06-15T13:31:06.668549Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-mir" trial=["pass", "dse"] +2026-06-15T13:31:06.668785Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-mir" trial=["pass", "data-dependency"] result=Ok(()) +2026-06-15T13:31:06.668797Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-mir" trial=["pass", "data-dependency"] +2026-06-15T13:31:06.669000Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "inference"] result=Ok(()) +2026-06-15T13:31:06.669014Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-eval" trial=["postgres"] +2026-06-15T13:31:06.669595Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-mir" trial=["pass", "data-dependency"] result=Ok(()) +2026-06-15T13:31:06.669606Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "inference", "intrinsics"] +2026-06-15T13:31:06.670382Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "inference"] result=Ok(()) +2026-06-15T13:31:06.670393Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "inference"] +2026-06-15T13:31:06.670541Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-mir" trial=["pass", "dse"] result=Ok(()) +2026-06-15T13:31:06.670559Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-mir" trial=["pass", "cfg_simplify"] +2026-06-15T13:31:06.670677Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-mir" trial=["pass", "data-dependency"] result=Ok(()) +2026-06-15T13:31:06.670685Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-mir" trial=["pass", "data-dependency"] +2026-06-15T13:31:06.670931Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "inference", "intrinsics"] result=Ok(()) +2026-06-15T13:31:06.670941Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "inference", "intrinsics"] +2026-06-15T13:31:06.671829Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "inference"] result=Ok(()) +2026-06-15T13:31:06.671844Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-eval" trial=["postgres"] +2026-06-15T13:31:06.672027Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "inference", "intrinsics"] result=Ok(()) +2026-06-15T13:31:06.672035Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "inference", "intrinsics"] +2026-06-15T13:31:06.672847Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-mir" trial=["pass", "cfg_simplify"] result=Ok(()) +2026-06-15T13:31:06.672863Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-mir" trial=["pass", "cfg_simplify"] +2026-06-15T13:31:06.673491Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "inference", "intrinsics"] result=Ok(()) +2026-06-15T13:31:06.673507Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-eval" trial=["postgres"] +2026-06-15T13:31:06.674270Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-mir" trial=["pass", "cfg_simplify"] result=Ok(()) +2026-06-15T13:31:06.674278Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-mir" trial=["pass", "cfg_simplify"] +2026-06-15T13:31:06.675849Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-mir" trial=["pass", "cfg_simplify"] result=Ok(()) +2026-06-15T13:31:06.675862Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-mir" trial=["pass", "cfg_simplify"] +2026-06-15T13:31:06.677343Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-mir" trial=["pass", "cfg_simplify"] result=Ok(()) +2026-06-15T13:31:06.677355Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-mir" trial=["pass", "cfg_simplify"] +2026-06-15T13:31:06.679167Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-mir" trial=["pass", "cfg_simplify"] result=Ok(()) +2026-06-15T13:31:06.679183Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-mir" trial=["pass", "cfg_simplify"] +2026-06-15T13:31:06.692529Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-mir" trial=["pass", "data-dependency"] result=Ok(()) +2026-06-15T13:31:06.692558Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-mir" trial=["pass", "data-dependency"] +2026-06-15T13:31:06.694797Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-mir" trial=["pass", "data-dependency"] result=Ok(()) +2026-06-15T13:31:06.694818Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-mir" trial=["pass", "data-dependency"] +2026-06-15T13:31:06.696702Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-mir" trial=["pass", "data-dependency"] result=Ok(()) +2026-06-15T13:31:06.696718Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-mir" trial=["interpret"] +2026-06-15T13:31:06.700551Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-mir" trial=["interpret"] result=Ok(()) +2026-06-15T13:31:06.700578Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-eval" trial=["postgres"] +2026-06-15T13:31:06.702973Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-mir" trial=["pass", "data-dependency"] result=Ok(()) +2026-06-15T13:31:06.702988Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-mir" trial=["pass", "data-dependency"] +2026-06-15T13:31:06.704265Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "specialization"] result=Ok(()) +2026-06-15T13:31:06.704280Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-eval" trial=["postgres"] +2026-06-15T13:31:06.704443Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-mir" trial=["pass", "data-dependency"] result=Ok(()) +2026-06-15T13:31:06.704452Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-mir" trial=["pass", "data-dependency"] +2026-06-15T13:31:06.706028Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-mir" trial=["pass", "data-dependency"] result=Ok(()) +2026-06-15T13:31:06.706045Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-eval" trial=["postgres"] +2026-06-15T13:31:06.725704Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "checking"] result=Ok(()) +2026-06-15T13:31:06.725746Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-eval" trial=["postgres"] +2026-06-15T13:31:06.727617Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-eval" trial=["postgres"] result=Ok(()) +2026-06-15T13:31:06.727643Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-eval" trial=["postgres"] +2026-06-15T13:31:06.756531Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-mir" trial=["pass", "inline"] result=Ok(()) +2026-06-15T13:31:06.756575Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-mir" trial=["pass", "cfg_simplify"] +2026-06-15T13:31:06.757055Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-eval" trial=["postgres"] result=Ok(()) +2026-06-15T13:31:06.757070Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-eval" trial=["postgres"] +2026-06-15T13:31:06.758185Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-eval" trial=["postgres"] result=Ok(()) +2026-06-15T13:31:06.758212Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-eval" trial=["postgres"] +2026-06-15T13:31:06.758338Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-mir" trial=["pass", "cfg_simplify"] result=Ok(()) +2026-06-15T13:31:06.758349Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-mir" trial=["pass", "cfg_simplify"] +2026-06-15T13:31:06.758653Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-eval" trial=["postgres"] result=Ok(()) +2026-06-15T13:31:06.758664Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-eval" trial=["postgres"] +2026-06-15T13:31:06.759712Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-mir" trial=["pass", "cfg_simplify"] result=Ok(()) +2026-06-15T13:31:06.759733Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-eval" trial=["postgres"] +2026-06-15T13:31:06.760456Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-eval" trial=["postgres"] result=Ok(()) +2026-06-15T13:31:06.760469Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-eval" trial=["postgres"] +2026-06-15T13:31:06.785434Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-eval" trial=["postgres"] result=Ok(()) +2026-06-15T13:31:06.785470Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-eval" trial=["postgres"] +2026-06-15T13:31:06.797150Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-eval" trial=["postgres"] result=Ok(()) +2026-06-15T13:31:06.797192Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "graph-hoisting"] +2026-06-15T13:31:06.808332Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-eval" trial=["postgres"] result=Ok(()) +2026-06-15T13:31:06.808365Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-eval" trial=["postgres"] +2026-06-15T13:31:06.813304Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-eval" trial=["postgres"] result=Ok(()) +2026-06-15T13:31:06.813342Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "graph-hoisting"] +2026-06-15T13:31:06.814557Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-eval" trial=["postgres"] result=Ok(()) +2026-06-15T13:31:06.814583Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-mir" trial=["pass", "data-dependency"] +2026-06-15T13:31:06.816345Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-mir" trial=["pass", "data-dependency"] result=Ok(()) +2026-06-15T13:31:06.816364Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-mir" trial=["pass", "data-dependency"] +2026-06-15T13:31:06.817901Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-mir" trial=["pass", "data-dependency"] result=Ok(()) +2026-06-15T13:31:06.817924Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "graph-hoisting"] +2026-06-15T13:31:06.818265Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "graph-hoisting"] result=Ok(()) +2026-06-15T13:31:06.818279Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "graph-hoisting"] +2026-06-15T13:31:06.831966Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-eval" trial=["postgres"] result=Ok(()) +2026-06-15T13:31:06.832006Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-eval" trial=["postgres"] +2026-06-15T13:31:06.837145Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-eval" trial=["postgres"] result=Ok(()) +2026-06-15T13:31:06.837178Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "graph-hoisting"] +2026-06-15T13:31:06.838880Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "graph-hoisting"] result=Ok(()) +2026-06-15T13:31:06.838903Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "graph-hoisting"] +2026-06-15T13:31:06.840981Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "graph-hoisting"] result=Ok(()) +2026-06-15T13:31:06.841003Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "graph-hoisting"] +2026-06-15T13:31:06.841053Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-eval" trial=["postgres"] result=Ok(()) +2026-06-15T13:31:06.841073Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "name-mangler"] +2026-06-15T13:31:06.842500Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "name-mangler"] result=Err(Expected trial to pass, but it failed +├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:390:24 +╰╴1 additional opaque attachment) +2026-06-15T13:31:06.842542Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "name-mangler"] +2026-06-15T13:31:06.843593Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "name-mangler"] result=Ok(()) +2026-06-15T13:31:06.843603Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "name-mangler"] +2026-06-15T13:31:06.844591Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "name-mangler"] result=Err(Expected trial to pass, but it failed +├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:390:24 +╰╴1 additional opaque attachment) +2026-06-15T13:31:06.844617Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "name-mangler"] +2026-06-15T13:31:06.845977Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "name-mangler"] result=Err(Expected trial to pass, but it failed +├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:390:24 +╰╴1 additional opaque attachment) +2026-06-15T13:31:06.846041Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "name-mangler"] +2026-06-15T13:31:06.847443Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "name-mangler"] result=Ok(()) +2026-06-15T13:31:06.847480Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-eval" trial=["postgres"] +2026-06-15T13:31:06.849548Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-eval" trial=["postgres"] result=Ok(()) +2026-06-15T13:31:06.849571Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "graph-hoisting"] +2026-06-15T13:31:06.854593Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "graph-hoisting"] result=Ok(()) +2026-06-15T13:31:06.854613Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "name-mangler"] +2026-06-15T13:31:06.855293Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-eval" trial=["postgres"] result=Ok(()) +2026-06-15T13:31:06.855311Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "graph-hoisting"] +2026-06-15T13:31:06.855744Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "name-mangler"] result=Err(Expected trial to pass, but it failed +├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:390:24 +╰╴1 additional opaque attachment) +2026-06-15T13:31:06.855789Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-eval" trial=["postgres"] +2026-06-15T13:31:06.860068Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-eval" trial=["postgres"] result=Ok(()) +2026-06-15T13:31:06.860963Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-eval" trial=["postgres"] result=Ok(()) +2026-06-15T13:31:06.861901Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-eval" trial=["postgres"] result=Ok(()) +2026-06-15T13:31:06.862471Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "graph-hoisting"] result=Ok(()) +2026-06-15T13:31:06.867574Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "graph-hoisting"] result=Ok(()) +2026-06-15T13:31:06.877571Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "graph-hoisting"] result=Ok(()) +2026-06-15T13:31:06.907369Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "graph-hoisting"] result=Ok(()) +2026-06-15T13:31:06.908169Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "graph-hoisting"] result=Ok(()) +2026-06-15T13:31:06.913441Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-eval" trial=["postgres"] result=Ok(()) +2026-06-15T13:31:06.924295Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "graph-hoisting"] result=Ok(()) +2026-06-15T13:31:06.954068Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-eval" trial=["postgres"] result=Ok(()) +2026-06-15T13:31:06.977112Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-eval" trial=["postgres"] result=Ok(()) +2026-06-15T13:31:07.351376Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-mir" trial=["pass", "inst_simplify"] result=Ok(()) +2026-06-15T13:31:07.367601Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-mir" trial=["pass", "dse"] result=Ok(()) +2026-06-15T13:31:07.433776Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-mir" trial=["pass", "cfg_simplify"] result=Ok(()) +2026-06-15T13:31:07.552197Z  INFO run{namespace="reify" name="nested-if"}: hashql_compiletest::suite::mir_reify: time taken to generate diagram: 974.838ms +2026-06-15T13:31:07.558478Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-mir" trial=["reify"] result=Ok(()) +2026-06-15T13:31:07.670541Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-mir" trial=["pass", "forward_substitution"] result=Ok(()) +2026-06-15T13:31:07.670567Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-mir" trial=["pass", "forward_substitution"] +2026-06-15T13:31:07.672570Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-mir" trial=["pass", "forward_substitution"] result=Ok(()) +2026-06-15T13:31:07.672583Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-mir" trial=["pass", "forward_substitution"] +2026-06-15T13:31:07.674062Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-mir" trial=["pass", "forward_substitution"] result=Ok(()) +2026-06-15T13:31:07.674072Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-mir" trial=["pass", "forward_substitution"] +2026-06-15T13:31:07.675693Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-mir" trial=["pass", "forward_substitution"] result=Ok(()) +2026-06-15T13:31:11.855395Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-mir" trial=["pass", "post_inline"] result=Ok(()) +[PASS] hashql-ast::lower::name-mangler::type-generics-nested +[FAIL] hashql-ast::lower::expander::special-form-expander::fn-generics-tuple +[PASS] hashql-ast::lower::expander::special-form-expander::let-4 +[PASS] hashql-hir::lower::thunking::nested-call +[PASS] hashql-hir::reify::local-variable +[FAIL] hashql-ast::lower::expander::special-form-expander::type-expr-tuple +[PASS] hashql-ast::lower::name-mangler::overwrite +[PASS] hashql-mir::reify::binary +[PASS] hashql-ast::lower::expander::special-form-expander::newtype-4 +[PASS] hashql-mir::pass::inst_simplify::const-fold-gte +[PASS] hashql-mir::pass::inst_simplify::identity-or-false +[PASS] hashql-mir::pass::inst_simplify::const-fold-lte +[PASS] hashql-mir::pass::inst_simplify::const-fold-ne +[PASS] hashql-mir::pass::inst_simplify::annihilator-and-false +[PASS] hashql-mir::pass::inst_simplify::identical-operand-lt +[PASS] hashql-mir::pass::inst_simplify::identity-and-true +[PASS] hashql-mir::pass::cfg_simplify::closure-with-const-branch +[PASS] hashql-mir::pass::forward_substitution::param-const-agree +[FAIL] hashql-hir::reify::variable-generics +[PASS] hashql-mir::pass::post_inline::closure-env-cleanup +[PASS] hashql-hir::lower::thunking::return-primitive +[FAIL] hashql-ast::lower::expander::special-form-expander::use-tuple +[FAIL] hashql-ast::lower::name-mangler::type +[FAIL] hashql-ast::lower::expander::special-form-expander::use-glob-not-ident +[PASS] hashql-hir::reify::binding-type-assertion +[PASS] hashql-mir::reify::tuple-index +[PASS] hashql-hir::reify::qualified-variable +[PASS] hashql-mir::pass::inst_simplify::identical-operand-gte +[PASS] hashql-mir::pass::inst_simplify::identical-operand-eq +[PASS] hashql-mir::pass::inst_simplify::const-fold-eq +[PASS] hashql-hir::lower::normalization::binary-operation-left +[PASS] hashql-mir::reify::input-default +[PASS] hashql-mir::pass::administrative_reduction::thunk-aggregate +[PASS] hashql-mir::pass::inst_simplify::chained-const-fold +[PASS] hashql-ast::lower::name-mangler::overwrite-body +[FAIL] hashql-ast::lower::expander::special-form-expander::let-argument-not-ident +[PASS] hashql-mir::pass::forward_substitution::chained-projection +[PASS] hashql-ast::lower::expander::special-form-expander::as-3 +[PASS] hashql-hir::reify::field +[PASS] hashql-mir::reify::closure-captured-var +[PASS] hashql-hir::reify::call-multiple-arguments +[PASS] hashql-mir::reify::input-required +[PASS] hashql-hir::lower::normalization::let-nested +[FAIL] hashql-ast::lower::name-mangler::newtype +[PASS] hashql-mir::pass::inst_simplify::const-fold-gt +[PASS] hashql-mir::pass::inst_simplify::const-propagation-locals +[PASS] hashql-mir::reify::nested-tuple-index +[PASS] hashql-mir::pass::inst_simplify::identical-operand-lte +[FAIL] hashql-ast::lower::expander::special-form-expander::type-expr-call-union +[PASS] hashql-hir::reify::closure-multiple-inputs +[FAIL] hashql-ast::lower::expander::special-form-expander::type-struct-has-type +[PASS] hashql-mir::reify::if-else +[PASS] hashql-hir::reify::underscore +[FAIL] hashql-ast::lower::name-mangler::diverging +[PASS] hashql-mir::reify::external-module +[PASS] hashql-mir::pass::administrative_reduction::closure-chain +[PASS] hashql-mir::reify::dict-index +[PASS] hashql-hir::lower::inference::intrinsics::unrelated +[PASS] hashql-mir::reify::ctor-empty +[PASS] hashql-mir::pass::inst_simplify::annihilator-or-true +[PASS] hashql-hir::lower::normalization::closure +[FAIL] hashql-ast::lower::expander::special-form-expander::input-3 +[PASS] hashql-hir::reify::list +[PASS] hashql-mir::pass::inst_simplify::const-fold-lt +[PASS] hashql-ast::lower::expander::special-form-expander::access-field-literal-boolean +[FAIL] hashql-ast::lower::name-mangler::newtype-generics +[PASS] hashql-hir::lower::inference::literal +[PASS] hashql-mir::reify::ctor +[PASS] hashql-mir::reify::top-level-external-module +[PASS] hashql-hir::reify::input +[PASS] hashql-hir::lower::normalization::field-access +[FAIL] hashql-ast::lower::expander::special-form-expander::let-collect-all-errors +[FAIL] hashql-ast::lower::expander::special-form-expander::index-2 +[PASS] hashql-mir::reify::struct-index +[PASS] hashql-mir::pass::inst_simplify::identical-operand-gt +[PASS] hashql-mir::pass::inst_simplify::identical-operand-ne +[PASS] hashql-mir::pass::administrative_reduction::forwarding-closure +[FAIL] hashql-ast::lower::name-mangler::fn-args +[PASS] hashql-mir::reify::empty-tuple +[PASS] hashql-hir::reify::as +[PASS] hashql-hir::lower::inference::tuple +[FAIL] hashql-ast::lower::expander::special-form-expander::type-collect-all-errors +[PASS] hashql-mir::reify::nested-let +[PASS] hashql-ast::lower::type-extractor::definition::contractive-union +[FAIL] hashql-ast::lower::expander::special-form-expander::fn-4 +[PASS] hashql-mir::reify::literal +[PASS] hashql-hir::lower::normalization::dict +[PASS] hashql-ast::lower::name-mangler::type-generics-interdependent-generics +[PASS] hashql-mir::pass::administrative_reduction::non-reducible-computation +[PASS] hashql-hir::lower::specialization::complex +[PASS] hashql-hir::reify::let-type-annotation +[PASS] hashql-hir::reify::literal-type-annotation +[FAIL] hashql-ast::lower::expander::special-form-expander::access-field-literal-valid +[PASS] hashql-ast::lower::type-extractor::definition::translation-intersection +[FAIL] hashql-ast::lower::expander::special-form-expander::use-glob +[PASS] hashql-hir::reify::index +[PASS] hashql-ast::lower::name-mangler::fn-types-of-args +[PASS] hashql-hir::lower::normalization::if-then +[PASS] hashql-mir::reify::ctor-cached-closure +[PASS] hashql-hir::lower::inference::ctor-bounded-invalid +[PASS] hashql-hir::reify::input-default +[PASS] hashql-hir::reify::if +[FAIL] hashql-ast::lower::expander::special-form-expander::unknown-special-form-typo +[PASS] hashql-ast::lower::type-extractor::definition::translation-tuple +[FAIL] hashql-ast::lower::name-mangler::path +[PASS] hashql-hir::lower::specialization::unary +[PASS] hashql-ast::lower::expander::special-form-expander::use-literal +[PASS] hashql-mir::pass::administrative_reduction::thunk-simple +[PASS] hashql-hir::reify::closure +[PASS] hashql-hir::lower::inference::if-test +[PASS] hashql-hir::reify::if-partial +[PASS] hashql-hir::lower::normalization::binary-operation +[PASS] hashql-ast::lower::name-mangler::simple +[PASS] hashql-mir::reify::closure +[PASS] hashql-ast::lower::type-extractor::definition::result +[PASS] hashql-mir::pass::administrative_reduction::multiple-thunks +[PASS] hashql-hir::lower::specialization::bits +[PASS] hashql-hir::reify::let +[PASS] hashql-hir::lower::inference::collect-variable +[PASS] hashql-hir::lower::normalization::binding-value +[PASS] hashql-hir::reify::dict +[FAIL] hashql-ast::lower::expander::special-form-expander::type-expr-call-arbitrary +[PASS] hashql-ast::lower::name-mangler::fn-types-of-ret +[FAIL] hashql-ast::lower::expander::special-form-expander::fn-generics-tuple-literal +[PASS] hashql-hir::lower::thunking::return-local +[PASS] hashql-ast::lower::type-extractor::definition::unused-generic-parameter +[FAIL] hashql-hir::lower::inference::closure-call-unconstrained-direct +[PASS] hashql-hir::reify::nested-expressions +[PASS] hashql-hir::lower::normalization::index-access +[PASS] hashql-mir::reify::extermal-module-export +[FAIL] hashql-ast::lower::expander::special-form-expander::not-enough-segments +[PASS] hashql-ast::lower::name-mangler::let +[PASS] hashql-ast::lower::type-extractor::definition::generics-with-params +[FAIL] hashql-ast::lower::expander::special-form-expander::type-expr-struct +[PASS] hashql-hir::lower::thunking::closure +[PASS] hashql-mir::pass::post_inline::cascading-simplification +[FAIL] hashql-ast::lower::expander::special-form-expander::fn-generics-struct-literal +[PASS] hashql-hir::reify::literal +[PASS] hashql-hir::lower::inference::dict-multi-value +[FAIL] hashql-ast::lower::name-mangler::fn-types +[PASS] hashql-hir::lower::normalization::list +[FAIL] hashql-ast::lower::expander::special-form-expander::type-generic-constraint +[PASS] hashql-ast::lower::type-extractor::definition::non-contractive-type +[PASS] hashql-mir::pass::pre_inline::thunk-with-dead-code +[PASS] hashql-hir::lower::thunking::dependent-call +[PASS] hashql-hir::reify::tuple +[PASS] hashql-ast::lower::expander::special-form-expander::index-1 +[PASS] hashql-ast::lower::name-mangler::type-generics +[PASS] hashql-hir::lower::inference::call +[FAIL] hashql-ast::lower::expander::special-form-expander::generics +[PASS] hashql-hir::lower::normalization::input +[PASS] hashql-ast::lower::type-extractor::definition::dict-parameter-count-mismatch-too-many +[PASS] hashql-ast::lower::expander::special-form-expander::newtype-3 +[PASS] hashql-mir::pass::pre_inline::nested-let-cleanup +[FAIL] hashql-ast::lower::expander::special-form-expander::use-tuple-literal +[PASS] hashql-hir::lower::thunking::tuple-index +[PASS] hashql-hir::lower::normalization::type-assertion-erase +[PASS] hashql-hir::reify::call +[PASS] hashql-hir::lower::inference::struct +[PASS] hashql-mir::pass::post_inline::nested-branch-elimination +[PASS] hashql-ast::lower::expander::special-form-expander::use-2 +[PASS] hashql-ast::lower::type-extractor::definition::locals-generic-params +[FAIL] hashql-ast::lower::sanitizer::special-form-value +[PASS] hashql-ast::lower::expander::special-form-expander::input-1 +[PASS] hashql-ast::lower::expander::import-resolver::closure-generic-not-resolved +[PASS] hashql-hir::reify::struct +[PASS] hashql-hir::lower::normalization::binding-body +[PASS] hashql-hir::lower::inference::list-empty +[PASS] hashql-ast::lower::expander::special-form-expander::let-2 +[PASS] hashql-ast::lower::type-extractor::definition::path-global-resolution +[FAIL] hashql-ast::lower::expander::special-form-expander::type-tuple-has-type +[PASS] hashql-mir::reify::null-value-in-binary +[PASS] hashql-ast::lower::expander::import-resolver::nested-resolution +[FAIL] hashql-ast::lower::sanitizer::special-form-type-position +[FAIL] hashql-ast::lower::expander::special-form-expander::use-struct +[PASS] hashql-mir::pass::pre_inline::chain-simplification +[PASS] hashql-ast::lower::expander::special-form-expander::access-field-index-out-of-bounds +[PASS] hashql-ast::lower::type-extractor::definition::list-parameter-count-mismatch-too-many +[PASS] hashql-ast::lower::expander::special-form-expander::use-glob-not-star +[PASS] hashql-hir::lower::normalization::binary-operation-right +[PASS] hashql-hir::lower::inference::qualified-variable +[PASS] hashql-ast::lower::expander::import-resolver::closure-mixed-resolution +[FAIL] hashql-ast::lower::expander::special-form-expander::fn-generics-tuple-path +[PASS] hashql-ast::lower::expander::special-form-expander::if-1 +[PASS] hashql-ast::lower::expander::special-form-expander::if-2 +[PASS] hashql-mir::reify::list-index +[PASS] hashql-mir::pass::pre_inline::basic-constant-folding +[PASS] hashql-ast::lower::type-extractor::definition::env-type-interning +[FAIL] hashql-ast::lower::sanitizer::constraint +[FAIL] hashql-ast::lower::expander::import-resolver::generic-arguments-in-final-segment +[PASS] hashql-ast::lower::expander::special-form-expander::let-argument-not-path +[PASS] hashql-ast::lower::expander::special-form-expander::type-2 +[PASS] hashql-ast::lower::expander::special-form-expander::newtype-2 +[PASS] hashql-ast::lower::type-extractor::definition::path-local-resolution +[FAIL] hashql-ast::lower::expander::special-form-expander::input-2 +[FAIL] hashql-mir::reify::monomorphized-closure +[PASS] hashql-mir::pass::dse::used-local-preserved +[PASS] hashql-ast::lower::expander::import-resolver::generic-constraints.newtype +[FAIL] hashql-ast::lower::expander::special-form-expander::fn-generics-tuple-type +[PASS] hashql-ast::lower::type-extractor::definition::translation-struct +[FAIL] hashql-ast::lower::expander::import-resolver::unresolver-variable +[FAIL] hashql-ast::lower::expander::special-form-expander::type-unknown +[FAIL] hashql-ast::lower::expander::special-form-expander::use-struct-literal +[PASS] hashql-ast::lower::expander::import-resolver::local-binding-type +[PASS] hashql-mir::pass::dse::nested-tuple-projection +[PASS] hashql-mir::reify::null-value +[FAIL] hashql-ast::lower::expander::special-form-expander::fn-generics-struct +[PASS] hashql-ast::lower::expander::import-resolver::multiple-named-imports +[FAIL] hashql-ast::lower::expander::special-form-expander::type-generic-struct +[FAIL] hashql-ast::lower::expander::special-form-expander::fn-generics-struct-type +[FAIL] hashql-ast::lower::type-extractor::definition::global-generic-constraint-too-many +[FAIL] hashql-ast::lower::expander::special-form-expander::use-3 +[PASS] hashql-mir::pass::dse::live-in-branch +[FAIL] hashql-ast::lower::expander::import-resolver::generic-argument-absolute-path +[PASS] hashql-ast::lower::expander::special-form-expander::labeled-argument +[PASS] hashql-ast::lower::expander::special-form-expander::fn-5 +[PASS] hashql-ast::lower::expander::import-resolver::newtype-scope +[PASS] hashql-ast::lower::type-extractor::definition::constraints-invalid-location +[FAIL] hashql-ast::lower::expander::special-form-expander::type-generic-relative-path +[PASS] hashql-ast::lower::expander::special-form-expander::index-3 +[FAIL] hashql-ast::lower::expander::special-form-expander::type-3 +[FAIL] hashql-ast::lower::expander::special-form-expander::fn-params-tuple +[PASS] hashql-ast::lower::type-extractor::definition::global-generic-constraint-not-enough +[PASS] hashql-ast::lower::expander::import-resolver::substitution +[FAIL] hashql-ast::lower::expander::import-resolver::generic-argument-use-path +[PASS] hashql-hir::lower::specialization::minimal-graph +[FAIL] hashql-ast::lower::expander::pre-expansion-name-resolver::re-assign-prelude +[FAIL] hashql-ast::lower::expander::special-form-expander::type-generic-duplicate +[FAIL] hashql-ast::lower::expander::special-form-expander::use-tuple-path +[PASS] hashql-ast::lower::expander::import-resolver::universe-ambiguity-resolution +[PASS] hashql-mir::pass::inline::closure-inline +[PASS] hashql-ast::lower::expander::import-resolver::module-not-found +[PASS] hashql-ast::lower::type-extractor::definition::duplicate-fields +[FAIL] hashql-ast::lower::expander::pre-expansion-name-resolver::newtype-4 +[PASS] hashql-hir::lower::specialization::bool +[PASS] hashql-ast::lower::expander::special-form-expander::type-4 +[PASS] hashql-ast::lower::expander::import-resolver::path-normalization +[FAIL] hashql-ast::lower::expander::import-resolver::rollback +[FAIL] hashql-ast::lower::expander::special-form-expander::use-tuple-type +[PASS] hashql-ast::lower::type-extractor::definition::dict-parameter-count-mismatch +[PASS] hashql-mir::pass::inline::simple-ctor +[FAIL] hashql-ast::lower::expander::pre-expansion-name-resolver::re-assign +[FAIL] hashql-ast::lower::expander::special-form-expander::fn-generics-literal +[PASS] hashql-ast::lower::expander::import-resolver::shadowed-imports +[PASS] hashql-mir::reify::reassign +[PASS] hashql-ast::lower::expander::import-resolver::use-shadowing-let +[PASS] hashql-ast::lower::type-extractor::definition::generics-apply-params +[FAIL] hashql-ast::lower::expander::special-form-expander::too-many-segments +[FAIL] hashql-ast::lower::expander::special-form-expander::type-expr-call-not-path +[PASS] hashql-ast::lower::expander::special-form-expander::access-field-literal-string +[FAIL] hashql-ast::lower::expander::pre-expansion-name-resolver::let-absolute +[PASS] hashql-ast::lower::expander::import-resolver::shadowed-prelude +[PASS] hashql-mir::pass::inline::too-large-to-inline +[PASS] hashql-ast::lower::expander::import-resolver::use-shadowing-use +[PASS] hashql-mir::reify::dict-computed-key +[PASS] hashql-ast::lower::type-extractor::definition::locals-type-extraction +[PASS] hashql-ast::lower::expander::special-form-expander::if-3 +[FAIL] hashql-ast::lower::expander::special-form-expander::fn-generics-struct-underscore +[FAIL] hashql-ast::lower::expander::special-form-expander::unknown-special-form +[PASS] hashql-ast::lower::expander::import-resolver::local-binding-recursive-value +[FAIL] hashql-ast::lower::expander::pre-expansion-name-resolver::nested-let +[PASS] hashql-ast::lower::expander::import-resolver::closure-complex-return-type +[PASS] hashql-hir::lower::checking::closure-not-generic +[PASS] hashql-ast::lower::type-extractor::definition::generics-param-count-mismatch +[FAIL] hashql-ast::lower::expander::special-form-expander::type-generic-generic-ident +[FAIL] hashql-ast::lower::expander::special-form-expander::type-infer +[PASS] hashql-ast::lower::expander::import-resolver::local-binding-value +[FAIL] hashql-ast::lower::expander::pre-expansion-name-resolver::absolute-path +[PASS] hashql-ast::lower::expander::import-resolver::basic-absolute-imports +[PASS] hashql-ast::lower::expander::special-form-expander::let-5 +[PASS] hashql-ast::lower::type-extractor::graph-pipeline-inferred-closure +[PASS] hashql-hir::lower::checking::input-default +[FAIL] hashql-ast::lower::expander::special-form-expander::as-2 +[PASS] hashql-ast::lower::expander::special-form-expander::let-3 +[PASS] hashql-ast::lower::expander::import-resolver::local-binding-recursive-type +[PASS] hashql-ast::lower::expander::pre-expansion-name-resolver::alias-absolute-path +[PASS] hashql-ast::lower::expander::import-resolver::complex-nested-type-parameters +[FAIL] hashql-ast::lower::expander::special-form-expander::type-expr-call-intersection +[PASS] hashql-ast::lower::type-extractor::let-binding-type +[PASS] hashql-ast::lower::expander::special-form-expander::use-4 +[PASS] hashql-ast::lower::expander::import-resolver::basic-glob-import +[FAIL] hashql-ast::lower::expander::special-form-expander::access-field-literal-type-annotation +[FAIL] hashql-ast::lower::expander::pre-expansion-name-resolver::newtype-3-alias +[PASS] hashql-ast::lower::expander::import-resolver::prelude +[PASS] hashql-ast::lower::type-extractor::union-type +[FAIL] hashql-ast::lower::expander::import-resolver::continue::unresolved-type +[PASS] hashql-ast::lower::expander::special-form-expander::access-1 +[PASS] hashql-hir::lower::normalization::graph-read-head +[FAIL] hashql-ast::lower::expander::pre-expansion-name-resolver::type-3-alias +[PASS] hashql-ast::lower::type-extractor::closure-generics +[PASS] hashql-ast::lower::expander::import-resolver::regression-generic-arguments-identifier +[FAIL] hashql-ast::lower::expander::special-form-expander::use-struct-path +[FAIL] hashql-ast::lower::expander::import-resolver::continue::unresolved-value +[PASS] hashql-hir::lower::normalization::tuple +[FAIL] hashql-ast::lower::expander::pre-expansion-name-resolver::multi-segment-resolution +[PASS] hashql-ast::lower::expander::import-resolver::generic-constraints-type +[PASS] hashql-ast::lower::expander::special-form-expander::if-4 +[FAIL] hashql-ast::lower::expander::special-form-expander::fn-generics-duplicates +[FAIL] hashql-ast::lower::expander::import-resolver::continue::use-not-found +[PASS] hashql-hir::lower::normalization::if-test +[FAIL] hashql-ast::lower::expander::pre-expansion-name-resolver::let-3-alias +[FAIL] hashql-ast::lower::expander::special-form-expander::type-never +[PASS] hashql-hir::lower::specialization::math +[PASS] hashql-hir::lower::normalization::nested-and-or +[FAIL] hashql-ast::lower::expander::pre-expansion-name-resolver::newtype-3 +[PASS] hashql-ast::lower::expander::special-form-expander::access-3 +[FAIL] hashql-ast::lower::expander::import-resolver::continue::unresolved-nested +[PASS] hashql-ast::lower::expander::special-form-expander::does-not-touch-non-kernel +[FAIL] hashql-hir::lower::specialization::collect-custom-collect +[FAIL] hashql-ast::lower::expander::import-resolver::item-not-found +[FAIL] hashql-ast::lower::expander::pre-expansion-name-resolver::resolve-symbol +[PASS] hashql-ast::lower::expander::special-form-expander::input-4 +[PASS] hashql-hir::lower::normalization::call +[PASS] hashql-hir::lower::ctor::local +[PASS] hashql-ast::lower::expander::import-resolver::glob-not-found +[FAIL] hashql-ast::lower::expander::pre-expansion-name-resolver::type-4 +[PASS] hashql-hir::lower::ctor::explicit-type +[FAIL] hashql-ast::lower::expander::special-form-expander::newtype-collect-all-errors +[PASS] hashql-hir::lower::normalization::if-else +[PASS] hashql-ast::lower::expander::import-resolver::basic-relative-import +[FAIL] hashql-ast::lower::expander::pre-expansion-name-resolver::alias-symbol +[PASS] hashql-hir::lower::normalization::struct +[PASS] hashql-ast::lower::expander::import-resolver::basic-renamed-import +[PASS] hashql-hir::lower::ctor::null +[FAIL] hashql-ast::lower::expander::pre-expansion-name-resolver::let-4-alias +[PASS] hashql-ast::lower::expander::import-resolver::complex-path-resolution +[PASS] hashql-hir::lower::alias-replacement::replace-alias +[FAIL] hashql-ast::lower::expander::special-form-expander::fn-params-duplicates +[PASS] hashql-hir::lower::ctor::absolute +[FAIL] hashql-ast::lower::expander::pre-expansion-name-resolver::resolve-generics +[PASS] hashql-ast::lower::expander::import-resolver::closure-param-not-resolved +[PASS] hashql-ast::lower::expander::special-form-expander::newtype-constraints +[PASS] hashql-hir::lower::alias-replacement::immediate-usage +[FAIL] hashql-ast::lower::expander::pre-expansion-name-resolver::invalid-let-expr +[FAIL] hashql-hir::lower::ctor::too-many-arguments +[FAIL] hashql-ast::lower::expander::special-form-expander::access-2 +[PASS] hashql-ast::lower::expander::special-form-expander::fn-3 +[FAIL] hashql-ast::lower::expander::pre-expansion-name-resolver::let-3 +[FAIL] hashql-hir::lower::alias-replacement::generic-reassignment +[PASS] hashql-ast::lower::expander::special-form-expander::as-1 +[FAIL] hashql-ast::lower::expander::pre-expansion-name-resolver::re-assign-prelude-diverging +[PASS] hashql-hir::lower::ctor::imported-item-not-a-constructor +[PASS] hashql-hir::lower::specialization::cmp +[PASS] hashql-hir::lower::alias-replacement::complex-mixed +[FAIL] hashql-ast::lower::expander::pre-expansion-name-resolver::let-4 +[FAIL] hashql-ast::lower::expander::special-form-expander::fn-params-type +[PASS] hashql-hir::lower::checking::qualified-variable +[PASS] hashql-hir::lower::ctor::not-enough-arguments +[PASS] hashql-hir::lower::alias-replacement::preserve-non-alias +[FAIL] hashql-ast::lower::expander::pre-expansion-name-resolver::restoration-bindings +[FAIL] hashql-hir::lower::inference::bind-arguments-explicit +[PASS] hashql-hir::lower::alias-replacement::unused-alias +[FAIL] hashql-ast::lower::expander::special-form-expander::use-struct-type +[FAIL] hashql-ast::lower::expander::pre-expansion-name-resolver::let-ident-generic +[PASS] hashql-hir::lower::alias-replacement::nested-aliases +[PASS] hashql-hir::lower::checking::minimal-graph +[PASS] hashql-hir::lower::inference::unsatisfiable-upper-constraint +[PASS] hashql-ast::lower::expander::special-form-expander::type-generic +[PASS] hashql-ast::lower::expander::pre-expansion-name-resolver::type-3 +[PASS] hashql-hir::lower::checking::let +[PASS] hashql-hir::lower::alias-replacement::multiple-aliases +[PASS] hashql-hir::lower::inference::if +[PASS] hashql-ast::lower::expander::special-form-expander::type-generic-absolute-path +[PASS] hashql-ast::lower::node-renumberer::nested +[PASS] hashql-hir::lower::alias-replacement::qualified-variable-alias +[PASS] hashql-hir::lower::checking::type-assertion +[PASS] hashql-ast::lower::node-renumberer::diverging +[FAIL] hashql-hir::lower::alias-replacement::generics +[PASS] hashql-hir::lower::checking::input-multiple +[PASS] hashql-hir::lower::inference::closure-constrained +[PASS] hashql-ast::lower::node-renumberer::basic +[PASS] hashql-hir::lower::inference::ctor +[PASS] hashql-hir::lower::checking::ctor-bounded +[PASS] hashql-ast::lower::type-extractor::local-type-resolution +[PASS] hashql-hir::lower::specialization::filter-graph +[PASS] hashql-hir::lower::inference::field-access +[PASS] hashql-ast::lower::type-extractor::complex-types +[PASS] hashql-hir::lower::checking::field-access-tuple +[FAIL] hashql-ast::lower::expander::special-form-expander::type-expr-invalid +[PASS] hashql-hir::lower::checking::literal +[PASS] hashql-ast::lower::type-extractor::closure +[PASS] hashql-hir::lower::inference::input-default-invalid +[PASS] hashql-hir::lower::checking::field-access +[PASS] hashql-hir::lower::checking::tuple +[PASS] hashql-hir::lower::checking::ctor +[PASS] hashql-hir::lower::inference::local-variable +[PASS] hashql-ast::lower::type-extractor::generic-type-resolution +[PASS] hashql-hir::lower::checking::dict +[PASS] hashql-hir::lower::checking::ctor-bounded-invalid +[PASS] hashql-hir::lower::checking::if-non-boolean +[PASS] hashql-ast::lower::type-extractor::closure-unused-generic +[PASS] hashql-hir::lower::checking::input-default-invalid +[PASS] hashql-hir::lower::inference::dict-multi-key +[PASS] hashql-ast::lower::type-extractor::global-type-resolution +[PASS] hashql-hir::lower::checking::local-variable +[PASS] hashql-hir::lower::inference::dict-single +[PASS] hashql-hir::lower::checking::argument-count-mismatch +[PASS] hashql-ast::lower::type-extractor::nested-type-nodes +[PASS] hashql-hir::lower::checking::call-invalid +[FAIL] hashql-hir::lower::inference::bind-arguments +[PASS] hashql-mir::reify::graph-read +[FAIL] hashql-hir::lower::checking::closure-call-unconstrained-direct +[PASS] hashql-ast::lower::type-extractor::definition::translation-infer +[FAIL] hashql-hir::lower::checking::bind-arguments +[PASS] hashql-hir::lower::checking::call +[PASS] hashql-ast::lower::type-extractor::definition::non-contractive-self +[PASS] hashql-mir::pass::post_inline::dead-code-from-inline +[PASS] hashql-hir::lower::inference::closure-unconstrained +[PASS] hashql-hir::lower::checking::struct +[PASS] hashql-hir::lower::checking::closure-unconstrained +[PASS] hashql-eval::postgres::input-parameter-exists +[PASS] hashql-ast::lower::type-extractor::definition::identity-nominal +[PASS] hashql-hir::lower::checking::list-empty +[PASS] hashql-hir::lower::checking::closure-invalid-return-type +[PASS] hashql-ast::lower::type-extractor::definition::intrinsic-dict-translation +[PASS] hashql-mir::pass::post_inline::constant-propagation-after-inline +[PASS] hashql-hir::lower::inference::dict-key-var +[PASS] hashql-hir::lower::checking::dict-empty +[PASS] hashql-hir::lower::checking::filter-graph +[PASS] hashql-ast::lower::type-extractor::definition::constraints-parsing +[PASS] hashql-mir::pass::pre_inline::nested-if-constant +[PASS] hashql-hir::lower::inference::dict-empty +[PASS] hashql-hir::lower::checking::closure-call-constrained +[PASS] hashql-ast::lower::type-extractor::definition::locals-generic-params-struct +[PASS] hashql-hir::lower::checking::index-access +[PASS] hashql-mir::pass::pre_inline::inst-simplify-with-propagation +[PASS] hashql-hir::lower::inference::index-access +[PASS] hashql-hir::lower::checking::closure-constrained +[PASS] hashql-ast::lower::type-extractor::definition::infer-with-arguments +[PASS] hashql-mir::pass::pre_inline::dead-code-after-propagation +[PASS] hashql-hir::lower::checking::list +[PASS] hashql-mir::pass::inline::heuristic-inline +[PASS] hashql-hir::lower::inference::closure-integer +[PASS] hashql-ast::lower::type-extractor::definition::intrinsic-list-translation +[PASS] hashql-mir::pass::inline::nested-ctor +[PASS] hashql-hir::lower::checking::type-assertion-smaller +[PASS] hashql-mir::pass::pre_inline::closure-with-dead-branch +[PASS] hashql-hir::lower::inference::closure-call-unconstrained +[PASS] hashql-ast::lower::type-extractor::definition::translation-union +[PASS] hashql-hir::lower::inference::list-single +[PASS] hashql-mir::pass::data-dependency::deeply-nested-tuple +[PASS] hashql-mir::pass::data-dependency::input-no-deps +[PASS] hashql-hir::lower::checking::closure-call-unconstrained +[PASS] hashql-ast::lower::type-extractor::definition::list-parameter-count-mismatch +[PASS] hashql-hir::lower::inference::input +[PASS] hashql-hir::lower::checking::input +[PASS] hashql-mir::pass::inline::excessive-depth +[PASS] hashql-ast::lower::type-extractor::definition::identity-structural +[FAIL] hashql-hir::lower::inference::infer-argument +[PASS] hashql-hir::lower::checking::if-simplify +[PASS] hashql-ast::lower::type-extractor::definition::contractive-guarded +[PASS] hashql-mir::pass::data-dependency::binary-operation +[PASS] hashql-mir::pass::data-dependency::function-apply +[PASS] hashql-hir::lower::checking::type-assertion-unrelated +[PASS] hashql-hir::lower::inference::as +[PASS] hashql-mir::pass::data-dependency::multiple-uses +[PASS] hashql-mir::pass::data-dependency::nested-tuple-projection +[PASS] hashql-mir::pass::data-dependency::comparison-operators +[PASS] hashql-mir::pass::inline::filter-aggressive +[PASS] hashql-mir::pass::data-dependency::struct-projection +[PASS] hashql-hir::lower::inference::input-default +[PASS] hashql-mir::pass::data-dependency::tuple-projection +[PASS] hashql-hir::lower::inference::let +[PASS] hashql-mir::pass::dse::simple-dead-local +[PASS] hashql-mir::pass::data-dependency::list-construction +[PASS] hashql-hir::lower::inference::intrinsics::assignment +[PASS] hashql-hir::lower::inference::list-multi +[PASS] hashql-hir::lower::inference::intrinsics::re-assignment +[PASS] hashql-mir::pass::cfg_simplify::diamond-cfg-no-merge +[PASS] hashql-hir::lower::inference::intrinsics::simple +[PASS] hashql-mir::pass::cfg_simplify::const-if-false +[PASS] hashql-mir::pass::cfg_simplify::cascade-switch-then-goto +[PASS] hashql-mir::pass::cfg_simplify::let-in-branch +[PASS] hashql-mir::pass::cfg_simplify::const-nested-if +[PASS] hashql-mir::pass::data-dependency::graph-read-head +[PASS] hashql-mir::pass::data-dependency::function-multiple-args +[PASS] hashql-mir::pass::data-dependency::struct-construction +[PASS] hashql-mir::interpret::access-struct-through-opaque +[PASS] hashql-mir::pass::data-dependency::graph-read-filter +[PASS] hashql-hir::lower::specialization::collect-filter-graph +[PASS] hashql-mir::pass::data-dependency::block-params +[PASS] hashql-mir::pass::data-dependency::mixed-projection-chain +[PASS] hashql-hir::lower::checking::collect-filter-graph +[PASS] hashql-eval::postgres::tuple-construction +[PASS] hashql-mir::pass::inline::filter-with-ctor +[PASS] hashql-eval::postgres::logical-and-inputs +[PASS] hashql-eval::postgres::constant-true-filter +[PASS] hashql-mir::pass::cfg_simplify::mixed-const-runtime-if +[PASS] hashql-eval::postgres::entity-draft-id-equality +[PASS] hashql-mir::pass::cfg_simplify::const-if-true +[PASS] hashql-eval::postgres::opaque-passthrough +[PASS] hashql-eval::postgres::dict-construction +[PASS] hashql-eval::postgres::list-construction +[PASS] hashql-eval::postgres::entity-uuid-equality +[PASS] hashql-eval::postgres::struct-construction +[PASS] hashql-eval::postgres::if-input-branches +[PASS] hashql-mir::pass::data-dependency::closure-construction +[PASS] hashql-mir::pass::data-dependency::tuple-construction +[PASS] hashql-hir::lower::graph-hoisting::double-hoist-deny +[PASS] hashql-eval::postgres::let-binding-propagation +[PASS] hashql-eval::postgres::entity-archived-check +[PASS] hashql-hir::lower::graph-hoisting::no-hoist-closure +[PASS] hashql-hir::lower::graph-hoisting::no-hoist-closure-inside-read +[PASS] hashql-eval::postgres::mixed-sources-filter +[FAIL] hashql-ast::lower::name-mangler::onion +[PASS] hashql-ast::lower::name-mangler::type-generics-recursive +[FAIL] hashql-ast::lower::name-mangler::absolute-path +[FAIL] hashql-ast::lower::name-mangler::type-generics-constraints +[PASS] hashql-ast::lower::name-mangler::scopes-no-include +[PASS] hashql-eval::postgres::entity-web-id-equality +[PASS] hashql-hir::lower::graph-hoisting::hoist +[PASS] hashql-eval::postgres::comparison-no-cast +[FAIL] hashql-ast::lower::name-mangler::path-arguments +[PASS] hashql-eval::postgres::nested-if-input-branches +[PASS] hashql-eval::postgres::input-parameter-load +[PASS] hashql-eval::postgres::minimal-select-no-extra-joins +[PASS] hashql-hir::lower::graph-hoisting::nested-boolean-expression +[PASS] hashql-hir::lower::graph-hoisting::hoist-inside-boundary +[PASS] hashql-hir::lower::graph-hoisting::nested-boolean-expression-outer-let +[PASS] hashql-hir::lower::graph-hoisting::sequential-filter +[PASS] hashql-hir::lower::graph-hoisting::double-hoist +[PASS] hashql-eval::postgres::entity-type-ids-lateral +[PASS] hashql-hir::lower::graph-hoisting::partial +[PASS] hashql-eval::postgres::multiple-filters +[PASS] hashql-eval::postgres::env-captured-variable +[PASS] hashql-mir::pass::inst_simplify::showcase +[PASS] hashql-mir::pass::dse::showcase +[PASS] hashql-mir::pass::cfg_simplify::dead-block-elimination +[PASS] hashql-mir::reify::nested-if +[PASS] hashql-mir::pass::forward_substitution::closure-env-capture +[PASS] hashql-mir::pass::forward_substitution::nested +[PASS] hashql-mir::pass::forward_substitution::tuple-projection +[PASS] hashql-mir::pass::forward_substitution::param-const-diverge +[PASS] hashql-mir::pass::post_inline::showcase -[159/167] hashql-ast lower::expander::pre-expansion-name-resolver::invalid-let-expr -──────────────────────────────────────────────────────────────────────────────── -Expected trial to pass, but it failed -├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:390:24 -╰╴1 additional opaque attachment +═════════════════════════════ Test Results Summary ═════════════════════════════ -[160/167] hashql-ast lower::expander::pre-expansion-name-resolver::let-3 -──────────────────────────────────────────────────────────────────────────────── -Expected trial to pass, but it failed -├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:390:24 -╰╴1 additional opaque attachment +Results: + ✓ Passed: 416 + ✗ Failed: 118 + Total: 534 -[161/167] hashql-ast lower::expander::pre-expansion-name-resolver::re-assign-prelude-diverging -──────────────────────────────────────────────────────────────────────────────── -Expected trial to pass, but it failed -├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:390:24 -╰╴1 additional opaque attachment +Timing: + Elapsed: 5.30s + Throughput: 100.8 tests/sec + Avg/test: 25.85ms -[162/167] hashql-ast lower::expander::pre-expansion-name-resolver::let-4 -──────────────────────────────────────────────────────────────────────────────── -Expected trial to pass, but it failed -├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:390:24 -╰╴1 additional opaque attachment +Phase Breakdown: + Run: 25.39ms avg ( 98.2%) + Parse: 93.88µs avg ( 0.4%) + Read: 33.45µs avg ( 0.1%) + Verify: 35.46µs avg ( 0.1%) + Assert: 177.17µs avg ( 0.7%) + Render: 55.87µs avg ( 0.2%) -[163/167] hashql-ast lower::expander::pre-expansion-name-resolver::restoration-bindings -──────────────────────────────────────────────────────────────────────────────── -Expected trial to pass, but it failed -├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:390:24 -╰╴1 additional opaque attachment +I/O Statistics: + Files read: 1037 (1.2 MiB total) + Files written: 0 (0 B total) -[164/167] hashql-ast lower::expander::pre-expansion-name-resolver::let-ident-generic -──────────────────────────────────────────────────────────────────────────────── -Expected trial to pass, but it failed -├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:390:24 -╰╴1 additional opaque attachment +Slowest Tests: + 5.28s hashql-mir::pass::post_inline::showcase + 1.10s hashql-mir::pass::forward_substitution::closure-env-capture + 983.20ms hashql-mir::reify::nested-if + 785.26ms hashql-mir::pass::inst_simplify::showcase + 766.58ms hashql-mir::pass::dse::showcase -[165/167] hashql-ast lower::expander::pre-expansion-name-resolver::type-3 -──────────────────────────────────────────────────────────────────────────────── -Expected trial to pass, but it failed -├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:390:24 -╰╴1 additional opaque attachment +Failed Tests: + ✗ hashql-mir::reify::monomorphized-closure + ✗ hashql-hir::reify::variable-generics + ✗ hashql-hir::lower::specialization::collect-custom-collect + ✗ hashql-hir::lower::alias-replacement::generic-reassignment + ✗ hashql-hir::lower::alias-replacement::generics + ✗ hashql-hir::lower::ctor::too-many-arguments + ✗ hashql-hir::lower::inference::bind-arguments-explicit + ✗ hashql-hir::lower::inference::bind-arguments + ✗ hashql-hir::lower::inference::infer-argument + ✗ hashql-hir::lower::inference::closure-call-unconstrained-direct + ✗ hashql-hir::lower::checking::bind-arguments + ✗ hashql-hir::lower::checking::closure-call-unconstrained-direct + ✗ hashql-ast::lower::name-mangler::path-arguments + ✗ hashql-ast::lower::name-mangler::onion + ✗ hashql-ast::lower::name-mangler::absolute-path + ✗ hashql-ast::lower::name-mangler::type-generics-constraints + ✗ hashql-ast::lower::name-mangler::type + ✗ hashql-ast::lower::name-mangler::newtype + ✗ hashql-ast::lower::name-mangler::diverging + ✗ hashql-ast::lower::name-mangler::newtype-generics + ✗ hashql-ast::lower::name-mangler::fn-args + ✗ hashql-ast::lower::name-mangler::path + ✗ hashql-ast::lower::name-mangler::fn-types + ✗ hashql-ast::lower::sanitizer::special-form-value + ✗ hashql-ast::lower::sanitizer::special-form-type-position + ✗ hashql-ast::lower::sanitizer::constraint + ✗ hashql-ast::lower::expander::import-resolver::generic-argument-absolute-path + ✗ hashql-ast::lower::expander::import-resolver::generic-argument-use-path + ✗ hashql-ast::lower::expander::import-resolver::generic-arguments-in-final-segment + ✗ hashql-ast::lower::expander::import-resolver::unresolver-variable + ✗ hashql-ast::lower::expander::import-resolver::rollback + ✗ hashql-ast::lower::expander::import-resolver::continue::unresolved-type + ✗ hashql-ast::lower::expander::import-resolver::continue::unresolved-value + ✗ hashql-ast::lower::expander::import-resolver::continue::use-not-found + ✗ hashql-ast::lower::expander::import-resolver::continue::unresolved-nested + ✗ hashql-ast::lower::expander::import-resolver::item-not-found + ✗ hashql-ast::lower::expander::special-form-expander::access-2 + ✗ hashql-ast::lower::expander::special-form-expander::fn-params-type + ✗ hashql-ast::lower::expander::special-form-expander::use-struct-type + ✗ hashql-ast::lower::expander::special-form-expander::type-expr-invalid + ✗ hashql-ast::lower::expander::special-form-expander::fn-generics-tuple + ✗ hashql-ast::lower::expander::special-form-expander::use-glob-not-ident + ✗ hashql-ast::lower::expander::special-form-expander::type-expr-call-union + ✗ hashql-ast::lower::expander::special-form-expander::input-3 + ✗ hashql-ast::lower::expander::special-form-expander::index-2 + ✗ hashql-ast::lower::expander::special-form-expander::fn-4 + ✗ hashql-ast::lower::expander::special-form-expander::use-glob + ✗ hashql-ast::lower::expander::special-form-expander::fn-generics-tuple-literal + ✗ hashql-ast::lower::expander::special-form-expander::type-expr-struct + ✗ hashql-ast::lower::expander::special-form-expander::type-generic-constraint + ✗ hashql-ast::lower::expander::special-form-expander::use-tuple-literal + ✗ hashql-ast::lower::expander::special-form-expander::fn-generics-tuple-path + ✗ hashql-ast::lower::expander::special-form-expander::fn-generics-struct-type + ✗ hashql-ast::lower::expander::special-form-expander::fn-params-tuple + ✗ hashql-ast::lower::expander::special-form-expander::use-tuple-type + ✗ hashql-ast::lower::expander::special-form-expander::too-many-segments + ✗ hashql-ast::lower::expander::special-form-expander::fn-generics-struct-underscore + ✗ hashql-ast::lower::expander::special-form-expander::type-infer + ✗ hashql-ast::lower::expander::special-form-expander::as-2 + ✗ hashql-ast::lower::expander::special-form-expander::access-field-literal-type-annotation + ✗ hashql-ast::lower::expander::special-form-expander::fn-generics-duplicates + ✗ hashql-ast::lower::expander::special-form-expander::newtype-collect-all-errors + ✗ hashql-ast::lower::expander::special-form-expander::fn-params-duplicates + ✗ hashql-ast::lower::expander::special-form-expander::fn-generics-struct-literal + ✗ hashql-ast::lower::expander::special-form-expander::type-tuple-has-type + ✗ hashql-ast::lower::expander::special-form-expander::input-2 + ✗ hashql-ast::lower::expander::special-form-expander::type-unknown + ✗ hashql-ast::lower::expander::special-form-expander::type-generic-struct + ✗ hashql-ast::lower::expander::special-form-expander::use-tuple-path + ✗ hashql-ast::lower::expander::special-form-expander::type-expr-call-not-path + ✗ hashql-ast::lower::expander::special-form-expander::unknown-special-form + ✗ hashql-ast::lower::expander::special-form-expander::type-expr-call-intersection + ✗ hashql-ast::lower::expander::special-form-expander::use-struct + ✗ hashql-ast::lower::expander::special-form-expander::use-struct-literal + ✗ hashql-ast::lower::expander::special-form-expander::use-3 + ✗ hashql-ast::lower::expander::special-form-expander::type-generic-relative-path + ✗ hashql-ast::lower::expander::special-form-expander::type-generic-duplicate + ✗ hashql-ast::lower::expander::special-form-expander::fn-generics-literal + ✗ hashql-ast::lower::expander::special-form-expander::type-generic-generic-ident + ✗ hashql-ast::lower::expander::special-form-expander::use-struct-path + ✗ hashql-ast::lower::expander::special-form-expander::type-never + ✗ hashql-ast::lower::expander::special-form-expander::type-expr-tuple + ✗ hashql-ast::lower::expander::special-form-expander::use-tuple + ✗ hashql-ast::lower::expander::special-form-expander::let-argument-not-ident + ✗ hashql-ast::lower::expander::special-form-expander::type-struct-has-type + ✗ hashql-ast::lower::expander::special-form-expander::let-collect-all-errors + ✗ hashql-ast::lower::expander::special-form-expander::type-collect-all-errors + ✗ hashql-ast::lower::expander::special-form-expander::access-field-literal-valid + ✗ hashql-ast::lower::expander::special-form-expander::unknown-special-form-typo + ✗ hashql-ast::lower::expander::special-form-expander::type-expr-call-arbitrary + ✗ hashql-ast::lower::expander::special-form-expander::not-enough-segments + ✗ hashql-ast::lower::expander::special-form-expander::generics + ✗ hashql-ast::lower::expander::special-form-expander::fn-generics-tuple-type + ✗ hashql-ast::lower::expander::special-form-expander::fn-generics-struct + ✗ hashql-ast::lower::expander::special-form-expander::type-3 + ✗ hashql-ast::lower::expander::pre-expansion-name-resolver::re-assign-prelude + ✗ hashql-ast::lower::expander::pre-expansion-name-resolver::newtype-4 + ✗ hashql-ast::lower::expander::pre-expansion-name-resolver::re-assign + ✗ hashql-ast::lower::expander::pre-expansion-name-resolver::let-absolute + ✗ hashql-ast::lower::expander::pre-expansion-name-resolver::nested-let + ✗ hashql-ast::lower::expander::pre-expansion-name-resolver::absolute-path + ✗ hashql-ast::lower::expander::pre-expansion-name-resolver::newtype-3-alias + ✗ hashql-ast::lower::expander::pre-expansion-name-resolver::type-3-alias + ✗ hashql-ast::lower::expander::pre-expansion-name-resolver::multi-segment-resolution + ✗ hashql-ast::lower::expander::pre-expansion-name-resolver::let-3-alias + ✗ hashql-ast::lower::expander::pre-expansion-name-resolver::newtype-3 + ✗ hashql-ast::lower::expander::pre-expansion-name-resolver::resolve-symbol + ✗ hashql-ast::lower::expander::pre-expansion-name-resolver::type-4 + ✗ hashql-ast::lower::expander::pre-expansion-name-resolver::alias-symbol + ✗ hashql-ast::lower::expander::pre-expansion-name-resolver::let-4-alias + ✗ hashql-ast::lower::expander::pre-expansion-name-resolver::resolve-generics + ✗ hashql-ast::lower::expander::pre-expansion-name-resolver::invalid-let-expr + ✗ hashql-ast::lower::expander::pre-expansion-name-resolver::let-3 + ✗ hashql-ast::lower::expander::pre-expansion-name-resolver::re-assign-prelude-diverging + ✗ hashql-ast::lower::expander::pre-expansion-name-resolver::let-4 + ✗ hashql-ast::lower::expander::pre-expansion-name-resolver::restoration-bindings + ✗ hashql-ast::lower::expander::pre-expansion-name-resolver::let-ident-generic + ✗ hashql-ast::lower::type-extractor::definition::global-generic-constraint-too-many -[166/167] hashql-ast lower::type-extractor::generic-type-resolution -──────────────────────────────────────────────────────────────────────────────── -Expected trial to pass, but it failed -├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:390:24 -╰╴1 additional opaque attachment +118 of 534 tests failed. -[167/167] hashql-ast lower::type-extractor::definition::constraints-parsing -──────────────────────────────────────────────────────────────────────────────── -Expected trial to pass, but it failed -├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:390:24 -╰╴1 additional opaque attachment From d98f96e37dd023b3cba9b0981e3249b379d26fb2 Mon Sep 17 00:00:00 2001 From: Bilal Mahmoud <7252775+indietyp@users.noreply.github.com> Date: Mon, 15 Jun 2026 16:00:12 +0200 Subject: [PATCH 34/55] chore: update snapshots --- .../import-resolver/continue/unresolved-nested.jsonc | 2 +- .../import-resolver/continue/unresolved-type.jsonc | 2 +- .../import-resolver/continue/unresolved-value.jsonc | 2 +- .../import-resolver/continue/use-not-found.jsonc | 1 + .../generic-argument-absolute-path.jsonc | 4 ++-- .../import-resolver/generic-argument-use-path.jsonc | 4 ++-- .../expander/import-resolver/item-not-found.jsonc | 2 +- .../ui/lower/expander/import-resolver/rollback.jsonc | 2 +- .../import-resolver/unresolver-variable.jsonc | 2 +- .../access-field-literal-type-annotation.jsonc | 12 +++++++++--- .../fn-generics-duplicates.jsonc | 4 ++-- .../special-form-expander/fn-generics-literal.jsonc | 2 +- .../fn-generics-struct-literal.jsonc | 4 ++-- .../fn-generics-struct-type.jsonc | 6 +++--- .../fn-generics-tuple-literal.jsonc | 4 ++-- .../fn-generics-tuple-path.jsonc | 2 +- .../fn-generics-tuple-type.jsonc | 2 +- .../special-form-expander/fn-params-duplicates.jsonc | 6 +++--- .../special-form-expander/fn-params-tuple.jsonc | 2 +- .../special-form-expander/fn-params-type.jsonc | 2 +- .../expander/special-form-expander/generics.jsonc | 4 ++-- .../let-argument-not-ident.jsonc | 2 -- .../newtype-collect-all-errors.jsonc | 1 - .../special-form-expander/not-enough-segments.jsonc | 2 +- .../special-form-expander/too-many-segments.jsonc | 2 +- .../type-expr-call-arbitrary.jsonc | 4 ++-- .../type-expr-call-not-path.jsonc | 2 +- .../special-form-expander/type-expr-invalid.jsonc | 6 +++--- .../type-generic-duplicate.jsonc | 4 ++-- .../type-generic-generic-ident.jsonc | 2 +- .../type-generic-relative-path.jsonc | 2 +- .../special-form-expander/type-generic-struct.jsonc | 2 +- .../special-form-expander/type-struct-has-type.jsonc | 2 +- .../special-form-expander/type-tuple-has-type.jsonc | 6 +++--- .../unknown-special-form-typo.jsonc | 2 +- .../special-form-expander/unknown-special-form.jsonc | 2 +- .../special-form-expander/use-glob-not-ident.jsonc | 2 +- .../special-form-expander/use-struct-literal.jsonc | 6 +++--- .../special-form-expander/use-struct-path.jsonc | 8 ++++---- .../special-form-expander/use-struct-type.jsonc | 4 ++-- .../special-form-expander/use-tuple-literal.jsonc | 4 ++-- .../special-form-expander/use-tuple-path.jsonc | 2 +- .../special-form-expander/use-tuple-type.jsonc | 5 +++-- .../ast/tests/ui/lower/sanitizer/constraint.jsonc | 2 +- .../lower/sanitizer/special-form-type-position.jsonc | 2 +- .../global-generic-constraint-too-many.jsonc | 2 +- .../alias-replacement/generic-reassignment.jsonc | 3 ++- .../hir/tests/ui/lower/ctor/too-many-arguments.jsonc | 2 +- .../ui/lower/inference/bind-arguments-explicit.jsonc | 2 +- 49 files changed, 81 insertions(+), 75 deletions(-) diff --git a/libs/@local/hashql/ast/tests/ui/lower/expander/import-resolver/continue/unresolved-nested.jsonc b/libs/@local/hashql/ast/tests/ui/lower/expander/import-resolver/continue/unresolved-nested.jsonc index 352bf7781e1..1747d378bbf 100644 --- a/libs/@local/hashql/ast/tests/ui/lower/expander/import-resolver/continue/unresolved-nested.jsonc +++ b/libs/@local/hashql/ast/tests/ui/lower/expander/import-resolver/continue/unresolved-nested.jsonc @@ -4,7 +4,7 @@ [ "type", "Foo", - //~^ ERROR Cannot find variable 'Bar' + //~^ ERROR cannot find `Bar` in this scope "Number", "_" ] diff --git a/libs/@local/hashql/ast/tests/ui/lower/expander/import-resolver/continue/unresolved-type.jsonc b/libs/@local/hashql/ast/tests/ui/lower/expander/import-resolver/continue/unresolved-type.jsonc index 6ba9772a652..4575ece2cc0 100644 --- a/libs/@local/hashql/ast/tests/ui/lower/expander/import-resolver/continue/unresolved-type.jsonc +++ b/libs/@local/hashql/ast/tests/ui/lower/expander/import-resolver/continue/unresolved-type.jsonc @@ -5,6 +5,6 @@ "type", "Foo", "T", - //~^ ERROR Cannot find variable 'T' + //~^ ERROR cannot find `T` in this scope "_" ] diff --git a/libs/@local/hashql/ast/tests/ui/lower/expander/import-resolver/continue/unresolved-value.jsonc b/libs/@local/hashql/ast/tests/ui/lower/expander/import-resolver/continue/unresolved-value.jsonc index 3443755d98c..f889207c319 100644 --- a/libs/@local/hashql/ast/tests/ui/lower/expander/import-resolver/continue/unresolved-value.jsonc +++ b/libs/@local/hashql/ast/tests/ui/lower/expander/import-resolver/continue/unresolved-value.jsonc @@ -3,7 +3,7 @@ //@ suite#continue: true [ "shl", - //~^ ERROR Cannot find variable 'shl' + //~^ ERROR cannot find `shl` in this scope { "#literal": 1 }, { "#literal": 4 } ] diff --git a/libs/@local/hashql/ast/tests/ui/lower/expander/import-resolver/continue/use-not-found.jsonc b/libs/@local/hashql/ast/tests/ui/lower/expander/import-resolver/continue/use-not-found.jsonc index e986ddf5a33..135829e19dc 100644 --- a/libs/@local/hashql/ast/tests/ui/lower/expander/import-resolver/continue/use-not-found.jsonc +++ b/libs/@local/hashql/ast/tests/ui/lower/expander/import-resolver/continue/use-not-found.jsonc @@ -7,4 +7,5 @@ //~^ ERROR cannot find module `foo` "*", ["add", { "#literal": 1 }, { "#literal": 2 }] + //~^ ERROR cannot find `add` in this scope ] diff --git a/libs/@local/hashql/ast/tests/ui/lower/expander/import-resolver/generic-argument-absolute-path.jsonc b/libs/@local/hashql/ast/tests/ui/lower/expander/import-resolver/generic-argument-absolute-path.jsonc index 3bbced724a7..6aece4429b6 100644 --- a/libs/@local/hashql/ast/tests/ui/lower/expander/import-resolver/generic-argument-absolute-path.jsonc +++ b/libs/@local/hashql/ast/tests/ui/lower/expander/import-resolver/generic-argument-absolute-path.jsonc @@ -1,4 +1,4 @@ //@ run: fail //@ description: Tests that generic arguments in non-final segments of paths are rejected with appropriate error -["::math::add", { "#literal": 2 }, { "#literal": 3 }] -//~^ ERROR Remove this generic argument +["::core::math::add", { "#literal": 2 }, { "#literal": 3 }] +//~^ ERROR generic argument not allowed here diff --git a/libs/@local/hashql/ast/tests/ui/lower/expander/import-resolver/generic-argument-use-path.jsonc b/libs/@local/hashql/ast/tests/ui/lower/expander/import-resolver/generic-argument-use-path.jsonc index e673c001af0..392c0a89c47 100644 --- a/libs/@local/hashql/ast/tests/ui/lower/expander/import-resolver/generic-argument-use-path.jsonc +++ b/libs/@local/hashql/ast/tests/ui/lower/expander/import-resolver/generic-argument-use-path.jsonc @@ -1,4 +1,4 @@ //@ run: fail //@ description: Tests that generic arguments in 'use' statements are rejected with appropriate error -["use", "kernel::type", { "#tuple": ["T"] }, "_"] -//~^ ERROR Generic arguments are not allowed here +["use", "kernel::type", { "#tuple": ["T"] }, "_"] +//~^ ERROR generic arguments are not allowed in `use` paths diff --git a/libs/@local/hashql/ast/tests/ui/lower/expander/import-resolver/item-not-found.jsonc b/libs/@local/hashql/ast/tests/ui/lower/expander/import-resolver/item-not-found.jsonc index c75d6dbff4a..a66eb23676f 100644 --- a/libs/@local/hashql/ast/tests/ui/lower/expander/import-resolver/item-not-found.jsonc +++ b/libs/@local/hashql/ast/tests/ui/lower/expander/import-resolver/item-not-found.jsonc @@ -1,4 +1,4 @@ //@ run: fail //@ description: Tests that importing a non-existent item produces an appropriate error with suggestions ["use", "core::bits", { "#tuple": ["lshift"] }, "_"] -//~^ ERROR 'lshift' not found in module 'core::bits' +//~^ ERROR cannot find `lshift` in module `core::bits` diff --git a/libs/@local/hashql/ast/tests/ui/lower/expander/import-resolver/rollback.jsonc b/libs/@local/hashql/ast/tests/ui/lower/expander/import-resolver/rollback.jsonc index 8e684356ab3..12713bb6fe6 100644 --- a/libs/@local/hashql/ast/tests/ui/lower/expander/import-resolver/rollback.jsonc +++ b/libs/@local/hashql/ast/tests/ui/lower/expander/import-resolver/rollback.jsonc @@ -5,5 +5,5 @@ { "#literal": true }, ["use", "core::bits", { "#tuple": ["shl"] }, "shl"], "shl" - //~^ ERROR Cannot find variable 'shl' + //~^ ERROR cannot find `shl` in this scope ] diff --git a/libs/@local/hashql/ast/tests/ui/lower/expander/import-resolver/unresolver-variable.jsonc b/libs/@local/hashql/ast/tests/ui/lower/expander/import-resolver/unresolver-variable.jsonc index f4d7db66077..0b9be66e8f4 100644 --- a/libs/@local/hashql/ast/tests/ui/lower/expander/import-resolver/unresolver-variable.jsonc +++ b/libs/@local/hashql/ast/tests/ui/lower/expander/import-resolver/unresolver-variable.jsonc @@ -9,6 +9,6 @@ "foo", { "#literal": 42 }, "föo" - //~^ ERROR Cannot find variable 'föo' + //~^ ERROR cannot find `föo` in this scope ] ] diff --git a/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/access-field-literal-type-annotation.jsonc b/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/access-field-literal-type-annotation.jsonc index aa4bbed410a..04ef811188f 100644 --- a/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/access-field-literal-type-annotation.jsonc +++ b/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/access-field-literal-type-annotation.jsonc @@ -1,8 +1,14 @@ //@ run: fail //@ description: Field literal with type annotation should error [ - "::kernel::special_form::access", + "let", "tuple", - { "#literal": 0, "#type": "Integer" } - //~^ ERROR type annotations are not allowed on field index literals + { "#tuple": [{ "#literal": 1 }] }, + [ + "::kernel::special_form::access", + "tuple", + //~^ ERROR cannot find `tuple` in this scope + { "#literal": 0, "#type": "Integer" } + //~^ ERROR type annotations are not allowed on field index literals + ] ] diff --git a/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/fn-generics-duplicates.jsonc b/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/fn-generics-duplicates.jsonc index e0db01d7958..5fe08075c88 100644 --- a/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/fn-generics-duplicates.jsonc +++ b/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/fn-generics-duplicates.jsonc @@ -3,8 +3,8 @@ [ "::kernel::special_form::fn", { "#tuple": ["T", "T"] }, - //~^ ERROR `T` is already declared as a generic parameter + //~^ ERROR duplicate generic parameter `T` { "#struct": {} }, "_", - ["+", "a", "b"] + { "#literal": 0 } ] diff --git a/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/fn-generics-literal.jsonc b/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/fn-generics-literal.jsonc index 03eb044f303..e200972c04e 100644 --- a/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/fn-generics-literal.jsonc +++ b/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/fn-generics-literal.jsonc @@ -6,5 +6,5 @@ //~^ ERROR expected a tuple or struct for generic parameters { "#struct": {} }, "_", - ["+", "a", "b"] + { "#literal": 1 } ] diff --git a/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/fn-generics-struct-literal.jsonc b/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/fn-generics-struct-literal.jsonc index 322164a003b..6d41b8ac8d0 100644 --- a/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/fn-generics-struct-literal.jsonc +++ b/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/fn-generics-struct-literal.jsonc @@ -5,10 +5,10 @@ { "#struct": { "T": { "#literal": 2 } - //~^ ERROR expected a simple type parameter + //~^ ERROR cannot use a literal value as a type } }, { "#struct": {} }, "_", - ["+", "a", "b"] + { "#literal": 0 } ] diff --git a/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/fn-generics-struct-type.jsonc b/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/fn-generics-struct-type.jsonc index be0fd424128..cc426ec389a 100644 --- a/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/fn-generics-struct-type.jsonc +++ b/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/fn-generics-struct-type.jsonc @@ -3,11 +3,11 @@ [ "::kernel::special_form::fn", { - "#struct": { "T": "Int" }, - "#type": "Int" + "#struct": { "T": "Integer" }, + "#type": "Integer" //~^ ERROR type annotation is not allowed on the generic parameter list }, { "#struct": {} }, "_", - ["+", "a", "b"] + { "#literal": 0 } ] diff --git a/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/fn-generics-tuple-literal.jsonc b/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/fn-generics-tuple-literal.jsonc index 17cc88a27f9..9aa10fdb765 100644 --- a/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/fn-generics-tuple-literal.jsonc +++ b/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/fn-generics-tuple-literal.jsonc @@ -5,10 +5,10 @@ { "#tuple": [ { "#literal": 1 } - //~^ ERROR expected a tuple or struct for generic parameters + //~^ ERROR expected a simple type parameter name ] }, { "#struct": {} }, "_", - ["+", "a", "b"] + { "#literal": 0 } ] diff --git a/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/fn-generics-tuple-path.jsonc b/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/fn-generics-tuple-path.jsonc index 673cde59512..f72e747ccb5 100644 --- a/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/fn-generics-tuple-path.jsonc +++ b/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/fn-generics-tuple-path.jsonc @@ -10,5 +10,5 @@ }, { "#struct": {} }, "_", - ["+", "a", "b"] + { "#literal": 0 } ] diff --git a/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/fn-generics-tuple-type.jsonc b/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/fn-generics-tuple-type.jsonc index a0f5f0417be..cf7456ee130 100644 --- a/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/fn-generics-tuple-type.jsonc +++ b/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/fn-generics-tuple-type.jsonc @@ -9,5 +9,5 @@ }, { "#struct": {} }, "_", - ["+", "a", "b"] + { "#literal": 0 } ] diff --git a/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/fn-params-duplicates.jsonc b/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/fn-params-duplicates.jsonc index 4899562a33a..4d3574e99f8 100644 --- a/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/fn-params-duplicates.jsonc +++ b/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/fn-params-duplicates.jsonc @@ -3,8 +3,8 @@ [ "::kernel::special_form::fn", { "#struct": {} }, - { "#struct": { "a": "Int", "a": "Int" } }, - //~^ ERROR `a` is already declared as a parameter + { "#struct": { "a": "Integer", "a": "Integer" } }, + //~^ ERROR duplicate parameter `a` "_", - ["+", "a", "b"] + ["+", "a", { "#literal": 0 }] ] diff --git a/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/fn-params-tuple.jsonc b/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/fn-params-tuple.jsonc index 59c526a39a2..be0256250c2 100644 --- a/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/fn-params-tuple.jsonc +++ b/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/fn-params-tuple.jsonc @@ -6,5 +6,5 @@ { "#tuple": [] }, //~^ ERROR expected a struct for function parameters "_", - ["+", "a", "b"] + { "#literal": 0 } ] diff --git a/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/fn-params-type.jsonc b/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/fn-params-type.jsonc index a360d02a298..d58f266ee0a 100644 --- a/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/fn-params-type.jsonc +++ b/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/fn-params-type.jsonc @@ -9,5 +9,5 @@ //~^ ERROR type annotation is not allowed on the parameter list }, "_", - ["+", "a", "b"] + ["+", { "#literal": 1 }, { "#literal": 2 }] ] diff --git a/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/generics.jsonc b/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/generics.jsonc index bf4d315b293..9fdc9d4c6e3 100644 --- a/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/generics.jsonc +++ b/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/generics.jsonc @@ -1,4 +1,4 @@ //@ run: fail //@ description: If any generics are used in the path, error out -["::kernel::special_form::if"] -//~^ERROR Remove these generic arguments +["::kernel::special_form::if"] +//~^ ERROR generic argument not allowed here diff --git a/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/let-argument-not-ident.jsonc b/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/let-argument-not-ident.jsonc index a89ebd58685..41617073b30 100644 --- a/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/let-argument-not-ident.jsonc +++ b/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/let-argument-not-ident.jsonc @@ -8,12 +8,10 @@ [ "::kernel::special_form::let", "x::A", - //~^ ERROR expected a simple identifier for the `let` binding name "y::B", [ "::kernel::special_form::let", "::z", - //~^ ERROR expected a simple identifier for the `let` binding name { "#literal": true }, ["+", "x", "y"] ] diff --git a/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/newtype-collect-all-errors.jsonc b/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/newtype-collect-all-errors.jsonc index c8d82a1aa0b..d6c559a4b0b 100644 --- a/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/newtype-collect-all-errors.jsonc +++ b/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/newtype-collect-all-errors.jsonc @@ -2,4 +2,3 @@ //@ description: We should collect all errors when lowering newtype/3, and not only report the first one. ["::kernel::special_form::newtype", "::x", { "#literal": 1 }, "x"] //~^ ERROR expected a type name for the `newtype` binding -//~| ERROR cannot use a literal value as a type diff --git a/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/not-enough-segments.jsonc b/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/not-enough-segments.jsonc index 56d2185cb0a..dceb769fada 100644 --- a/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/not-enough-segments.jsonc +++ b/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/not-enough-segments.jsonc @@ -2,7 +2,7 @@ //@ description: check if we error out if the path has not enough segments [ "::kernel::special_form", - //~^ ERROR exactly 3 segments + //~^ ERROR cannot find `special_form` in module `::kernel` { "#literal": true }, { "#literal": 1 }, { "#literal": 2 } diff --git a/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/too-many-segments.jsonc b/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/too-many-segments.jsonc index 0cabae514bc..f22d2433ee0 100644 --- a/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/too-many-segments.jsonc +++ b/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/too-many-segments.jsonc @@ -2,7 +2,7 @@ //@ description: check if we error out if the path has too many segments [ "::kernel::special_form::if::extra", - //~^ ERROR Remove this extra segment + //~^ ERROR cannot access items inside a non-module { "#literal": true }, { "#literal": 1 }, { "#literal": 2 } diff --git a/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/type-expr-call-arbitrary.jsonc b/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/type-expr-call-arbitrary.jsonc index e849e184473..34dd6206d6a 100644 --- a/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/type-expr-call-arbitrary.jsonc +++ b/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/type-expr-call-arbitrary.jsonc @@ -3,6 +3,6 @@ [ "::kernel::special_form::as", { "#literal": true }, - ["::core::math::headpat", "Int", "Float"] - //~^ ERROR cannot use this as a type constructor + ["::core::math::headpat", "Integer", "Number"] + //~^ ERROR cannot find `headpat` in module `::core::math` ] diff --git a/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/type-expr-call-not-path.jsonc b/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/type-expr-call-not-path.jsonc index 80efaefff35..0d147263797 100644 --- a/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/type-expr-call-not-path.jsonc +++ b/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/type-expr-call-not-path.jsonc @@ -5,7 +5,7 @@ { "#literal": true }, [ ["+", { "#literal": 1 }, { "#literal": 2 }], - //~^ ERROR cannot use this as a type constructor + //~^ ERROR cannot find `+` in this scope "Integer", "Number" ] diff --git a/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/type-expr-invalid.jsonc b/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/type-expr-invalid.jsonc index fd83756d55c..f9c49671479 100644 --- a/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/type-expr-invalid.jsonc +++ b/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/type-expr-invalid.jsonc @@ -8,10 +8,10 @@ "::kernel::special_form::as", [ "::kernel::special_form::as", - "x", + { "#literal": 1 }, // ensure that we properly resolve nested is expressions as errors - ["::kernel::special_form::as", "x", "X"] - //~^ ERROR cannot use an `as` expression as a type + ["::kernel::special_form::as", { "#literal": 1 }, "Integer"] + //~^ ERROR cannot find `as` in module `::kernel::special_form` ], { "#literal": 1 } //~^ ERROR cannot use a literal value as a type diff --git a/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/type-generic-duplicate.jsonc b/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/type-generic-duplicate.jsonc index 53667bf74d6..7220593bfcf 100644 --- a/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/type-generic-duplicate.jsonc +++ b/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/type-generic-duplicate.jsonc @@ -2,8 +2,8 @@ //@ description: Duplicate generic constraints should be rejected [ "::kernel::special_form::type", - "Foo", + "Foo", //~^ ERROR duplicate generic parameter `T` - { "#struct": { "foo": "Bar" } }, + { "#struct": { "foo": "Integer" } }, "_" ] diff --git a/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/type-generic-generic-ident.jsonc b/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/type-generic-generic-ident.jsonc index 057e5176f57..b579e0f0b18 100644 --- a/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/type-generic-generic-ident.jsonc +++ b/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/type-generic-generic-ident.jsonc @@ -4,6 +4,6 @@ "::kernel::special_form::type", "Foo>", //~^ ERROR expected a simple type parameter - { "#struct": { "foo": "Bar" } }, + { "#struct": { "foo": "Integer" } }, "_" ] diff --git a/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/type-generic-relative-path.jsonc b/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/type-generic-relative-path.jsonc index db243218f0c..fd5e20682de 100644 --- a/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/type-generic-relative-path.jsonc +++ b/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/type-generic-relative-path.jsonc @@ -4,6 +4,6 @@ "::kernel::special_form::type", "Foo", //~^ ERROR expected a simple type parameter - { "#struct": { "foo": "Bar" } }, + { "#struct": { "foo": "Integer" } }, "_" ] diff --git a/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/type-generic-struct.jsonc b/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/type-generic-struct.jsonc index a783c46af90..1b011e5c59e 100644 --- a/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/type-generic-struct.jsonc +++ b/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/type-generic-struct.jsonc @@ -4,6 +4,6 @@ "::kernel::special_form::type", "Foo<(a: String)>", //~^ ERROR expected a simple type parameter - { "#struct": { "foo": "Bar" } }, + { "#struct": { "foo": "Integer" } }, "_" ] diff --git a/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/type-struct-has-type.jsonc b/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/type-struct-has-type.jsonc index 2e78ed2fc4f..dbad559e616 100644 --- a/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/type-struct-has-type.jsonc +++ b/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/type-struct-has-type.jsonc @@ -8,5 +8,5 @@ "#type": "(name: String)" //~^ ERROR type annotations are not allowed inside a type expression }, - "x" + { "#literal": 1 } ] diff --git a/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/type-tuple-has-type.jsonc b/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/type-tuple-has-type.jsonc index 7f7f968839d..bd460dc08a8 100644 --- a/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/type-tuple-has-type.jsonc +++ b/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/type-tuple-has-type.jsonc @@ -4,9 +4,9 @@ "::kernel::special_form::type", "x", { - "#tuple": ["Int"], - "#type": "(Int)" + "#tuple": ["Integer"], + "#type": "(Integer)" //~^ ERROR type annotations are not allowed inside a type expression }, - "x" + { "#literal": 1 } ] diff --git a/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/unknown-special-form-typo.jsonc b/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/unknown-special-form-typo.jsonc index 0cb854f57e3..6506ddb2019 100644 --- a/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/unknown-special-form-typo.jsonc +++ b/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/unknown-special-form-typo.jsonc @@ -1,4 +1,4 @@ //@ run: fail //@ description: Given a unknown special form, suggest a correct one ["::kernel::special_form::nuwtype"] -//~^ERROR Did you mean to use 'newtype' instead? +//~^ ERROR cannot find `nuwtype` in module `::kernel::special_form` diff --git a/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/unknown-special-form.jsonc b/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/unknown-special-form.jsonc index 1bdc92c6174..b3ebefbb42a 100644 --- a/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/unknown-special-form.jsonc +++ b/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/unknown-special-form.jsonc @@ -1,4 +1,4 @@ //@ run: fail //@ description: Check if we error out if the special form is unknown ["::kernel::special_form::headpat"] -//~^ERROR This special form path is invalid +//~^ ERROR cannot find `headpat` in module `::kernel::special_form` diff --git a/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/use-glob-not-ident.jsonc b/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/use-glob-not-ident.jsonc index ba189f0a1e1..e700391f1a8 100644 --- a/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/use-glob-not-ident.jsonc +++ b/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/use-glob-not-ident.jsonc @@ -4,6 +4,6 @@ "::kernel::special_form::use", "::core", "::core::math::X", - //~^ ERROR expected a simple name to import + //~^ ERROR expected `*`, a tuple of names, or a struct of aliases "x" ] diff --git a/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/use-struct-literal.jsonc b/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/use-struct-literal.jsonc index 6f67dc6dcec..0bfcef89b0c 100644 --- a/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/use-struct-literal.jsonc +++ b/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/use-struct-literal.jsonc @@ -2,12 +2,12 @@ //@ description: any value that isn't an identifier should fail [ "::kernel::special_form::use", - "::math", + "::core::math", { "#struct": { "x": { "#literal": 1 } - //~^ ERROR expected `*`, a tuple of names, or a struct of aliases + //~^ ERROR expected `_` or a simple identifier as the alias } }, - "x" + { "#literal": 1 } ] diff --git a/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/use-struct-path.jsonc b/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/use-struct-path.jsonc index 8cc711f754f..7d70a1a686d 100644 --- a/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/use-struct-path.jsonc +++ b/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/use-struct-path.jsonc @@ -2,12 +2,12 @@ //@ description: path values that aren't identifiers should fail [ "::kernel::special_form::use", - "::core", + "::core::math", { "#struct": { - "x": "::core::math::sub" - //~^ ERROR expected a simple name to import + "add": "::core::math::sub" + //~^ ERROR expected `_` or a simple identifier as the alias } }, - "x" + { "#literal": 1 } ] diff --git a/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/use-struct-type.jsonc b/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/use-struct-type.jsonc index 03a082a4d41..1809f88db16 100644 --- a/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/use-struct-type.jsonc +++ b/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/use-struct-type.jsonc @@ -2,11 +2,11 @@ //@ description: struct that are annotated with a type should fail [ "::kernel::special_form::use", - "::math", + "::core::math", { "#struct": { "x": "x" }, "#type": "X" //~^ ERROR type annotations are not allowed on the import list }, - "x" + { "#literal": 1 } ] diff --git a/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/use-tuple-literal.jsonc b/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/use-tuple-literal.jsonc index c2d9a201a4f..057d558d1ef 100644 --- a/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/use-tuple-literal.jsonc +++ b/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/use-tuple-literal.jsonc @@ -4,6 +4,6 @@ "::kernel::special_form::use", "::math", { "#tuple": [{ "#literal": 1 }] }, - //~^ ERROR expected `*`, a tuple of names, or a struct of aliases - "x" + //~^ ERROR expected a simple name to import + { "#literal": 1 } ] diff --git a/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/use-tuple-path.jsonc b/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/use-tuple-path.jsonc index 986eaa79738..8bf923db8f2 100644 --- a/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/use-tuple-path.jsonc +++ b/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/use-tuple-path.jsonc @@ -5,5 +5,5 @@ "::core", { "#tuple": ["::core::math::sub"] }, //~^ ERROR expected a simple name to import - "x" + { "#literal": 1 } ] diff --git a/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/use-tuple-type.jsonc b/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/use-tuple-type.jsonc index b3566e85bcb..3f471c1393a 100644 --- a/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/use-tuple-type.jsonc +++ b/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/use-tuple-type.jsonc @@ -4,6 +4,7 @@ "::kernel::special_form::use", "::core", { "#tuple": ["::core::math::sub"], "#type": "Number" }, - //~^ ERROR type annotations are not allowed on the import list - "x" + //~^ ERROR expected a simple name to import + //~| ERROR type annotations are not allowed on the import list + null ] diff --git a/libs/@local/hashql/ast/tests/ui/lower/sanitizer/constraint.jsonc b/libs/@local/hashql/ast/tests/ui/lower/sanitizer/constraint.jsonc index a8d5cfa8964..fdcbfba1cab 100644 --- a/libs/@local/hashql/ast/tests/ui/lower/sanitizer/constraint.jsonc +++ b/libs/@local/hashql/ast/tests/ui/lower/sanitizer/constraint.jsonc @@ -1,7 +1,7 @@ //@ run: fail //@ description: Generic constraints with bounds should be sanitized and error out [ - "add", + "::core::math::add", //~^ ERROR Remove this constraint from 'T' { "#literal": 1 }, { "#literal": 2 } diff --git a/libs/@local/hashql/ast/tests/ui/lower/sanitizer/special-form-type-position.jsonc b/libs/@local/hashql/ast/tests/ui/lower/sanitizer/special-form-type-position.jsonc index 177080f18ea..74c47210634 100644 --- a/libs/@local/hashql/ast/tests/ui/lower/sanitizer/special-form-type-position.jsonc +++ b/libs/@local/hashql/ast/tests/ui/lower/sanitizer/special-form-type-position.jsonc @@ -4,6 +4,6 @@ "type", "A", "::kernel::special_form::let", - //~^ ERROR Special form cannot be used as a type + //~^ ERROR cannot find `let` in module `::kernel::special_form` "_" ] diff --git a/libs/@local/hashql/ast/tests/ui/lower/type-extractor/definition/global-generic-constraint-too-many.jsonc b/libs/@local/hashql/ast/tests/ui/lower/type-extractor/definition/global-generic-constraint-too-many.jsonc index 53aa1760686..502719ad0fe 100644 --- a/libs/@local/hashql/ast/tests/ui/lower/type-extractor/definition/global-generic-constraint-too-many.jsonc +++ b/libs/@local/hashql/ast/tests/ui/lower/type-extractor/definition/global-generic-constraint-too-many.jsonc @@ -4,6 +4,6 @@ "type", "Foo", "Some", - //~^ ERROR unexpected argument + //~^ ERROR Remove this argument "_" ] diff --git a/libs/@local/hashql/hir/tests/ui/lower/alias-replacement/generic-reassignment.jsonc b/libs/@local/hashql/hir/tests/ui/lower/alias-replacement/generic-reassignment.jsonc index 3b1c85d02f2..67f58b52d40 100644 --- a/libs/@local/hashql/hir/tests/ui/lower/alias-replacement/generic-reassignment.jsonc +++ b/libs/@local/hashql/hir/tests/ui/lower/alias-replacement/generic-reassignment.jsonc @@ -4,11 +4,12 @@ "let", "foo", "core::math::add", + //~^ ERROR does not accept generic arguments [ "let", "bar", "foo", - //~^ ERROR additional type arguments are provided here + //~^ ERROR does not accept generic arguments "bar" ] ] diff --git a/libs/@local/hashql/hir/tests/ui/lower/ctor/too-many-arguments.jsonc b/libs/@local/hashql/hir/tests/ui/lower/ctor/too-many-arguments.jsonc index 3c62f433cf9..5b880a62803 100644 --- a/libs/@local/hashql/hir/tests/ui/lower/ctor/too-many-arguments.jsonc +++ b/libs/@local/hashql/hir/tests/ui/lower/ctor/too-many-arguments.jsonc @@ -6,7 +6,7 @@ { "#struct": { "name": "T", "age": "U" } }, [ "Person", - //~^ ERROR unexpected argument + //~^ ERROR requires 2 generic arguments, but 3 were provided { "#literal": 30 } ] ] diff --git a/libs/@local/hashql/hir/tests/ui/lower/inference/bind-arguments-explicit.jsonc b/libs/@local/hashql/hir/tests/ui/lower/inference/bind-arguments-explicit.jsonc index 7cef10325e9..4466ba8d452 100644 --- a/libs/@local/hashql/hir/tests/ui/lower/inference/bind-arguments-explicit.jsonc +++ b/libs/@local/hashql/hir/tests/ui/lower/inference/bind-arguments-explicit.jsonc @@ -2,7 +2,7 @@ //@ description: Ensures type inference fails when explicitly bound generic arguments conflict with provided argument types. [ "`+`", - //~^ ERROR Type variable has incompatible upper and lower bounds + //~^ ERROR `+` does not accept generic arguments { "#literal": 42.12 }, { "#literal": "42" } ] From e06897f14b82b1508f5714413c59179dffcdd834 Mon Sep 17 00:00:00 2001 From: Bilal Mahmoud <7252775+indietyp@users.noreply.github.com> Date: Mon, 15 Jun 2026 16:03:36 +0200 Subject: [PATCH 35/55] chore: update snapshots --- .../generic-argument-absolute-path.stderr | 30 +------ .../generic-argument-use-path.stderr | 30 ++++--- ...ccess-field-literal-type-annotation.stderr | 18 ++-- .../fn-generics-duplicates.stderr | 46 ---------- .../fn-generics-literal.stderr | 46 ---------- .../fn-generics-struct-literal.stderr | 46 ---------- .../fn-generics-struct-type.stderr | 58 +------------ .../fn-generics-tuple-literal.stderr | 46 ---------- .../fn-generics-tuple-path.stderr | 46 ---------- .../fn-generics-tuple-type.stderr | 46 ---------- .../fn-params-duplicates.stderr | 51 +----------- .../fn-params-tuple.stderr | 46 ---------- .../fn-params-type.stderr | 46 ---------- .../special-form-expander/generics.stderr | 51 +----------- .../type-expr-call-arbitrary.stderr | 18 +--- .../type-expr-call-not-path.stderr | 2 +- .../type-expr-invalid.stderr | 83 ++----------------- .../type-generic-duplicate.stderr | 20 +---- .../type-generic-generic-ident.stderr | 8 -- .../type-generic-relative-path.stderr | 8 -- .../type-generic-struct.stderr | 8 -- .../type-struct-has-type.stderr | 25 +----- .../type-tuple-has-type.stderr | 47 +---------- .../use-struct-literal.stderr | 56 ++++++------- .../use-struct-path.stderr | 53 +----------- .../use-struct-type.stderr | 59 +++++++------ .../use-tuple-literal.stderr | 23 ----- .../use-tuple-path.stderr | 23 ----- .../ui/lower/sanitizer/constraint.stderr | 13 +-- .../generic-reassignment.stderr | 2 +- 30 files changed, 105 insertions(+), 949 deletions(-) diff --git a/libs/@local/hashql/ast/tests/ui/lower/expander/import-resolver/generic-argument-absolute-path.stderr b/libs/@local/hashql/ast/tests/ui/lower/expander/import-resolver/generic-argument-absolute-path.stderr index 1ee0574f8bc..b86ada650b8 100644 --- a/libs/@local/hashql/ast/tests/ui/lower/expander/import-resolver/generic-argument-absolute-path.stderr +++ b/libs/@local/hashql/ast/tests/ui/lower/expander/import-resolver/generic-argument-absolute-path.stderr @@ -1,31 +1,7 @@ error[expander::generic-arguments-in-module]: Generic arguments in module path ╭▸ -3 │ ["::math::add", { "#literal": 2 }, { "#literal": 3 }] - │ ━ generic argument not allowed here +3 │ ["::core::math::add", { "#literal": 2 }, { "#literal": 3 }] + │ ━━━━━━━ generic argument not allowed here │ ├ help: move the generic arguments to the final segment of the path, or remove them - ╰ note: modules are not generic; only the final item in a path can be parameterized - -error[expander::unresolved-variable]: Unresolved variable - ╭▸ -3 │ ["::math::add", { "#literal": 2 }, { "#literal": 3 }] - │ ━ cannot find `T` in this scope - │ - ╰ note: this could be a typo, a name used outside its scope, or a missing declaration; if it is a function or type from another module, you may need to import it first -help: a similar imported name exists - ╭╴ -3 - ["::math::add", { "#literal": 2 }, { "#literal": 3 }] -3 + ["::math::add", { "#literal": 2 }, { "#literal": 3 }] - ├╴ -3 - ["::math::add", { "#literal": 2 }, { "#literal": 3 }] -3 + ["::math::add", { "#literal": 2 }, { "#literal": 3 }] - ├╴ -3 - ["::math::add", { "#literal": 2 }, { "#literal": 3 }] -3 + ["::math::add", { "#literal": 2 }, { "#literal": 3 }] - ├╴ -3 - ["::math::add", { "#literal": 2 }, { "#literal": 3 }] -3 + ["::math::add", { "#literal": 2 }, { "#literal": 3 }] - ├╴ -3 - ["::math::add", { "#literal": 2 }, { "#literal": 3 }] -3 + ["::math<|>::add", { "#literal": 2 }, { "#literal": 3 }] - ╰╴ \ No newline at end of file + ╰ note: modules are not generic; only the final item in a path can be parameterized \ No newline at end of file diff --git a/libs/@local/hashql/ast/tests/ui/lower/expander/import-resolver/generic-argument-use-path.stderr b/libs/@local/hashql/ast/tests/ui/lower/expander/import-resolver/generic-argument-use-path.stderr index 4c5c0caa4a5..d6ad5d7c7e1 100644 --- a/libs/@local/hashql/ast/tests/ui/lower/expander/import-resolver/generic-argument-use-path.stderr +++ b/libs/@local/hashql/ast/tests/ui/lower/expander/import-resolver/generic-argument-use-path.stderr @@ -1,31 +1,29 @@ error[expander::item-not-found]: Item not found ╭▸ -3 │ ["use", "kernel::type", { "#tuple": ["T"] }, "_"] - │ ┬─── ━ cannot find `T` in module `kernel::type` - │ │ - │ looked in this module +3 │ ["use", "kernel::type", { "#tuple": ["T"] }, "_"] + │ ──── looked in this module ━ cannot find `T` in module `kernel::type` ╰╴ help: a similar item exists in this module ╭╴ -3 - ["use", "kernel::type", { "#tuple": ["T"] }, "_"] -3 + ["use", "kernel::type", { "#tuple": ["Number"] }, "_"] +3 - ["use", "kernel::type", { "#tuple": ["T"] }, "_"] +3 + ["use", "kernel::type", { "#tuple": ["Number"] }, "_"] ├╴ -3 - ["use", "kernel::type", { "#tuple": ["T"] }, "_"] -3 + ["use", "kernel::type", { "#tuple": ["String"] }, "_"] +3 - ["use", "kernel::type", { "#tuple": ["T"] }, "_"] +3 + ["use", "kernel::type", { "#tuple": ["String"] }, "_"] ├╴ -3 - ["use", "kernel::type", { "#tuple": ["T"] }, "_"] -3 + ["use", "kernel::type", { "#tuple": ["Union"] }, "_"] +3 - ["use", "kernel::type", { "#tuple": ["T"] }, "_"] +3 + ["use", "kernel::type", { "#tuple": ["Union"] }, "_"] ├╴ -3 - ["use", "kernel::type", { "#tuple": ["T"] }, "_"] -3 + ["use", "kernel::type", { "#tuple": ["Unknown"] }, "_"] +3 - ["use", "kernel::type", { "#tuple": ["T"] }, "_"] +3 + ["use", "kernel::type", { "#tuple": ["Unknown"] }, "_"] ├╴ -3 - ["use", "kernel::type", { "#tuple": ["T"] }, "_"] -3 + ["use", "kernel::type", { "#tuple": ["|"] }, "_"] +3 - ["use", "kernel::type", { "#tuple": ["T"] }, "_"] +3 + ["use", "kernel::type", { "#tuple": ["|"] }, "_"] ╰╴ error[expander::use-path-generic-arguments]: Generic arguments in use path ╭▸ -3 │ ["use", "kernel::type", { "#tuple": ["T"] }, "_"] - │ ━━━━━━━━━━━━━━━ generic arguments are not allowed in `use` paths +3 │ ["use", "kernel::type", { "#tuple": ["T"] }, "_"] + │ ━━━━━━━━━━━━━━━━━━━━━ generic arguments are not allowed in `use` paths │ ╰ help: remove the generic arguments; `use` imports modules and items, which do not take type parameters at the import site \ No newline at end of file diff --git a/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/access-field-literal-type-annotation.stderr b/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/access-field-literal-type-annotation.stderr index 8772d5d798a..d5e6a2c2054 100644 --- a/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/access-field-literal-type-annotation.stderr +++ b/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/access-field-literal-type-annotation.stderr @@ -1,14 +1,6 @@ -error[expander::unresolved-variable]: Unresolved variable - ╭▸ -5 │ "tuple", - │ ━━━━━ cannot find `tuple` in this scope - │ - ├ help: check the spelling, or import the name with a `use` statement - ╰ note: this could be a typo, a name used outside its scope, or a missing declaration; if it is a function or type from another module, you may need to import it first - error[expander::field-literal-type-annotation]: Field literal with type annotation - ╭▸ -6 │ { "#literal": 0, "#type": "Integer" } - │ ━━━━━━━ type annotations are not allowed on field index literals - │ - ╰ help: remove the type annotation and use a plain integer like `0` \ No newline at end of file + ╭▸ +11 │ { "#literal": 0, "#type": "Integer" } + │ ━━━━━━━ type annotations are not allowed on field index literals + │ + ╰ help: remove the type annotation and use a plain integer like `0` \ No newline at end of file diff --git a/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/fn-generics-duplicates.stderr b/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/fn-generics-duplicates.stderr index 4e7d2355bd1..59e077a667a 100644 --- a/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/fn-generics-duplicates.stderr +++ b/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/fn-generics-duplicates.stderr @@ -1,49 +1,3 @@ -error[expander::unresolved-variable]: Unresolved variable - ╭▸ -9 │ ["+", "a", "b"] - │ ━ cannot find `b` in this scope - │ - ╰ note: this could be a typo, a name used outside its scope, or a missing declaration; if it is a function or type from another module, you may need to import it first -help: a similar imported name exists - ╭╴ -9 - ["+", "a", "b"] -9 + ["+", "a", "~"] - ├╴ -9 - ["+", "a", "b"] -9 + ["+", "a", "↑"] - ├╴ -9 - ["+", "a", "b"] -9 + ["+", "a", "√"] - ├╴ -9 - ["+", "a", "b"] -9 + ["+", "a", "∛"] - ├╴ -9 - ["+", "a", "b"] -9 + ["+", "a", "cbrt"] - ╰╴ - -error[expander::unresolved-variable]: Unresolved variable - ╭▸ -9 │ ["+", "a", "b"] - │ ━ cannot find `a` in this scope - │ - ╰ note: this could be a typo, a name used outside its scope, or a missing declaration; if it is a function or type from another module, you may need to import it first -help: a similar imported name exists - ╭╴ -9 - ["+", "a", "b"] -9 + ["+", "↑", "b"] - ├╴ -9 - ["+", "a", "b"] -9 + ["+", "√", "b"] - ├╴ -9 - ["+", "a", "b"] -9 + ["+", "∛", "b"] - ├╴ -9 │ ["+", "access", "b"] - ├╴ +++++ -9 │ ["+", "as", "b"] - ╰╴ + - error[expander::duplicate-fn-generic]: Duplicate generic parameter ╭▸ 5 │ { "#tuple": ["T", "T"] }, diff --git a/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/fn-generics-literal.stderr b/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/fn-generics-literal.stderr index 6f5f04a398c..2780d90573a 100644 --- a/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/fn-generics-literal.stderr +++ b/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/fn-generics-literal.stderr @@ -1,49 +1,3 @@ -error[expander::unresolved-variable]: Unresolved variable - ╭▸ -9 │ ["+", "a", "b"] - │ ━ cannot find `b` in this scope - │ - ╰ note: this could be a typo, a name used outside its scope, or a missing declaration; if it is a function or type from another module, you may need to import it first -help: a similar imported name exists - ╭╴ -9 - ["+", "a", "b"] -9 + ["+", "a", "~"] - ├╴ -9 - ["+", "a", "b"] -9 + ["+", "a", "↑"] - ├╴ -9 - ["+", "a", "b"] -9 + ["+", "a", "√"] - ├╴ -9 - ["+", "a", "b"] -9 + ["+", "a", "∛"] - ├╴ -9 - ["+", "a", "b"] -9 + ["+", "a", "cbrt"] - ╰╴ - -error[expander::unresolved-variable]: Unresolved variable - ╭▸ -9 │ ["+", "a", "b"] - │ ━ cannot find `a` in this scope - │ - ╰ note: this could be a typo, a name used outside its scope, or a missing declaration; if it is a function or type from another module, you may need to import it first -help: a similar imported name exists - ╭╴ -9 - ["+", "a", "b"] -9 + ["+", "↑", "b"] - ├╴ -9 - ["+", "a", "b"] -9 + ["+", "√", "b"] - ├╴ -9 - ["+", "a", "b"] -9 + ["+", "∛", "b"] - ├╴ -9 │ ["+", "access", "b"] - ├╴ +++++ -9 │ ["+", "as", "b"] - ╰╴ + - error[expander::invalid-fn-generics]: Invalid generic parameter list ╭▸ 5 │ { "#literal": 2 }, diff --git a/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/fn-generics-struct-literal.stderr b/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/fn-generics-struct-literal.stderr index e3ccfce49c3..f60a3869aa6 100644 --- a/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/fn-generics-struct-literal.stderr +++ b/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/fn-generics-struct-literal.stderr @@ -1,49 +1,3 @@ -error[expander::unresolved-variable]: Unresolved variable - ╭▸ -13 │ ["+", "a", "b"] - │ ━ cannot find `b` in this scope - │ - ╰ note: this could be a typo, a name used outside its scope, or a missing declaration; if it is a function or type from another module, you may need to import it first -help: a similar imported name exists - ╭╴ -13 - ["+", "a", "b"] -13 + ["+", "a", "~"] - ├╴ -13 - ["+", "a", "b"] -13 + ["+", "a", "↑"] - ├╴ -13 - ["+", "a", "b"] -13 + ["+", "a", "√"] - ├╴ -13 - ["+", "a", "b"] -13 + ["+", "a", "∛"] - ├╴ -13 - ["+", "a", "b"] -13 + ["+", "a", "cbrt"] - ╰╴ - -error[expander::unresolved-variable]: Unresolved variable - ╭▸ -13 │ ["+", "a", "b"] - │ ━ cannot find `a` in this scope - │ - ╰ note: this could be a typo, a name used outside its scope, or a missing declaration; if it is a function or type from another module, you may need to import it first -help: a similar imported name exists - ╭╴ -13 - ["+", "a", "b"] -13 + ["+", "↑", "b"] - ├╴ -13 - ["+", "a", "b"] -13 + ["+", "√", "b"] - ├╴ -13 - ["+", "a", "b"] -13 + ["+", "∛", "b"] - ├╴ -13 │ ["+", "access", "b"] - ├╴ +++++ -13 │ ["+", "as", "b"] - ╰╴ + - error[expander::invalid-expression-in-type-position]: Invalid expression in type position ╭▸ 7 │ "T": { "#literal": 2 } diff --git a/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/fn-generics-struct-type.stderr b/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/fn-generics-struct-type.stderr index 0fc6111e219..1dc11aa8672 100644 --- a/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/fn-generics-struct-type.stderr +++ b/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/fn-generics-struct-type.stderr @@ -1,61 +1,7 @@ -error[expander::unresolved-variable]: Unresolved variable - ╭▸ -12 │ ["+", "a", "b"] - │ ━ cannot find `b` in this scope - │ - ╰ note: this could be a typo, a name used outside its scope, or a missing declaration; if it is a function or type from another module, you may need to import it first -help: a similar imported name exists - ╭╴ -12 - ["+", "a", "b"] -12 + ["+", "a", "~"] - ├╴ -12 - ["+", "a", "b"] -12 + ["+", "a", "↑"] - ├╴ -12 - ["+", "a", "b"] -12 + ["+", "a", "√"] - ├╴ -12 - ["+", "a", "b"] -12 + ["+", "a", "∛"] - ├╴ -12 - ["+", "a", "b"] -12 + ["+", "a", "cbrt"] - ╰╴ - -error[expander::unresolved-variable]: Unresolved variable - ╭▸ -6 │ "#struct": { "T": "Int" }, - │ ━━━ cannot find `Int` in this scope - │ - ├ help: check the spelling, or import the name with a `use` statement - ╰ note: this could be a typo, a name used outside its scope, or a missing declaration; if it is a function or type from another module, you may need to import it first - -error[expander::unresolved-variable]: Unresolved variable - ╭▸ -12 │ ["+", "a", "b"] - │ ━ cannot find `a` in this scope - │ - ╰ note: this could be a typo, a name used outside its scope, or a missing declaration; if it is a function or type from another module, you may need to import it first -help: a similar imported name exists - ╭╴ -12 - ["+", "a", "b"] -12 + ["+", "↑", "b"] - ├╴ -12 - ["+", "a", "b"] -12 + ["+", "√", "b"] - ├╴ -12 - ["+", "a", "b"] -12 + ["+", "∛", "b"] - ├╴ -12 │ ["+", "access", "b"] - ├╴ +++++ -12 │ ["+", "as", "b"] - ╰╴ + - error[expander::fn-generics-type-annotation]: Type annotation on generic parameter list ╭▸ -7 │ "#type": "Int" - │ ━━━ type annotation is not allowed on the generic parameter list +7 │ "#type": "Integer" + │ ━━━━━━━ type annotation is not allowed on the generic parameter list │ ├ help: remove the type annotation; the generic parameter list declares type variables, not a typed value ╰ note: write `(fn (T, U) ...)` for unbounded generics or `(fn (T: bound, U: _) ...)` for bounded generics \ No newline at end of file diff --git a/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/fn-generics-tuple-literal.stderr b/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/fn-generics-tuple-literal.stderr index 799ec229d04..7a5de4d08ff 100644 --- a/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/fn-generics-tuple-literal.stderr +++ b/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/fn-generics-tuple-literal.stderr @@ -1,49 +1,3 @@ -error[expander::unresolved-variable]: Unresolved variable - ╭▸ -13 │ ["+", "a", "b"] - │ ━ cannot find `b` in this scope - │ - ╰ note: this could be a typo, a name used outside its scope, or a missing declaration; if it is a function or type from another module, you may need to import it first -help: a similar imported name exists - ╭╴ -13 - ["+", "a", "b"] -13 + ["+", "a", "~"] - ├╴ -13 - ["+", "a", "b"] -13 + ["+", "a", "↑"] - ├╴ -13 - ["+", "a", "b"] -13 + ["+", "a", "√"] - ├╴ -13 - ["+", "a", "b"] -13 + ["+", "a", "∛"] - ├╴ -13 - ["+", "a", "b"] -13 + ["+", "a", "cbrt"] - ╰╴ - -error[expander::unresolved-variable]: Unresolved variable - ╭▸ -13 │ ["+", "a", "b"] - │ ━ cannot find `a` in this scope - │ - ╰ note: this could be a typo, a name used outside its scope, or a missing declaration; if it is a function or type from another module, you may need to import it first -help: a similar imported name exists - ╭╴ -13 - ["+", "a", "b"] -13 + ["+", "↑", "b"] - ├╴ -13 - ["+", "a", "b"] -13 + ["+", "√", "b"] - ├╴ -13 - ["+", "a", "b"] -13 + ["+", "∛", "b"] - ├╴ -13 │ ["+", "access", "b"] - ├╴ +++++ -13 │ ["+", "as", "b"] - ╰╴ + - error[expander::invalid-fn-generic-param]: Invalid generic parameter ╭▸ 7 │ { "#literal": 1 } diff --git a/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/fn-generics-tuple-path.stderr b/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/fn-generics-tuple-path.stderr index 0691c3e7bf7..13a99c61f12 100644 --- a/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/fn-generics-tuple-path.stderr +++ b/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/fn-generics-tuple-path.stderr @@ -1,49 +1,3 @@ -error[expander::unresolved-variable]: Unresolved variable - ╭▸ -13 │ ["+", "a", "b"] - │ ━ cannot find `b` in this scope - │ - ╰ note: this could be a typo, a name used outside its scope, or a missing declaration; if it is a function or type from another module, you may need to import it first -help: a similar imported name exists - ╭╴ -13 - ["+", "a", "b"] -13 + ["+", "a", "~"] - ├╴ -13 - ["+", "a", "b"] -13 + ["+", "a", "↑"] - ├╴ -13 - ["+", "a", "b"] -13 + ["+", "a", "√"] - ├╴ -13 - ["+", "a", "b"] -13 + ["+", "a", "∛"] - ├╴ -13 - ["+", "a", "b"] -13 + ["+", "a", "cbrt"] - ╰╴ - -error[expander::unresolved-variable]: Unresolved variable - ╭▸ -13 │ ["+", "a", "b"] - │ ━ cannot find `a` in this scope - │ - ╰ note: this could be a typo, a name used outside its scope, or a missing declaration; if it is a function or type from another module, you may need to import it first -help: a similar imported name exists - ╭╴ -13 - ["+", "a", "b"] -13 + ["+", "↑", "b"] - ├╴ -13 - ["+", "a", "b"] -13 + ["+", "√", "b"] - ├╴ -13 - ["+", "a", "b"] -13 + ["+", "∛", "b"] - ├╴ -13 │ ["+", "access", "b"] - ├╴ +++++ -13 │ ["+", "as", "b"] - ╰╴ + - error[expander::invalid-fn-generic-param]: Invalid generic parameter ╭▸ 7 │ "::core::math::add" diff --git a/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/fn-generics-tuple-type.stderr b/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/fn-generics-tuple-type.stderr index 8b584c68d2e..807b93613da 100644 --- a/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/fn-generics-tuple-type.stderr +++ b/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/fn-generics-tuple-type.stderr @@ -1,49 +1,3 @@ -error[expander::unresolved-variable]: Unresolved variable - ╭▸ -12 │ ["+", "a", "b"] - │ ━ cannot find `b` in this scope - │ - ╰ note: this could be a typo, a name used outside its scope, or a missing declaration; if it is a function or type from another module, you may need to import it first -help: a similar imported name exists - ╭╴ -12 - ["+", "a", "b"] -12 + ["+", "a", "~"] - ├╴ -12 - ["+", "a", "b"] -12 + ["+", "a", "↑"] - ├╴ -12 - ["+", "a", "b"] -12 + ["+", "a", "√"] - ├╴ -12 - ["+", "a", "b"] -12 + ["+", "a", "∛"] - ├╴ -12 - ["+", "a", "b"] -12 + ["+", "a", "cbrt"] - ╰╴ - -error[expander::unresolved-variable]: Unresolved variable - ╭▸ -12 │ ["+", "a", "b"] - │ ━ cannot find `a` in this scope - │ - ╰ note: this could be a typo, a name used outside its scope, or a missing declaration; if it is a function or type from another module, you may need to import it first -help: a similar imported name exists - ╭╴ -12 - ["+", "a", "b"] -12 + ["+", "↑", "b"] - ├╴ -12 - ["+", "a", "b"] -12 + ["+", "√", "b"] - ├╴ -12 - ["+", "a", "b"] -12 + ["+", "∛", "b"] - ├╴ -12 │ ["+", "access", "b"] - ├╴ +++++ -12 │ ["+", "as", "b"] - ╰╴ + - error[expander::fn-generics-type-annotation]: Type annotation on generic parameter list ╭▸ 7 │ "#type": "Int" diff --git a/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/fn-params-duplicates.stderr b/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/fn-params-duplicates.stderr index 4fa1f7f9195..719937bacd5 100644 --- a/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/fn-params-duplicates.stderr +++ b/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/fn-params-duplicates.stderr @@ -1,53 +1,8 @@ -error[expander::unresolved-variable]: Unresolved variable - ╭▸ -9 │ ["+", "a", "b"] - │ ━ cannot find `b` in this scope - │ - ╰ note: this could be a typo, a name used outside its scope, or a missing declaration; if it is a function or type from another module, you may need to import it first -help: a similar local binding exists - ╭╴ -9 - ["+", "a", "b"] -9 + ["+", "a", "a"] - ╰╴ -help: a similar imported name exists - ╭╴ -9 - ["+", "a", "b"] -9 + ["+", "a", "~"] - ├╴ -9 - ["+", "a", "b"] -9 + ["+", "a", "↑"] - ├╴ -9 - ["+", "a", "b"] -9 + ["+", "a", "√"] - ├╴ -9 - ["+", "a", "b"] -9 + ["+", "a", "∛"] - ├╴ -9 - ["+", "a", "b"] -9 + ["+", "a", "cbrt"] - ╰╴ - -error[expander::unresolved-variable]: Unresolved variable - ╭▸ -6 │ { "#struct": { "a": "Int", "a": "Int" } }, - │ ━━━ cannot find `Int` in this scope - │ - ├ help: check the spelling, or import the name with a `use` statement - ╰ note: this could be a typo, a name used outside its scope, or a missing declaration; if it is a function or type from another module, you may need to import it first - error[expander::duplicate-fn-parameter]: Duplicate function parameter ╭▸ -6 │ { "#struct": { "a": "Int", "a": "Int" } }, - │ ┬───────── ━━━━━━━━━━ duplicate parameter `a` +6 │ { "#struct": { "a": "Integer", "a": "Integer" } }, + │ ┬───────────── ━━━━━━━━━━━━━━ duplicate parameter `a` │ │ │ `a` was first declared here │ - ╰ help: remove the duplicate parameter or use a different name - -error[expander::unresolved-variable]: Unresolved variable - ╭▸ -6 │ { "#struct": { "a": "Int", "a": "Int" } }, - │ ━━━ cannot find `Int` in this scope - │ - ├ help: check the spelling, or import the name with a `use` statement - ╰ note: this could be a typo, a name used outside its scope, or a missing declaration; if it is a function or type from another module, you may need to import it first \ No newline at end of file + ╰ help: remove the duplicate parameter or use a different name \ No newline at end of file diff --git a/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/fn-params-tuple.stderr b/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/fn-params-tuple.stderr index 4f93c14c6bb..7600d622fd3 100644 --- a/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/fn-params-tuple.stderr +++ b/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/fn-params-tuple.stderr @@ -1,49 +1,3 @@ -error[expander::unresolved-variable]: Unresolved variable - ╭▸ -9 │ ["+", "a", "b"] - │ ━ cannot find `b` in this scope - │ - ╰ note: this could be a typo, a name used outside its scope, or a missing declaration; if it is a function or type from another module, you may need to import it first -help: a similar imported name exists - ╭╴ -9 - ["+", "a", "b"] -9 + ["+", "a", "~"] - ├╴ -9 - ["+", "a", "b"] -9 + ["+", "a", "↑"] - ├╴ -9 - ["+", "a", "b"] -9 + ["+", "a", "√"] - ├╴ -9 - ["+", "a", "b"] -9 + ["+", "a", "∛"] - ├╴ -9 - ["+", "a", "b"] -9 + ["+", "a", "cbrt"] - ╰╴ - -error[expander::unresolved-variable]: Unresolved variable - ╭▸ -9 │ ["+", "a", "b"] - │ ━ cannot find `a` in this scope - │ - ╰ note: this could be a typo, a name used outside its scope, or a missing declaration; if it is a function or type from another module, you may need to import it first -help: a similar imported name exists - ╭╴ -9 - ["+", "a", "b"] -9 + ["+", "↑", "b"] - ├╴ -9 - ["+", "a", "b"] -9 + ["+", "√", "b"] - ├╴ -9 - ["+", "a", "b"] -9 + ["+", "∛", "b"] - ├╴ -9 │ ["+", "access", "b"] - ├╴ +++++ -9 │ ["+", "as", "b"] - ╰╴ + - error[expander::invalid-fn-params]: Invalid parameter list ╭▸ 6 │ { "#tuple": [] }, diff --git a/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/fn-params-type.stderr b/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/fn-params-type.stderr index ef74564d5c2..94e9fce2f0b 100644 --- a/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/fn-params-type.stderr +++ b/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/fn-params-type.stderr @@ -1,49 +1,3 @@ -error[expander::unresolved-variable]: Unresolved variable - ╭▸ -12 │ ["+", "a", "b"] - │ ━ cannot find `b` in this scope - │ - ╰ note: this could be a typo, a name used outside its scope, or a missing declaration; if it is a function or type from another module, you may need to import it first -help: a similar imported name exists - ╭╴ -12 - ["+", "a", "b"] -12 + ["+", "a", "~"] - ├╴ -12 - ["+", "a", "b"] -12 + ["+", "a", "↑"] - ├╴ -12 - ["+", "a", "b"] -12 + ["+", "a", "√"] - ├╴ -12 - ["+", "a", "b"] -12 + ["+", "a", "∛"] - ├╴ -12 - ["+", "a", "b"] -12 + ["+", "a", "cbrt"] - ╰╴ - -error[expander::unresolved-variable]: Unresolved variable - ╭▸ -12 │ ["+", "a", "b"] - │ ━ cannot find `a` in this scope - │ - ╰ note: this could be a typo, a name used outside its scope, or a missing declaration; if it is a function or type from another module, you may need to import it first -help: a similar imported name exists - ╭╴ -12 - ["+", "a", "b"] -12 + ["+", "↑", "b"] - ├╴ -12 - ["+", "a", "b"] -12 + ["+", "√", "b"] - ├╴ -12 - ["+", "a", "b"] -12 + ["+", "∛", "b"] - ├╴ -12 │ ["+", "access", "b"] - ├╴ +++++ -12 │ ["+", "as", "b"] - ╰╴ + - error[expander::fn-params-type-annotation]: Type annotation on parameter list ╭▸ 8 │ "#type": "Int" diff --git a/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/generics.stderr b/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/generics.stderr index c483f2051b4..363e7346a09 100644 --- a/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/generics.stderr +++ b/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/generics.stderr @@ -1,52 +1,7 @@ error[expander::generic-arguments-in-module]: Generic arguments in module path ╭▸ -3 │ ["::kernel::special_form::if"] - │ ━ generic argument not allowed here +3 │ ["::kernel::special_form::if"] + │ ━━━━━━━ generic argument not allowed here │ ├ help: move the generic arguments to the final segment of the path, or remove them - ╰ note: modules are not generic; only the final item in a path can be parameterized - -error[expander::unresolved-variable]: Unresolved variable - ╭▸ -3 │ ["::kernel::special_form::if"] - │ ━ cannot find `U` in this scope - │ - ╰ note: this could be a typo, a name used outside its scope, or a missing declaration; if it is a function or type from another module, you may need to import it first -help: a similar imported name exists - ╭╴ -3 - ["::kernel::special_form::if"] -3 + ["::kernel::special_form::if"] - ├╴ -3 - ["::kernel::special_form::if"] -3 + ["::kernel::special_form::if<|>"] - ├╴ -3 │ ["::kernel::special_form::if"] - ├╴ ++++++ -3 │ ["::kernel::special_form::if"] - ├╴ ++++ -3 │ ["::kernel::special_form::if"] - ╰╴ ++ - -error[expander::unresolved-variable]: Unresolved variable - ╭▸ -3 │ ["::kernel::special_form::if"] - │ ━ cannot find `T` in this scope - │ - ╰ note: this could be a typo, a name used outside its scope, or a missing declaration; if it is a function or type from another module, you may need to import it first -help: a similar imported name exists - ╭╴ -3 - ["::kernel::special_form::if"] -3 + ["::kernel::special_form::if"] - ├╴ -3 - ["::kernel::special_form::if"] -3 + ["::kernel::special_form::if"] - ├╴ -3 - ["::kernel::special_form::if"] -3 + ["::kernel::special_form::if"] - ├╴ -3 - ["::kernel::special_form::if"] -3 + ["::kernel::special_form::if"] - ├╴ -3 - ["::kernel::special_form::if"] -3 + ["::kernel::special_form<|>::if"] - ╰╴ \ No newline at end of file + ╰ note: modules are not generic; only the final item in a path can be parameterized \ No newline at end of file diff --git a/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/type-expr-call-arbitrary.stderr b/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/type-expr-call-arbitrary.stderr index 1be765d040a..4047657e4ff 100644 --- a/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/type-expr-call-arbitrary.stderr +++ b/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/type-expr-call-arbitrary.stderr @@ -1,22 +1,6 @@ -error[expander::unresolved-variable]: Unresolved variable - ╭▸ -6 │ ["::core::math::headpat", "Int", "Float"] - │ ━━━━━ cannot find `Float` in this scope - │ - ├ help: check the spelling, or import the name with a `use` statement - ╰ note: this could be a typo, a name used outside its scope, or a missing declaration; if it is a function or type from another module, you may need to import it first - -error[expander::unresolved-variable]: Unresolved variable - ╭▸ -6 │ ["::core::math::headpat", "Int", "Float"] - │ ━━━ cannot find `Int` in this scope - │ - ├ help: check the spelling, or import the name with a `use` statement - ╰ note: this could be a typo, a name used outside its scope, or a missing declaration; if it is a function or type from another module, you may need to import it first - error[expander::item-not-found]: Item not found ╭▸ -6 │ ["::core::math::headpat", "Int", "Float"] +6 │ ["::core::math::headpat", "Integer", "Number"] │ ┬─── ━━━━━━━ cannot find `headpat` in module `::core::math` │ │ │ looked in this module diff --git a/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/type-expr-call-not-path.stderr b/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/type-expr-call-not-path.stderr index 549c26c45a8..8fe50e2e4f5 100644 --- a/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/type-expr-call-not-path.stderr +++ b/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/type-expr-call-not-path.stderr @@ -3,7 +3,7 @@ error[expander::invalid-type-constructor-call]: Invalid type constructor call 6 │ ┌ [ 7 │ │ ["+", { "#literal": 1 }, { "#literal": 2 }], │ │ ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ cannot use this as a type constructor - 8 │ │ //~^ ERROR cannot use this as a type constructor + 8 │ │ //~^ ERROR cannot find `+` in this scope 9 │ │ "Integer", 10 │ │ "Number" 11 │ │ ] diff --git a/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/type-expr-invalid.stderr b/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/type-expr-invalid.stderr index ca45b24e825..25f3880a9f5 100644 --- a/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/type-expr-invalid.stderr +++ b/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/type-expr-invalid.stderr @@ -6,63 +6,6 @@ error[expander::invalid-expression-in-type-position]: Invalid expression in type ├ help: replace this with a type path, tuple type, struct type, `_`, `(| ...)`, or `(& ...)` ╰ note: valid type forms are: type paths like `String`, tuple types like `(Int, String)`, struct types like `(name: String)`, `_` for inference, unions `(| ...)`, and intersections `(& ...)` -error[expander::item-not-found]: Item not found - ╭▸ -13 │ ["::kernel::special_form::as", "x", "X"] - │ ┬─────────── ━━ cannot find `as` in module `::kernel::special_form` - │ │ - │ looked in this module - │ - ╰ help: check the spelling and ensure the item is exported - -error[expander::unresolved-variable]: Unresolved variable - ╭▸ -13 │ ["::kernel::special_form::as", "x", "X"] - │ ━ cannot find `x` in this scope - │ - ╰ note: this could be a typo, a name used outside its scope, or a missing declaration; if it is a function or type from another module, you may need to import it first -help: a similar imported name exists - ╭╴ -13 - ["::kernel::special_form::as", "x", "X"] -13 + ["::kernel::special_form::as", "String", "X"] - ├╴ -13 - ["::kernel::special_form::as", "x", "X"] -13 + ["::kernel::special_form::as", "Union", "X"] - ├╴ -13 - ["::kernel::special_form::as", "x", "X"] -13 + ["::kernel::special_form::as", "Unknown", "X"] - ├╴ -13 - ["::kernel::special_form::as", "x", "X"] -13 + ["::kernel::special_form::as", "Url", "X"] - ├╴ -13 - ["::kernel::special_form::as", "x", "X"] -13 + ["::kernel::special_form::as", "|", "X"] - ╰╴ - -error[expander::unresolved-variable]: Unresolved variable - ╭▸ -13 │ ["::kernel::special_form::as", "x", "X"] - │ ━ cannot find `X` in this scope - │ - ╰ note: this could be a typo, a name used outside its scope, or a missing declaration; if it is a function or type from another module, you may need to import it first -help: a similar imported name exists - ╭╴ -13 - ["::kernel::special_form::as", "x", "X"] -13 + ["::kernel::special_form::as", "x", "String"] - ├╴ -13 - ["::kernel::special_form::as", "x", "X"] -13 + ["::kernel::special_form::as", "x", "Union"] - ├╴ -13 - ["::kernel::special_form::as", "x", "X"] -13 + ["::kernel::special_form::as", "x", "Unknown"] - ├╴ -13 - ["::kernel::special_form::as", "x", "X"] -13 + ["::kernel::special_form::as", "x", "Url"] - ├╴ -13 - ["::kernel::special_form::as", "x", "X"] -13 + ["::kernel::special_form::as", "x", "|"] - ╰╴ - error[expander::invalid-expression-in-type-position]: Invalid expression in type position ╭▸ 16 │ { "#literal": 1 } @@ -151,25 +94,11 @@ help: a similar imported name exists 22 + { "#dict": { "a": "Number" } } ╰╴ -error[expander::unresolved-variable]: Unresolved variable +error[expander::item-not-found]: Item not found ╭▸ -11 │ "x", - │ ━ cannot find `x` in this scope +13 │ ["::kernel::special_form::as", { "#literal": 1 }, "Integer"] + │ ┬─────────── ━━ cannot find `as` in module `::kernel::special_form` + │ │ + │ looked in this module │ - ╰ note: this could be a typo, a name used outside its scope, or a missing declaration; if it is a function or type from another module, you may need to import it first -help: a similar imported name exists - ╭╴ -11 - "x", -11 + "~", - ├╴ -11 - "x", -11 + "↑", - ├╴ -11 - "x", -11 + "√", - ├╴ -11 - "x", -11 + "∛", - ├╴ -11 │ "index", - ╰╴ ++++ \ No newline at end of file + ╰ help: check the spelling and ensure the item is exported \ No newline at end of file diff --git a/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/type-generic-duplicate.stderr b/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/type-generic-duplicate.stderr index 4112fb43175..41d26e35538 100644 --- a/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/type-generic-duplicate.stderr +++ b/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/type-generic-duplicate.stderr @@ -1,23 +1,7 @@ -error[expander::unresolved-variable]: Unresolved variable - ╭▸ -7 │ { "#struct": { "foo": "Bar" } }, - │ ━━━ cannot find `Bar` in this scope - │ - ├ help: check the spelling, or import the name with a `use` statement - ╰ note: this could be a typo, a name used outside its scope, or a missing declaration; if it is a function or type from another module, you may need to import it first - -error[expander::unresolved-variable]: Unresolved variable - ╭▸ -5 │ "Foo", - │ ━━━ cannot find `Bar` in this scope - │ - ├ help: check the spelling, or import the name with a `use` statement - ╰ note: this could be a typo, a name used outside its scope, or a missing declaration; if it is a function or type from another module, you may need to import it first - error[expander::duplicate-generic-constraint]: Duplicate generic constraint ╭▸ -5 │ "Foo", - │ ┬ ━ duplicate generic parameter `T` +5 │ "Foo", + │ ┬ ━ duplicate generic parameter `T` │ │ │ `T` was first declared here │ diff --git a/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/type-generic-generic-ident.stderr b/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/type-generic-generic-ident.stderr index df213e8c239..0e3af90cfd5 100644 --- a/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/type-generic-generic-ident.stderr +++ b/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/type-generic-generic-ident.stderr @@ -1,11 +1,3 @@ -error[expander::unresolved-variable]: Unresolved variable - ╭▸ -7 │ { "#struct": { "foo": "Bar" } }, - │ ━━━ cannot find `Bar` in this scope - │ - ├ help: check the spelling, or import the name with a `use` statement - ╰ note: this could be a typo, a name used outside its scope, or a missing declaration; if it is a function or type from another module, you may need to import it first - error[expander::invalid-generic-argument]: Invalid generic argument ╭▸ 5 │ "Foo>", diff --git a/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/type-generic-relative-path.stderr b/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/type-generic-relative-path.stderr index 57434b93422..b28f1d4c2ac 100644 --- a/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/type-generic-relative-path.stderr +++ b/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/type-generic-relative-path.stderr @@ -1,11 +1,3 @@ -error[expander::unresolved-variable]: Unresolved variable - ╭▸ -7 │ { "#struct": { "foo": "Bar" } }, - │ ━━━ cannot find `Bar` in this scope - │ - ├ help: check the spelling, or import the name with a `use` statement - ╰ note: this could be a typo, a name used outside its scope, or a missing declaration; if it is a function or type from another module, you may need to import it first - error[expander::invalid-generic-argument]: Invalid generic argument ╭▸ 5 │ "Foo", diff --git a/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/type-generic-struct.stderr b/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/type-generic-struct.stderr index cb6d49d54d4..4eded93d4d2 100644 --- a/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/type-generic-struct.stderr +++ b/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/type-generic-struct.stderr @@ -1,11 +1,3 @@ -error[expander::unresolved-variable]: Unresolved variable - ╭▸ -7 │ { "#struct": { "foo": "Bar" } }, - │ ━━━ cannot find `Bar` in this scope - │ - ├ help: check the spelling, or import the name with a `use` statement - ╰ note: this could be a typo, a name used outside its scope, or a missing declaration; if it is a function or type from another module, you may need to import it first - error[expander::invalid-generic-argument]: Invalid generic argument ╭▸ 5 │ "Foo<(a: String)>", diff --git a/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/type-struct-has-type.stderr b/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/type-struct-has-type.stderr index 2808c6ecb22..355a7d92833 100644 --- a/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/type-struct-has-type.stderr +++ b/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/type-struct-has-type.stderr @@ -9,27 +9,4 @@ error[expander::type-annotation-in-type-position]: Type annotation in type posit │ └───┘ this struct is already being used as a type │ ├ help: remove the type annotation - ╰ note: in type position, `(name: String)` already defines a struct type - -error[expander::unresolved-variable]: Unresolved variable - ╭▸ -11 │ "x" - │ ━ cannot find `x` in this scope - │ - ╰ note: this could be a typo, a name used outside its scope, or a missing declaration; if it is a function or type from another module, you may need to import it first -help: a similar imported name exists - ╭╴ -11 - "x" -11 + "~" - ├╴ -11 - "x" -11 + "↑" - ├╴ -11 - "x" -11 + "√" - ├╴ -11 - "x" -11 + "∛" - ├╴ -11 │ "index" - ╰╴ ++++ \ No newline at end of file + ╰ note: in type position, `(name: String)` already defines a struct type \ No newline at end of file diff --git a/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/type-tuple-has-type.stderr b/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/type-tuple-has-type.stderr index e7d6a7f11a9..a000a84d07f 100644 --- a/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/type-tuple-has-type.stderr +++ b/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/type-tuple-has-type.stderr @@ -1,51 +1,12 @@ error[expander::type-annotation-in-type-position]: Type annotation in type position ╭▸ 6 │ ┌ { - 7 │ │ "#tuple": ["Int"], - 8 │ │ "#type": "(Int)" - │ │ ━━━━━ type annotations are not allowed inside a type expression + 7 │ │ "#tuple": ["Integer"], + 8 │ │ "#type": "(Integer)" + │ │ ━━━━━━━━━ type annotations are not allowed inside a type expression 9 │ │ //~^ ERROR type annotations are not allowed inside a type expression 10 │ │ }, │ └───┘ this tuple is already being used as a type │ ├ help: remove the type annotation - ╰ note: in type position, `(Int, String)` already defines a tuple type - -error[expander::unresolved-variable]: Unresolved variable - ╭▸ -7 │ "#tuple": ["Int"], - │ ━━━ cannot find `Int` in this scope - │ - ├ help: check the spelling, or import the name with a `use` statement - ╰ note: this could be a typo, a name used outside its scope, or a missing declaration; if it is a function or type from another module, you may need to import it first - -error[expander::unresolved-variable]: Unresolved variable - ╭▸ -11 │ "x" - │ ━ cannot find `x` in this scope - │ - ╰ note: this could be a typo, a name used outside its scope, or a missing declaration; if it is a function or type from another module, you may need to import it first -help: a similar imported name exists - ╭╴ -11 - "x" -11 + "~" - ├╴ -11 - "x" -11 + "↑" - ├╴ -11 - "x" -11 + "√" - ├╴ -11 - "x" -11 + "∛" - ├╴ -11 │ "index" - ╰╴ ++++ - -error[expander::unresolved-variable]: Unresolved variable - ╭▸ -8 │ "#type": "(Int)" - │ ━━━ cannot find `Int` in this scope - │ - ├ help: check the spelling, or import the name with a `use` statement - ╰ note: this could be a typo, a name used outside its scope, or a missing declaration; if it is a function or type from another module, you may need to import it first \ No newline at end of file + ╰ note: in type position, `(Int, String)` already defines a tuple type \ No newline at end of file diff --git a/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/use-struct-literal.stderr b/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/use-struct-literal.stderr index 2f724e825b3..4ec0102ce62 100644 --- a/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/use-struct-literal.stderr +++ b/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/use-struct-literal.stderr @@ -1,36 +1,28 @@ -error[expander::unresolved-variable]: Unresolved variable - ╭▸ -12 │ "x" - │ ━ cannot find `x` in this scope - │ - ╰ note: this could be a typo, a name used outside its scope, or a missing declaration; if it is a function or type from another module, you may need to import it first -help: a similar imported name exists - ╭╴ -12 - "x" -12 + "~" - ├╴ -12 - "x" -12 + "↑" - ├╴ -12 - "x" -12 + "√" - ├╴ -12 - "x" -12 + "∛" - ├╴ -12 │ "index" - ╰╴ ++++ - -error[expander::package-not-found]: Package not found +error[expander::item-not-found]: Item not found ╭▸ -5 │ "::math", - │ ┬─┯━━━ - │ │ │ - │ │ cannot find package `math` - │ in this path - │ - ├ help: check the package name, or add it to the project dependencies - ╰ note: absolute paths start from an installed package +5 │ "::core::math", + │ ──── looked in this module + ‡ +8 │ "x": { "#literal": 1 } + │ ━ cannot find `x` in module `::core::math` + ╰╴ +help: a similar item exists in this module + ╭╴ +8 - "x": { "#literal": 1 } +8 + "sqrt": { "#literal": 1 } + ├╴ +8 - "x": { "#literal": 1 } +8 + "sub": { "#literal": 1 } + ├╴ +8 - "x": { "#literal": 1 } +8 + "↑": { "#literal": 1 } + ├╴ +8 - "x": { "#literal": 1 } +8 + "√": { "#literal": 1 } + ├╴ +8 - "x": { "#literal": 1 } +8 + "∛": { "#literal": 1 } + ╰╴ error[expander::invalid-use-alias]: Invalid use alias ╭▸ diff --git a/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/use-struct-path.stderr b/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/use-struct-path.stderr index 600df8893da..88d0009e18f 100644 --- a/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/use-struct-path.stderr +++ b/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/use-struct-path.stderr @@ -1,55 +1,6 @@ -error[expander::unresolved-variable]: Unresolved variable - ╭▸ -12 │ "x" - │ ━ cannot find `x` in this scope - │ - ╰ note: this could be a typo, a name used outside its scope, or a missing declaration; if it is a function or type from another module, you may need to import it first -help: a similar imported name exists - ╭╴ -12 - "x" -12 + "~" - ├╴ -12 - "x" -12 + "↑" - ├╴ -12 - "x" -12 + "√" - ├╴ -12 - "x" -12 + "∛" - ├╴ -12 │ "index" - ╰╴ ++++ - -error[expander::item-not-found]: Item not found - ╭▸ -5 │ "::core", - │ ──── looked in this module - ‡ -8 │ "x": "::core::math::sub" - │ ━ cannot find `x` in module `::core` - ╰╴ -help: a similar item exists in this module - ╭╴ -8 - "x": "::core::math::sub" -8 + "math": "::core::math::sub" - ├╴ -8 - "x": "::core::math::sub" -8 + "option": "::core::math::sub" - ├╴ -8 - "x": "::core::math::sub" -8 + "result": "::core::math::sub" - ├╴ -8 - "x": "::core::math::sub" -8 + "url": "::core::math::sub" - ├╴ -8 - "x": "::core::math::sub" -8 + "uuid": "::core::math::sub" - ╰╴ - error[expander::invalid-use-alias]: Invalid use alias ╭▸ -8 │ "x": "::core::math::sub" - │ ━━━━━━━━━━━━━━━━━ expected `_` or a simple identifier as the alias +8 │ "add": "::core::math::sub" + │ ━━━━━━━━━━━━━━━━━ expected `_` or a simple identifier as the alias │ ╰ help: use `_` to keep the original name or a simple identifier to rename: `(name: alias)` or `(name: _)` \ No newline at end of file diff --git a/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/use-struct-type.stderr b/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/use-struct-type.stderr index 7a43bd0d5ff..65215590422 100644 --- a/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/use-struct-type.stderr +++ b/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/use-struct-type.stderr @@ -1,33 +1,32 @@ -error[expander::unresolved-variable]: Unresolved variable - ╭▸ -11 │ "x" - │ ━ cannot find `x` in this scope - │ - ╰ note: this could be a typo, a name used outside its scope, or a missing declaration; if it is a function or type from another module, you may need to import it first -help: a similar imported name exists - ╭╴ -11 - "x" -11 + "~" - ├╴ -11 - "x" -11 + "↑" - ├╴ -11 - "x" -11 + "√" - ├╴ -11 - "x" -11 + "∛" - ├╴ -11 │ "index" - ╰╴ ++++ +error[expander::item-not-found]: Item not found + ╭▸ +5 │ "::core::math", + │ ──── looked in this module +6 │ { +7 │ "#struct": { "x": "x" }, + │ ━ cannot find `x` in module `::core::math` + ╰╴ +help: a similar item exists in this module + ╭╴ +7 - "#struct": { "x": "x" }, +7 + "#struct": { "sqrt": "x" }, + ├╴ +7 - "#struct": { "x": "x" }, +7 + "#struct": { "sub": "x" }, + ├╴ +7 - "#struct": { "x": "x" }, +7 + "#struct": { "↑": "x" }, + ├╴ +7 - "#struct": { "x": "x" }, +7 + "#struct": { "√": "x" }, + ├╴ +7 - "#struct": { "x": "x" }, +7 + "#struct": { "∛": "x" }, + ╰╴ -error[expander::package-not-found]: Package not found +error[expander::use-imports-type-annotation]: Type annotation on use imports ╭▸ -5 │ "::math", - │ ┬─┯━━━ - │ │ │ - │ │ cannot find package `math` - │ in this path +8 │ "#type": "X" + │ ━ type annotations are not allowed on the import list │ - ├ help: check the package name, or add it to the project dependencies - ╰ note: absolute paths start from an installed package \ No newline at end of file + ╰ help: remove the type annotation; the import list declares which names to bring into scope, not a typed value \ No newline at end of file diff --git a/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/use-tuple-literal.stderr b/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/use-tuple-literal.stderr index b520afab99e..77e55111e68 100644 --- a/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/use-tuple-literal.stderr +++ b/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/use-tuple-literal.stderr @@ -1,26 +1,3 @@ -error[expander::unresolved-variable]: Unresolved variable - ╭▸ -8 │ "x" - │ ━ cannot find `x` in this scope - │ - ╰ note: this could be a typo, a name used outside its scope, or a missing declaration; if it is a function or type from another module, you may need to import it first -help: a similar imported name exists - ╭╴ -8 - "x" -8 + "~" - ├╴ -8 - "x" -8 + "↑" - ├╴ -8 - "x" -8 + "√" - ├╴ -8 - "x" -8 + "∛" - ├╴ -8 │ "index" - ╰╴ ++++ - error[expander::invalid-use-import-binding]: Invalid use import binding ╭▸ 6 │ { "#tuple": [{ "#literal": 1 }] }, diff --git a/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/use-tuple-path.stderr b/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/use-tuple-path.stderr index 0565d98ec15..0b9e0e199bb 100644 --- a/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/use-tuple-path.stderr +++ b/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/use-tuple-path.stderr @@ -1,26 +1,3 @@ -error[expander::unresolved-variable]: Unresolved variable - ╭▸ -8 │ "x" - │ ━ cannot find `x` in this scope - │ - ╰ note: this could be a typo, a name used outside its scope, or a missing declaration; if it is a function or type from another module, you may need to import it first -help: a similar imported name exists - ╭╴ -8 - "x" -8 + "~" - ├╴ -8 - "x" -8 + "↑" - ├╴ -8 - "x" -8 + "√" - ├╴ -8 - "x" -8 + "∛" - ├╴ -8 │ "index" - ╰╴ ++++ - error[expander::invalid-use-import-binding]: Invalid use import binding ╭▸ 6 │ { "#tuple": ["::core::math::sub"] }, diff --git a/libs/@local/hashql/ast/tests/ui/lower/sanitizer/constraint.stderr b/libs/@local/hashql/ast/tests/ui/lower/sanitizer/constraint.stderr index adf1ca19e79..073a65a03db 100644 --- a/libs/@local/hashql/ast/tests/ui/lower/sanitizer/constraint.stderr +++ b/libs/@local/hashql/ast/tests/ui/lower/sanitizer/constraint.stderr @@ -1,11 +1,6 @@ -error[expander::unresolved-variable]: Unresolved variable +error[expander::intrinsic-generic-arguments]: Generic arguments on intrinsic ╭▸ -4 │ "add", - │ ━━━ cannot find `add` in this scope - │ - ├ help: bring it into scope: `use ::core::math::add in` - ╰ note: this could be a typo, a name used outside its scope, or a missing declaration; if it is a function or type from another module, you may need to import it first -help: use one of these fully qualified paths - ╭╴ 4 │ "::core::math::add", - ╰╴ ++++++++++++++ \ No newline at end of file + │ ━━━━━━━━━━━━━━ `add` does not accept generic arguments + │ + ╰ help: remove the generic arguments from `add` \ No newline at end of file diff --git a/libs/@local/hashql/hir/tests/ui/lower/alias-replacement/generic-reassignment.stderr b/libs/@local/hashql/hir/tests/ui/lower/alias-replacement/generic-reassignment.stderr index 03af01f21d1..ff0a6486000 100644 --- a/libs/@local/hashql/hir/tests/ui/lower/alias-replacement/generic-reassignment.stderr +++ b/libs/@local/hashql/hir/tests/ui/lower/alias-replacement/generic-reassignment.stderr @@ -1,6 +1,6 @@ error[lowering::expander::intrinsic-generic-arguments]: Generic arguments on intrinsic ╭▸ -10 │ "foo", +11 │ "foo", │ ━━━━━━━━━━━ `foo` does not accept generic arguments │ ╰ help: remove the generic arguments from `foo` From 915e4eb526b48ccd918576a78867916f8b9cc199 Mon Sep 17 00:00:00 2001 From: Bilal Mahmoud <7252775+indietyp@users.noreply.github.com> Date: Mon, 15 Jun 2026 16:22:18 +0200 Subject: [PATCH 36/55] feat: checkpoint --- .../generic-argument-use-path.jsonc | 2 +- .../absolute-path.jsonc | 2 +- .../absolute-path.stdout | 24 +- .../alias-symbol.jsonc | 2 +- .../alias-symbol.stdout | 56 +- .../invalid-let-expr.jsonc | 2 +- .../let-3-alias.jsonc | 2 +- .../let-3-alias.stdout | 56 +- .../pre-expansion-name-resolver/let-3.jsonc | 2 +- .../pre-expansion-name-resolver/let-3.stdout | 68 +- .../let-4-alias.jsonc | 2 +- .../pre-expansion-name-resolver/let-4.jsonc | 2 +- .../pre-expansion-name-resolver/let-4.stdout | 79 +- .../let-absolute.jsonc | 2 +- .../let-absolute.stdout | 47 +- .../let-ident-generic.jsonc | 2 +- .../nested-let.jsonc | 8 +- .../nested-let.stdout | 109 +- .../newtype-3.jsonc | 2 +- .../newtype-3.stdout | 69 +- .../re-assign-prelude.jsonc | 2 +- .../re-assign-prelude.stdout | 80 +- .../resolve-symbol.jsonc | 2 +- .../resolve-symbol.stdout | 20 +- .../restoration-bindings.jsonc | 14 +- .../restoration-bindings.stdout | 112 +- .../type-3-alias.jsonc | 2 +- .../type-3-alias.stdout | 65 +- .../pre-expansion-name-resolver/type-4.jsonc | 2 +- ...access-field-literal-type-annotation.jsonc | 1 - ...ccess-field-literal-type-annotation.stderr | 2 +- .../access-field-literal-valid.jsonc | 8 +- .../expander/special-form-expander/as-2.jsonc | 2 +- .../special-form-expander/as-2.stdout | 6 +- .../expander/special-form-expander/fn-4.jsonc | 2 +- .../special-form-expander/fn-4.stdout | 50 +- .../fn-generics-struct-underscore.jsonc | 2 +- .../fn-generics-struct-underscore.stdout | 28 +- .../fn-generics-struct.jsonc | 4 +- .../fn-generics-struct.stdout | 34 +- .../fn-generics-tuple.jsonc | 2 +- .../fn-generics-tuple.stdout | 28 +- .../special-form-expander/input-2.jsonc | 2 +- .../special-form-expander/input-2.stdout | 6 +- .../special-form-expander/input-3.jsonc | 2 +- .../special-form-expander/input-3.stdout | 19 +- .../let-collect-all-errors.jsonc | 6 +- .../let-collect-all-errors.stderr | 34 +- .../special-form-expander/type-3.jsonc | 2 +- .../special-form-expander/type-3.stdout | 17 +- .../type-collect-all-errors.jsonc | 1 - .../type-expr-call-intersection.jsonc | 8 +- .../type-expr-call-not-path.jsonc | 2 +- .../type-expr-call-not-path.stderr | 2 +- .../type-expr-call-union.jsonc | 8 +- .../type-expr-invalid.jsonc | 4 +- .../type-expr-invalid.stderr | 80 +- .../type-expr-struct.jsonc | 2 +- .../type-expr-struct.stdout | 16 +- .../type-expr-tuple.jsonc | 2 +- .../type-expr-tuple.stdout | 16 +- .../type-generic-constraint.jsonc | 2 +- .../type-generic-constraint.stdout | 10 +- .../special-form-expander/type-infer.jsonc | 2 +- .../special-form-expander/type-infer.stdout | 13 +- .../special-form-expander/type-never.jsonc | 2 +- .../special-form-expander/type-never.stdout | 21 +- .../special-form-expander/type-unknown.jsonc | 2 +- .../special-form-expander/type-unknown.stdout | 20 +- .../special-form-expander/use-3.jsonc | 7 +- .../special-form-expander/use-glob.jsonc | 2 +- .../special-form-expander/use-glob.stdout | 16 +- .../use-struct-literal.jsonc | 2 +- .../use-struct-literal.stderr | 30 +- .../use-struct-type.jsonc | 2 +- .../use-struct-type.stderr | 26 - .../special-form-expander/use-struct.jsonc | 4 +- .../use-tuple-type.jsonc | 2 +- .../use-tuple-type.stderr | 30 +- .../special-form-expander/use-tuple.jsonc | 7 +- .../special-form-expander/use-tuple.stdout | 17 +- .../ui/lower/name-mangler/diverging.jsonc | 2 +- .../ui/lower/name-mangler/diverging.stdout | 21 +- .../tests/ui/lower/name-mangler/fn-args.jsonc | 2 +- .../ui/lower/name-mangler/fn-args.stdout | 35 +- .../ui/lower/name-mangler/fn-types.jsonc | 2 +- .../ui/lower/name-mangler/fn-types.stdout | 35 +- .../tests/ui/lower/name-mangler/onion.jsonc | 10 +- .../lower/name-mangler/path-arguments.jsonc | 2 +- .../tests/ui/lower/name-mangler/path.jsonc | 2 +- .../tests/ui/lower/name-mangler/type.jsonc | 2 +- .../tests/ui/lower/name-mangler/type.stdout | 29 +- .../tests/ui/lower/sanitizer/constraint.jsonc | 4 +- .../ui/lower/sanitizer/constraint.stderr | 6 +- .../lower/sanitizer/special-form-value.jsonc | 4 +- .../lower/sanitizer/special-form-value.stderr | 36 +- .../@local/hashql/compiletest/test-report.txt | 5175 ++++++----------- .../ui/lower/alias-replacement/generics.jsonc | 2 +- .../ui/lower/checking/bind-arguments.jsonc | 2 +- .../ui/lower/inference/bind-arguments.jsonc | 2 +- .../ui/lower/inference/infer-argument.jsonc | 20 +- .../collect-custom-collect.stderr | 37 +- .../tests/ui/reify/variable-generics.jsonc | 2 +- 103 files changed, 2354 insertions(+), 4530 deletions(-) diff --git a/libs/@local/hashql/ast/tests/ui/lower/expander/import-resolver/generic-argument-use-path.jsonc b/libs/@local/hashql/ast/tests/ui/lower/expander/import-resolver/generic-argument-use-path.jsonc index 392c0a89c47..7994f3a5442 100644 --- a/libs/@local/hashql/ast/tests/ui/lower/expander/import-resolver/generic-argument-use-path.jsonc +++ b/libs/@local/hashql/ast/tests/ui/lower/expander/import-resolver/generic-argument-use-path.jsonc @@ -1,4 +1,4 @@ //@ run: fail //@ description: Tests that generic arguments in 'use' statements are rejected with appropriate error ["use", "kernel::type", { "#tuple": ["T"] }, "_"] -//~^ ERROR generic arguments are not allowed in `use` paths +//~^ ERROR cannot find `T` in module `kernel::type` diff --git a/libs/@local/hashql/ast/tests/ui/lower/expander/pre-expansion-name-resolver/absolute-path.jsonc b/libs/@local/hashql/ast/tests/ui/lower/expander/pre-expansion-name-resolver/absolute-path.jsonc index 98df100866f..067e36bbd13 100644 --- a/libs/@local/hashql/ast/tests/ui/lower/expander/pre-expansion-name-resolver/absolute-path.jsonc +++ b/libs/@local/hashql/ast/tests/ui/lower/expander/pre-expansion-name-resolver/absolute-path.jsonc @@ -1,3 +1,3 @@ //@ run: pass //@ description: test that `let` does not leak out of scope -["::+", { "#literal": 3 }, { "#literal": 4 }] +["::core::math::add", { "#literal": 3 }, { "#literal": 4 }] diff --git a/libs/@local/hashql/ast/tests/ui/lower/expander/pre-expansion-name-resolver/absolute-path.stdout b/libs/@local/hashql/ast/tests/ui/lower/expander/pre-expansion-name-resolver/absolute-path.stdout index 545460704e6..3d7d0fa8d95 100644 --- a/libs/@local/hashql/ast/tests/ui/lower/expander/pre-expansion-name-resolver/absolute-path.stdout +++ b/libs/@local/hashql/ast/tests/ui/lower/expander/pre-expansion-name-resolver/absolute-path.stdout @@ -1,19 +1,21 @@ -Expr#4294967040@8 +Expr#4294967040@12 ExprKind (Call) - CallExpr#4294967040@8 - Expr#4294967040@3 + CallExpr#4294967040@12 + Expr#4294967040@7 ExprKind (Path) - Path#4294967040@3 (rooted: true) - PathSegment#4294967040@2 (name: +) - Argument#4294967040@5 - Expr#4294967040@5 + Path#4294967040@7 (rooted: true) + PathSegment#4294967040@2 (name: core) + PathSegment#4294967040@4 (name: math) + PathSegment#4294967040@6 (name: add) + Argument#4294967040@9 + Expr#4294967040@9 ExprKind (Literal) - LiteralExpr#4294967040@4 + LiteralExpr#4294967040@8 Primitive (Integer) Integer (3) - Argument#4294967040@7 - Expr#4294967040@7 + Argument#4294967040@11 + Expr#4294967040@11 ExprKind (Literal) - LiteralExpr#4294967040@6 + LiteralExpr#4294967040@10 Primitive (Integer) Integer (4) diff --git a/libs/@local/hashql/ast/tests/ui/lower/expander/pre-expansion-name-resolver/alias-symbol.jsonc b/libs/@local/hashql/ast/tests/ui/lower/expander/pre-expansion-name-resolver/alias-symbol.jsonc index 31959b5ee3e..ba9cc5d88a5 100644 --- a/libs/@local/hashql/ast/tests/ui/lower/expander/pre-expansion-name-resolver/alias-symbol.jsonc +++ b/libs/@local/hashql/ast/tests/ui/lower/expander/pre-expansion-name-resolver/alias-symbol.jsonc @@ -2,5 +2,5 @@ //@ description: Should be able to alias to a symbol and from a symbol // prettier-ignore ["let", "!&&", "&&", - ["!&&", "a", "b"] + ["!&&", {"#literal": true}, {"#literal": false}] ] diff --git a/libs/@local/hashql/ast/tests/ui/lower/expander/pre-expansion-name-resolver/alias-symbol.stdout b/libs/@local/hashql/ast/tests/ui/lower/expander/pre-expansion-name-resolver/alias-symbol.stdout index 2ffabb4fe02..7eb35477b2c 100644 --- a/libs/@local/hashql/ast/tests/ui/lower/expander/pre-expansion-name-resolver/alias-symbol.stdout +++ b/libs/@local/hashql/ast/tests/ui/lower/expander/pre-expansion-name-resolver/alias-symbol.stdout @@ -1,41 +1,19 @@ -Expr#4294967040@25 +Expr#4294967040@20 ExprKind (Call) - CallExpr#4294967040@25 - Expr#4294967040@3 + CallExpr#4294967040@20 + Expr#4294967040@15 ExprKind (Path) - Path#4294967040@3 (rooted: true) - PathSegment#4294967040@2 (name: kernel) - PathSegment#4294967040@2 (name: special_form) - PathSegment#4294967040@2 (name: let) - Argument#4294967040@7 - Expr#4294967040@7 - ExprKind (Path) - Path#4294967040@7 (rooted: false) - PathSegment#4294967040@6 (name: !&&) - Argument#4294967040@11 - Expr#4294967040@11 - ExprKind (Path) - Path#4294967040@11 (rooted: true) - PathSegment#4294967040@10 (name: core) - PathSegment#4294967040@10 (name: bool) - PathSegment#4294967040@10 (name: and) - Argument#4294967040@24 - Expr#4294967040@24 - ExprKind (Call) - CallExpr#4294967040@24 - Expr#4294967040@15 - ExprKind (Path) - Path#4294967040@15 (rooted: true) - PathSegment#4294967040@14 (name: core) - PathSegment#4294967040@14 (name: bool) - PathSegment#4294967040@14 (name: and) - Argument#4294967040@19 - Expr#4294967040@19 - ExprKind (Path) - Path#4294967040@19 (rooted: false) - PathSegment#4294967040@18 (name: a) - Argument#4294967040@23 - Expr#4294967040@23 - ExprKind (Path) - Path#4294967040@23 (rooted: false) - PathSegment#4294967040@22 (name: b) + Path#4294967040@15 (rooted: true) + PathSegment#4294967040@14 (name: core) + PathSegment#4294967040@14 (name: bool) + PathSegment#4294967040@14 (name: and) + Argument#4294967040@17 + Expr#4294967040@17 + ExprKind (Literal) + LiteralExpr#4294967040@16 + Primitive (True) + Argument#4294967040@19 + Expr#4294967040@19 + ExprKind (Literal) + LiteralExpr#4294967040@18 + Primitive (False) diff --git a/libs/@local/hashql/ast/tests/ui/lower/expander/pre-expansion-name-resolver/invalid-let-expr.jsonc b/libs/@local/hashql/ast/tests/ui/lower/expander/pre-expansion-name-resolver/invalid-let-expr.jsonc index 19bfcb831df..60e8bcca587 100644 --- a/libs/@local/hashql/ast/tests/ui/lower/expander/pre-expansion-name-resolver/invalid-let-expr.jsonc +++ b/libs/@local/hashql/ast/tests/ui/lower/expander/pre-expansion-name-resolver/invalid-let-expr.jsonc @@ -1,3 +1,3 @@ //@ run: pass //@ description: Test let expression with non-path target is not treated specially -["let", ["+", "a", "b"], "c", "body"] +["let", ["+", {"#literal": 1}, {"#literal": 2}], {"#literal": 3}, {"#literal": 4}] diff --git a/libs/@local/hashql/ast/tests/ui/lower/expander/pre-expansion-name-resolver/let-3-alias.jsonc b/libs/@local/hashql/ast/tests/ui/lower/expander/pre-expansion-name-resolver/let-3-alias.jsonc index d75ffe3c11c..b96c57e2c48 100644 --- a/libs/@local/hashql/ast/tests/ui/lower/expander/pre-expansion-name-resolver/let-3-alias.jsonc +++ b/libs/@local/hashql/ast/tests/ui/lower/expander/pre-expansion-name-resolver/let-3-alias.jsonc @@ -1,3 +1,3 @@ //@ run: pass //@ description: if given that `a = b`, then `a` should be replaced with `b` in the body -["let", "a", "b", ["a", "x", "x"]] +["let", "b", {"#literal": 0}, ["let", "a", "b", "a"]] diff --git a/libs/@local/hashql/ast/tests/ui/lower/expander/pre-expansion-name-resolver/let-3-alias.stdout b/libs/@local/hashql/ast/tests/ui/lower/expander/pre-expansion-name-resolver/let-3-alias.stdout index 141768f4636..b5a357edeb3 100644 --- a/libs/@local/hashql/ast/tests/ui/lower/expander/pre-expansion-name-resolver/let-3-alias.stdout +++ b/libs/@local/hashql/ast/tests/ui/lower/expander/pre-expansion-name-resolver/let-3-alias.stdout @@ -1,37 +1,19 @@ -Expr#4294967040@25 - ExprKind (Call) - CallExpr#4294967040@25 - Expr#4294967040@3 - ExprKind (Path) - Path#4294967040@3 (rooted: true) - PathSegment#4294967040@2 (name: kernel) - PathSegment#4294967040@2 (name: special_form) - PathSegment#4294967040@2 (name: let) - Argument#4294967040@7 - Expr#4294967040@7 - ExprKind (Path) - Path#4294967040@7 (rooted: false) - PathSegment#4294967040@6 (name: a) - Argument#4294967040@11 - Expr#4294967040@11 - ExprKind (Path) - Path#4294967040@11 (rooted: false) - PathSegment#4294967040@10 (name: b) - Argument#4294967040@24 - Expr#4294967040@24 - ExprKind (Call) - CallExpr#4294967040@24 - Expr#4294967040@15 - ExprKind (Path) - Path#4294967040@15 (rooted: false) - PathSegment#4294967040@14 (name: b) - Argument#4294967040@19 - Expr#4294967040@19 - ExprKind (Path) - Path#4294967040@19 (rooted: false) - PathSegment#4294967040@18 (name: x) - Argument#4294967040@23 - Expr#4294967040@23 - ExprKind (Path) - Path#4294967040@23 (rooted: false) - PathSegment#4294967040@22 (name: x) +Expr#4294967040@27 + ExprKind (Let) + LetExpr#4294967040@27 (name: b) + Expr#4294967040@9 + ExprKind (Literal) + LiteralExpr#4294967040@8 + Primitive (Integer) + Integer (0) + Expr#4294967040@26 + ExprKind (Let) + LetExpr#4294967040@26 (name: a) + Expr#4294967040@21 + ExprKind (Path) + Path#4294967040@21 (rooted: false) + PathSegment#4294967040@20 (name: b) + Expr#4294967040@25 + ExprKind (Path) + Path#4294967040@25 (rooted: false) + PathSegment#4294967040@24 (name: a) diff --git a/libs/@local/hashql/ast/tests/ui/lower/expander/pre-expansion-name-resolver/let-3.jsonc b/libs/@local/hashql/ast/tests/ui/lower/expander/pre-expansion-name-resolver/let-3.jsonc index 51dc74b2e6b..40ae9e7d119 100644 --- a/libs/@local/hashql/ast/tests/ui/lower/expander/pre-expansion-name-resolver/let-3.jsonc +++ b/libs/@local/hashql/ast/tests/ui/lower/expander/pre-expansion-name-resolver/let-3.jsonc @@ -1,3 +1,3 @@ //@ run: pass //@ description: Test that `let/3` is resolved to `::kernel::special_form::let` -["let", "a", "b", ["+", { "#literal": 2 }, { "#literal": 3 }]] +["let", "a", { "#literal": 1 }, ["+", { "#literal": 2 }, { "#literal": 3 }]] diff --git a/libs/@local/hashql/ast/tests/ui/lower/expander/pre-expansion-name-resolver/let-3.stdout b/libs/@local/hashql/ast/tests/ui/lower/expander/pre-expansion-name-resolver/let-3.stdout index 28e7e58fe3d..a1648a61598 100644 --- a/libs/@local/hashql/ast/tests/ui/lower/expander/pre-expansion-name-resolver/let-3.stdout +++ b/libs/@local/hashql/ast/tests/ui/lower/expander/pre-expansion-name-resolver/let-3.stdout @@ -1,41 +1,29 @@ -Expr#4294967040@21 - ExprKind (Call) - CallExpr#4294967040@21 - Expr#4294967040@3 - ExprKind (Path) - Path#4294967040@3 (rooted: true) - PathSegment#4294967040@2 (name: kernel) - PathSegment#4294967040@2 (name: special_form) - PathSegment#4294967040@2 (name: let) - Argument#4294967040@7 - Expr#4294967040@7 - ExprKind (Path) - Path#4294967040@7 (rooted: false) - PathSegment#4294967040@6 (name: a) - Argument#4294967040@11 - Expr#4294967040@11 - ExprKind (Path) - Path#4294967040@11 (rooted: false) - PathSegment#4294967040@10 (name: b) - Argument#4294967040@20 - Expr#4294967040@20 - ExprKind (Call) - CallExpr#4294967040@20 +Expr#4294967040@19 + ExprKind (Let) + LetExpr#4294967040@19 (name: a) + Expr#4294967040@9 + ExprKind (Literal) + LiteralExpr#4294967040@8 + Primitive (Integer) + Integer (1) + Expr#4294967040@18 + ExprKind (Call) + CallExpr#4294967040@18 + Expr#4294967040@13 + ExprKind (Path) + Path#4294967040@13 (rooted: true) + PathSegment#4294967040@12 (name: core) + PathSegment#4294967040@12 (name: math) + PathSegment#4294967040@12 (name: add) + Argument#4294967040@15 Expr#4294967040@15 - ExprKind (Path) - Path#4294967040@15 (rooted: true) - PathSegment#4294967040@14 (name: core) - PathSegment#4294967040@14 (name: math) - PathSegment#4294967040@14 (name: add) - Argument#4294967040@17 - Expr#4294967040@17 - ExprKind (Literal) - LiteralExpr#4294967040@16 - Primitive (Integer) - Integer (2) - Argument#4294967040@19 - Expr#4294967040@19 - ExprKind (Literal) - LiteralExpr#4294967040@18 - Primitive (Integer) - Integer (3) + ExprKind (Literal) + LiteralExpr#4294967040@14 + Primitive (Integer) + Integer (2) + Argument#4294967040@17 + Expr#4294967040@17 + ExprKind (Literal) + LiteralExpr#4294967040@16 + Primitive (Integer) + Integer (3) diff --git a/libs/@local/hashql/ast/tests/ui/lower/expander/pre-expansion-name-resolver/let-4-alias.jsonc b/libs/@local/hashql/ast/tests/ui/lower/expander/pre-expansion-name-resolver/let-4-alias.jsonc index 8f85f296dda..f5483a565b4 100644 --- a/libs/@local/hashql/ast/tests/ui/lower/expander/pre-expansion-name-resolver/let-4-alias.jsonc +++ b/libs/@local/hashql/ast/tests/ui/lower/expander/pre-expansion-name-resolver/let-4-alias.jsonc @@ -1,3 +1,3 @@ //@ run: pass //@ description: if given that `a = b`, then `a` should be replaced with `b` in the body -["let", "a", "Int", "b", ["a", "x", "x"]] +["let", "a", "Integer", "b", ["a", "x", "x"]] diff --git a/libs/@local/hashql/ast/tests/ui/lower/expander/pre-expansion-name-resolver/let-4.jsonc b/libs/@local/hashql/ast/tests/ui/lower/expander/pre-expansion-name-resolver/let-4.jsonc index c8e03a72e71..048cc2c21c6 100644 --- a/libs/@local/hashql/ast/tests/ui/lower/expander/pre-expansion-name-resolver/let-4.jsonc +++ b/libs/@local/hashql/ast/tests/ui/lower/expander/pre-expansion-name-resolver/let-4.jsonc @@ -1,3 +1,3 @@ //@ run: pass //@ description: Test that `let/4` is resolved to `::kernel::special_form::let` -["let", "a", "Int", "b", ["+", { "#literal": 2 }, { "#literal": 3 }]] +["let", "a", "Integer", { "#literal": 0 }, ["+", { "#literal": 2 }, { "#literal": 3 }]] diff --git a/libs/@local/hashql/ast/tests/ui/lower/expander/pre-expansion-name-resolver/let-4.stdout b/libs/@local/hashql/ast/tests/ui/lower/expander/pre-expansion-name-resolver/let-4.stdout index a711ce7f1c5..8714b9e097a 100644 --- a/libs/@local/hashql/ast/tests/ui/lower/expander/pre-expansion-name-resolver/let-4.stdout +++ b/libs/@local/hashql/ast/tests/ui/lower/expander/pre-expansion-name-resolver/let-4.stdout @@ -1,46 +1,35 @@ -Expr#4294967040@25 - ExprKind (Call) - CallExpr#4294967040@25 - Expr#4294967040@3 - ExprKind (Path) - Path#4294967040@3 (rooted: true) - PathSegment#4294967040@2 (name: kernel) - PathSegment#4294967040@2 (name: special_form) - PathSegment#4294967040@2 (name: let) - Argument#4294967040@7 - Expr#4294967040@7 - ExprKind (Path) - Path#4294967040@7 (rooted: false) - PathSegment#4294967040@6 (name: a) - Argument#4294967040@11 - Expr#4294967040@11 - ExprKind (Path) - Path#4294967040@11 (rooted: false) - PathSegment#4294967040@10 (name: Int) - Argument#4294967040@15 - Expr#4294967040@15 - ExprKind (Path) - Path#4294967040@15 (rooted: false) - PathSegment#4294967040@14 (name: b) - Argument#4294967040@24 - Expr#4294967040@24 - ExprKind (Call) - CallExpr#4294967040@24 +Expr#4294967040@23 + ExprKind (Let) + LetExpr#4294967040@23 (name: a) + Expr#4294967040@13 + ExprKind (Literal) + LiteralExpr#4294967040@12 + Primitive (Integer) + Integer (0) + Type#4294967040@11 + TypeKind (Path) + Path#4294967040@11 (rooted: true) + PathSegment#4294967040@10 (name: kernel) + PathSegment#4294967040@10 (name: type) + PathSegment#4294967040@10 (name: Integer) + Expr#4294967040@22 + ExprKind (Call) + CallExpr#4294967040@22 + Expr#4294967040@17 + ExprKind (Path) + Path#4294967040@17 (rooted: true) + PathSegment#4294967040@16 (name: core) + PathSegment#4294967040@16 (name: math) + PathSegment#4294967040@16 (name: add) + Argument#4294967040@19 Expr#4294967040@19 - ExprKind (Path) - Path#4294967040@19 (rooted: true) - PathSegment#4294967040@18 (name: core) - PathSegment#4294967040@18 (name: math) - PathSegment#4294967040@18 (name: add) - Argument#4294967040@21 - Expr#4294967040@21 - ExprKind (Literal) - LiteralExpr#4294967040@20 - Primitive (Integer) - Integer (2) - Argument#4294967040@23 - Expr#4294967040@23 - ExprKind (Literal) - LiteralExpr#4294967040@22 - Primitive (Integer) - Integer (3) + ExprKind (Literal) + LiteralExpr#4294967040@18 + Primitive (Integer) + Integer (2) + Argument#4294967040@21 + Expr#4294967040@21 + ExprKind (Literal) + LiteralExpr#4294967040@20 + Primitive (Integer) + Integer (3) diff --git a/libs/@local/hashql/ast/tests/ui/lower/expander/pre-expansion-name-resolver/let-absolute.jsonc b/libs/@local/hashql/ast/tests/ui/lower/expander/pre-expansion-name-resolver/let-absolute.jsonc index 0aeacf7011c..6b34ea7468a 100644 --- a/libs/@local/hashql/ast/tests/ui/lower/expander/pre-expansion-name-resolver/let-absolute.jsonc +++ b/libs/@local/hashql/ast/tests/ui/lower/expander/pre-expansion-name-resolver/let-absolute.jsonc @@ -1,3 +1,3 @@ //@ run: pass //@ description: let without expansion in it's already defined form should do replacement -["::kernel::special_form::let", "a", "b", ["a", "x", "x"]] +["::kernel::special_form::let", "a", {"#literal": 1}, "a"] diff --git a/libs/@local/hashql/ast/tests/ui/lower/expander/pre-expansion-name-resolver/let-absolute.stdout b/libs/@local/hashql/ast/tests/ui/lower/expander/pre-expansion-name-resolver/let-absolute.stdout index fb06af2297e..30698b48caf 100644 --- a/libs/@local/hashql/ast/tests/ui/lower/expander/pre-expansion-name-resolver/let-absolute.stdout +++ b/libs/@local/hashql/ast/tests/ui/lower/expander/pre-expansion-name-resolver/let-absolute.stdout @@ -1,37 +1,12 @@ -Expr#4294967040@29 - ExprKind (Call) - CallExpr#4294967040@29 - Expr#4294967040@7 +Expr#4294967040@18 + ExprKind (Let) + LetExpr#4294967040@18 (name: a) + Expr#4294967040@13 + ExprKind (Literal) + LiteralExpr#4294967040@12 + Primitive (Integer) + Integer (1) + Expr#4294967040@17 ExprKind (Path) - Path#4294967040@7 (rooted: true) - PathSegment#4294967040@2 (name: kernel) - PathSegment#4294967040@4 (name: special_form) - PathSegment#4294967040@6 (name: let) - Argument#4294967040@11 - Expr#4294967040@11 - ExprKind (Path) - Path#4294967040@11 (rooted: false) - PathSegment#4294967040@10 (name: a) - Argument#4294967040@15 - Expr#4294967040@15 - ExprKind (Path) - Path#4294967040@15 (rooted: false) - PathSegment#4294967040@14 (name: b) - Argument#4294967040@28 - Expr#4294967040@28 - ExprKind (Call) - CallExpr#4294967040@28 - Expr#4294967040@19 - ExprKind (Path) - Path#4294967040@19 (rooted: false) - PathSegment#4294967040@18 (name: b) - Argument#4294967040@23 - Expr#4294967040@23 - ExprKind (Path) - Path#4294967040@23 (rooted: false) - PathSegment#4294967040@22 (name: x) - Argument#4294967040@27 - Expr#4294967040@27 - ExprKind (Path) - Path#4294967040@27 (rooted: false) - PathSegment#4294967040@26 (name: x) + Path#4294967040@17 (rooted: false) + PathSegment#4294967040@16 (name: a) diff --git a/libs/@local/hashql/ast/tests/ui/lower/expander/pre-expansion-name-resolver/let-ident-generic.jsonc b/libs/@local/hashql/ast/tests/ui/lower/expander/pre-expansion-name-resolver/let-ident-generic.jsonc index 10ec4818b0a..fb10655f6df 100644 --- a/libs/@local/hashql/ast/tests/ui/lower/expander/pre-expansion-name-resolver/let-ident-generic.jsonc +++ b/libs/@local/hashql/ast/tests/ui/lower/expander/pre-expansion-name-resolver/let-ident-generic.jsonc @@ -1,3 +1,3 @@ //@ run: pass //@ description: if the first argument cannot be interpreted as an ident, do nothing -["let", "a", "b", ["+", "a", "c"]] +["let", "a", {"#literal": 0}, {"#literal": 0}] diff --git a/libs/@local/hashql/ast/tests/ui/lower/expander/pre-expansion-name-resolver/nested-let.jsonc b/libs/@local/hashql/ast/tests/ui/lower/expander/pre-expansion-name-resolver/nested-let.jsonc index d5be628419a..9acb0b84613 100644 --- a/libs/@local/hashql/ast/tests/ui/lower/expander/pre-expansion-name-resolver/nested-let.jsonc +++ b/libs/@local/hashql/ast/tests/ui/lower/expander/pre-expansion-name-resolver/nested-let.jsonc @@ -1,8 +1,8 @@ //@ run: pass //@ description: Test nested let expressions with proper scoping // prettier-ignore -["let", "a", "c", -["let", "b", "d", -["let", "a", "e", - ["a", ["b", {"#literal": 2}]] +["let", "a", {"#literal": 1}, +["let", "b", {"#literal": 2}, +["let", "a", {"#literal": 3}, + "a" ]]] diff --git a/libs/@local/hashql/ast/tests/ui/lower/expander/pre-expansion-name-resolver/nested-let.stdout b/libs/@local/hashql/ast/tests/ui/lower/expander/pre-expansion-name-resolver/nested-let.stdout index 4b40c0f6a26..2bdb03c279c 100644 --- a/libs/@local/hashql/ast/tests/ui/lower/expander/pre-expansion-name-resolver/nested-let.stdout +++ b/libs/@local/hashql/ast/tests/ui/lower/expander/pre-expansion-name-resolver/nested-let.stdout @@ -1,81 +1,28 @@ -Expr#4294967040@50 - ExprKind (Call) - CallExpr#4294967040@50 - Expr#4294967040@3 - ExprKind (Path) - Path#4294967040@3 (rooted: true) - PathSegment#4294967040@2 (name: kernel) - PathSegment#4294967040@2 (name: special_form) - PathSegment#4294967040@2 (name: let) - Argument#4294967040@7 - Expr#4294967040@7 - ExprKind (Path) - Path#4294967040@7 (rooted: false) - PathSegment#4294967040@6 (name: a) - Argument#4294967040@11 - Expr#4294967040@11 - ExprKind (Path) - Path#4294967040@11 (rooted: false) - PathSegment#4294967040@10 (name: c) - Argument#4294967040@49 - Expr#4294967040@49 - ExprKind (Call) - CallExpr#4294967040@49 - Expr#4294967040@15 - ExprKind (Path) - Path#4294967040@15 (rooted: true) - PathSegment#4294967040@14 (name: kernel) - PathSegment#4294967040@14 (name: special_form) - PathSegment#4294967040@14 (name: let) - Argument#4294967040@19 - Expr#4294967040@19 - ExprKind (Path) - Path#4294967040@19 (rooted: false) - PathSegment#4294967040@18 (name: b) - Argument#4294967040@23 - Expr#4294967040@23 - ExprKind (Path) - Path#4294967040@23 (rooted: false) - PathSegment#4294967040@22 (name: d) - Argument#4294967040@48 - Expr#4294967040@48 - ExprKind (Call) - CallExpr#4294967040@48 - Expr#4294967040@27 - ExprKind (Path) - Path#4294967040@27 (rooted: true) - PathSegment#4294967040@26 (name: kernel) - PathSegment#4294967040@26 (name: special_form) - PathSegment#4294967040@26 (name: let) - Argument#4294967040@31 - Expr#4294967040@31 - ExprKind (Path) - Path#4294967040@31 (rooted: false) - PathSegment#4294967040@30 (name: a) - Argument#4294967040@35 - Expr#4294967040@35 - ExprKind (Path) - Path#4294967040@35 (rooted: false) - PathSegment#4294967040@34 (name: e) - Argument#4294967040@47 - Expr#4294967040@47 - ExprKind (Call) - CallExpr#4294967040@47 - Expr#4294967040@39 - ExprKind (Path) - Path#4294967040@39 (rooted: false) - PathSegment#4294967040@38 (name: e) - Argument#4294967040@46 - Expr#4294967040@46 - ExprKind (Call) - CallExpr#4294967040@46 - Expr#4294967040@43 - ExprKind (Path) - Path#4294967040@43 (rooted: false) - PathSegment#4294967040@42 (name: d) - Argument#4294967040@45 - Expr#4294967040@45 - ExprKind (Literal) - LiteralExpr#4294967040@44 - Primitive (Integer) - Integer (2) +Expr#4294967040@36 + ExprKind (Let) + LetExpr#4294967040@36 (name: a) + Expr#4294967040@9 + ExprKind (Literal) + LiteralExpr#4294967040@8 + Primitive (Integer) + Integer (1) + Expr#4294967040@35 + ExprKind (Let) + LetExpr#4294967040@35 (name: b) + Expr#4294967040@19 + ExprKind (Literal) + LiteralExpr#4294967040@18 + Primitive (Integer) + Integer (2) + Expr#4294967040@34 + ExprKind (Let) + LetExpr#4294967040@34 (name: a) + Expr#4294967040@29 + ExprKind (Literal) + LiteralExpr#4294967040@28 + Primitive (Integer) + Integer (3) + Expr#4294967040@33 + ExprKind (Path) + Path#4294967040@33 (rooted: false) + PathSegment#4294967040@32 (name: a) diff --git a/libs/@local/hashql/ast/tests/ui/lower/expander/pre-expansion-name-resolver/newtype-3.jsonc b/libs/@local/hashql/ast/tests/ui/lower/expander/pre-expansion-name-resolver/newtype-3.jsonc index 2ba8e66aadf..3b8836029de 100644 --- a/libs/@local/hashql/ast/tests/ui/lower/expander/pre-expansion-name-resolver/newtype-3.jsonc +++ b/libs/@local/hashql/ast/tests/ui/lower/expander/pre-expansion-name-resolver/newtype-3.jsonc @@ -1,3 +1,3 @@ //@ run: pass //@ description: Test that `newtype/3` is resolved to `::kernel::special_form::type` -["newtype", "a", "b", ["+", { "#literal": 2 }, { "#literal": 3 }]] +["newtype", "a", "Integer", ["+", { "#literal": 2 }, { "#literal": 3 }]] diff --git a/libs/@local/hashql/ast/tests/ui/lower/expander/pre-expansion-name-resolver/newtype-3.stdout b/libs/@local/hashql/ast/tests/ui/lower/expander/pre-expansion-name-resolver/newtype-3.stdout index b25c6b7f7cc..3337363df3d 100644 --- a/libs/@local/hashql/ast/tests/ui/lower/expander/pre-expansion-name-resolver/newtype-3.stdout +++ b/libs/@local/hashql/ast/tests/ui/lower/expander/pre-expansion-name-resolver/newtype-3.stdout @@ -1,41 +1,30 @@ Expr#4294967040@21 - ExprKind (Call) - CallExpr#4294967040@21 - Expr#4294967040@3 - ExprKind (Path) - Path#4294967040@3 (rooted: true) - PathSegment#4294967040@2 (name: kernel) - PathSegment#4294967040@2 (name: special_form) - PathSegment#4294967040@2 (name: newtype) - Argument#4294967040@7 - Expr#4294967040@7 - ExprKind (Path) - Path#4294967040@7 (rooted: false) - PathSegment#4294967040@6 (name: a) - Argument#4294967040@11 - Expr#4294967040@11 - ExprKind (Path) - Path#4294967040@11 (rooted: false) - PathSegment#4294967040@10 (name: b) - Argument#4294967040@20 - Expr#4294967040@20 - ExprKind (Call) - CallExpr#4294967040@20 - Expr#4294967040@15 - ExprKind (Path) - Path#4294967040@15 (rooted: true) - PathSegment#4294967040@14 (name: core) - PathSegment#4294967040@14 (name: math) - PathSegment#4294967040@14 (name: add) - Argument#4294967040@17 - Expr#4294967040@17 - ExprKind (Literal) - LiteralExpr#4294967040@16 - Primitive (Integer) - Integer (2) - Argument#4294967040@19 - Expr#4294967040@19 - ExprKind (Literal) - LiteralExpr#4294967040@18 - Primitive (Integer) - Integer (3) + ExprKind (NewType) + NewTypeExpr#4294967040@21 (name: a) + Type#4294967040@11 + TypeKind (Path) + Path#4294967040@11 (rooted: true) + PathSegment#4294967040@10 (name: kernel) + PathSegment#4294967040@10 (name: type) + PathSegment#4294967040@10 (name: Integer) + Expr#4294967040@20 + ExprKind (Call) + CallExpr#4294967040@20 + Expr#4294967040@15 + ExprKind (Path) + Path#4294967040@15 (rooted: true) + PathSegment#4294967040@14 (name: core) + PathSegment#4294967040@14 (name: math) + PathSegment#4294967040@14 (name: add) + Argument#4294967040@17 + Expr#4294967040@17 + ExprKind (Literal) + LiteralExpr#4294967040@16 + Primitive (Integer) + Integer (2) + Argument#4294967040@19 + Expr#4294967040@19 + ExprKind (Literal) + LiteralExpr#4294967040@18 + Primitive (Integer) + Integer (3) diff --git a/libs/@local/hashql/ast/tests/ui/lower/expander/pre-expansion-name-resolver/re-assign-prelude.jsonc b/libs/@local/hashql/ast/tests/ui/lower/expander/pre-expansion-name-resolver/re-assign-prelude.jsonc index 20cb42ec175..99590557412 100644 --- a/libs/@local/hashql/ast/tests/ui/lower/expander/pre-expansion-name-resolver/re-assign-prelude.jsonc +++ b/libs/@local/hashql/ast/tests/ui/lower/expander/pre-expansion-name-resolver/re-assign-prelude.jsonc @@ -1,3 +1,3 @@ //@ run: pass //@ description: This is funky, re-assign `let` to a new value, so that it is no longer resolved -["let", "let", ["+", { "#literal": 1 }, { "#literal": 2 }], ["let", "a", "b"]] +["let", "let", ["+", { "#literal": 1 }, { "#literal": 2 }], "let"] diff --git a/libs/@local/hashql/ast/tests/ui/lower/expander/pre-expansion-name-resolver/re-assign-prelude.stdout b/libs/@local/hashql/ast/tests/ui/lower/expander/pre-expansion-name-resolver/re-assign-prelude.stdout index ba76ffc67ae..6cc6a163c54 100644 --- a/libs/@local/hashql/ast/tests/ui/lower/expander/pre-expansion-name-resolver/re-assign-prelude.stdout +++ b/libs/@local/hashql/ast/tests/ui/lower/expander/pre-expansion-name-resolver/re-assign-prelude.stdout @@ -1,54 +1,28 @@ -Expr#4294967040@30 - ExprKind (Call) - CallExpr#4294967040@30 - Expr#4294967040@3 +Expr#4294967040@21 + ExprKind (Let) + LetExpr#4294967040@21 (name: let) + Expr#4294967040@16 + ExprKind (Call) + CallExpr#4294967040@16 + Expr#4294967040@11 + ExprKind (Path) + Path#4294967040@11 (rooted: true) + PathSegment#4294967040@10 (name: core) + PathSegment#4294967040@10 (name: math) + PathSegment#4294967040@10 (name: add) + Argument#4294967040@13 + Expr#4294967040@13 + ExprKind (Literal) + LiteralExpr#4294967040@12 + Primitive (Integer) + Integer (1) + Argument#4294967040@15 + Expr#4294967040@15 + ExprKind (Literal) + LiteralExpr#4294967040@14 + Primitive (Integer) + Integer (2) + Expr#4294967040@20 ExprKind (Path) - Path#4294967040@3 (rooted: true) - PathSegment#4294967040@2 (name: kernel) - PathSegment#4294967040@2 (name: special_form) - PathSegment#4294967040@2 (name: let) - Argument#4294967040@7 - Expr#4294967040@7 - ExprKind (Path) - Path#4294967040@7 (rooted: false) - PathSegment#4294967040@6 (name: let) - Argument#4294967040@16 - Expr#4294967040@16 - ExprKind (Call) - CallExpr#4294967040@16 - Expr#4294967040@11 - ExprKind (Path) - Path#4294967040@11 (rooted: true) - PathSegment#4294967040@10 (name: core) - PathSegment#4294967040@10 (name: math) - PathSegment#4294967040@10 (name: add) - Argument#4294967040@13 - Expr#4294967040@13 - ExprKind (Literal) - LiteralExpr#4294967040@12 - Primitive (Integer) - Integer (1) - Argument#4294967040@15 - Expr#4294967040@15 - ExprKind (Literal) - LiteralExpr#4294967040@14 - Primitive (Integer) - Integer (2) - Argument#4294967040@29 - Expr#4294967040@29 - ExprKind (Call) - CallExpr#4294967040@29 - Expr#4294967040@20 - ExprKind (Path) - Path#4294967040@20 (rooted: false) - PathSegment#4294967040@19 (name: let) - Argument#4294967040@24 - Expr#4294967040@24 - ExprKind (Path) - Path#4294967040@24 (rooted: false) - PathSegment#4294967040@23 (name: a) - Argument#4294967040@28 - Expr#4294967040@28 - ExprKind (Path) - Path#4294967040@28 (rooted: false) - PathSegment#4294967040@27 (name: b) + Path#4294967040@20 (rooted: false) + PathSegment#4294967040@19 (name: let) diff --git a/libs/@local/hashql/ast/tests/ui/lower/expander/pre-expansion-name-resolver/resolve-symbol.jsonc b/libs/@local/hashql/ast/tests/ui/lower/expander/pre-expansion-name-resolver/resolve-symbol.jsonc index d3ee7b0874c..a4239bd608b 100644 --- a/libs/@local/hashql/ast/tests/ui/lower/expander/pre-expansion-name-resolver/resolve-symbol.jsonc +++ b/libs/@local/hashql/ast/tests/ui/lower/expander/pre-expansion-name-resolver/resolve-symbol.jsonc @@ -1,3 +1,3 @@ //@ run: pass //@ description: Test that symbols are resolved to their corresponding mapping -["&&", "a", "b"] +["&&", {"#literal": true}, {"#literal": false}] diff --git a/libs/@local/hashql/ast/tests/ui/lower/expander/pre-expansion-name-resolver/resolve-symbol.stdout b/libs/@local/hashql/ast/tests/ui/lower/expander/pre-expansion-name-resolver/resolve-symbol.stdout index be4e5ded3ef..f403eb0889b 100644 --- a/libs/@local/hashql/ast/tests/ui/lower/expander/pre-expansion-name-resolver/resolve-symbol.stdout +++ b/libs/@local/hashql/ast/tests/ui/lower/expander/pre-expansion-name-resolver/resolve-symbol.stdout @@ -1,19 +1,19 @@ -Expr#4294967040@12 +Expr#4294967040@8 ExprKind (Call) - CallExpr#4294967040@12 + CallExpr#4294967040@8 Expr#4294967040@3 ExprKind (Path) Path#4294967040@3 (rooted: true) PathSegment#4294967040@2 (name: core) PathSegment#4294967040@2 (name: bool) PathSegment#4294967040@2 (name: and) + Argument#4294967040@5 + Expr#4294967040@5 + ExprKind (Literal) + LiteralExpr#4294967040@4 + Primitive (True) Argument#4294967040@7 Expr#4294967040@7 - ExprKind (Path) - Path#4294967040@7 (rooted: false) - PathSegment#4294967040@6 (name: a) - Argument#4294967040@11 - Expr#4294967040@11 - ExprKind (Path) - Path#4294967040@11 (rooted: false) - PathSegment#4294967040@10 (name: b) + ExprKind (Literal) + LiteralExpr#4294967040@6 + Primitive (False) diff --git a/libs/@local/hashql/ast/tests/ui/lower/expander/pre-expansion-name-resolver/restoration-bindings.jsonc b/libs/@local/hashql/ast/tests/ui/lower/expander/pre-expansion-name-resolver/restoration-bindings.jsonc index 0a7c5d13832..f8631411a08 100644 --- a/libs/@local/hashql/ast/tests/ui/lower/expander/pre-expansion-name-resolver/restoration-bindings.jsonc +++ b/libs/@local/hashql/ast/tests/ui/lower/expander/pre-expansion-name-resolver/restoration-bindings.jsonc @@ -1,9 +1,13 @@ //@ run: pass //@ description: Test bindings are restored after let expressions // prettier-ignore -["if", {"#literal": true}, - ["let", "x", "outer", - ["x", {"#literal": 2}, { "#literal": 1 }] - ], - ["x", { "#literal": 2 }, { "#literal": 1 }] +["let", "outer", {"#literal": 0}, + ["let", "x", {"#literal": 0}, + ["if", {"#literal": true}, + ["let", "x", "outer", + "x" + ], + "x" + ] + ] ] diff --git a/libs/@local/hashql/ast/tests/ui/lower/expander/pre-expansion-name-resolver/restoration-bindings.stdout b/libs/@local/hashql/ast/tests/ui/lower/expander/pre-expansion-name-resolver/restoration-bindings.stdout index 74a7e688cb6..4967a335929 100644 --- a/libs/@local/hashql/ast/tests/ui/lower/expander/pre-expansion-name-resolver/restoration-bindings.stdout +++ b/libs/@local/hashql/ast/tests/ui/lower/expander/pre-expansion-name-resolver/restoration-bindings.stdout @@ -1,74 +1,38 @@ -Expr#4294967040@37 - ExprKind (Call) - CallExpr#4294967040@37 - Expr#4294967040@3 - ExprKind (Path) - Path#4294967040@3 (rooted: true) - PathSegment#4294967040@2 (name: kernel) - PathSegment#4294967040@2 (name: special_form) - PathSegment#4294967040@2 (name: if) - Argument#4294967040@5 - Expr#4294967040@5 - ExprKind (Literal) - LiteralExpr#4294967040@4 - Primitive (True) - Argument#4294967040@27 - Expr#4294967040@27 - ExprKind (Call) - CallExpr#4294967040@27 - Expr#4294967040@9 - ExprKind (Path) - Path#4294967040@9 (rooted: true) - PathSegment#4294967040@8 (name: kernel) - PathSegment#4294967040@8 (name: special_form) - PathSegment#4294967040@8 (name: let) - Argument#4294967040@13 - Expr#4294967040@13 - ExprKind (Path) - Path#4294967040@13 (rooted: false) - PathSegment#4294967040@12 (name: x) - Argument#4294967040@17 - Expr#4294967040@17 - ExprKind (Path) - Path#4294967040@17 (rooted: false) - PathSegment#4294967040@16 (name: outer) - Argument#4294967040@26 - Expr#4294967040@26 - ExprKind (Call) - CallExpr#4294967040@26 - Expr#4294967040@21 - ExprKind (Path) - Path#4294967040@21 (rooted: false) - PathSegment#4294967040@20 (name: outer) - Argument#4294967040@23 - Expr#4294967040@23 - ExprKind (Literal) - LiteralExpr#4294967040@22 - Primitive (Integer) - Integer (2) - Argument#4294967040@25 - Expr#4294967040@25 - ExprKind (Literal) - LiteralExpr#4294967040@24 - Primitive (Integer) - Integer (1) - Argument#4294967040@36 - Expr#4294967040@36 - ExprKind (Call) - CallExpr#4294967040@36 - Expr#4294967040@31 - ExprKind (Path) - Path#4294967040@31 (rooted: false) - PathSegment#4294967040@30 (name: x) - Argument#4294967040@33 - Expr#4294967040@33 - ExprKind (Literal) - LiteralExpr#4294967040@32 - Primitive (Integer) - Integer (2) - Argument#4294967040@35 - Expr#4294967040@35 - ExprKind (Literal) - LiteralExpr#4294967040@34 - Primitive (Integer) - Integer (1) +Expr#4294967040@49 + ExprKind (Let) + LetExpr#4294967040@49 (name: outer) + Expr#4294967040@9 + ExprKind (Literal) + LiteralExpr#4294967040@8 + Primitive (Integer) + Integer (0) + Expr#4294967040@48 + ExprKind (Let) + LetExpr#4294967040@48 (name: x) + Expr#4294967040@19 + ExprKind (Literal) + LiteralExpr#4294967040@18 + Primitive (Integer) + Integer (0) + Expr#4294967040@47 + ExprKind (If) + IfExpr#4294967040@47 + Expr#4294967040@25 + ExprKind (Literal) + LiteralExpr#4294967040@24 + Primitive (True) + Expr#4294967040@42 + ExprKind (Let) + LetExpr#4294967040@42 (name: x) + Expr#4294967040@37 + ExprKind (Path) + Path#4294967040@37 (rooted: false) + PathSegment#4294967040@36 (name: outer) + Expr#4294967040@41 + ExprKind (Path) + Path#4294967040@41 (rooted: false) + PathSegment#4294967040@40 (name: x) + Expr#4294967040@46 + ExprKind (Path) + Path#4294967040@46 (rooted: false) + PathSegment#4294967040@45 (name: x) diff --git a/libs/@local/hashql/ast/tests/ui/lower/expander/pre-expansion-name-resolver/type-3-alias.jsonc b/libs/@local/hashql/ast/tests/ui/lower/expander/pre-expansion-name-resolver/type-3-alias.jsonc index e5c9cc86f7e..bab4aa0f4b3 100644 --- a/libs/@local/hashql/ast/tests/ui/lower/expander/pre-expansion-name-resolver/type-3-alias.jsonc +++ b/libs/@local/hashql/ast/tests/ui/lower/expander/pre-expansion-name-resolver/type-3-alias.jsonc @@ -1,3 +1,3 @@ //@ run: pass //@ description: if given that `a = b`, then `a` should be replaced with `b` in the body -["type", "a", "b", ["a", "x", "x"]] +["type", "b", "Integer", ["type", "a", "b", ["as", {"#literal": 0}, "a"]]] diff --git a/libs/@local/hashql/ast/tests/ui/lower/expander/pre-expansion-name-resolver/type-3-alias.stdout b/libs/@local/hashql/ast/tests/ui/lower/expander/pre-expansion-name-resolver/type-3-alias.stdout index 338df7a6901..7971dcf25cc 100644 --- a/libs/@local/hashql/ast/tests/ui/lower/expander/pre-expansion-name-resolver/type-3-alias.stdout +++ b/libs/@local/hashql/ast/tests/ui/lower/expander/pre-expansion-name-resolver/type-3-alias.stdout @@ -1,37 +1,28 @@ -Expr#4294967040@25 - ExprKind (Call) - CallExpr#4294967040@25 - Expr#4294967040@3 - ExprKind (Path) - Path#4294967040@3 (rooted: true) - PathSegment#4294967040@2 (name: kernel) - PathSegment#4294967040@2 (name: special_form) - PathSegment#4294967040@2 (name: type) - Argument#4294967040@7 - Expr#4294967040@7 - ExprKind (Path) - Path#4294967040@7 (rooted: false) - PathSegment#4294967040@6 (name: a) - Argument#4294967040@11 - Expr#4294967040@11 - ExprKind (Path) - Path#4294967040@11 (rooted: false) - PathSegment#4294967040@10 (name: b) - Argument#4294967040@24 - Expr#4294967040@24 - ExprKind (Call) - CallExpr#4294967040@24 - Expr#4294967040@15 - ExprKind (Path) - Path#4294967040@15 (rooted: false) - PathSegment#4294967040@14 (name: a) - Argument#4294967040@19 - Expr#4294967040@19 - ExprKind (Path) - Path#4294967040@19 (rooted: false) - PathSegment#4294967040@18 (name: x) - Argument#4294967040@23 - Expr#4294967040@23 - ExprKind (Path) - Path#4294967040@23 (rooted: false) - PathSegment#4294967040@22 (name: x) +Expr#4294967040@36 + ExprKind (Type) + TypeExpr#4294967040@36 (name: b) + Type#4294967040@11 + TypeKind (Path) + Path#4294967040@11 (rooted: true) + PathSegment#4294967040@10 (name: kernel) + PathSegment#4294967040@10 (name: type) + PathSegment#4294967040@10 (name: Integer) + Expr#4294967040@35 + ExprKind (Type) + TypeExpr#4294967040@35 (name: a) + Type#4294967040@23 + TypeKind (Path) + Path#4294967040@23 (rooted: false) + PathSegment#4294967040@22 (name: b) + Expr#4294967040@34 + ExprKind (As) + AsExpr#4294967040@34 + Expr#4294967040@29 + ExprKind (Literal) + LiteralExpr#4294967040@28 + Primitive (Integer) + Integer (0) + Type#4294967040@33 + TypeKind (Path) + Path#4294967040@33 (rooted: false) + PathSegment#4294967040@32 (name: a) diff --git a/libs/@local/hashql/ast/tests/ui/lower/expander/pre-expansion-name-resolver/type-4.jsonc b/libs/@local/hashql/ast/tests/ui/lower/expander/pre-expansion-name-resolver/type-4.jsonc index 62ffcdf7927..5587e1470b9 100644 --- a/libs/@local/hashql/ast/tests/ui/lower/expander/pre-expansion-name-resolver/type-4.jsonc +++ b/libs/@local/hashql/ast/tests/ui/lower/expander/pre-expansion-name-resolver/type-4.jsonc @@ -1,3 +1,3 @@ //@ run: pass //@ description: Test that `type/4` is resolved to `::kernel::special_form::type`, but that no aliases are created. -["type", "a", "Int", "b", ["+", "a", "c"]] +["type", "a", "Integer", "b", ["+", "a", "c"]] diff --git a/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/access-field-literal-type-annotation.jsonc b/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/access-field-literal-type-annotation.jsonc index 04ef811188f..017782b5004 100644 --- a/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/access-field-literal-type-annotation.jsonc +++ b/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/access-field-literal-type-annotation.jsonc @@ -7,7 +7,6 @@ [ "::kernel::special_form::access", "tuple", - //~^ ERROR cannot find `tuple` in this scope { "#literal": 0, "#type": "Integer" } //~^ ERROR type annotations are not allowed on field index literals ] diff --git a/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/access-field-literal-type-annotation.stderr b/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/access-field-literal-type-annotation.stderr index d5e6a2c2054..6529c982ec1 100644 --- a/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/access-field-literal-type-annotation.stderr +++ b/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/access-field-literal-type-annotation.stderr @@ -1,6 +1,6 @@ error[expander::field-literal-type-annotation]: Field literal with type annotation ╭▸ -11 │ { "#literal": 0, "#type": "Integer" } +10 │ { "#literal": 0, "#type": "Integer" } │ ━━━━━━━ type annotations are not allowed on field index literals │ ╰ help: remove the type annotation and use a plain integer like `0` \ No newline at end of file diff --git a/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/access-field-literal-valid.jsonc b/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/access-field-literal-valid.jsonc index eecae80a7b4..ffae760bbd9 100644 --- a/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/access-field-literal-valid.jsonc +++ b/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/access-field-literal-valid.jsonc @@ -1,3 +1,9 @@ //@ run: pass //@ description: Field access with valid integer literal should compile -["::kernel::special_form::access", "tuple", { "#literal": 0 }] +[ + "fn", + [], + [["x", { "#tuple": ["Integer"] }]], + "_", + ["::kernel::special_form::access", "x", { "#literal": 0 }] +] diff --git a/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/as-2.jsonc b/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/as-2.jsonc index 5881fe702ce..80ab040fe46 100644 --- a/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/as-2.jsonc +++ b/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/as-2.jsonc @@ -1,3 +1,3 @@ //@ run: pass //@ description: as/2 should be converted to an AST node -["::kernel::special_form::as", { "#literal": true }, "Int"] +["::kernel::special_form::as", { "#literal": true }, "Integer"] diff --git a/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/as-2.stdout b/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/as-2.stdout index b4b6fcced0a..0540d952957 100644 --- a/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/as-2.stdout +++ b/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/as-2.stdout @@ -7,5 +7,7 @@ Expr#4294967040@14 Primitive (True) Type#4294967040@13 TypeKind (Path) - Path#4294967040@13 (rooted: false) - PathSegment#4294967040@12 (name: Int) + Path#4294967040@13 (rooted: true) + PathSegment#4294967040@12 (name: kernel) + PathSegment#4294967040@12 (name: type) + PathSegment#4294967040@12 (name: Integer) diff --git a/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/fn-4.jsonc b/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/fn-4.jsonc index 53b4a2e8ad1..606b42b76ec 100644 --- a/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/fn-4.jsonc +++ b/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/fn-4.jsonc @@ -3,7 +3,7 @@ [ "::kernel::special_form::fn", { "#tuple": [] }, - { "#struct": {} }, + { "#struct": { "a": "Integer", "b": "Integer" } }, "_", ["+", "a", "b"] ] diff --git a/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/fn-4.stdout b/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/fn-4.stdout index 488a9c26ac9..1f066578a2d 100644 --- a/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/fn-4.stdout +++ b/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/fn-4.stdout @@ -1,24 +1,40 @@ -Expr#4294967040@27 +Expr#4294967040@41 ExprKind (Closure) - ClosureExpr#4294967040@27 - ClosureSignature#4294967040@27 + ClosureExpr#4294967040@41 + ClosureSignature#4294967040@41 Generics#4294967040@8 - Type#4294967040@13 + ClosureParam#4294967040@16 (name: a) + Type#4294967040@15 + TypeKind (Path) + Path#4294967040@15 (rooted: true) + PathSegment#4294967040@14 (name: kernel) + PathSegment#4294967040@14 (name: type) + PathSegment#4294967040@14 (name: Integer) + ClosureParam#4294967040@23 (name: b) + Type#4294967040@22 + TypeKind (Path) + Path#4294967040@22 (rooted: true) + PathSegment#4294967040@21 (name: kernel) + PathSegment#4294967040@21 (name: type) + PathSegment#4294967040@21 (name: Integer) + Type#4294967040@27 TypeKind (Infer) - Expr#4294967040@26 + Expr#4294967040@40 ExprKind (Call) - CallExpr#4294967040@26 - Expr#4294967040@17 + CallExpr#4294967040@40 + Expr#4294967040@31 ExprKind (Path) - Path#4294967040@17 (rooted: false) - PathSegment#4294967040@16 (name: +) - Argument#4294967040@21 - Expr#4294967040@21 + Path#4294967040@31 (rooted: true) + PathSegment#4294967040@30 (name: core) + PathSegment#4294967040@30 (name: math) + PathSegment#4294967040@30 (name: add) + Argument#4294967040@35 + Expr#4294967040@35 ExprKind (Path) - Path#4294967040@21 (rooted: false) - PathSegment#4294967040@20 (name: a) - Argument#4294967040@25 - Expr#4294967040@25 + Path#4294967040@35 (rooted: false) + PathSegment#4294967040@34 (name: a) + Argument#4294967040@39 + Expr#4294967040@39 ExprKind (Path) - Path#4294967040@25 (rooted: false) - PathSegment#4294967040@24 (name: b) + Path#4294967040@39 (rooted: false) + PathSegment#4294967040@38 (name: b) diff --git a/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/fn-generics-struct-underscore.jsonc b/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/fn-generics-struct-underscore.jsonc index 9b81e580b6c..4dcbc3aa5cd 100644 --- a/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/fn-generics-struct-underscore.jsonc +++ b/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/fn-generics-struct-underscore.jsonc @@ -7,5 +7,5 @@ }, { "#struct": {} }, "_", - ["+", "a", "b"] + { "#literal": 0 } ] diff --git a/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/fn-generics-struct-underscore.stdout b/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/fn-generics-struct-underscore.stdout index a6dbf78c6e5..338a4c8e11b 100644 --- a/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/fn-generics-struct-underscore.stdout +++ b/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/fn-generics-struct-underscore.stdout @@ -1,25 +1,13 @@ -Expr#4294967040@32 +Expr#4294967040@21 ExprKind (Closure) - ClosureExpr#4294967040@32 - ClosureSignature#4294967040@32 + ClosureExpr#4294967040@21 + ClosureSignature#4294967040@21 Generics#4294967040@13 GenericParam#4294967040@12 (name: T) Type#4294967040@18 TypeKind (Infer) - Expr#4294967040@31 - ExprKind (Call) - CallExpr#4294967040@31 - Expr#4294967040@22 - ExprKind (Path) - Path#4294967040@22 (rooted: false) - PathSegment#4294967040@21 (name: +) - Argument#4294967040@26 - Expr#4294967040@26 - ExprKind (Path) - Path#4294967040@26 (rooted: false) - PathSegment#4294967040@25 (name: a) - Argument#4294967040@30 - Expr#4294967040@30 - ExprKind (Path) - Path#4294967040@30 (rooted: false) - PathSegment#4294967040@29 (name: b) + Expr#4294967040@20 + ExprKind (Literal) + LiteralExpr#4294967040@19 + Primitive (Integer) + Integer (0) diff --git a/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/fn-generics-struct.jsonc b/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/fn-generics-struct.jsonc index 0314eba772c..d81bebfdbe6 100644 --- a/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/fn-generics-struct.jsonc +++ b/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/fn-generics-struct.jsonc @@ -2,8 +2,8 @@ //@ description: fn/4 struct generics should compile [ "::kernel::special_form::fn", - { "#struct": { "T": "Int" } }, + { "#struct": { "T": "Integer" } }, { "#struct": {} }, "_", - ["+", "a", "b"] + {"#literal": 0} ] diff --git a/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/fn-generics-struct.stdout b/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/fn-generics-struct.stdout index 6564626df75..43181ff8ddd 100644 --- a/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/fn-generics-struct.stdout +++ b/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/fn-generics-struct.stdout @@ -1,29 +1,19 @@ -Expr#4294967040@34 +Expr#4294967040@23 ExprKind (Closure) - ClosureExpr#4294967040@34 - ClosureSignature#4294967040@34 + ClosureExpr#4294967040@23 + ClosureSignature#4294967040@23 Generics#4294967040@15 GenericParam#4294967040@14 (name: T) Type#4294967040@13 TypeKind (Path) - Path#4294967040@13 (rooted: false) - PathSegment#4294967040@12 (name: Int) + Path#4294967040@13 (rooted: true) + PathSegment#4294967040@12 (name: kernel) + PathSegment#4294967040@12 (name: type) + PathSegment#4294967040@12 (name: Integer) Type#4294967040@20 TypeKind (Infer) - Expr#4294967040@33 - ExprKind (Call) - CallExpr#4294967040@33 - Expr#4294967040@24 - ExprKind (Path) - Path#4294967040@24 (rooted: false) - PathSegment#4294967040@23 (name: +) - Argument#4294967040@28 - Expr#4294967040@28 - ExprKind (Path) - Path#4294967040@28 (rooted: false) - PathSegment#4294967040@27 (name: a) - Argument#4294967040@32 - Expr#4294967040@32 - ExprKind (Path) - Path#4294967040@32 (rooted: false) - PathSegment#4294967040@31 (name: b) + Expr#4294967040@22 + ExprKind (Literal) + LiteralExpr#4294967040@21 + Primitive (Integer) + Integer (0) diff --git a/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/fn-generics-tuple.jsonc b/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/fn-generics-tuple.jsonc index 748ba6817f8..3c2a43686d6 100644 --- a/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/fn-generics-tuple.jsonc +++ b/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/fn-generics-tuple.jsonc @@ -5,5 +5,5 @@ { "#tuple": ["T"] }, { "#struct": {} }, "_", - ["+", "a", "b"] + { "#literal": 0 } ] diff --git a/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/fn-generics-tuple.stdout b/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/fn-generics-tuple.stdout index b44dc9e33ae..ba1e20a7f34 100644 --- a/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/fn-generics-tuple.stdout +++ b/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/fn-generics-tuple.stdout @@ -1,25 +1,13 @@ -Expr#4294967040@31 +Expr#4294967040@20 ExprKind (Closure) - ClosureExpr#4294967040@31 - ClosureSignature#4294967040@31 + ClosureExpr#4294967040@20 + ClosureSignature#4294967040@20 Generics#4294967040@12 GenericParam#4294967040@11 (name: T) Type#4294967040@17 TypeKind (Infer) - Expr#4294967040@30 - ExprKind (Call) - CallExpr#4294967040@30 - Expr#4294967040@21 - ExprKind (Path) - Path#4294967040@21 (rooted: false) - PathSegment#4294967040@20 (name: +) - Argument#4294967040@25 - Expr#4294967040@25 - ExprKind (Path) - Path#4294967040@25 (rooted: false) - PathSegment#4294967040@24 (name: a) - Argument#4294967040@29 - Expr#4294967040@29 - ExprKind (Path) - Path#4294967040@29 (rooted: false) - PathSegment#4294967040@28 (name: b) + Expr#4294967040@19 + ExprKind (Literal) + LiteralExpr#4294967040@18 + Primitive (Integer) + Integer (0) diff --git a/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/input-2.jsonc b/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/input-2.jsonc index a4e9a8336e9..e9ce9a14b9c 100644 --- a/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/input-2.jsonc +++ b/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/input-2.jsonc @@ -1,3 +1,3 @@ //@ run: pass //@ description: input/2 should compile -["::kernel::special_form::input", "x", "Y"] +["::kernel::special_form::input", "x", "Integer"] diff --git a/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/input-2.stdout b/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/input-2.stdout index c0e604507a7..87b14b256cf 100644 --- a/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/input-2.stdout +++ b/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/input-2.stdout @@ -3,5 +3,7 @@ Expr#4294967040@16 InputExpr#4294967040@16 (name: x) Type#4294967040@15 TypeKind (Path) - Path#4294967040@15 (rooted: false) - PathSegment#4294967040@14 (name: Y) + Path#4294967040@15 (rooted: true) + PathSegment#4294967040@14 (name: kernel) + PathSegment#4294967040@14 (name: type) + PathSegment#4294967040@14 (name: Integer) diff --git a/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/input-3.jsonc b/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/input-3.jsonc index 89387c2fd28..2f1e0b19cda 100644 --- a/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/input-3.jsonc +++ b/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/input-3.jsonc @@ -1,3 +1,3 @@ //@ run: pass //@ description: input/3 should compile -["::kernel::special_form::input", "x", "Y", "z"] +["::kernel::special_form::input", "x", "Integer", { "#literal": 0 }] diff --git a/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/input-3.stdout b/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/input-3.stdout index dae82e38da3..026414ed8bc 100644 --- a/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/input-3.stdout +++ b/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/input-3.stdout @@ -1,11 +1,14 @@ -Expr#4294967040@20 +Expr#4294967040@18 ExprKind (Input) - InputExpr#4294967040@20 (name: x) + InputExpr#4294967040@18 (name: x) Type#4294967040@15 TypeKind (Path) - Path#4294967040@15 (rooted: false) - PathSegment#4294967040@14 (name: Y) - Expr#4294967040@19 - ExprKind (Path) - Path#4294967040@19 (rooted: false) - PathSegment#4294967040@18 (name: z) + Path#4294967040@15 (rooted: true) + PathSegment#4294967040@14 (name: kernel) + PathSegment#4294967040@14 (name: type) + PathSegment#4294967040@14 (name: Integer) + Expr#4294967040@17 + ExprKind (Literal) + LiteralExpr#4294967040@16 + Primitive (Integer) + Integer (0) diff --git a/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/let-collect-all-errors.jsonc b/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/let-collect-all-errors.jsonc index 1dda3ad053f..a325c060b1f 100644 --- a/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/let-collect-all-errors.jsonc +++ b/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/let-collect-all-errors.jsonc @@ -2,10 +2,10 @@ //@ description: We should collect all errors when lowering let/4, and not only report the first one. [ "::kernel::special_form::let", - "::x", - //~^ ERROR expected a simple identifier for the `let` binding name + "x", { "#literal": 1 }, //~^ ERROR cannot use a literal value as a type - { "#literal": 1 }, + "y", + //~^ ERROR cannot find `y` in this scope "x" ] diff --git a/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/let-collect-all-errors.stderr b/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/let-collect-all-errors.stderr index 5000adb9827..aad3c2db096 100644 --- a/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/let-collect-all-errors.stderr +++ b/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/let-collect-all-errors.stderr @@ -1,7 +1,31 @@ -error[expander::invalid-binding-name]: Invalid binding name +error[expander::invalid-expression-in-type-position]: Invalid expression in type position ╭▸ -5 │ "::x", - │ ━━━ expected a simple identifier for the `let` binding name +6 │ { "#literal": 1 }, + │ ━━━━━━━━━━━━━━━━━ cannot use a literal value as a type │ - ├ help: write `(let name value body)` with a plain name such as `x` - ╰ note: the first argument to `let` introduces a new local binding and must be a plain identifier without path qualification or generic arguments \ No newline at end of file + ├ help: replace this with a type path, tuple type, struct type, `_`, `(| ...)`, or `(& ...)` + ╰ note: valid type forms are: type paths like `String`, tuple types like `(Int, String)`, struct types like `(name: String)`, `_` for inference, unions `(| ...)`, and intersections `(& ...)` + +error[expander::unresolved-variable]: Unresolved variable + ╭▸ +8 │ "y", + │ ━ cannot find `y` in this scope + │ + ╰ note: this could be a typo, a name used outside its scope, or a missing declaration; if it is a function or type from another module, you may need to import it first +help: a similar imported name exists + ╭╴ +8 - "y", +8 + "↑", + ├╴ +8 - "y", +8 + "√", + ├╴ +8 - "y", +8 + "∛", + ├╴ +8 - "y", +8 + "newtype", + ├╴ +8 - "y", +8 + "type", + ╰╴ \ No newline at end of file diff --git a/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/type-3.jsonc b/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/type-3.jsonc index 7a5d3f020aa..d4701d37235 100644 --- a/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/type-3.jsonc +++ b/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/type-3.jsonc @@ -1,3 +1,3 @@ //@ run: pass //@ description: type/3 should be converted to an AST node -["::kernel::special_form::type", "x", "Integer", "x"] +["::kernel::special_form::type", "x", "Integer", { "#literal": 0 }] diff --git a/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/type-3.stdout b/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/type-3.stdout index 558a4cd094c..1c60b665fce 100644 --- a/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/type-3.stdout +++ b/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/type-3.stdout @@ -1,11 +1,14 @@ -Expr#4294967040@20 +Expr#4294967040@18 ExprKind (Type) - TypeExpr#4294967040@20 (name: x) + TypeExpr#4294967040@18 (name: x) Type#4294967040@15 TypeKind (Path) - Path#4294967040@15 (rooted: false) + Path#4294967040@15 (rooted: true) + PathSegment#4294967040@14 (name: kernel) + PathSegment#4294967040@14 (name: type) PathSegment#4294967040@14 (name: Integer) - Expr#4294967040@19 - ExprKind (Path) - Path#4294967040@19 (rooted: false) - PathSegment#4294967040@18 (name: x) + Expr#4294967040@17 + ExprKind (Literal) + LiteralExpr#4294967040@16 + Primitive (Integer) + Integer (0) diff --git a/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/type-collect-all-errors.jsonc b/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/type-collect-all-errors.jsonc index a157f41477c..2f4a41c7687 100644 --- a/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/type-collect-all-errors.jsonc +++ b/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/type-collect-all-errors.jsonc @@ -2,4 +2,3 @@ //@ description: We should collect all errors when lowering type/3, and not only report the first one. ["::kernel::special_form::type", "::x", { "#literal": 1 }, "x"] //~^ ERROR expected a type name for the `type` binding -//~| ERROR cannot use a literal value as a type diff --git a/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/type-expr-call-intersection.jsonc b/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/type-expr-call-intersection.jsonc index 37373f2ce09..f3fc8ba492b 100644 --- a/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/type-expr-call-intersection.jsonc +++ b/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/type-expr-call-intersection.jsonc @@ -1,7 +1,3 @@ //@ run: pass -//@ description: Invoking `::core::bits::and` should convert into a intersection type expression -[ - "::kernel::special_form::as", - { "#literal": true }, - ["::core::bits::and", "Int", "Float"] -] +//@ description: Invoking `::kernel::types::intersection` should convert into a intersection type expression +["::kernel::special_form::as", { "#literal": true }, ["&", "Integer", "Float"]] diff --git a/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/type-expr-call-not-path.jsonc b/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/type-expr-call-not-path.jsonc index 0d147263797..80efaefff35 100644 --- a/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/type-expr-call-not-path.jsonc +++ b/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/type-expr-call-not-path.jsonc @@ -5,7 +5,7 @@ { "#literal": true }, [ ["+", { "#literal": 1 }, { "#literal": 2 }], - //~^ ERROR cannot find `+` in this scope + //~^ ERROR cannot use this as a type constructor "Integer", "Number" ] diff --git a/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/type-expr-call-not-path.stderr b/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/type-expr-call-not-path.stderr index 8fe50e2e4f5..549c26c45a8 100644 --- a/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/type-expr-call-not-path.stderr +++ b/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/type-expr-call-not-path.stderr @@ -3,7 +3,7 @@ error[expander::invalid-type-constructor-call]: Invalid type constructor call 6 │ ┌ [ 7 │ │ ["+", { "#literal": 1 }, { "#literal": 2 }], │ │ ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ cannot use this as a type constructor - 8 │ │ //~^ ERROR cannot find `+` in this scope + 8 │ │ //~^ ERROR cannot use this as a type constructor 9 │ │ "Integer", 10 │ │ "Number" 11 │ │ ] diff --git a/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/type-expr-call-union.jsonc b/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/type-expr-call-union.jsonc index 5eb86c1dbe5..925aa586ce1 100644 --- a/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/type-expr-call-union.jsonc +++ b/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/type-expr-call-union.jsonc @@ -1,7 +1,3 @@ //@ run: pass -//@ description: Invoking `::core::bits::or` should convert into a union type expression -[ - "::kernel::special_form::as", - { "#literal": true }, - ["::core::bits::or", "Int", "Float"] -] +//@ description: Invoking `::kernel::types::union` should convert into a union type expression +["::kernel::special_form::as", { "#literal": true }, ["|", "Integer", "Float"]] diff --git a/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/type-expr-invalid.jsonc b/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/type-expr-invalid.jsonc index f9c49671479..a47174fa77b 100644 --- a/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/type-expr-invalid.jsonc +++ b/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/type-expr-invalid.jsonc @@ -16,9 +16,9 @@ { "#literal": 1 } //~^ ERROR cannot use a literal value as a type ], - { "#list": ["a", "b"] } + { "#list": [{ "#literal": 1 }, { "#literal": 2 }] } //~^ ERROR cannot use a list expression as a type ], - { "#dict": { "a": "b" } } + { "#dict": { "a": { "#literal": 1 } } } //~^ ERROR cannot use a dictionary expression as a type ] diff --git a/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/type-expr-invalid.stderr b/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/type-expr-invalid.stderr index 25f3880a9f5..8218bcd3010 100644 --- a/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/type-expr-invalid.stderr +++ b/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/type-expr-invalid.stderr @@ -1,7 +1,7 @@ error[expander::invalid-expression-in-type-position]: Invalid expression in type position ╭▸ -22 │ { "#dict": { "a": "b" } } - │ ━━━━━━━━━━━━━━━━━━━━━━━━━ cannot use a dictionary expression as a type +22 │ { "#dict": { "a": { "#literal": 1 } } } + │ ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ cannot use a dictionary expression as a type │ ├ help: replace this with a type path, tuple type, struct type, `_`, `(| ...)`, or `(& ...)` ╰ note: valid type forms are: type paths like `String`, tuple types like `(Int, String)`, struct types like `(name: String)`, `_` for inference, unions `(| ...)`, and intersections `(& ...)` @@ -14,86 +14,14 @@ error[expander::invalid-expression-in-type-position]: Invalid expression in type ├ help: replace this with a type path, tuple type, struct type, `_`, `(| ...)`, or `(& ...)` ╰ note: valid type forms are: type paths like `String`, tuple types like `(Int, String)`, struct types like `(name: String)`, `_` for inference, unions `(| ...)`, and intersections `(& ...)` -error[expander::unresolved-variable]: Unresolved variable - ╭▸ -19 │ { "#list": ["a", "b"] } - │ ━ cannot find `a` in this scope - │ - ╰ note: this could be a typo, a name used outside its scope, or a missing declaration; if it is a function or type from another module, you may need to import it first -help: a similar imported name exists - ╭╴ -19 - { "#list": ["a", "b"] } -19 + { "#list": ["Union", "b"] } - ├╴ -19 - { "#list": ["a", "b"] } -19 + { "#list": ["Unknown", "b"] } - ├╴ -19 - { "#list": ["a", "b"] } -19 + { "#list": ["Url", "b"] } - ├╴ -19 - { "#list": ["a", "b"] } -19 + { "#list": ["|", "b"] } - ├╴ -19 - { "#list": ["a", "b"] } -19 + { "#list": ["Boolean", "b"] } - ╰╴ - -error[expander::unresolved-variable]: Unresolved variable - ╭▸ -19 │ { "#list": ["a", "b"] } - │ ━ cannot find `b` in this scope - │ - ╰ note: this could be a typo, a name used outside its scope, or a missing declaration; if it is a function or type from another module, you may need to import it first -help: a similar imported name exists - ╭╴ -19 - { "#list": ["a", "b"] } -19 + { "#list": ["a", "Union"] } - ├╴ -19 - { "#list": ["a", "b"] } -19 + { "#list": ["a", "Unknown"] } - ├╴ -19 - { "#list": ["a", "b"] } -19 + { "#list": ["a", "Url"] } - ├╴ -19 - { "#list": ["a", "b"] } -19 + { "#list": ["a", "|"] } - ├╴ -19 - { "#list": ["a", "b"] } -19 + { "#list": ["a", "Number"] } - ╰╴ - error[expander::invalid-expression-in-type-position]: Invalid expression in type position ╭▸ -19 │ { "#list": ["a", "b"] } - │ ━━━━━━━━━━━━━━━━━━━━━━━ cannot use a list expression as a type +19 │ { "#list": [{ "#literal": 1 }, { "#literal": 2 }] } + │ ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ cannot use a list expression as a type │ ├ help: replace this with a type path, tuple type, struct type, `_`, `(| ...)`, or `(& ...)` ╰ note: valid type forms are: type paths like `String`, tuple types like `(Int, String)`, struct types like `(name: String)`, `_` for inference, unions `(| ...)`, and intersections `(& ...)` -error[expander::unresolved-variable]: Unresolved variable - ╭▸ -22 │ { "#dict": { "a": "b" } } - │ ━ cannot find `b` in this scope - │ - ╰ note: this could be a typo, a name used outside its scope, or a missing declaration; if it is a function or type from another module, you may need to import it first -help: a similar imported name exists - ╭╴ -22 - { "#dict": { "a": "b" } } -22 + { "#dict": { "a": "Union" } } - ├╴ -22 - { "#dict": { "a": "b" } } -22 + { "#dict": { "a": "Unknown" } } - ├╴ -22 - { "#dict": { "a": "b" } } -22 + { "#dict": { "a": "Url" } } - ├╴ -22 - { "#dict": { "a": "b" } } -22 + { "#dict": { "a": "|" } } - ├╴ -22 - { "#dict": { "a": "b" } } -22 + { "#dict": { "a": "Number" } } - ╰╴ - error[expander::item-not-found]: Item not found ╭▸ 13 │ ["::kernel::special_form::as", { "#literal": 1 }, "Integer"] diff --git a/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/type-expr-struct.jsonc b/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/type-expr-struct.jsonc index 5d67b780650..7bf31469f27 100644 --- a/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/type-expr-struct.jsonc +++ b/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/type-expr-struct.jsonc @@ -3,5 +3,5 @@ [ "::kernel::special_form::as", { "#literal": true }, - { "#struct": { "name": "Name", "birthday": "Date" } } + { "#struct": { "name": "String", "birthday": "Integer" } } ] diff --git a/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/type-expr-struct.stdout b/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/type-expr-struct.stdout index 5342d407cc1..8fe50db98e3 100644 --- a/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/type-expr-struct.stdout +++ b/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/type-expr-struct.stdout @@ -5,16 +5,20 @@ Expr#4294967040@26 ExprKind (Literal) LiteralExpr#4294967040@8 Primitive (True) - Type#4294967040@24 + Type#4294967040@25 TypeKind (Struct) - StructType#4294967040@24 + StructType#4294967040@25 StructField#4294967040@16 (name: name) Type#4294967040@15 TypeKind (Path) - Path#4294967040@15 (rooted: false) - PathSegment#4294967040@14 (name: Name) + Path#4294967040@15 (rooted: true) + PathSegment#4294967040@14 (name: kernel) + PathSegment#4294967040@14 (name: type) + PathSegment#4294967040@14 (name: String) StructField#4294967040@23 (name: birthday) Type#4294967040@22 TypeKind (Path) - Path#4294967040@22 (rooted: false) - PathSegment#4294967040@21 (name: Date) + Path#4294967040@22 (rooted: true) + PathSegment#4294967040@21 (name: kernel) + PathSegment#4294967040@21 (name: type) + PathSegment#4294967040@21 (name: Integer) diff --git a/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/type-expr-tuple.jsonc b/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/type-expr-tuple.jsonc index fe4faa8276f..3808b996eb6 100644 --- a/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/type-expr-tuple.jsonc +++ b/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/type-expr-tuple.jsonc @@ -3,5 +3,5 @@ [ "::kernel::special_form::as", { "#literal": true }, - { "#tuple": ["Name", "Date"] } + { "#tuple": ["Integer", "String"] } ] diff --git a/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/type-expr-tuple.stdout b/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/type-expr-tuple.stdout index 87f6ecbbdfb..ed81bb50727 100644 --- a/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/type-expr-tuple.stdout +++ b/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/type-expr-tuple.stdout @@ -5,16 +5,20 @@ Expr#4294967040@20 ExprKind (Literal) LiteralExpr#4294967040@8 Primitive (True) - Type#4294967040@18 + Type#4294967040@19 TypeKind (Tuple) - TupleType#4294967040@18 + TupleType#4294967040@19 TupleField#4294967040@13 Type#4294967040@13 TypeKind (Path) - Path#4294967040@13 (rooted: false) - PathSegment#4294967040@12 (name: Name) + Path#4294967040@13 (rooted: true) + PathSegment#4294967040@12 (name: kernel) + PathSegment#4294967040@12 (name: type) + PathSegment#4294967040@12 (name: Integer) TupleField#4294967040@17 Type#4294967040@17 TypeKind (Path) - Path#4294967040@17 (rooted: false) - PathSegment#4294967040@16 (name: Date) + Path#4294967040@17 (rooted: true) + PathSegment#4294967040@16 (name: kernel) + PathSegment#4294967040@16 (name: type) + PathSegment#4294967040@16 (name: String) diff --git a/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/type-generic-constraint.jsonc b/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/type-generic-constraint.jsonc index 4e22523845c..76ebf5a4aff 100644 --- a/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/type-generic-constraint.jsonc +++ b/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/type-generic-constraint.jsonc @@ -2,7 +2,7 @@ //@ description: Generics with constraints should be properly lowered [ "::kernel::special_form::type", - "Foo", + "Foo", { "#struct": { "foo": "Bar" } }, "_" ] diff --git a/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/type-generic-constraint.stdout b/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/type-generic-constraint.stdout index 0201b12b414..bed8e8b104c 100644 --- a/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/type-generic-constraint.stdout +++ b/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/type-generic-constraint.stdout @@ -4,11 +4,13 @@ Expr#4294967040@28 GenericConstraint#4294967040@14 (name: Bar) Type#4294967040@13 TypeKind (Path) - Path#4294967040@13 (rooted: false) - PathSegment#4294967040@12 (name: Baz) - Type#4294967040@24 + Path#4294967040@13 (rooted: true) + PathSegment#4294967040@12 (name: kernel) + PathSegment#4294967040@12 (name: type) + PathSegment#4294967040@12 (name: String) + Type#4294967040@25 TypeKind (Struct) - StructType#4294967040@24 + StructType#4294967040@25 StructField#4294967040@23 (name: foo) Type#4294967040@22 TypeKind (Path) diff --git a/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/type-infer.jsonc b/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/type-infer.jsonc index 17334b2c226..bf1a95451e7 100644 --- a/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/type-infer.jsonc +++ b/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/type-infer.jsonc @@ -1,3 +1,3 @@ //@ run: pass //@ description: Infer type should be properly lowered -["::kernel::special_form::type", "x", "_", "x"] +["::kernel::special_form::type", "x", "_", { "#literal": 0 }] diff --git a/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/type-infer.stdout b/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/type-infer.stdout index 9eb3b48279b..0002e5ffcf2 100644 --- a/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/type-infer.stdout +++ b/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/type-infer.stdout @@ -1,9 +1,10 @@ -Expr#4294967040@18 +Expr#4294967040@16 ExprKind (Type) - TypeExpr#4294967040@18 (name: x) + TypeExpr#4294967040@16 (name: x) Type#4294967040@13 TypeKind (Infer) - Expr#4294967040@17 - ExprKind (Path) - Path#4294967040@17 (rooted: false) - PathSegment#4294967040@16 (name: x) + Expr#4294967040@15 + ExprKind (Literal) + LiteralExpr#4294967040@14 + Primitive (Integer) + Integer (0) diff --git a/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/type-never.jsonc b/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/type-never.jsonc index afbea7c0cb9..84d2daedc6d 100644 --- a/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/type-never.jsonc +++ b/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/type-never.jsonc @@ -1,3 +1,3 @@ //@ run: pass //@ description: Never type should be properly lowered -["::kernel::special_form::type", "x", "::kernel::type::Never", "x"] +["::kernel::special_form::type", "x", "!", { "#literal": 0 }] diff --git a/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/type-never.stdout b/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/type-never.stdout index 22c88eadab2..e64d265f970 100644 --- a/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/type-never.stdout +++ b/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/type-never.stdout @@ -1,13 +1,14 @@ -Expr#4294967040@24 +Expr#4294967040@18 ExprKind (Type) - TypeExpr#4294967040@24 (name: x) - Type#4294967040@19 + TypeExpr#4294967040@18 (name: x) + Type#4294967040@15 TypeKind (Path) - Path#4294967040@19 (rooted: true) + Path#4294967040@15 (rooted: true) PathSegment#4294967040@14 (name: kernel) - PathSegment#4294967040@16 (name: type) - PathSegment#4294967040@18 (name: Never) - Expr#4294967040@23 - ExprKind (Path) - Path#4294967040@23 (rooted: false) - PathSegment#4294967040@22 (name: x) + PathSegment#4294967040@14 (name: type) + PathSegment#4294967040@14 (name: Never) + Expr#4294967040@17 + ExprKind (Literal) + LiteralExpr#4294967040@16 + Primitive (Integer) + Integer (0) diff --git a/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/type-unknown.jsonc b/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/type-unknown.jsonc index 6fa96605454..2c245a5a6fb 100644 --- a/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/type-unknown.jsonc +++ b/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/type-unknown.jsonc @@ -1,3 +1,3 @@ //@ run: pass //@ description: Unknown type should be properly lowered -["::kernel::special_form::type", "x", "::kernel::type::Unknown", "x"] +["::kernel::special_form::type", "x", "?", { "#literal": null }] diff --git a/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/type-unknown.stdout b/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/type-unknown.stdout index 5fe422afeb6..6c73cca03dc 100644 --- a/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/type-unknown.stdout +++ b/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/type-unknown.stdout @@ -1,13 +1,13 @@ -Expr#4294967040@24 +Expr#4294967040@18 ExprKind (Type) - TypeExpr#4294967040@24 (name: x) - Type#4294967040@19 + TypeExpr#4294967040@18 (name: x) + Type#4294967040@15 TypeKind (Path) - Path#4294967040@19 (rooted: true) + Path#4294967040@15 (rooted: true) PathSegment#4294967040@14 (name: kernel) - PathSegment#4294967040@16 (name: type) - PathSegment#4294967040@18 (name: Unknown) - Expr#4294967040@23 - ExprKind (Path) - Path#4294967040@23 (rooted: false) - PathSegment#4294967040@22 (name: x) + PathSegment#4294967040@14 (name: type) + PathSegment#4294967040@14 (name: Unknown) + Expr#4294967040@17 + ExprKind (Literal) + LiteralExpr#4294967040@16 + Primitive (Null) diff --git a/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/use-3.jsonc b/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/use-3.jsonc index 94b7e13b585..e81edc8043e 100644 --- a/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/use-3.jsonc +++ b/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/use-3.jsonc @@ -1,3 +1,8 @@ //@ run: pass //@ description: use/3 should compile to AST node -["::kernel::special_form::use", "::math", { "#tuple": ["pi"] }, "x"] +[ + "::kernel::special_form::use", + "::core::math", + { "#tuple": ["pi"] }, + { "#literal": 0 } +] diff --git a/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/use-glob.jsonc b/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/use-glob.jsonc index 160fef929c9..ce815af69dd 100644 --- a/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/use-glob.jsonc +++ b/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/use-glob.jsonc @@ -1,3 +1,3 @@ //@ run: pass //@ description: glob pattern should compile to AST node -["::kernel::special_form::use", "::math", "*", "x"] +["::kernel::special_form::use", "::core::math", "*", { "#literal": 0 }] diff --git a/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/use-glob.stdout b/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/use-glob.stdout index 38edb64772c..a54e23aba41 100644 --- a/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/use-glob.stdout +++ b/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/use-glob.stdout @@ -1,11 +1,5 @@ -Expr#4294967040@20 - ExprKind (Use) - UseExpr#4294967040@20 - Path#4294967040@11 (rooted: true) - PathSegment#4294967040@10 (name: math) - UseKind (Glob) - Glob#4294967040@13 - Expr#4294967040@19 - ExprKind (Path) - Path#4294967040@19 (rooted: false) - PathSegment#4294967040@18 (name: x) +Expr#4294967040@19 + ExprKind (Literal) + LiteralExpr#4294967040@18 + Primitive (Integer) + Integer (0) diff --git a/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/use-struct-literal.jsonc b/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/use-struct-literal.jsonc index 0bfcef89b0c..57fc732f27f 100644 --- a/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/use-struct-literal.jsonc +++ b/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/use-struct-literal.jsonc @@ -5,7 +5,7 @@ "::core::math", { "#struct": { - "x": { "#literal": 1 } + "sqrt": { "#literal": 1 } //~^ ERROR expected `_` or a simple identifier as the alias } }, diff --git a/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/use-struct-literal.stderr b/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/use-struct-literal.stderr index 4ec0102ce62..7caa8f9c285 100644 --- a/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/use-struct-literal.stderr +++ b/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/use-struct-literal.stderr @@ -1,32 +1,6 @@ -error[expander::item-not-found]: Item not found - ╭▸ -5 │ "::core::math", - │ ──── looked in this module - ‡ -8 │ "x": { "#literal": 1 } - │ ━ cannot find `x` in module `::core::math` - ╰╴ -help: a similar item exists in this module - ╭╴ -8 - "x": { "#literal": 1 } -8 + "sqrt": { "#literal": 1 } - ├╴ -8 - "x": { "#literal": 1 } -8 + "sub": { "#literal": 1 } - ├╴ -8 - "x": { "#literal": 1 } -8 + "↑": { "#literal": 1 } - ├╴ -8 - "x": { "#literal": 1 } -8 + "√": { "#literal": 1 } - ├╴ -8 - "x": { "#literal": 1 } -8 + "∛": { "#literal": 1 } - ╰╴ - error[expander::invalid-use-alias]: Invalid use alias ╭▸ -8 │ "x": { "#literal": 1 } - │ ━━━━━━━━━━━━━━━━━ expected `_` or a simple identifier as the alias +8 │ "sqrt": { "#literal": 1 } + │ ━━━━━━━━━━━━━━━━━ expected `_` or a simple identifier as the alias │ ╰ help: use `_` to keep the original name or a simple identifier to rename: `(name: alias)` or `(name: _)` \ No newline at end of file diff --git a/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/use-struct-type.jsonc b/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/use-struct-type.jsonc index 1809f88db16..835fe191d45 100644 --- a/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/use-struct-type.jsonc +++ b/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/use-struct-type.jsonc @@ -4,7 +4,7 @@ "::kernel::special_form::use", "::core::math", { - "#struct": { "x": "x" }, + "#struct": { "sqrt": "sqrt" }, "#type": "X" //~^ ERROR type annotations are not allowed on the import list }, diff --git a/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/use-struct-type.stderr b/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/use-struct-type.stderr index 65215590422..9da4d85a6d2 100644 --- a/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/use-struct-type.stderr +++ b/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/use-struct-type.stderr @@ -1,29 +1,3 @@ -error[expander::item-not-found]: Item not found - ╭▸ -5 │ "::core::math", - │ ──── looked in this module -6 │ { -7 │ "#struct": { "x": "x" }, - │ ━ cannot find `x` in module `::core::math` - ╰╴ -help: a similar item exists in this module - ╭╴ -7 - "#struct": { "x": "x" }, -7 + "#struct": { "sqrt": "x" }, - ├╴ -7 - "#struct": { "x": "x" }, -7 + "#struct": { "sub": "x" }, - ├╴ -7 - "#struct": { "x": "x" }, -7 + "#struct": { "↑": "x" }, - ├╴ -7 - "#struct": { "x": "x" }, -7 + "#struct": { "√": "x" }, - ├╴ -7 - "#struct": { "x": "x" }, -7 + "#struct": { "∛": "x" }, - ╰╴ - error[expander::use-imports-type-annotation]: Type annotation on use imports ╭▸ 8 │ "#type": "X" diff --git a/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/use-struct.jsonc b/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/use-struct.jsonc index e79c77b13c5..5f6707b3fe3 100644 --- a/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/use-struct.jsonc +++ b/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/use-struct.jsonc @@ -2,7 +2,7 @@ //@ description: struct pattern should compile to AST node [ "::kernel::special_form::use", - "::math", + "::core::math", { "#struct": { "x": "y", "z": "_" } }, - "x" + { "#literal": 0 } ] diff --git a/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/use-tuple-type.jsonc b/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/use-tuple-type.jsonc index 3f471c1393a..399cae67206 100644 --- a/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/use-tuple-type.jsonc +++ b/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/use-tuple-type.jsonc @@ -6,5 +6,5 @@ { "#tuple": ["::core::math::sub"], "#type": "Number" }, //~^ ERROR expected a simple name to import //~| ERROR type annotations are not allowed on the import list - null + { "#literal": 0 } ] diff --git a/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/use-tuple-type.stderr b/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/use-tuple-type.stderr index 8a1dd3adf73..9d46f19850f 100644 --- a/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/use-tuple-type.stderr +++ b/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/use-tuple-type.stderr @@ -1,29 +1,13 @@ -error[expander::unresolved-variable]: Unresolved variable +error[expander::invalid-use-import-binding]: Invalid use import binding ╭▸ -8 │ "x" - │ ━ cannot find `x` in this scope +6 │ { "#tuple": ["::core::math::sub"], "#type": "Number" }, + │ ━━━━━━━━━━━━━━━━━ expected a simple name to import │ - ╰ note: this could be a typo, a name used outside its scope, or a missing declaration; if it is a function or type from another module, you may need to import it first -help: a similar imported name exists - ╭╴ -8 - "x" -8 + "~" - ├╴ -8 - "x" -8 + "↑" - ├╴ -8 - "x" -8 + "√" - ├╴ -8 - "x" -8 + "∛" - ├╴ -8 │ "index" - ╰╴ ++++ + ╰ help: each import must be a plain identifier like `foo`, not a qualified path or expression -error[expander::invalid-use-import-binding]: Invalid use import binding +error[expander::use-imports-type-annotation]: Type annotation on use imports ╭▸ 6 │ { "#tuple": ["::core::math::sub"], "#type": "Number" }, - │ ━━━━━━━━━━━━━━━━━ expected a simple name to import + │ ━━━━━━ type annotations are not allowed on the import list │ - ╰ help: each import must be a plain identifier like `foo`, not a qualified path or expression \ No newline at end of file + ╰ help: remove the type annotation; the import list declares which names to bring into scope, not a typed value \ No newline at end of file diff --git a/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/use-tuple.jsonc b/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/use-tuple.jsonc index 95414083bac..aef68764c57 100644 --- a/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/use-tuple.jsonc +++ b/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/use-tuple.jsonc @@ -1,3 +1,8 @@ //@ run: pass //@ description: tuple pattern should compile to AST node -["::kernel::special_form::use", "::math", { "#tuple": ["x", "z"] }, "x"] +[ + "::kernel::special_form::use", + "::core::math", + { "#tuple": ["sqrt", "cbrt"] }, + { "#literal": 0 } +] diff --git a/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/use-tuple.stdout b/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/use-tuple.stdout index 92992865d7d..5b305a51cc0 100644 --- a/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/use-tuple.stdout +++ b/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/use-tuple.stdout @@ -1,12 +1,5 @@ -Expr#4294967040@26 - ExprKind (Use) - UseExpr#4294967040@26 - Path#4294967040@11 (rooted: true) - PathSegment#4294967040@10 (name: math) - UseKind (Named) - UseBinding#4294967040@15 (name: x) - UseBinding#4294967040@19 (name: z) - Expr#4294967040@25 - ExprKind (Path) - Path#4294967040@25 (rooted: false) - PathSegment#4294967040@24 (name: x) +Expr#4294967040@25 + ExprKind (Literal) + LiteralExpr#4294967040@24 + Primitive (Integer) + Integer (0) diff --git a/libs/@local/hashql/ast/tests/ui/lower/name-mangler/diverging.jsonc b/libs/@local/hashql/ast/tests/ui/lower/name-mangler/diverging.jsonc index 535a63db170..5178b75d3af 100644 --- a/libs/@local/hashql/ast/tests/ui/lower/name-mangler/diverging.jsonc +++ b/libs/@local/hashql/ast/tests/ui/lower/name-mangler/diverging.jsonc @@ -4,5 +4,5 @@ "if", { "#literal": true }, ["let", "a", { "#literal": 2 }, { "#literal": 3 }], - "a" + ["let", "a", { "#literal": 3 }, { "#literal": 2 }] ] diff --git a/libs/@local/hashql/ast/tests/ui/lower/name-mangler/diverging.stdout b/libs/@local/hashql/ast/tests/ui/lower/name-mangler/diverging.stdout index f9b322a533c..0b952ea35fc 100644 --- a/libs/@local/hashql/ast/tests/ui/lower/name-mangler/diverging.stdout +++ b/libs/@local/hashql/ast/tests/ui/lower/name-mangler/diverging.stdout @@ -1,6 +1,6 @@ -Expr#4294967040@23 +Expr#4294967040@32 ExprKind (If) - IfExpr#4294967040@23 + IfExpr#4294967040@32 Expr#4294967040@5 ExprKind (Literal) LiteralExpr#4294967040@4 @@ -18,7 +18,16 @@ Expr#4294967040@23 LiteralExpr#4294967040@16 Primitive (Integer) Integer (3) - Expr#4294967040@22 - ExprKind (Path) - Path#4294967040@22 (rooted: false) - PathSegment#4294967040@21 (name: a) + Expr#4294967040@31 + ExprKind (Let) + LetExpr#4294967040@31 (name: a:1) + Expr#4294967040@28 + ExprKind (Literal) + LiteralExpr#4294967040@27 + Primitive (Integer) + Integer (3) + Expr#4294967040@30 + ExprKind (Literal) + LiteralExpr#4294967040@29 + Primitive (Integer) + Integer (2) diff --git a/libs/@local/hashql/ast/tests/ui/lower/name-mangler/fn-args.jsonc b/libs/@local/hashql/ast/tests/ui/lower/name-mangler/fn-args.jsonc index dd78d16c77c..a98f4ad34eb 100644 --- a/libs/@local/hashql/ast/tests/ui/lower/name-mangler/fn-args.jsonc +++ b/libs/@local/hashql/ast/tests/ui/lower/name-mangler/fn-args.jsonc @@ -1,3 +1,3 @@ //@ run: pass //@ description: test that arguments are mangled correctly -["fn", { "#tuple": [] }, { "#struct": { "a": "T" } }, "_", ["as", "a", "T"]] +["fn", { "#tuple": ["T"] }, { "#struct": { "a": "T" } }, "_", ["as", "a", "T"]] diff --git a/libs/@local/hashql/ast/tests/ui/lower/name-mangler/fn-args.stdout b/libs/@local/hashql/ast/tests/ui/lower/name-mangler/fn-args.stdout index 9d68dc11204..f1b625bb0f6 100644 --- a/libs/@local/hashql/ast/tests/ui/lower/name-mangler/fn-args.stdout +++ b/libs/@local/hashql/ast/tests/ui/lower/name-mangler/fn-args.stdout @@ -1,23 +1,24 @@ -Expr#4294967040@30 +Expr#4294967040@34 ExprKind (Closure) - ClosureExpr#4294967040@30 - ClosureSignature#4294967040@30 - Generics#4294967040@4 - ClosureParam#4294967040@12 (name: a:0) - Type#4294967040@11 + ClosureExpr#4294967040@34 + ClosureSignature#4294967040@34 + Generics#4294967040@8 + GenericParam#4294967040@7 (name: T:0) + ClosureParam#4294967040@16 (name: a:0) + Type#4294967040@15 TypeKind (Path) - Path#4294967040@11 (rooted: false) - PathSegment#4294967040@10 (name: T) - Type#4294967040@16 + Path#4294967040@15 (rooted: false) + PathSegment#4294967040@14 (name: T:0) + Type#4294967040@20 TypeKind (Infer) - Expr#4294967040@29 + Expr#4294967040@33 ExprKind (As) - AsExpr#4294967040@29 - Expr#4294967040@24 + AsExpr#4294967040@33 + Expr#4294967040@28 ExprKind (Path) - Path#4294967040@24 (rooted: false) - PathSegment#4294967040@23 (name: a:0) - Type#4294967040@28 - TypeKind (Path) Path#4294967040@28 (rooted: false) - PathSegment#4294967040@27 (name: T) + PathSegment#4294967040@27 (name: a:0) + Type#4294967040@32 + TypeKind (Path) + Path#4294967040@32 (rooted: false) + PathSegment#4294967040@31 (name: T:0) diff --git a/libs/@local/hashql/ast/tests/ui/lower/name-mangler/fn-types.jsonc b/libs/@local/hashql/ast/tests/ui/lower/name-mangler/fn-types.jsonc index ad841f14f30..58736f4c4bd 100644 --- a/libs/@local/hashql/ast/tests/ui/lower/name-mangler/fn-types.jsonc +++ b/libs/@local/hashql/ast/tests/ui/lower/name-mangler/fn-types.jsonc @@ -5,5 +5,5 @@ { "#tuple": ["T", "U"] }, { "#struct": {} }, "_", - ["as", ["as", "T", "T"], "U"] + ["as", ["as", { "#literal": 0 }, "T"], "U"] ] diff --git a/libs/@local/hashql/ast/tests/ui/lower/name-mangler/fn-types.stdout b/libs/@local/hashql/ast/tests/ui/lower/name-mangler/fn-types.stdout index 66b7c688dd3..c98ed523ce1 100644 --- a/libs/@local/hashql/ast/tests/ui/lower/name-mangler/fn-types.stdout +++ b/libs/@local/hashql/ast/tests/ui/lower/name-mangler/fn-types.stdout @@ -1,27 +1,28 @@ -Expr#4294967040@40 +Expr#4294967040@38 ExprKind (Closure) - ClosureExpr#4294967040@40 - ClosureSignature#4294967040@40 + ClosureExpr#4294967040@38 + ClosureSignature#4294967040@38 Generics#4294967040@12 GenericParam#4294967040@7 (name: T:0) GenericParam#4294967040@11 (name: U:0) Type#4294967040@17 TypeKind (Infer) - Expr#4294967040@39 + Expr#4294967040@37 ExprKind (As) - AsExpr#4294967040@39 - Expr#4294967040@34 + AsExpr#4294967040@37 + Expr#4294967040@32 ExprKind (As) - AsExpr#4294967040@34 - Expr#4294967040@29 - ExprKind (Path) - Path#4294967040@29 (rooted: false) - PathSegment#4294967040@28 (name: T) - Type#4294967040@33 + AsExpr#4294967040@32 + Expr#4294967040@27 + ExprKind (Literal) + LiteralExpr#4294967040@26 + Primitive (Integer) + Integer (0) + Type#4294967040@31 TypeKind (Path) - Path#4294967040@33 (rooted: false) - PathSegment#4294967040@32 (name: T:0) - Type#4294967040@38 + Path#4294967040@31 (rooted: false) + PathSegment#4294967040@30 (name: T:0) + Type#4294967040@36 TypeKind (Path) - Path#4294967040@38 (rooted: false) - PathSegment#4294967040@37 (name: U:0) + Path#4294967040@36 (rooted: false) + PathSegment#4294967040@35 (name: U:0) diff --git a/libs/@local/hashql/ast/tests/ui/lower/name-mangler/onion.jsonc b/libs/@local/hashql/ast/tests/ui/lower/name-mangler/onion.jsonc index bef8888fa1f..e64d6f0a549 100644 --- a/libs/@local/hashql/ast/tests/ui/lower/name-mangler/onion.jsonc +++ b/libs/@local/hashql/ast/tests/ui/lower/name-mangler/onion.jsonc @@ -6,7 +6,13 @@ "U", [ "*", - ["fn", { "#tuple": ["T", "U"] }, { "#struct": {} }, "_", ["as", "a", "T"]], - ["as", "a", "T"] + [ + "fn", + { "#tuple": ["T", "U"] }, + { "#struct": {} }, + "_", + ["as", { "#literal": 0 }, "T"] + ], + ["as", { "#literal": 0 }, "T"] ] ] diff --git a/libs/@local/hashql/ast/tests/ui/lower/name-mangler/path-arguments.jsonc b/libs/@local/hashql/ast/tests/ui/lower/name-mangler/path-arguments.jsonc index 824cae4c004..bd10868151e 100644 --- a/libs/@local/hashql/ast/tests/ui/lower/name-mangler/path-arguments.jsonc +++ b/libs/@local/hashql/ast/tests/ui/lower/name-mangler/path-arguments.jsonc @@ -1,3 +1,3 @@ //@ run: pass //@ description: paths with arguments should change -["let", "a", { "#literal": 2 }, "a"] +["let", "a", { "#literal": 2 }, "a"] diff --git a/libs/@local/hashql/ast/tests/ui/lower/name-mangler/path.jsonc b/libs/@local/hashql/ast/tests/ui/lower/name-mangler/path.jsonc index 53adbf91d13..0ec919e367a 100644 --- a/libs/@local/hashql/ast/tests/ui/lower/name-mangler/path.jsonc +++ b/libs/@local/hashql/ast/tests/ui/lower/name-mangler/path.jsonc @@ -1,3 +1,3 @@ //@ run: pass //@ description: non-rooted paths should change. -["let", "a", { "#literal": 2 }, "a::b"] +["let", "a", { "#literal": 2 }, "core::math"] diff --git a/libs/@local/hashql/ast/tests/ui/lower/name-mangler/type.jsonc b/libs/@local/hashql/ast/tests/ui/lower/name-mangler/type.jsonc index 6fb18dab03e..5d7e7c1f533 100644 --- a/libs/@local/hashql/ast/tests/ui/lower/name-mangler/type.jsonc +++ b/libs/@local/hashql/ast/tests/ui/lower/name-mangler/type.jsonc @@ -1,4 +1,4 @@ //@ run: pass //@ description: mangle the name of a simple type expression // We only need to verify that mangling works correctly, as -["type", "T", "X", ["as", "T", "T"]] +["type", "T", "Integer", ["as", { "#literal": 0 }, "T"]] diff --git a/libs/@local/hashql/ast/tests/ui/lower/name-mangler/type.stdout b/libs/@local/hashql/ast/tests/ui/lower/name-mangler/type.stdout index ada74400e1d..4e713f66ac7 100644 --- a/libs/@local/hashql/ast/tests/ui/lower/name-mangler/type.stdout +++ b/libs/@local/hashql/ast/tests/ui/lower/name-mangler/type.stdout @@ -1,18 +1,21 @@ -Expr#4294967040@25 +Expr#4294967040@23 ExprKind (Type) - TypeExpr#4294967040@25 (name: T:0) + TypeExpr#4294967040@23 (name: T:0) Type#4294967040@11 TypeKind (Path) - Path#4294967040@11 (rooted: false) - PathSegment#4294967040@10 (name: X) - Expr#4294967040@24 + Path#4294967040@11 (rooted: true) + PathSegment#4294967040@10 (name: kernel) + PathSegment#4294967040@10 (name: type) + PathSegment#4294967040@10 (name: Integer) + Expr#4294967040@22 ExprKind (As) - AsExpr#4294967040@24 - Expr#4294967040@19 - ExprKind (Path) - Path#4294967040@19 (rooted: false) - PathSegment#4294967040@18 (name: T) - Type#4294967040@23 + AsExpr#4294967040@22 + Expr#4294967040@17 + ExprKind (Literal) + LiteralExpr#4294967040@16 + Primitive (Integer) + Integer (0) + Type#4294967040@21 TypeKind (Path) - Path#4294967040@23 (rooted: false) - PathSegment#4294967040@22 (name: T:0) + Path#4294967040@21 (rooted: false) + PathSegment#4294967040@20 (name: T:0) diff --git a/libs/@local/hashql/ast/tests/ui/lower/sanitizer/constraint.jsonc b/libs/@local/hashql/ast/tests/ui/lower/sanitizer/constraint.jsonc index fdcbfba1cab..3f0f9c72590 100644 --- a/libs/@local/hashql/ast/tests/ui/lower/sanitizer/constraint.jsonc +++ b/libs/@local/hashql/ast/tests/ui/lower/sanitizer/constraint.jsonc @@ -1,8 +1,8 @@ //@ run: fail //@ description: Generic constraints with bounds should be sanitized and error out [ - "::core::math::add", - //~^ ERROR Remove this constraint from 'T' + "`+`", + //~^ ERROR `add` does not accept generic arguments { "#literal": 1 }, { "#literal": 2 } ] diff --git a/libs/@local/hashql/ast/tests/ui/lower/sanitizer/constraint.stderr b/libs/@local/hashql/ast/tests/ui/lower/sanitizer/constraint.stderr index 073a65a03db..b569ec9612d 100644 --- a/libs/@local/hashql/ast/tests/ui/lower/sanitizer/constraint.stderr +++ b/libs/@local/hashql/ast/tests/ui/lower/sanitizer/constraint.stderr @@ -1,6 +1,6 @@ error[expander::intrinsic-generic-arguments]: Generic arguments on intrinsic ╭▸ -4 │ "::core::math::add", - │ ━━━━━━━━━━━━━━ `add` does not accept generic arguments +4 │ "`+`", + │ ━━━━━━━━━━━━━━ `+` does not accept generic arguments │ - ╰ help: remove the generic arguments from `add` \ No newline at end of file + ╰ help: remove the generic arguments from `+` \ No newline at end of file diff --git a/libs/@local/hashql/ast/tests/ui/lower/sanitizer/special-form-value.jsonc b/libs/@local/hashql/ast/tests/ui/lower/sanitizer/special-form-value.jsonc index b01ee5136a5..6e76644c862 100644 --- a/libs/@local/hashql/ast/tests/ui/lower/sanitizer/special-form-value.jsonc +++ b/libs/@local/hashql/ast/tests/ui/lower/sanitizer/special-form-value.jsonc @@ -1,8 +1,8 @@ //@ run: fail //@ description: Ensure that special forms in invalid value positions are sanitized and error out [ - "add", + "`+`", "::kernel::special_form::let", //~^ ERROR Special form cannot be used as a value - "a" + { "#literal": 1 } ] diff --git a/libs/@local/hashql/ast/tests/ui/lower/sanitizer/special-form-value.stderr b/libs/@local/hashql/ast/tests/ui/lower/sanitizer/special-form-value.stderr index 20bce045db1..4a5fc02ff83 100644 --- a/libs/@local/hashql/ast/tests/ui/lower/sanitizer/special-form-value.stderr +++ b/libs/@local/hashql/ast/tests/ui/lower/sanitizer/special-form-value.stderr @@ -1,33 +1,7 @@ -error[expander::unresolved-variable]: Unresolved variable +error[sanitizer::invalid-special-form]: Invalid special form ╭▸ -7 │ "a" - │ ━ cannot find `a` in this scope +5 │ "::kernel::special_form::let", + │ ━━━━━━━━━━━━━━━━━━━━━━━━━━━ Special form cannot be used as a value │ - ╰ note: this could be a typo, a name used outside its scope, or a missing declaration; if it is a function or type from another module, you may need to import it first -help: a similar imported name exists - ╭╴ -7 - "a" -7 + "↑" - ├╴ -7 - "a" -7 + "√" - ├╴ -7 - "a" -7 + "∛" - ├╴ -7 │ "access" - ├╴ +++++ -7 │ "as" - ╰╴ + - -error[expander::unresolved-variable]: Unresolved variable - ╭▸ -4 │ "add", - │ ━━━ cannot find `add` in this scope - │ - ├ help: bring it into scope: `use ::core::math::add in` - ╰ note: this could be a typo, a name used outside its scope, or a missing declaration; if it is a function or type from another module, you may need to import it first -help: use one of these fully qualified paths - ╭╴ -4 │ "::core::math::add", - ╰╴ ++++++++++++++ \ No newline at end of file + ├ help: The special form 'let' must be called directly with arguments. It cannot be used as a value expression or passed to other functions. Instead, use it in a direct function call syntax. + ╰ note: Special forms in HashQL are compile-time constructs that must be expanded during compilation. They can only be used in call position with their expected arguments, not as regular values, types, or function references. \ No newline at end of file diff --git a/libs/@local/hashql/compiletest/test-report.txt b/libs/@local/hashql/compiletest/test-report.txt index aa1d9a15a68..e7f740d1588 100644 --- a/libs/@local/hashql/compiletest/test-report.txt +++ b/libs/@local/hashql/compiletest/test-report.txt @@ -1,3554 +1,1772 @@ -2026-06-15T13:31:06.553503Z  INFO hashql_compiletest::harness::test::discover: adding entry point path=/Users/bmahmoud/projects/hash/hash/libs/@local/hashql/hir tests=/Users/bmahmoud/projects/hash/hash/libs/@local/hashql/hir/tests/ui -2026-06-15T13:31:06.553696Z  INFO hashql_compiletest::harness::test::discover: adding entry point path=/Users/bmahmoud/projects/hash/hash/libs/@local/hashql/ast tests=/Users/bmahmoud/projects/hash/hash/libs/@local/hashql/ast/tests/ui -2026-06-15T13:31:06.553712Z  INFO hashql_compiletest::harness::test::discover: adding entry point path=/Users/bmahmoud/projects/hash/hash/libs/@local/hashql/eval tests=/Users/bmahmoud/projects/hash/hash/libs/@local/hashql/eval/tests/ui -2026-06-15T13:31:06.553724Z  INFO hashql_compiletest::harness::test::discover: adding entry point path=/Users/bmahmoud/projects/hash/hash/libs/@local/hashql/mir tests=/Users/bmahmoud/projects/hash/hash/libs/@local/hashql/mir/tests/ui -2026-06-15T13:31:06.559700Z  INFO hashql_compiletest::runner: found 4 test groups with 544 test cases, in 6.466625ms groups=4 cases=544 elapsed=6.482917ms -2026-06-15T13:31:06.565143Z  INFO hashql_compiletest::runner: converted 4 (544) test groups into 4 (544) trial groups, in 5.402541ms groups=4 cases=544 elapsed=5.402833ms -2026-06-15T13:31:06.565768Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-mir" trial=["pass", "forward_substitution"] -2026-06-15T13:31:06.565754Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-mir" trial=["pass", "forward_substitution"] -2026-06-15T13:31:06.565770Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "name-mangler"] -2026-06-15T13:31:06.565770Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] -2026-06-15T13:31:06.565771Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "thunking"] -2026-06-15T13:31:06.565768Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-mir" trial=["pass", "inst_simplify"] -2026-06-15T13:31:06.565772Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-mir" trial=["pass", "inst_simplify"] -2026-06-15T13:31:06.565787Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["reify"] -2026-06-15T13:31:06.565787Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-mir" trial=["reify"] -2026-06-15T13:31:06.565792Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-mir" trial=["pass", "inst_simplify"] -2026-06-15T13:31:06.565790Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-mir" trial=["pass", "inst_simplify"] -2026-06-15T13:31:06.565756Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-mir" trial=["pass", "cfg_simplify"] -2026-06-15T13:31:06.565795Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] -2026-06-15T13:31:06.565768Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-mir" trial=["pass", "inst_simplify"] -2026-06-15T13:31:06.565768Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-mir" trial=["pass", "inst_simplify"] -2026-06-15T13:31:06.565768Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-mir" trial=["pass", "inst_simplify"] -2026-06-15T13:31:06.565770Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-mir" trial=["pass", "post_inline"] -2026-06-15T13:31:06.565797Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-mir" trial=["pass", "inst_simplify"] -2026-06-15T13:31:06.571167Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] result=Ok(()) -2026-06-15T13:31:06.571183Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] -2026-06-15T13:31:06.571122Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "name-mangler"] result=Ok(()) -2026-06-15T13:31:06.571138Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] result=Err(Expected trial to pass, but it failed -├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:390:24 -╰╴1 additional opaque attachment) -2026-06-15T13:31:06.571381Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] -2026-06-15T13:31:06.571358Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "name-mangler"] -2026-06-15T13:31:06.572176Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "thunking"] result=Ok(()) -2026-06-15T13:31:06.572185Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "thunking"] -2026-06-15T13:31:06.572283Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["reify"] result=Ok(()) -2026-06-15T13:31:06.572303Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["reify"] -2026-06-15T13:31:06.572784Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] result=Err(Expected trial to pass, but it failed -├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:390:24 -╰╴1 additional opaque attachment) -2026-06-15T13:31:06.572847Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] -2026-06-15T13:31:06.572979Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "name-mangler"] result=Ok(()) -2026-06-15T13:31:06.572995Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "name-mangler"] -2026-06-15T13:31:06.573166Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-mir" trial=["reify"] result=Ok(()) -2026-06-15T13:31:06.573177Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-mir" trial=["reify"] -2026-06-15T13:31:06.573314Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] result=Ok(()) -2026-06-15T13:31:06.573327Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] -2026-06-15T13:31:06.573358Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-mir" trial=["pass", "inst_simplify"] result=Ok(()) -2026-06-15T13:31:06.573380Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-mir" trial=["pass", "inst_simplify"] result=Ok(()) -2026-06-15T13:31:06.573380Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-mir" trial=["pass", "inst_simplify"] result=Ok(()) -2026-06-15T13:31:06.573397Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-mir" trial=["pass", "inst_simplify"] result=Ok(()) -2026-06-15T13:31:06.573404Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-mir" trial=["pass", "administrative_reduction"] -2026-06-15T13:31:06.573410Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-mir" trial=["pass", "forward_substitution"] result=Ok(()) -2026-06-15T13:31:06.573377Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-mir" trial=["pass", "inst_simplify"] result=Ok(()) -2026-06-15T13:31:06.573400Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-mir" trial=["pass", "cfg_simplify"] result=Ok(()) -2026-06-15T13:31:06.573403Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["reify"] -2026-06-15T13:31:06.573375Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-mir" trial=["pass", "inst_simplify"] result=Ok(()) -2026-06-15T13:31:06.573412Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-mir" trial=["pass", "inst_simplify"] -2026-06-15T13:31:06.573498Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-mir" trial=["reify"] -2026-06-15T13:31:06.573355Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-mir" trial=["pass", "inst_simplify"] result=Ok(()) -2026-06-15T13:31:06.573423Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-mir" trial=["pass", "forward_substitution"] -2026-06-15T13:31:06.573445Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-mir" trial=["pass", "inst_simplify"] -2026-06-15T13:31:06.573460Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-mir" trial=["reify"] -2026-06-15T13:31:06.573391Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-mir" trial=["pass", "inst_simplify"] -2026-06-15T13:31:06.573536Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-mir" trial=["pass", "inst_simplify"] -2026-06-15T13:31:06.573572Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["reify"] result=Err(Expected trial to pass, but it failed -├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:390:24 -╰╴1 additional opaque attachment) -2026-06-15T13:31:06.573628Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["reify"] -2026-06-15T13:31:06.573703Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-mir" trial=["pass", "post_inline"] result=Ok(()) -2026-06-15T13:31:06.573715Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-mir" trial=["pass", "post_inline"] -2026-06-15T13:31:06.573792Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "thunking"] result=Ok(()) -2026-06-15T13:31:06.573801Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "normalization"] -2026-06-15T13:31:06.574229Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] result=Err(Expected trial to pass, but it failed -├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:390:24 -╰╴1 additional opaque attachment) -2026-06-15T13:31:06.574257Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] -2026-06-15T13:31:06.574344Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "name-mangler"] result=Err(Expected trial to pass, but it failed -├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:390:24 -╰╴1 additional opaque attachment) -2026-06-15T13:31:06.574367Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "name-mangler"] -2026-06-15T13:31:06.574663Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] result=Err(Failed to verify annotation +2026-06-15T14:19:06.003974Z  INFO hashql_compiletest::harness::test::discover: adding entry point path=/Users/bmahmoud/projects/hash/hash/libs/@local/hashql/hir tests=/Users/bmahmoud/projects/hash/hash/libs/@local/hashql/hir/tests/ui +2026-06-15T14:19:06.004183Z  INFO hashql_compiletest::harness::test::discover: adding entry point path=/Users/bmahmoud/projects/hash/hash/libs/@local/hashql/ast tests=/Users/bmahmoud/projects/hash/hash/libs/@local/hashql/ast/tests/ui +2026-06-15T14:19:06.004200Z  INFO hashql_compiletest::harness::test::discover: adding entry point path=/Users/bmahmoud/projects/hash/hash/libs/@local/hashql/eval tests=/Users/bmahmoud/projects/hash/hash/libs/@local/hashql/eval/tests/ui +2026-06-15T14:19:06.004212Z  INFO hashql_compiletest::harness::test::discover: adding entry point path=/Users/bmahmoud/projects/hash/hash/libs/@local/hashql/mir tests=/Users/bmahmoud/projects/hash/hash/libs/@local/hashql/mir/tests/ui +2026-06-15T14:19:06.006750Z  INFO hashql_compiletest::runner: found 4 test groups with 544 test cases, in 3.016583ms groups=4 cases=544 elapsed=3.036416ms +2026-06-15T14:19:06.013166Z  INFO hashql_compiletest::runner: converted 4 (544) test groups into 4 (544) trial groups, in 6.358084ms groups=4 cases=544 elapsed=6.358375ms +2026-06-15T14:19:06.013657Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-mir" trial=["pass", "forward_substitution"] +2026-06-15T14:19:06.013658Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "inference", "intrinsics"] +2026-06-15T14:19:06.013675Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-mir" trial=["pass", "pre_inline"] +2026-06-15T14:19:06.013667Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] +2026-06-15T14:19:06.013667Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-mir" trial=["pass", "post_inline"] +2026-06-15T14:19:06.013674Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "name-mangler"] +2026-06-15T14:19:06.013667Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "thunking"] +2026-06-15T14:19:06.013667Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "import-resolver"] +2026-06-15T14:19:06.013670Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "import-resolver"] +2026-06-15T14:19:06.013677Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "sanitizer"] +2026-06-15T14:19:06.013677Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-mir" trial=["pass", "pre_inline"] +2026-06-15T14:19:06.013689Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "checking"] +2026-06-15T14:19:06.013676Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "import-resolver"] +2026-06-15T14:19:06.013670Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-mir" trial=["pass", "inline"] +2026-06-15T14:19:06.013667Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-mir" trial=["pass", "cfg_simplify"] +2026-06-15T14:19:06.013667Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] +2026-06-15T14:19:06.013659Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "import-resolver", "continue"] +2026-06-15T14:19:06.013670Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-mir" trial=["pass", "inline"] +2026-06-15T14:19:06.018658Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "name-mangler"] result=Ok(()) +2026-06-15T14:19:06.018703Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] result=Ok(()) +2026-06-15T14:19:06.018658Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] result=Ok(()) +2026-06-15T14:19:06.018843Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] +2026-06-15T14:19:06.018796Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "name-mangler"] +2026-06-15T14:19:06.018737Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "import-resolver"] result=Ok(()) +2026-06-15T14:19:06.018730Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "import-resolver"] result=Ok(()) +2026-06-15T14:19:06.018820Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] +2026-06-15T14:19:06.018932Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "import-resolver"] +2026-06-15T14:19:06.018882Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "import-resolver"] +2026-06-15T14:19:06.018659Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "import-resolver"] result=Ok(()) +2026-06-15T14:19:06.019022Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "import-resolver"] +2026-06-15T14:19:06.019285Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "sanitizer"] result=Ok(()) +2026-06-15T14:19:06.019302Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "sanitizer"] +2026-06-15T14:19:06.019482Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "inference", "intrinsics"] result=Ok(()) +2026-06-15T14:19:06.019497Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "inference"] +2026-06-15T14:19:06.019598Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "thunking"] result=Ok(()) +2026-06-15T14:19:06.019623Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "thunking"] +2026-06-15T14:19:06.019689Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "checking"] result=Ok(()) +2026-06-15T14:19:06.019705Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "checking"] +2026-06-15T14:19:06.019940Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "import-resolver", "continue"] result=Ok(()) +2026-06-15T14:19:06.019952Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "import-resolver", "continue"] +2026-06-15T14:19:06.020197Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "name-mangler"] result=Ok(()) +2026-06-15T14:19:06.020215Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "name-mangler"] +2026-06-15T14:19:06.020300Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "import-resolver"] result=Ok(()) +2026-06-15T14:19:06.020330Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "import-resolver"] +2026-06-15T14:19:06.020342Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] result=Ok(()) +2026-06-15T14:19:06.020356Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] +2026-06-15T14:19:06.020447Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] result=Ok(()) +2026-06-15T14:19:06.020477Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] +2026-06-15T14:19:06.020525Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-mir" trial=["pass", "cfg_simplify"] result=Ok(()) +2026-06-15T14:19:06.020540Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-mir" trial=["reify"] +2026-06-15T14:19:06.020565Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-mir" trial=["pass", "pre_inline"] result=Ok(()) +2026-06-15T14:19:06.020587Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-mir" trial=["pass", "pre_inline"] +2026-06-15T14:19:06.020609Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-mir" trial=["pass", "pre_inline"] result=Ok(()) +2026-06-15T14:19:06.020624Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-mir" trial=["pass", "pre_inline"] +2026-06-15T14:19:06.020197Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "import-resolver"] result=Ok(()) +2026-06-15T14:19:06.020724Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "import-resolver"] +2026-06-15T14:19:06.020747Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "sanitizer"] result=Ok(()) +2026-06-15T14:19:06.020762Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "sanitizer"] +2026-06-15T14:19:06.020763Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "inference"] result=Ok(()) +2026-06-15T14:19:06.020781Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "inference"] +2026-06-15T14:19:06.020861Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-mir" trial=["pass", "post_inline"] result=Ok(()) +2026-06-15T14:19:06.020874Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-mir" trial=["pass", "post_inline"] +2026-06-15T14:19:06.020568Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "import-resolver"] result=Ok(()) +2026-06-15T14:19:06.020987Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "thunking"] result=Ok(()) +2026-06-15T14:19:06.020995Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "import-resolver"] +2026-06-15T14:19:06.021003Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "normalization"] +2026-06-15T14:19:06.021154Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "checking"] result=Ok(()) +2026-06-15T14:19:06.021180Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "checking"] +2026-06-15T14:19:06.021368Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "import-resolver", "continue"] result=Ok(()) +2026-06-15T14:19:06.021381Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "import-resolver", "continue"] +2026-06-15T14:19:06.021444Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "name-mangler"] result=Ok(()) +2026-06-15T14:19:06.021458Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "name-mangler"] +2026-06-15T14:19:06.021611Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "import-resolver"] result=Ok(()) +2026-06-15T14:19:06.021621Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "import-resolver"] +2026-06-15T14:19:06.021630Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] result=Ok(()) +2026-06-15T14:19:06.021641Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] +2026-06-15T14:19:06.021796Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] result=Ok(()) +2026-06-15T14:19:06.021811Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] +2026-06-15T14:19:06.021995Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "import-resolver"] result=Ok(()) +2026-06-15T14:19:06.022009Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "import-resolver"] +2026-06-15T14:19:06.022009Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "sanitizer"] result=Err(Failed to verify annotation ├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:321:29 ├╴1 additional opaque attachment │ -╰┬▶ unfulfilled annotation: DiagnosticAnnotation { category: None, severity: Error, message: "expected a simple name to import", line: Some(6) } did not match any emitted diagnostics +╰┬▶ unfulfilled annotation: DiagnosticAnnotation { category: None, severity: Error, message: "`add` does not accept generic arguments", line: Some(4) } did not match any emitted diagnostics │ ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:151:25 │ ╰▶ unexpected diagnostic: - error[expander::invalid-use-imports]: Invalid use imports + error[expander::intrinsic-generic-arguments]: Generic arguments on intrinsic ╭▸ - 6 │ "::core::math::X", - │ ━━━━━━━━━━━━━━━ expected `*`, a tuple of names, or a struct of aliases + 4 │ "`+`", + │ ━━━━━━━━━━━━━━ `+` does not accept generic arguments │ - ╰ help: use `*` to import everything, `(a, b)` to import specific names, or `(a: alias, b: _)` to import with aliases + ╰ help: remove the generic arguments from `+` ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:171:21) -2026-06-15T13:31:06.574714Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] -2026-06-15T13:31:06.575018Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["reify"] result=Ok(()) -2026-06-15T13:31:06.575037Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["reify"] -2026-06-15T13:31:06.575237Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-mir" trial=["reify"] result=Ok(()) -2026-06-15T13:31:06.575247Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-mir" trial=["reify"] -2026-06-15T13:31:06.575254Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["reify"] result=Ok(()) -2026-06-15T13:31:06.575259Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-mir" trial=["pass", "inst_simplify"] result=Ok(()) -2026-06-15T13:31:06.575276Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-mir" trial=["reify"] -2026-06-15T13:31:06.575264Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["reify"] -2026-06-15T13:31:06.575325Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-mir" trial=["pass", "inst_simplify"] result=Ok(()) -2026-06-15T13:31:06.575340Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-mir" trial=["pass", "inst_simplify"] -2026-06-15T13:31:06.575380Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-mir" trial=["pass", "inst_simplify"] result=Ok(()) -2026-06-15T13:31:06.575392Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-mir" trial=["reify"] -2026-06-15T13:31:06.575427Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "normalization"] result=Ok(()) -2026-06-15T13:31:06.575440Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "normalization"] -2026-06-15T13:31:06.575428Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-mir" trial=["reify"] result=Ok(()) -2026-06-15T13:31:06.575457Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-mir" trial=["pass", "administrative_reduction"] result=Ok(()) -2026-06-15T13:31:06.575499Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-mir" trial=["pass", "administrative_reduction"] -2026-06-15T13:31:06.575516Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-mir" trial=["reify"] -2026-06-15T13:31:06.575593Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-mir" trial=["pass", "inst_simplify"] result=Ok(()) -2026-06-15T13:31:06.575604Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-mir" trial=["pass", "inst_simplify"] -2026-06-15T13:31:06.575770Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "name-mangler"] result=Ok(()) -2026-06-15T13:31:06.575798Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "name-mangler"] -2026-06-15T13:31:06.575911Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-mir" trial=["pass", "forward_substitution"] result=Ok(()) -2026-06-15T13:31:06.575926Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-mir" trial=["pass", "inst_simplify"] -2026-06-15T13:31:06.575864Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] result=Err(Failed to verify annotation -├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:321:29 +2026-06-15T14:19:06.022117Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "import-resolver"] +2026-06-15T14:19:06.022175Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-mir" trial=["pass", "pre_inline"] result=Ok(()) +2026-06-15T14:19:06.022188Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-mir" trial=["pass", "pre_inline"] +2026-06-15T14:19:06.022223Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "inference"] result=Ok(()) +2026-06-15T14:19:06.022238Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "inference"] +2026-06-15T14:19:06.022262Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-mir" trial=["pass", "pre_inline"] result=Ok(()) +2026-06-15T14:19:06.022276Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-mir" trial=["pass", "pre_inline"] +2026-06-15T14:19:06.022312Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "import-resolver"] result=Ok(()) +2026-06-15T14:19:06.022332Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "import-resolver"] +2026-06-15T14:19:06.022484Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "normalization"] result=Ok(()) +2026-06-15T14:19:06.022495Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "normalization"] +2026-06-15T14:19:06.022548Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-mir" trial=["pass", "inline"] result=Ok(()) +2026-06-15T14:19:06.022561Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-mir" trial=["pass", "inline"] +2026-06-15T14:19:06.022674Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "name-mangler"] result=Ok(()) +2026-06-15T14:19:06.022688Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "name-mangler"] +2026-06-15T14:19:06.022794Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-mir" trial=["reify"] result=Ok(()) +2026-06-15T14:19:06.022808Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-mir" trial=["reify"] +2026-06-15T14:19:06.022832Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "import-resolver"] result=Ok(()) +2026-06-15T14:19:06.022843Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "import-resolver"] +2026-06-15T14:19:06.022884Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "import-resolver", "continue"] result=Ok(()) +2026-06-15T14:19:06.022897Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "import-resolver", "continue"] +2026-06-15T14:19:06.022967Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] result=Ok(()) +2026-06-15T14:19:06.022983Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] +2026-06-15T14:19:06.023163Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "import-resolver"] result=Err(Expected trial to pass, but it failed +├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:390:24 +╰╴1 additional opaque attachment) +2026-06-15T14:19:06.023204Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "import-resolver"] +2026-06-15T14:19:06.023213Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] result=Ok(()) +2026-06-15T14:19:06.023228Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] +2026-06-15T14:19:06.023504Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-mir" trial=["pass", "pre_inline"] result=Ok(()) +2026-06-15T14:19:06.023514Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-mir" trial=["pass", "pre_inline"] +2026-06-15T14:19:06.023644Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "import-resolver"] result=Ok(()) +2026-06-15T14:19:06.023669Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "import-resolver"] +2026-06-15T14:19:06.023218Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "import-resolver"] result=Ok(()) +2026-06-15T14:19:06.023780Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "import-resolver"] +2026-06-15T14:19:06.023916Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "name-mangler"] result=Err(Expected trial to pass, but it failed +├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:390:24 +╰╴1 additional opaque attachment) +2026-06-15T14:19:06.023949Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "name-mangler"] +2026-06-15T14:19:06.023960Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "inference"] result=Ok(()) +2026-06-15T14:19:06.023973Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "inference"] +2026-06-15T14:19:06.024049Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "import-resolver"] result=Ok(()) +2026-06-15T14:19:06.024060Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "import-resolver"] +2026-06-15T14:19:06.024074Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-mir" trial=["pass", "pre_inline"] result=Ok(()) +2026-06-15T14:19:06.024093Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-mir" trial=["pass", "pre_inline"] +2026-06-15T14:19:06.024177Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-mir" trial=["pass", "inline"] result=Ok(()) +2026-06-15T14:19:06.024188Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-mir" trial=["pass", "inline"] +2026-06-15T14:19:06.024235Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] result=Err(Expected trial to pass, but it failed +├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:390:24 +╰╴1 additional opaque attachment) +2026-06-15T14:19:06.024268Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] +2026-06-15T14:19:06.024467Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-mir" trial=["reify"] result=Ok(()) +2026-06-15T14:19:06.024478Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-mir" trial=["reify"] +2026-06-15T14:19:06.024505Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "normalization"] result=Ok(()) +2026-06-15T14:19:06.024536Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "normalization"] +2026-06-15T14:19:06.024609Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] result=Ok(()) +2026-06-15T14:19:06.024621Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] +2026-06-15T14:19:06.024661Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "import-resolver", "continue"] result=Ok(()) +2026-06-15T14:19:06.024691Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "import-resolver"] +2026-06-15T14:19:06.024769Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "import-resolver"] result=Ok(()) +2026-06-15T14:19:06.024783Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "import-resolver"] +2026-06-15T14:19:06.024858Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "import-resolver"] result=Ok(()) +2026-06-15T14:19:06.024870Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "import-resolver"] +2026-06-15T14:19:06.025184Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "name-mangler"] result=Ok(()) +2026-06-15T14:19:06.025197Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "name-mangler"] +2026-06-15T14:19:06.025302Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "import-resolver"] result=Ok(()) +2026-06-15T14:19:06.025314Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "import-resolver"] +2026-06-15T14:19:06.025364Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "inference"] result=Ok(()) +2026-06-15T14:19:06.025376Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "inference"] +2026-06-15T14:19:06.025413Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-mir" trial=["pass", "pre_inline"] result=Ok(()) +2026-06-15T14:19:06.025431Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-mir" trial=["pass", "dse"] +2026-06-15T14:19:06.025446Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] result=Ok(()) +2026-06-15T14:19:06.025460Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] +2026-06-15T14:19:06.025722Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-mir" trial=["pass", "pre_inline"] result=Ok(()) +2026-06-15T14:19:06.025759Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "ctor"] +2026-06-15T14:19:06.025891Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-mir" trial=["reify"] result=Ok(()) +2026-06-15T14:19:06.025907Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-mir" trial=["reify"] +2026-06-15T14:19:06.026049Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] result=Ok(()) +2026-06-15T14:19:06.026065Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] +2026-06-15T14:19:06.026081Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "import-resolver"] result=Ok(()) +2026-06-15T14:19:06.026083Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "import-resolver"] result=Ok(()) +2026-06-15T14:19:06.026102Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "import-resolver"] +2026-06-15T14:19:06.026119Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "import-resolver"] +2026-06-15T14:19:06.026054Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-mir" trial=["pass", "inline"] result=Ok(()) +2026-06-15T14:19:06.026238Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-mir" trial=["pass", "inline"] +2026-06-15T14:19:06.026494Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "name-mangler"] result=Err(Expected trial to pass, but it failed +├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:390:24 +╰╴1 additional opaque attachment) +2026-06-15T14:19:06.026530Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "name-mangler"] +2026-06-15T14:19:06.026514Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "normalization"] result=Ok(()) +2026-06-15T14:19:06.026759Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "normalization"] +2026-06-15T14:19:06.026811Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] result=Err(Expected trial to pass, but it failed +├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:390:24 +╰╴1 additional opaque attachment) +2026-06-15T14:19:06.026840Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] +2026-06-15T14:19:06.026530Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "import-resolver"] result=Ok(()) +2026-06-15T14:19:06.026897Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "import-resolver"] +2026-06-15T14:19:06.026909Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "inference"] result=Ok(()) +2026-06-15T14:19:06.026927Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "inference"] +2026-06-15T14:19:06.026982Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-mir" trial=["pass", "dse"] result=Ok(()) +2026-06-15T14:19:06.026994Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-mir" trial=["pass", "dse"] +2026-06-15T14:19:06.027308Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "ctor"] result=Ok(()) +2026-06-15T14:19:06.027321Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "ctor"] +2026-06-15T14:19:06.027442Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "import-resolver"] result=Ok(()) +2026-06-15T14:19:06.027466Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "import-resolver"] +2026-06-15T14:19:06.027474Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "import-resolver"] result=Ok(()) +2026-06-15T14:19:06.027489Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "import-resolver"] +2026-06-15T14:19:06.027499Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "import-resolver"] result=Ok(()) +2026-06-15T14:19:06.027513Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "import-resolver"] +2026-06-15T14:19:06.027519Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "import-resolver"] result=Ok(()) +2026-06-15T14:19:06.027536Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "import-resolver"] +2026-06-15T14:19:06.027615Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] result=Ok(()) +2026-06-15T14:19:06.027628Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] +2026-06-15T14:19:06.027761Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "name-mangler"] result=Ok(()) +2026-06-15T14:19:06.027777Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "name-mangler"] +2026-06-15T14:19:06.027617Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-mir" trial=["reify"] result=Ok(()) +2026-06-15T14:19:06.027849Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-mir" trial=["reify"] +2026-06-15T14:19:06.028058Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] result=Ok(()) +2026-06-15T14:19:06.028073Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] +2026-06-15T14:19:06.028257Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "normalization"] result=Ok(()) +2026-06-15T14:19:06.028269Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "normalization"] +2026-06-15T14:19:06.028343Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "import-resolver"] result=Ok(()) +2026-06-15T14:19:06.028378Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "import-resolver"] +2026-06-15T14:19:06.028437Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "ctor"] result=Ok(()) +2026-06-15T14:19:06.028423Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "inference"] result=Err(Expected trial to pass, but it failed +├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:390:24 +╰╴1 additional opaque attachment) +2026-06-15T14:19:06.028464Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "inference"] +2026-06-15T14:19:06.028562Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "import-resolver"] result=Ok(()) +2026-06-15T14:19:06.028574Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "import-resolver"] +2026-06-15T14:19:06.028693Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-mir" trial=["pass", "dse"] result=Ok(()) +2026-06-15T14:19:06.028708Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "import-resolver"] result=Ok(()) +2026-06-15T14:19:06.028450Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "ctor"] +2026-06-15T14:19:06.028726Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "import-resolver"] +2026-06-15T14:19:06.028710Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-mir" trial=["pass", "dse"] +2026-06-15T14:19:06.028793Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] result=Ok(()) +2026-06-15T14:19:06.028805Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] +2026-06-15T14:19:06.028777Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "import-resolver"] result=Ok(()) +2026-06-15T14:19:06.028899Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] result=Err(source parsing: invalid syntax in test code +├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:98:10 ├╴1 additional opaque attachment │ -╰┬▶ unfulfilled annotation: DiagnosticAnnotation { category: None, severity: Error, message: "expected a simple identifier for the `let` binding name", line: Some(10) } did not match any emitted diagnostics - │ ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:151:25 - │ - ╰▶ unfulfilled annotation: DiagnosticAnnotation { category: None, severity: Error, message: "expected a simple identifier for the `let` binding name", line: Some(15) } did not match any emitted diagnostics - ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:151:25) -2026-06-15T13:31:06.576053Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] -2026-06-15T13:31:06.576116Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] result=Ok(()) -2026-06-15T13:31:06.576135Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] -2026-06-15T13:31:06.576258Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["reify"] result=Ok(()) -2026-06-15T13:31:06.576275Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["reify"] -2026-06-15T13:31:06.576523Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-mir" trial=["reify"] result=Ok(()) -2026-06-15T13:31:06.576532Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-mir" trial=["reify"] -2026-06-15T13:31:06.576746Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["reify"] result=Ok(()) -2026-06-15T13:31:06.576755Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["reify"] -2026-06-15T13:31:06.576762Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-mir" trial=["reify"] result=Ok(()) -2026-06-15T13:31:06.576771Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-mir" trial=["reify"] -2026-06-15T13:31:06.576985Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "normalization"] result=Ok(()) -2026-06-15T13:31:06.576994Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "normalization"] -2026-06-15T13:31:06.577078Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "name-mangler"] result=Err(Expected trial to pass, but it failed -├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:390:24 -╰╴1 additional opaque attachment) -2026-06-15T13:31:06.577109Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "name-mangler"] -2026-06-15T13:31:06.577184Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-mir" trial=["pass", "inst_simplify"] result=Ok(()) -2026-06-15T13:31:06.577200Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "inference", "intrinsics"] -2026-06-15T13:31:06.577185Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-mir" trial=["pass", "inst_simplify"] result=Ok(()) -2026-06-15T13:31:06.577289Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-mir" trial=["pass", "inst_simplify"] -2026-06-15T13:31:06.577444Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-mir" trial=["reify"] result=Ok(()) -2026-06-15T13:31:06.577453Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-mir" trial=["reify"] -2026-06-15T13:31:06.577627Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-mir" trial=["pass", "inst_simplify"] result=Ok(()) -2026-06-15T13:31:06.577643Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-mir" trial=["pass", "inst_simplify"] -2026-06-15T13:31:06.577636Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] result=Err(Expected trial to pass, but it failed -├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:390:24 -╰╴1 additional opaque attachment) -2026-06-15T13:31:06.577676Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] -2026-06-15T13:31:06.577680Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["reify"] result=Ok(()) -2026-06-15T13:31:06.577721Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["reify"] -2026-06-15T13:31:06.578000Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] result=Err(Failed to verify annotation +╰─▶ [Error] J-Expr syntax / Parser / Array / Empty array not allowed + ╰╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:98:10) +2026-06-15T14:19:06.028936Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "import-resolver"] +2026-06-15T14:19:06.028980Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "name-mangler"] result=Ok(()) +2026-06-15T14:19:06.028993Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "name-mangler"] +2026-06-15T14:19:06.028944Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] +2026-06-15T14:19:06.029218Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] result=Ok(()) +2026-06-15T14:19:06.029231Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] +2026-06-15T14:19:06.029650Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "import-resolver"] result=Ok(()) +2026-06-15T14:19:06.029663Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "import-resolver"] +2026-06-15T14:19:06.029667Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "import-resolver"] result=Err(Failed to verify annotation ├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:321:29 ├╴1 additional opaque attachment │ ╰─▶ unexpected diagnostic: - error[expander::unresolved-variable]: Unresolved variable - ╭▸ - 11 │ "x" - │ ━ cannot find `x` in this scope - │ - ╰ note: this could be a typo, a name used outside its scope, or a missing declaration; if it is a function or type from another module, you may need to import it first - help: a similar imported name exists - ╭╴ - 11 - "x" - 11 + "~" - ├╴ - 11 - "x" - 11 + "↑" - ├╴ - 11 - "x" - 11 + "√" - ├╴ - 11 - "x" - 11 + "∛" - ├╴ - 11 │ "index" - ╰╴ ++++ - ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:171:21) -2026-06-15T13:31:06.578049Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] -2026-06-15T13:31:06.578085Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-mir" trial=["reify"] result=Ok(()) -2026-06-15T13:31:06.578095Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-mir" trial=["reify"] -2026-06-15T13:31:06.578255Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["reify"] result=Ok(()) -2026-06-15T13:31:06.578264Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "specialization"] -2026-06-15T13:31:06.578415Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "name-mangler"] result=Err(Expected trial to pass, but it failed -├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:390:24 -╰╴1 additional opaque attachment) -2026-06-15T13:31:06.578444Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "name-mangler"] -2026-06-15T13:31:06.578453Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-mir" trial=["reify"] result=Ok(()) -2026-06-15T13:31:06.578468Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-mir" trial=["pass", "administrative_reduction"] result=Ok(()) -2026-06-15T13:31:06.578503Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-mir" trial=["pass", "administrative_reduction"] -2026-06-15T13:31:06.578532Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-mir" trial=["reify"] result=Ok(()) -2026-06-15T13:31:06.578541Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-mir" trial=["reify"] -2026-06-15T13:31:06.578499Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-mir" trial=["reify"] -2026-06-15T13:31:06.578712Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "inference", "intrinsics"] result=Ok(()) -2026-06-15T13:31:06.578723Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "inference"] -2026-06-15T13:31:06.578903Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-mir" trial=["reify"] result=Ok(()) -2026-06-15T13:31:06.578914Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-mir" trial=["reify"] -2026-06-15T13:31:06.578919Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-mir" trial=["pass", "inst_simplify"] result=Ok(()) -2026-06-15T13:31:06.578930Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-mir" trial=["pass", "inst_simplify"] -2026-06-15T13:31:06.579020Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "normalization"] result=Ok(()) -2026-06-15T13:31:06.579028Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "normalization"] -2026-06-15T13:31:06.579075Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["reify"] result=Ok(()) -2026-06-15T13:31:06.579059Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] result=Err(Expected trial to pass, but it failed -├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:390:24 -╰╴1 additional opaque attachment) -2026-06-15T13:31:06.579086Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["reify"] -2026-06-15T13:31:06.579105Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] -2026-06-15T13:31:06.579142Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-mir" trial=["pass", "inst_simplify"] result=Ok(()) -2026-06-15T13:31:06.579157Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-mir" trial=["pass", "inst_simplify"] -2026-06-15T13:31:06.579212Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] result=Ok(()) -2026-06-15T13:31:06.579222Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] -2026-06-15T13:31:06.579803Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "name-mangler"] result=Err(Expected trial to pass, but it failed -├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:390:24 -╰╴1 additional opaque attachment) -2026-06-15T13:31:06.579829Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "name-mangler"] -2026-06-15T13:31:06.579976Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "inference"] result=Ok(()) -2026-06-15T13:31:06.579988Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "inference"] -2026-06-15T13:31:06.580052Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-mir" trial=["reify"] result=Ok(()) -2026-06-15T13:31:06.580064Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-mir" trial=["reify"] -2026-06-15T13:31:06.580055Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-mir" trial=["reify"] result=Ok(()) -2026-06-15T13:31:06.580108Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-mir" trial=["reify"] -2026-06-15T13:31:06.580318Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["reify"] result=Ok(()) -2026-06-15T13:31:06.580328Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["reify"] -2026-06-15T13:31:06.580410Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "normalization"] result=Ok(()) -2026-06-15T13:31:06.580419Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "normalization"] -2026-06-15T13:31:06.580415Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] result=Err(Failed to verify annotation -├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:321:29 -├╴1 additional opaque attachment -│ -╰─▶ unfulfilled annotation: DiagnosticAnnotation { category: None, severity: Error, message: "cannot use a literal value as a type", line: Some(7) } did not match any emitted diagnostics - ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:151:25) -2026-06-15T13:31:06.580452Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] -2026-06-15T13:31:06.580506Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] result=Err(Expected trial to pass, but it failed -├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:390:24 -╰╴1 additional opaque attachment) -2026-06-15T13:31:06.580543Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] -2026-06-15T13:31:06.580522Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-mir" trial=["reify"] result=Ok(()) -2026-06-15T13:31:06.580583Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-mir" trial=["reify"] -2026-06-15T13:31:06.580605Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-mir" trial=["pass", "inst_simplify"] result=Ok(()) -2026-06-15T13:31:06.580619Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "specialization"] -2026-06-15T13:31:06.580686Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-mir" trial=["pass", "inst_simplify"] result=Ok(()) -2026-06-15T13:31:06.580698Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "type-extractor", "definition"] -2026-06-15T13:31:06.580864Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-mir" trial=["pass", "administrative_reduction"] result=Ok(()) -2026-06-15T13:31:06.580874Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-mir" trial=["pass", "administrative_reduction"] -2026-06-15T13:31:06.581135Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "name-mangler"] result=Err(Expected trial to pass, but it failed -├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:390:24 -╰╴1 additional opaque attachment) -2026-06-15T13:31:06.581164Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "name-mangler"] -2026-06-15T13:31:06.581492Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-mir" trial=["reify"] result=Ok(()) -2026-06-15T13:31:06.581520Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["reify"] -2026-06-15T13:31:06.581594Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["reify"] result=Ok(()) -2026-06-15T13:31:06.581607Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["reify"] -2026-06-15T13:31:06.581606Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "inference"] result=Ok(()) -2026-06-15T13:31:06.581638Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "inference"] -2026-06-15T13:31:06.581650Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] result=Err(Failed to verify annotation -├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:321:29 -├╴1 additional opaque attachment -│ -╰─▶ unfulfilled annotation: DiagnosticAnnotation { category: None, severity: Error, message: "cannot use a literal value as a type", line: Some(3) } did not match any emitted diagnostics - ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:151:25) -2026-06-15T13:31:06.581684Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] -2026-06-15T13:31:06.581720Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-mir" trial=["reify"] result=Ok(()) -2026-06-15T13:31:06.581728Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-mir" trial=["reify"] -2026-06-15T13:31:06.581833Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "type-extractor", "definition"] result=Ok(()) -2026-06-15T13:31:06.581850Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "type-extractor", "definition"] -2026-06-15T13:31:06.581882Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] result=Err(Expected trial to pass, but it failed -├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:390:24 -╰╴1 additional opaque attachment) -2026-06-15T13:31:06.581911Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] -2026-06-15T13:31:06.582013Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-mir" trial=["reify"] result=Ok(()) -2026-06-15T13:31:06.582026Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["reify"] -2026-06-15T13:31:06.582116Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "normalization"] result=Ok(()) -2026-06-15T13:31:06.582124Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "normalization"] -2026-06-15T13:31:06.582307Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "name-mangler"] result=Ok(()) -2026-06-15T13:31:06.582315Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "name-mangler"] -2026-06-15T13:31:06.582760Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-mir" trial=["pass", "administrative_reduction"] result=Ok(()) -2026-06-15T13:31:06.582770Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-mir" trial=["pass", "administrative_reduction"] -2026-06-15T13:31:06.582777Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["reify"] result=Ok(()) -2026-06-15T13:31:06.582788Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["reify"] -2026-06-15T13:31:06.582761Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "specialization"] result=Ok(()) -2026-06-15T13:31:06.582817Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "specialization"] -2026-06-15T13:31:06.582951Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["reify"] result=Ok(()) -2026-06-15T13:31:06.582961Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["reify"] -2026-06-15T13:31:06.582981Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] result=Err(Expected trial to pass, but it failed -├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:390:24 -╰╴1 additional opaque attachment) -2026-06-15T13:31:06.583000Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] -2026-06-15T13:31:06.583156Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "type-extractor", "definition"] result=Ok(()) -2026-06-15T13:31:06.583173Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "type-extractor", "definition"] -2026-06-15T13:31:06.583250Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] result=Err(Expected trial to pass, but it failed -├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:390:24 -╰╴1 additional opaque attachment) -2026-06-15T13:31:06.583308Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] -2026-06-15T13:31:06.583388Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["reify"] result=Ok(()) -2026-06-15T13:31:06.583397Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "name-mangler"] result=Ok(()) -2026-06-15T13:31:06.583407Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "name-mangler"] -2026-06-15T13:31:06.583399Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["reify"] -2026-06-15T13:31:06.583578Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "normalization"] result=Ok(()) -2026-06-15T13:31:06.583589Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "normalization"] -2026-06-15T13:31:06.583676Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-mir" trial=["reify"] result=Ok(()) -2026-06-15T13:31:06.583685Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-mir" trial=["reify"] -2026-06-15T13:31:06.583687Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "inference"] result=Ok(()) -2026-06-15T13:31:06.583696Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "inference"] -2026-06-15T13:31:06.583975Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["reify"] result=Ok(()) -2026-06-15T13:31:06.583984Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["reify"] -2026-06-15T13:31:06.584090Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["reify"] result=Ok(()) -2026-06-15T13:31:06.584101Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-mir" trial=["pass", "administrative_reduction"] -2026-06-15T13:31:06.584406Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "type-extractor", "definition"] result=Ok(()) -2026-06-15T13:31:06.584421Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "type-extractor", "definition"] -2026-06-15T13:31:06.584385Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] result=Err(Failed to verify annotation -├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:321:29 -├╴1 additional opaque attachment -│ -╰┬▶ unfulfilled annotation: DiagnosticAnnotation { category: None, severity: Error, message: "Did you mean to use 'newtype' instead?", line: Some(3) } did not match any emitted diagnostics - │ ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:151:25 - │ - ╰▶ unexpected diagnostic: - error[expander::item-not-found]: Item not found - ╭▸ - 3 │ ["::kernel::special_form::nuwtype"] - │ ┬─────────── ━━━━━━━ cannot find `nuwtype` in module `::kernel::special_form` - │ │ - │ looked in this module - ╰╴ - help: a similar item exists in this module - ╭╴ - 3 - ["::kernel::special_form::nuwtype"] - 3 + ["::kernel::special_form::newtype"] - ╰╴ - ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:171:21) -2026-06-15T13:31:06.584516Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] -2026-06-15T13:31:06.584512Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "name-mangler"] result=Err(Expected trial to pass, but it failed -├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:390:24 -╰╴1 additional opaque attachment) -2026-06-15T13:31:06.584539Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "name-mangler"] -2026-06-15T13:31:06.584669Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "specialization"] result=Ok(()) -2026-06-15T13:31:06.584676Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] result=Ok(()) -2026-06-15T13:31:06.584679Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "specialization"] -2026-06-15T13:31:06.584688Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] -2026-06-15T13:31:06.584741Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-mir" trial=["pass", "administrative_reduction"] result=Ok(()) -2026-06-15T13:31:06.584754Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "specialization"] -2026-06-15T13:31:06.584928Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["reify"] result=Ok(()) -2026-06-15T13:31:06.584936Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["reify"] -2026-06-15T13:31:06.584979Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "inference"] result=Ok(()) -2026-06-15T13:31:06.584987Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "inference"] -2026-06-15T13:31:06.585120Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["reify"] result=Ok(()) -2026-06-15T13:31:06.585128Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["reify"] -2026-06-15T13:31:06.585159Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "normalization"] result=Ok(()) -2026-06-15T13:31:06.585166Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "normalization"] -2026-06-15T13:31:06.585778Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "name-mangler"] result=Ok(()) -2026-06-15T13:31:06.585800Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "name-mangler"] -2026-06-15T13:31:06.585856Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-mir" trial=["reify"] result=Ok(()) -2026-06-15T13:31:06.585866Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-mir" trial=["reify"] -2026-06-15T13:31:06.585943Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "type-extractor", "definition"] result=Ok(()) -2026-06-15T13:31:06.585957Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-mir" trial=["pass", "administrative_reduction"] result=Ok(()) -2026-06-15T13:31:06.585972Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-mir" trial=["pass", "post_inline"] -2026-06-15T13:31:06.585959Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "type-extractor", "definition"] -2026-06-15T13:31:06.586204Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "specialization"] result=Ok(()) -2026-06-15T13:31:06.586214Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "thunking"] -2026-06-15T13:31:06.586293Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["reify"] result=Ok(()) -2026-06-15T13:31:06.586302Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["reify"] -2026-06-15T13:31:06.586385Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "inference"] result=Ok(()) -2026-06-15T13:31:06.586393Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "inference"] -2026-06-15T13:31:06.586489Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "normalization"] result=Ok(()) -2026-06-15T13:31:06.586497Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "normalization"] -2026-06-15T13:31:06.586573Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["reify"] result=Ok(()) -2026-06-15T13:31:06.586584Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] -2026-06-15T13:31:06.586767Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] result=Err(Failed to verify annotation -├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:321:29 -├╴1 additional opaque attachment -│ -╰┬▶ unfulfilled annotation: DiagnosticAnnotation { category: None, severity: Error, message: "cannot use this as a type constructor", line: Some(6) } did not match any emitted diagnostics - │ ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:151:25 - │ - ├▶ unexpected diagnostic: - │ error[expander::unresolved-variable]: Unresolved variable - │ ╭▸ - │ 6 │ ["::core::math::headpat", "Int", "Float"] - │ │ ━━━━━ cannot find `Float` in this scope - │ │ - │ ├ help: check the spelling, or import the name with a `use` statement - │ ╰ note: this could be a typo, a name used outside its scope, or a missing declaration; if it is a function or type from another module, you may need to import it first - │ ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:171:21 - │ - ├▶ unexpected diagnostic: - │ error[expander::unresolved-variable]: Unresolved variable - │ ╭▸ - │ 6 │ ["::core::math::headpat", "Int", "Float"] - │ │ ━━━ cannot find `Int` in this scope - │ │ - │ ├ help: check the spelling, or import the name with a `use` statement - │ ╰ note: this could be a typo, a name used outside its scope, or a missing declaration; if it is a function or type from another module, you may need to import it first - │ ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:171:21 - │ - ╰▶ unexpected diagnostic: - error[expander::item-not-found]: Item not found - ╭▸ - 6 │ ["::core::math::headpat", "Int", "Float"] - │ ┬─── ━━━━━━━ cannot find `headpat` in module `::core::math` - │ │ - │ looked in this module - │ - ╰ help: check the spelling and ensure the item is exported - ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:171:21) -2026-06-15T13:31:06.586865Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] -2026-06-15T13:31:06.587158Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "name-mangler"] result=Ok(()) -2026-06-15T13:31:06.587181Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "name-mangler"] -2026-06-15T13:31:06.587453Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] result=Err(Failed to verify annotation -├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:321:29 -├╴1 additional opaque attachment -│ -╰┬▶ unfulfilled annotation: DiagnosticAnnotation { category: None, severity: Error, message: "expected a tuple or struct for generic parameters", line: Some(7) } did not match any emitted diagnostics - │ ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:151:25 - │ - ├▶ unexpected diagnostic: - │ error[expander::unresolved-variable]: Unresolved variable - │ ╭▸ - │ 13 │ ["+", "a", "b"] - │ │ ━ cannot find `b` in this scope - │ │ - │ ╰ note: this could be a typo, a name used outside its scope, or a missing declaration; if it is a function or type from another module, you may need to import it first - │ help: a similar imported name exists - │ ╭╴ - │ 13 - ["+", "a", "b"] - │ 13 + ["+", "a", "~"] - │ ├╴ - │ 13 - ["+", "a", "b"] - │ 13 + ["+", "a", "↑"] - │ ├╴ - │ 13 - ["+", "a", "b"] - │ 13 + ["+", "a", "√"] - │ ├╴ - │ 13 - ["+", "a", "b"] - │ 13 + ["+", "a", "∛"] - │ ├╴ - │ 13 - ["+", "a", "b"] - │ 13 + ["+", "a", "cbrt"] - │ ╰╴ - │ ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:171:21 - │ - ├▶ unexpected diagnostic: - │ error[expander::unresolved-variable]: Unresolved variable - │ ╭▸ - │ 13 │ ["+", "a", "b"] - │ │ ━ cannot find `a` in this scope - │ │ - │ ╰ note: this could be a typo, a name used outside its scope, or a missing declaration; if it is a function or type from another module, you may need to import it first - │ help: a similar imported name exists - │ ╭╴ - │ 13 - ["+", "a", "b"] - │ 13 + ["+", "↑", "b"] - │ ├╴ - │ 13 - ["+", "a", "b"] - │ 13 + ["+", "√", "b"] - │ ├╴ - │ 13 - ["+", "a", "b"] - │ 13 + ["+", "∛", "b"] - │ ├╴ - │ 13 │ ["+", "access", "b"] - │ ├╴ +++++ - │ 13 │ ["+", "as", "b"] - │ ╰╴ + - │ ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:171:21 - │ - ╰▶ unexpected diagnostic: - error[expander::invalid-fn-generic-param]: Invalid generic parameter - ╭▸ - 7 │ { "#literal": 1 } - │ ━━━━━━━━━━━━━━━━━ expected a simple type parameter name - │ - ╰ help: each generic parameter must be a plain identifier like `T`, not a qualified path or expression - ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:171:21) -2026-06-15T13:31:06.587562Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] -2026-06-15T13:31:06.587588Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "thunking"] result=Ok(()) -2026-06-15T13:31:06.587602Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "thunking"] -2026-06-15T13:31:06.587614Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "type-extractor", "definition"] result=Ok(()) -2026-06-15T13:31:06.587623Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "type-extractor", "definition"] -2026-06-15T13:31:06.587852Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "inference"] result=Err(Expected trial to pass, but it failed -├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:390:24 -╰╴1 additional opaque attachment) -2026-06-15T13:31:06.587887Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "inference"] -2026-06-15T13:31:06.588202Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["reify"] result=Ok(()) -2026-06-15T13:31:06.588210Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["reify"] -2026-06-15T13:31:06.588242Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "normalization"] result=Ok(()) -2026-06-15T13:31:06.588245Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-mir" trial=["reify"] result=Ok(()) -2026-06-15T13:31:06.588251Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "normalization"] -2026-06-15T13:31:06.588265Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-mir" trial=["pass", "pre_inline"] -2026-06-15T13:31:06.588268Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] result=Err(Failed to verify annotation -├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:321:29 -├╴1 additional opaque attachment -│ -╰┬▶ unfulfilled annotation: DiagnosticAnnotation { category: None, severity: Error, message: "exactly 3 segments", line: Some(4) } did not match any emitted diagnostics - │ ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:151:25 - │ - ╰▶ unexpected diagnostic: - error[expander::item-not-found]: Item not found - ╭▸ - 4 │ "::kernel::special_form", - │ ┬───── ━━━━━━━━━━━━ cannot find `special_form` in module `::kernel` - │ │ - │ looked in this module - │ - ╰ help: check the spelling and ensure the item is exported - ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:171:21) -2026-06-15T13:31:06.588325Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] -2026-06-15T13:31:06.588443Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "name-mangler"] result=Ok(()) -2026-06-15T13:31:06.588453Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "name-mangler"] -2026-06-15T13:31:06.588802Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "type-extractor", "definition"] result=Ok(()) -2026-06-15T13:31:06.588814Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "type-extractor", "definition"] -2026-06-15T13:31:06.588952Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] result=Err(Expected trial to pass, but it failed -├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:390:24 -╰╴1 additional opaque attachment) -2026-06-15T13:31:06.588981Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] -2026-06-15T13:31:06.588983Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "thunking"] result=Ok(()) -2026-06-15T13:31:06.589007Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "thunking"] -2026-06-15T13:31:06.588983Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-mir" trial=["pass", "post_inline"] result=Ok(()) -2026-06-15T13:31:06.589042Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-mir" trial=["pass", "post_inline"] -2026-06-15T13:31:06.589331Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["reify"] result=Ok(()) -2026-06-15T13:31:06.589342Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["reify"] -2026-06-15T13:31:06.589285Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] result=Err(Failed to verify annotation -├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:321:29 -├╴1 additional opaque attachment -│ -╰┬▶ unfulfilled annotation: DiagnosticAnnotation { category: None, severity: Error, message: "expected a simple type parameter", line: Some(7) } did not match any emitted diagnostics - │ ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:151:25 - │ - ├▶ unexpected diagnostic: - │ error[expander::unresolved-variable]: Unresolved variable - │ ╭▸ - │ 13 │ ["+", "a", "b"] - │ │ ━ cannot find `b` in this scope - │ │ - │ ╰ note: this could be a typo, a name used outside its scope, or a missing declaration; if it is a function or type from another module, you may need to import it first - │ help: a similar imported name exists - │ ╭╴ - │ 13 - ["+", "a", "b"] - │ 13 + ["+", "a", "~"] - │ ├╴ - │ 13 - ["+", "a", "b"] - │ 13 + ["+", "a", "↑"] - │ ├╴ - │ 13 - ["+", "a", "b"] - │ 13 + ["+", "a", "√"] - │ ├╴ - │ 13 - ["+", "a", "b"] - │ 13 + ["+", "a", "∛"] - │ ├╴ - │ 13 - ["+", "a", "b"] - │ 13 + ["+", "a", "cbrt"] - │ ╰╴ - │ ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:171:21 - │ - ├▶ unexpected diagnostic: - │ error[expander::unresolved-variable]: Unresolved variable - │ ╭▸ - │ 13 │ ["+", "a", "b"] - │ │ ━ cannot find `a` in this scope - │ │ - │ ╰ note: this could be a typo, a name used outside its scope, or a missing declaration; if it is a function or type from another module, you may need to import it first - │ help: a similar imported name exists - │ ╭╴ - │ 13 - ["+", "a", "b"] - │ 13 + ["+", "↑", "b"] - │ ├╴ - │ 13 - ["+", "a", "b"] - │ 13 + ["+", "√", "b"] - │ ├╴ - │ 13 - ["+", "a", "b"] - │ 13 + ["+", "∛", "b"] - │ ├╴ - │ 13 │ ["+", "access", "b"] - │ ├╴ +++++ - │ 13 │ ["+", "as", "b"] - │ ╰╴ + - │ ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:171:21 - │ - ╰▶ unexpected diagnostic: - error[expander::invalid-expression-in-type-position]: Invalid expression in type position + error[expander::use-path-generic-arguments]: Generic arguments in use path ╭▸ - 7 │ "T": { "#literal": 2 } - │ ━━━━━━━━━━━━━━━━━ cannot use a literal value as a type + 3 │ ["use", "kernel::type", { "#tuple": ["T"] }, "_"] + │ ━━━━━━━━━━━━━━━━━━━━━ generic arguments are not allowed in `use` paths │ - ├ help: replace this with a type path, tuple type, struct type, `_`, `(| ...)`, or `(& ...)` - ╰ note: valid type forms are: type paths like `String`, tuple types like `(Int, String)`, struct types like `(name: String)`, `_` for inference, unions `(| ...)`, and intersections `(& ...)` + ╰ help: remove the generic arguments; `use` imports modules and items, which do not take type parameters at the import site ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:171:21) -2026-06-15T13:31:06.589429Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] -2026-06-15T13:31:06.589442Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "inference"] result=Ok(()) -2026-06-15T13:31:06.589455Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "inference"] -2026-06-15T13:31:06.589686Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "name-mangler"] result=Err(Expected trial to pass, but it failed -├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:390:24 -╰╴1 additional opaque attachment) -2026-06-15T13:31:06.589717Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "name-mangler"] -2026-06-15T13:31:06.589775Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "normalization"] result=Ok(()) -2026-06-15T13:31:06.589784Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "normalization"] -2026-06-15T13:31:06.590234Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "type-extractor", "definition"] result=Ok(()) -2026-06-15T13:31:06.590224Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] result=Err(Expected trial to pass, but it failed -├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:390:24 -╰╴1 additional opaque attachment) -2026-06-15T13:31:06.590268Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] -2026-06-15T13:31:06.590255Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "type-extractor", "definition"] -2026-06-15T13:31:06.590373Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-mir" trial=["pass", "pre_inline"] result=Ok(()) -2026-06-15T13:31:06.590384Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-mir" trial=["pass", "pre_inline"] -2026-06-15T13:31:06.590385Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "thunking"] result=Ok(()) -2026-06-15T13:31:06.590469Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "thunking"] -2026-06-15T13:31:06.590555Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["reify"] result=Ok(()) -2026-06-15T13:31:06.590566Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["reify"] -2026-06-15T13:31:06.590675Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] result=Ok(()) -2026-06-15T13:31:06.590684Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] -2026-06-15T13:31:06.590923Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "name-mangler"] result=Ok(()) -2026-06-15T13:31:06.590956Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "sanitizer"] -2026-06-15T13:31:06.591112Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "inference"] result=Ok(()) -2026-06-15T13:31:06.591123Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "inference"] -2026-06-15T13:31:06.591153Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "normalization"] result=Ok(()) -2026-06-15T13:31:06.591161Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "normalization"] -2026-06-15T13:31:06.591119Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] result=Err(Failed to verify annotation +2026-06-15T14:19:06.029750Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-mir" trial=["pass", "dse"] +2026-06-15T14:19:06.029834Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "inference"] result=Ok(()) +2026-06-15T14:19:06.029849Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "inference"] +2026-06-15T14:19:06.029965Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-mir" trial=["reify"] result=Ok(()) +2026-06-15T14:19:06.029976Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-mir" trial=["reify"] +2026-06-15T14:19:06.029994Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "import-resolver"] result=Ok(()) +2026-06-15T14:19:06.030016Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "normalization"] +2026-06-15T14:19:06.030019Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "ctor"] result=Ok(()) +2026-06-15T14:19:06.030039Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "ctor"] +2026-06-15T14:19:06.030048Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "import-resolver"] result=Ok(()) +2026-06-15T14:19:06.030067Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "inference"] +2026-06-15T14:19:06.030147Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-mir" trial=["pass", "dse"] result=Ok(()) +2026-06-15T14:19:06.030159Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-mir" trial=["pass", "dse"] +2026-06-15T14:19:06.030197Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "name-mangler"] result=Ok(()) +2026-06-15T14:19:06.030210Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "name-mangler"] +2026-06-15T14:19:06.029711Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "normalization"] result=Ok(()) +2026-06-15T14:19:06.030335Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "normalization"] +2026-06-15T14:19:06.030339Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "import-resolver"] result=Ok(()) +2026-06-15T14:19:06.030354Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "import-resolver"] +2026-06-15T14:19:06.030514Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] result=Ok(()) +2026-06-15T14:19:06.030526Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] +2026-06-15T14:19:06.030590Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] result=Ok(()) +2026-06-15T14:19:06.030606Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] +2026-06-15T14:19:06.030731Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "import-resolver"] result=Ok(()) +2026-06-15T14:19:06.030742Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "import-resolver"] +2026-06-15T14:19:06.031073Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "inference"] result=Ok(()) +2026-06-15T14:19:06.031082Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "inference"] +2026-06-15T14:19:06.031159Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-mir" trial=["pass", "dse"] result=Ok(()) +2026-06-15T14:19:06.031169Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-mir" trial=["pass", "cfg_simplify"] +2026-06-15T14:19:06.031235Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "inference"] result=Err(Expected trial to pass, but it failed +├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:390:24 +╰╴1 additional opaque attachment) +2026-06-15T14:19:06.031282Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "inference"] +2026-06-15T14:19:06.031302Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "name-mangler"] result=Err(Expected trial to pass, but it failed +├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:390:24 +╰╴1 additional opaque attachment) +2026-06-15T14:19:06.031349Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "name-mangler"] +2026-06-15T14:19:06.031390Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "ctor"] result=Ok(()) +2026-06-15T14:19:06.031401Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "ctor"] +2026-06-15T14:19:06.031770Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "normalization"] result=Ok(()) +2026-06-15T14:19:06.031803Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "normalization"] +2026-06-15T14:19:06.031806Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "import-resolver"] result=Ok(()) +2026-06-15T14:19:06.031827Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "checking"] +2026-06-15T14:19:06.031943Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] result=Ok(()) +2026-06-15T14:19:06.031952Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] +2026-06-15T14:19:06.031988Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "import-resolver"] result=Ok(()) +2026-06-15T14:19:06.032022Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] +2026-06-15T14:19:06.032054Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-mir" trial=["reify"] result=Ok(()) +2026-06-15T14:19:06.032069Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-mir" trial=["reify"] +2026-06-15T14:19:06.032388Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "name-mangler"] result=Ok(()) +2026-06-15T14:19:06.032398Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "name-mangler"] +2026-06-15T14:19:06.032509Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "inference"] result=Ok(()) +2026-06-15T14:19:06.032519Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "inference"] +2026-06-15T14:19:06.032704Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-mir" trial=["pass", "cfg_simplify"] result=Ok(()) +2026-06-15T14:19:06.032714Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-mir" trial=["pass", "cfg_simplify"] +2026-06-15T14:19:06.033174Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "ctor"] result=Ok(()) +2026-06-15T14:19:06.033199Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "ctor"] +2026-06-15T14:19:06.033216Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] result=Ok(()) +2026-06-15T14:19:06.033244Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "checking"] result=Ok(()) +2026-06-15T14:19:06.033247Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] +2026-06-15T14:19:06.033256Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "graph-hoisting"] +2026-06-15T14:19:06.033270Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] result=Ok(()) +2026-06-15T14:19:06.033284Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] +2026-06-15T14:19:06.033343Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "normalization"] result=Ok(()) +2026-06-15T14:19:06.033355Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "normalization"] +2026-06-15T14:19:06.033391Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "inference"] result=Ok(()) +2026-06-15T14:19:06.033404Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "inference"] +2026-06-15T14:19:06.033382Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] result=Err(Expected trial to pass, but it failed +├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:390:24 +╰╴1 additional opaque attachment) +2026-06-15T14:19:06.033423Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] +2026-06-15T14:19:06.033453Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "name-mangler"] result=Ok(()) +2026-06-15T14:19:06.033463Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "name-mangler"] +2026-06-15T14:19:06.033722Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "inference"] result=Ok(()) +2026-06-15T14:19:06.033821Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "inference"] +2026-06-15T14:19:06.033868Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-mir" trial=["reify"] result=Ok(()) +2026-06-15T14:19:06.033883Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-mir" trial=["reify"] +2026-06-15T14:19:06.034176Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-mir" trial=["pass", "cfg_simplify"] result=Ok(()) +2026-06-15T14:19:06.034207Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-mir" trial=["pass", "cfg_simplify"] +2026-06-15T14:19:06.034572Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] result=Ok(()) +2026-06-15T14:19:06.034584Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] +2026-06-15T14:19:06.034587Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "ctor"] result=Ok(()) +2026-06-15T14:19:06.034606Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "ctor"] +2026-06-15T14:19:06.034618Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "name-mangler"] result=Ok(()) +2026-06-15T14:19:06.034626Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] result=Ok(()) +2026-06-15T14:19:06.034630Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "name-mangler"] +2026-06-15T14:19:06.034641Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] +2026-06-15T14:19:06.034660Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] result=Ok(()) +2026-06-15T14:19:06.034679Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] +2026-06-15T14:19:06.034839Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "normalization"] result=Ok(()) +2026-06-15T14:19:06.034854Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "normalization"] +2026-06-15T14:19:06.035011Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "inference"] result=Ok(()) +2026-06-15T14:19:06.035023Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "inference"] +2026-06-15T14:19:06.035335Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-mir" trial=["reify"] result=Ok(()) +2026-06-15T14:19:06.035347Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-mir" trial=["reify"] +2026-06-15T14:19:06.035409Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "inference"] result=Ok(()) +2026-06-15T14:19:06.035440Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "checking"] +2026-06-15T14:19:06.035770Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] result=Ok(()) +2026-06-15T14:19:06.035781Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] +2026-06-15T14:19:06.035920Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] result=Ok(()) +2026-06-15T14:19:06.035934Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] +2026-06-15T14:19:06.035977Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-mir" trial=["pass", "cfg_simplify"] result=Ok(()) +2026-06-15T14:19:06.035990Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-mir" trial=["pass", "cfg_simplify"] +2026-06-15T14:19:06.035992Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] result=Ok(()) +2026-06-15T14:19:06.035998Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "name-mangler"] result=Ok(()) +2026-06-15T14:19:06.036026Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "name-mangler"] +2026-06-15T14:19:06.036015Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] +2026-06-15T14:19:06.036230Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "normalization"] result=Ok(()) +2026-06-15T14:19:06.036242Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "normalization"] +2026-06-15T14:19:06.036345Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "ctor"] result=Ok(()) +2026-06-15T14:19:06.036359Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "inference"] +2026-06-15T14:19:06.036604Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "inference"] result=Ok(()) +2026-06-15T14:19:06.036619Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "inference"] +2026-06-15T14:19:06.036971Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] result=Ok(()) +2026-06-15T14:19:06.036986Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] +2026-06-15T14:19:06.037236Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] result=Ok(()) +2026-06-15T14:19:06.037249Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] +2026-06-15T14:19:06.037259Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "name-mangler"] result=Ok(()) +2026-06-15T14:19:06.037277Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "alias-replacement"] +2026-06-15T14:19:06.037458Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] result=Ok(()) +2026-06-15T14:19:06.037481Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] +2026-06-15T14:19:06.037641Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "inference"] result=Ok(()) +2026-06-15T14:19:06.037652Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "normalization"] result=Ok(()) +2026-06-15T14:19:06.037674Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "normalization"] +2026-06-15T14:19:06.037705Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-mir" trial=["pass", "cfg_simplify"] result=Ok(()) +2026-06-15T14:19:06.037716Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-mir" trial=["pass", "cfg_simplify"] +2026-06-15T14:19:06.037655Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "inference"] +2026-06-15T14:19:06.038017Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "inference"] result=Ok(()) +2026-06-15T14:19:06.038030Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "inference"] +2026-06-15T14:19:06.038134Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] result=Ok(()) +2026-06-15T14:19:06.038145Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] +2026-06-15T14:19:06.038355Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "alias-replacement"] result=Ok(()) +2026-06-15T14:19:06.038362Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "alias-replacement"] +2026-06-15T14:19:06.038541Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] result=Ok(()) +2026-06-15T14:19:06.038556Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] +2026-06-15T14:19:06.038774Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] result=Ok(()) +2026-06-15T14:19:06.038792Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] +2026-06-15T14:19:06.038996Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-mir" trial=["pass", "cfg_simplify"] result=Ok(()) +2026-06-15T14:19:06.039007Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-mir" trial=["pass", "cfg_simplify"] +2026-06-15T14:19:06.039151Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "normalization"] result=Ok(()) +2026-06-15T14:19:06.039166Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "normalization"] +2026-06-15T14:19:06.039275Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] result=Ok(()) +2026-06-15T14:19:06.039287Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] +2026-06-15T14:19:06.039414Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "inference"] result=Ok(()) +2026-06-15T14:19:06.039437Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "inference"] +2026-06-15T14:19:06.039574Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "alias-replacement"] result=Ok(()) +2026-06-15T14:19:06.039585Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "alias-replacement"] +2026-06-15T14:19:06.039714Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] result=Ok(()) +2026-06-15T14:19:06.039728Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] +2026-06-15T14:19:06.039714Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "inference"] result=Ok(()) +2026-06-15T14:19:06.039866Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "inference"] +2026-06-15T14:19:06.040051Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] result=Ok(()) +2026-06-15T14:19:06.040061Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] +2026-06-15T14:19:06.040434Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] result=Ok(()) +2026-06-15T14:19:06.040443Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] +2026-06-15T14:19:06.040451Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "normalization"] result=Ok(()) +2026-06-15T14:19:06.040470Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "normalization"] +2026-06-15T14:19:06.040993Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "alias-replacement"] result=Ok(()) +2026-06-15T14:19:06.041004Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "alias-replacement"] +2026-06-15T14:19:06.041062Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] result=Ok(()) +2026-06-15T14:19:06.041077Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] +2026-06-15T14:19:06.041127Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "inference"] result=Ok(()) +2026-06-15T14:19:06.041139Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "inference"] +2026-06-15T14:19:06.041596Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] result=Ok(()) +2026-06-15T14:19:06.041606Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] +2026-06-15T14:19:06.041725Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] result=Ok(()) +2026-06-15T14:19:06.041740Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "normalization"] +2026-06-15T14:19:06.041924Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "inference"] result=Ok(()) +2026-06-15T14:19:06.041944Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "inference"] +2026-06-15T14:19:06.042238Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "normalization"] result=Ok(()) +2026-06-15T14:19:06.042263Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "normalization"] +2026-06-15T14:19:06.042282Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] result=Ok(()) +2026-06-15T14:19:06.042294Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] +2026-06-15T14:19:06.042359Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "alias-replacement"] result=Ok(()) +2026-06-15T14:19:06.042381Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "alias-replacement"] +2026-06-15T14:19:06.042630Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "inference"] result=Ok(()) +2026-06-15T14:19:06.042640Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "inference"] +2026-06-15T14:19:06.042713Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] result=Ok(()) +2026-06-15T14:19:06.042723Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] +2026-06-15T14:19:06.043254Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "inference"] result=Ok(()) +2026-06-15T14:19:06.043270Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "normalization"] result=Ok(()) +2026-06-15T14:19:06.043285Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "normalization"] +2026-06-15T14:19:06.043271Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial[0m=["lower", "inference"] +2026-06-15T14:19:06.043582Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] result=Ok(()) +2026-06-15T14:19:06.043593Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] +2026-06-15T14:19:06.043801Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "inference"] result=Ok(()) +2026-06-15T14:19:06.043814Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "inference"] +2026-06-15T14:19:06.043815Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "alias-replacement"] result=Ok(()) +2026-06-15T14:19:06.043839Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "alias-replacement"] +2026-06-15T14:19:06.043963Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "checking"] result=Ok(()) +2026-06-15T14:19:06.043971Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] result=Ok(()) +2026-06-15T14:19:06.043979Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "checking"] +2026-06-15T14:19:06.043989Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] +2026-06-15T14:19:06.044035Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "normalization"] result=Ok(()) +2026-06-15T14:19:06.044057Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "inference"] +2026-06-15T14:19:06.044482Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "normalization"] result=Ok(()) +2026-06-15T14:19:06.044493Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "normalization"] +2026-06-15T14:19:06.044723Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "inference"] result=Ok(()) +2026-06-15T14:19:06.044740Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "inference"] +2026-06-15T14:19:06.044756Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] result=Ok(()) +2026-06-15T14:19:06.044765Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "pre-expansion-name-resolver"] +2026-06-15T14:19:06.045000Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "inference"] result=Ok(()) +2026-06-15T14:19:06.045011Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "inference"] +2026-06-15T14:19:06.045171Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] result=Ok(()) +2026-06-15T14:19:06.045180Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] +2026-06-15T14:19:06.045334Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "checking"] result=Ok(()) +2026-06-15T14:19:06.045351Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "checking"] +2026-06-15T14:19:06.045353Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "inference"] result=Ok(()) +2026-06-15T14:19:06.045377Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "inference"] +2026-06-15T14:19:06.045353Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "alias-replacement"] result=Ok(()) +2026-06-15T14:19:06.045400Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "alias-replacement"] +2026-06-15T14:19:06.045781Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "normalization"] result=Ok(()) +2026-06-15T14:19:06.045813Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "alias-replacement"] +2026-06-15T14:19:06.045936Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "pre-expansion-name-resolver"] result=Ok(()) +2026-06-15T14:19:06.045948Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "pre-expansion-name-resolver"] +2026-06-15T14:19:06.046323Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] result=Ok(()) +2026-06-15T14:19:06.046335Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] +2026-06-15T14:19:06.046382Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "inference"] result=Ok(()) +2026-06-15T14:19:06.046391Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "inference"] +2026-06-15T14:19:06.046370Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "inference"] result=Err(Expected trial to pass, but it failed +├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:390:24 +╰╴1 additional opaque attachment) +2026-06-15T14:19:06.046416Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "inference"] +2026-06-15T14:19:06.046589Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "checking"] result=Ok(()) +2026-06-15T14:19:06.046600Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "checking"] +2026-06-15T14:19:06.046711Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "inference"] result=Ok(()) +2026-06-15T14:19:06.046723Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "inference", "intrinsics"] +2026-06-15T14:19:06.046964Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "alias-replacement"] result=Ok(()) +2026-06-15T14:19:06.046987Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "alias-replacement"] +2026-06-15T14:19:06.047073Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "pre-expansion-name-resolver"] result=Err(Expected trial to pass, but it failed +├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:390:24 +╰╴1 additional opaque attachment) +2026-06-15T14:19:06.047120Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "pre-expansion-name-resolver"] +2026-06-15T14:19:06.047167Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "alias-replacement"] result=Ok(()) +2026-06-15T14:19:06.047184Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] +2026-06-15T14:19:06.047428Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] result=Ok(()) +2026-06-15T14:19:06.047436Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] +2026-06-15T14:19:06.047680Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "inference"] result=Ok(()) +2026-06-15T14:19:06.047703Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "inference"] +2026-06-15T14:19:06.047719Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "inference"] result=Ok(()) +2026-06-15T14:19:06.047734Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "inference"] +2026-06-15T14:19:06.047934Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "checking"] result=Ok(()) +2026-06-15T14:19:06.047946Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "checking"] +2026-06-15T14:19:06.048020Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "inference", "intrinsics"] result=Ok(()) +2026-06-15T14:19:06.048036Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "inference", "intrinsics"] +2026-06-15T14:19:06.048243Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "alias-replacement"] result=Ok(()) +2026-06-15T14:19:06.048253Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "alias-replacement"] +2026-06-15T14:19:06.048329Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "pre-expansion-name-resolver"] result=Err(Expected trial to pass, but it failed +├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:390:24 +╰╴1 additional opaque attachment) +2026-06-15T14:19:06.048362Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "pre-expansion-name-resolver"] +2026-06-15T14:19:06.048449Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] result=Ok(()) +2026-06-15T14:19:06.048459Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] +2026-06-15T14:19:06.048545Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] result=Ok(()) +2026-06-15T14:19:06.048562Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] +2026-06-15T14:19:06.049067Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "inference"] result=Ok(()) +2026-06-15T14:19:06.049084Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-mir" trial=["pass", "post_inline"] +2026-06-15T14:19:06.049394Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "checking"] result=Ok(()) +2026-06-15T14:19:06.049405Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "checking"] +2026-06-15T14:19:06.049439Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "pre-expansion-name-resolver"] result=Ok(()) +2026-06-15T14:19:06.049437Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "inference", "intrinsics"] result=Ok(()) +2026-06-15T14:19:06.049444Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "alias-replacement"] result=Err(Expected trial to pass, but it failed +├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:390:24 +╰╴1 additional opaque attachment) +2026-06-15T14:19:06.049459Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "pre-expansion-name-resolver"] +2026-06-15T14:19:06.049474Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "inference", "intrinsics"] +2026-06-15T14:19:06.049491Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["reify"] +2026-06-15T14:19:06.049614Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "inference"] result=Ok(()) +2026-06-15T14:19:06.049626Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "inference"] +2026-06-15T14:19:06.049765Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "normalization"] result=Ok(()) +2026-06-15T14:19:06.049781Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "normalization"] +2026-06-15T14:19:06.049791Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] result=Ok(()) +2026-06-15T14:19:06.049807Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] +2026-06-15T14:19:06.049809Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] result=Ok(()) +2026-06-15T14:19:06.049825Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] +2026-06-15T14:19:06.050772Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["reify"] result=Ok(()) +2026-06-15T14:19:06.050791Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["reify"] +2026-06-15T14:19:06.050817Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "pre-expansion-name-resolver"] result=Ok(()) +2026-06-15T14:19:06.050828Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "pre-expansion-name-resolver"] +2026-06-15T14:19:06.050831Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "checking"] result=Ok(()) +2026-06-15T14:19:06.050830Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "inference", "intrinsics"] result=Ok(()) +2026-06-15T14:19:06.050857Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "inference"] result=Ok(()) +2026-06-15T14:19:06.050852Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "checking"] +2026-06-15T14:19:06.050882Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-mir" trial=["pass", "post_inline"] +2026-06-15T14:19:06.050876Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "checking"] +2026-06-15T14:19:06.050895Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] result=Ok(()) +2026-06-15T14:19:06.050924Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] +2026-06-15T14:19:06.051021Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-mir" trial=["pass", "post_inline"] result=Ok(()) +2026-06-15T14:19:06.051036Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-mir" trial=["pass", "cfg_simplify"] +2026-06-15T14:19:06.051200Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "normalization"] result=Ok(()) +2026-06-15T14:19:06.051203Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] result=Ok(()) +2026-06-15T14:19:06.051219Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "normalization"] +2026-06-15T14:19:06.051236Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] +2026-06-15T14:19:06.051952Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["reify"] result=Err(Expected trial to pass, but it failed +├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:390:24 +╰╴1 additional opaque attachment) +2026-06-15T14:19:06.051990Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["reify"] +2026-06-15T14:19:06.052031Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "pre-expansion-name-resolver"] result=Ok(()) +2026-06-15T14:19:06.052041Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "pre-expansion-name-resolver"] +2026-06-15T14:19:06.052104Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "checking"] result=Ok(()) +2026-06-15T14:19:06.052118Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "checking"] +2026-06-15T14:19:06.052160Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] result=Ok(()) +2026-06-15T14:19:06.052172Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] +2026-06-15T14:19:06.052443Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "checking"] result=Err(Expected trial to pass, but it failed +├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:390:24 +╰╴1 additional opaque attachment) +2026-06-15T14:19:06.052480Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "checking"] +2026-06-15T14:19:06.052580Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] result=Ok(()) +2026-06-15T14:19:06.052593Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] +2026-06-15T14:19:06.052627Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-mir" trial=["pass", "post_inline"] result=Ok(()) +2026-06-15T14:19:06.052634Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "normalization"] result=Ok(()) +2026-06-15T14:19:06.052645Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "checking"] +2026-06-15T14:19:06.052645Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-mir" trial=["pass", "cfg_simplify"] result=Ok(()) +2026-06-15T14:19:06.052650Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "normalization"] +2026-06-15T14:19:06.052674Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-mir" trial=["pass", "cfg_simplify"] +2026-06-15T14:19:06.053205Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["reify"] result=Ok(()) +2026-06-15T14:19:06.053215Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["reify"] +2026-06-15T14:19:06.053226Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "pre-expansion-name-resolver"] result=Ok(()) +2026-06-15T14:19:06.053237Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "pre-expansion-name-resolver"] +2026-06-15T14:19:06.053313Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] result=Ok(()) +2026-06-15T14:19:06.053324Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] +2026-06-15T14:19:06.053502Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "checking"] result=Ok(()) +2026-06-15T14:19:06.053520Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["reify"] +2026-06-15T14:19:06.053884Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] result=Ok(()) +2026-06-15T14:19:06.053897Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] +2026-06-15T14:19:06.053915Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "checking"] result=Ok(()) +2026-06-15T14:19:06.053930Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "checking"] +2026-06-15T14:19:06.054087Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-mir" trial=["pass", "cfg_simplify"] result=Ok(()) +2026-06-15T14:19:06.054106Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "normalization"] result=Ok(()) +2026-06-15T14:19:06.054113Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "checking"] +2026-06-15T14:19:06.054122Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] +2026-06-15T14:19:06.054131Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "checking"] result=Ok(()) +2026-06-15T14:19:06.054146Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["reify"] +2026-06-15T14:19:06.054438Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["reify"] result=Ok(()) +2026-06-15T14:19:06.054451Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["reify"] +2026-06-15T14:19:06.054497Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] result=Ok(()) +2026-06-15T14:19:06.054508Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] +2026-06-15T14:19:06.054656Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["reify"] result=Ok(()) +2026-06-15T14:19:06.054668Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["reify"] +2026-06-15T14:19:06.054700Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "pre-expansion-name-resolver"] result=Err(Expected trial to pass, but it failed +├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:390:24 +╰╴1 additional opaque attachment) +2026-06-15T14:19:06.054736Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "pre-expansion-name-resolver"] +2026-06-15T14:19:06.055079Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] result=Ok(()) +2026-06-15T14:19:06.055090Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] +2026-06-15T14:19:06.055257Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["reify"] result=Ok(()) +2026-06-15T14:19:06.055268Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["reify"] +2026-06-15T14:19:06.055382Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "checking"] result=Ok(()) +2026-06-15T14:19:06.055397Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "checking"] +2026-06-15T14:19:06.055411Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] result=Err(Expected trial to pass, but it failed +├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:390:24 +╰╴1 additional opaque attachment) +2026-06-15T14:19:06.055440Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] +2026-06-15T14:19:06.055566Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] result=Ok(()) +2026-06-15T14:19:06.055577Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] +2026-06-15T14:19:06.055899Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["reify"] result=Ok(()) +2026-06-15T14:19:06.055899Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["reify"] result=Ok(()) +2026-06-15T14:19:06.055927Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["reify"] +2026-06-15T14:19:06.055915Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["reify"] +2026-06-15T14:19:06.055985Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "pre-expansion-name-resolver"] result=Ok(()) +2026-06-15T14:19:06.055996Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "pre-expansion-name-resolver"] +2026-06-15T14:19:06.056193Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "checking"] result=Ok(()) +2026-06-15T14:19:06.056217Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] +2026-06-15T14:19:06.056302Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] result=Ok(()) +2026-06-15T14:19:06.056316Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] +2026-06-15T14:19:06.056384Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["reify"] result=Ok(()) +2026-06-15T14:19:06.056400Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["reify"] +2026-06-15T14:19:06.056686Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] result=Ok(()) +2026-06-15T14:19:06.056700Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["reify"] +2026-06-15T14:19:06.056721Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "checking"] result=Ok(()) +2026-06-15T14:19:06.056732Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] result=Ok(()) +2026-06-15T14:19:06.056734Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "checking"] +2026-06-15T14:19:06.056750Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] +2026-06-15T14:19:06.057170Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "pre-expansion-name-resolver"] result=Err(Expected trial to pass, but it failed +├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:390:24 +╰╴1 additional opaque attachment) +2026-06-15T14:19:06.057202Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "pre-expansion-name-resolver"] +2026-06-15T14:19:06.057208Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["reify"] result=Ok(()) +2026-06-15T14:19:06.057213Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["reify"] result=Ok(()) +2026-06-15T14:19:06.057223Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] +2026-06-15T14:19:06.057227Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "specialization"] +2026-06-15T14:19:06.057609Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] result=Ok(()) +2026-06-15T14:19:06.057628Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] +2026-06-15T14:19:06.057641Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["reify"] result=Ok(()) +2026-06-15T14:19:06.057649Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] result=Ok(()) +2026-06-15T14:19:06.057667Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] +2026-06-15T14:19:06.057657Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["reify"] +2026-06-15T14:19:06.057897Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["reify"] result=Ok(()) +2026-06-15T14:19:06.057909Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["reify"] +2026-06-15T14:19:06.057950Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] result=Ok(()) +2026-06-15T14:19:06.057962Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] +2026-06-15T14:19:06.058362Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] result=Ok(()) +2026-06-15T14:19:06.058371Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] +2026-06-15T14:19:06.058377Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "pre-expansion-name-resolver"] result=Ok(()) +2026-06-15T14:19:06.058392Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "pre-expansion-name-resolver"] +2026-06-15T14:19:06.058725Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "checking"] result=Ok(()) +2026-06-15T14:19:06.058747Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "specialization"] +2026-06-15T14:19:06.058858Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] result=Ok(()) +2026-06-15T14:19:06.058871Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] +2026-06-15T14:19:06.058899Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["reify"] result=Ok(()) +2026-06-15T14:19:06.058914Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["reify"] +2026-06-15T14:19:06.059069Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] result=Ok(()) +2026-06-15T14:19:06.059082Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] +2026-06-15T14:19:06.059108Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["reify"] result=Ok(()) +2026-06-15T14:19:06.059116Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] result=Ok(()) +2026-06-15T14:19:06.059124Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] +2026-06-15T14:19:06.059130Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] +2026-06-15T14:19:06.059417Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] result=Ok(()) +2026-06-15T14:19:06.059428Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] +2026-06-15T14:19:06.059707Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "pre-expansion-name-resolver"] result=Ok(()) +2026-06-15T14:19:06.059724Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "pre-expansion-name-resolver"] +2026-06-15T14:19:06.060303Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] result=Ok(()) +2026-06-15T14:19:06.060312Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["reify"] result=Ok(()) +2026-06-15T14:19:06.060329Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] +2026-06-15T14:19:06.060406Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] result=Err(Expected trial to pass, but it failed +├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:390:24 +╰╴1 additional opaque attachment) +2026-06-15T14:19:06.060445Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] +2026-06-15T14:19:06.060335Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["reify"] +2026-06-15T14:19:06.060520Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] result=Ok(()) +2026-06-15T14:19:06.060528Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] result=Ok(()) +2026-06-15T14:19:06.060533Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] +2026-06-15T14:19:06.060546Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] +2026-06-15T14:19:06.060602Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] result=Ok(()) +2026-06-15T14:19:06.060620Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "type-extractor", "definition"] +2026-06-15T14:19:06.060690Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "specialization"] result=Ok(()) +2026-06-15T14:19:06.060704Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "specialization"] +2026-06-15T14:19:06.060810Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "pre-expansion-name-resolver"] result=Ok(()) +2026-06-15T14:19:06.060822Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "pre-expansion-name-resolver"] +2026-06-15T14:19:06.061626Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] result=Ok(()) +2026-06-15T14:19:06.061641Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-mir" trial=["reify"] +2026-06-15T14:19:06.061736Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "type-extractor", "definition"] result=Ok(()) +2026-06-15T14:19:06.061745Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "type-extractor", "definition"] +2026-06-15T14:19:06.061843Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["reify"] result=Ok(()) +2026-06-15T14:19:06.061870Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["reify"] +2026-06-15T14:19:06.061843Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] result=Ok(()) +2026-06-15T14:19:06.061903Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] result=Ok(()) +2026-06-15T14:19:06.061909Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] +2026-06-15T14:19:06.061917Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] +2026-06-15T14:19:06.061828Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "pre-expansion-name-resolver"] result=Err(Expected trial to pass, but it failed +├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:390:24 +╰╴1 additional opaque attachment) +2026-06-15T14:19:06.061981Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "pre-expansion-name-resolver"] +2026-06-15T14:19:06.062306Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "specialization"] result=Ok(()) +2026-06-15T14:19:06.062326Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "specialization"] +2026-06-15T14:19:06.062878Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-mir" trial=["reify"] result=Ok(()) +2026-06-15T14:19:06.061874Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] result=Ok(()) +2026-06-15T14:19:06.062893Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-mir" trial=["reify"] +2026-06-15T14:19:06.062898Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] +2026-06-15T14:19:06.063131Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["reify"] result=Ok(()) +2026-06-15T14:19:06.063153Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["reify"] +2026-06-15T14:19:06.062883Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "type-extractor", "definition"] result=Ok(()) +2026-06-15T14:19:06.063216Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "type-extractor", "definition"] +2026-06-15T14:19:06.063252Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] result=Ok(()) +2026-06-15T14:19:06.063273Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] +2026-06-15T14:19:06.063314Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] result=Ok(()) +2026-06-15T14:19:06.063326Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] +2026-06-15T14:19:06.063259Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "pre-expansion-name-resolver"] result=Ok(()) +2026-06-15T14:19:06.063422Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "pre-expansion-name-resolver"] +2026-06-15T14:19:06.064114Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] result=Ok(()) +2026-06-15T14:19:06.064123Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] +2026-06-15T14:19:06.064124Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-mir" trial=["reify"] result=Ok(()) +2026-06-15T14:19:06.064135Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-mir" trial=["reify"] +2026-06-15T14:19:06.064429Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["reify"] result=Ok(()) +2026-06-15T14:19:06.064448Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["reify"] +2026-06-15T14:19:06.064488Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "type-extractor", "definition"] result=Ok(()) +2026-06-15T14:19:06.064498Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "type-extractor", "definition"] +2026-06-15T14:19:06.064519Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] result=Ok(()) +2026-06-15T14:19:06.064538Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] +2026-06-15T14:19:06.064593Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] result=Ok(()) +2026-06-15T14:19:06.064610Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "type-extractor"] +2026-06-15T14:19:06.064866Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "pre-expansion-name-resolver"] result=Err(Expected trial to pass, but it failed +├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:390:24 +╰╴1 additional opaque attachment) +2026-06-15T14:19:06.064912Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "pre-expansion-name-resolver"] +2026-06-15T14:19:06.065613Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-mir" trial=["reify"] result=Ok(()) +2026-06-15T14:19:06.065624Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-mir" trial=["reify"] +2026-06-15T14:19:06.065665Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["reify"] result=Ok(()) +2026-06-15T14:19:06.065693Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "checking"] +2026-06-15T14:19:06.065746Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] result=Ok(()) +2026-06-15T14:19:06.065772Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-eval" trial=["postgres"] +2026-06-15T14:19:06.065892Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "type-extractor"] result=Ok(()) +2026-06-15T14:19:06.065904Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "type-extractor"] +2026-06-15T14:19:06.066077Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "pre-expansion-name-resolver"] result=Err(Expected trial to pass, but it failed +├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:390:24 +╰╴1 additional opaque attachment) +2026-06-15T14:19:06.066105Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "pre-expansion-name-resolver"] +2026-06-15T14:19:06.066149Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "type-extractor", "definition"] result=Ok(()) +2026-06-15T14:19:06.066171Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "type-extractor", "definition"] +2026-06-15T14:19:06.066151Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] result=Err(Failed to verify annotation ├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:321:29 ├╴1 additional opaque attachment │ -╰┬▶ unfulfilled annotation: DiagnosticAnnotation { category: None, severity: Error, message: "Remove these generic arguments", line: Some(3) } did not match any emitted diagnostics - │ ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:151:25 - │ - ├▶ unexpected diagnostic: - │ error[expander::generic-arguments-in-module]: Generic arguments in module path - │ ╭▸ - │ 3 │ ["::kernel::special_form::if"] - │ │ ━ generic argument not allowed here - │ │ - │ ├ help: move the generic arguments to the final segment of the path, or remove them - │ ╰ note: modules are not generic; only the final item in a path can be parameterized - │ ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:171:21 - │ - ├▶ unexpected diagnostic: - │ error[expander::unresolved-variable]: Unresolved variable - │ ╭▸ - │ 3 │ ["::kernel::special_form::if"] - │ │ ━ cannot find `U` in this scope - │ │ - │ ╰ note: this could be a typo, a name used outside its scope, or a missing declaration; if it is a function or type from another module, you may need to import it first - │ help: a similar imported name exists - │ ╭╴ - │ 3 - ["::kernel::special_form::if"] - │ 3 + ["::kernel::special_form::if"] - │ ├╴ - │ 3 - ["::kernel::special_form::if"] - │ 3 + ["::kernel::special_form::if<|>"] - │ ├╴ - │ 3 │ ["::kernel::special_form::if"] - │ ├╴ ++++++ - │ 3 │ ["::kernel::special_form::if"] - │ ├╴ ++++ - │ 3 │ ["::kernel::special_form::if"] - │ ╰╴ ++ - │ ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:171:21 - │ - ╰▶ unexpected diagnostic: +╰─▶ unexpected diagnostic: error[expander::unresolved-variable]: Unresolved variable ╭▸ - 3 │ ["::kernel::special_form::if"] - │ ━ cannot find `T` in this scope + 7 │ ["+", { "#literal": 1 }, { "#literal": 2 }], + │ ━ cannot find `+` in this scope │ ╰ note: this could be a typo, a name used outside its scope, or a missing declaration; if it is a function or type from another module, you may need to import it first help: a similar imported name exists ╭╴ - 3 - ["::kernel::special_form::if"] - 3 + ["::kernel::special_form::if"] + 7 - ["+", { "#literal": 1 }, { "#literal": 2 }], + 7 + ["String", { "#literal": 1 }, { "#literal": 2 }], ├╴ - 3 - ["::kernel::special_form::if"] - 3 + ["::kernel::special_form::if"] + 7 - ["+", { "#literal": 1 }, { "#literal": 2 }], + 7 + ["Union", { "#literal": 1 }, { "#literal": 2 }], ├╴ - 3 - ["::kernel::special_form::if"] - 3 + ["::kernel::special_form::if"] + 7 - ["+", { "#literal": 1 }, { "#literal": 2 }], + 7 + ["Unknown", { "#literal": 1 }, { "#literal": 2 }], ├╴ - 3 - ["::kernel::special_form::if"] - 3 + ["::kernel::special_form::if"] + 7 - ["+", { "#literal": 1 }, { "#literal": 2 }], + 7 + ["Url", { "#literal": 1 }, { "#literal": 2 }], ├╴ - 3 - ["::kernel::special_form::if"] - 3 + ["::kernel::special_form<|>::if"] + 7 - ["+", { "#literal": 1 }, { "#literal": 2 }], + 7 + ["|", { "#literal": 1 }, { "#literal": 2 }], ╰╴ ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:171:21) -2026-06-15T13:31:06.591216Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] -2026-06-15T13:31:06.591670Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "type-extractor", "definition"] result=Ok(()) -2026-06-15T13:31:06.591683Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "type-extractor", "definition"] -2026-06-15T13:31:06.591720Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] result=Ok(()) -2026-06-15T13:31:06.591729Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] -2026-06-15T13:31:06.591870Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-mir" trial=["pass", "pre_inline"] result=Ok(()) -2026-06-15T13:31:06.591879Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-mir" trial=["pass", "pre_inline"] -2026-06-15T13:31:06.591898Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] result=Err(Failed to verify annotation -├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:321:29 -├╴1 additional opaque attachment -│ -╰┬▶ unfulfilled annotation: DiagnosticAnnotation { category: None, severity: Error, message: "expected `*`, a tuple of names, or a struct of aliases", line: Some(6) } did not match any emitted diagnostics - │ ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:151:25 - │ - ├▶ unexpected diagnostic: - │ error[expander::unresolved-variable]: Unresolved variable - │ ╭▸ - │ 8 │ "x" - │ │ ━ cannot find `x` in this scope - │ │ - │ ╰ note: this could be a typo, a name used outside its scope, or a missing declaration; if it is a function or type from another module, you may need to import it first - │ help: a similar imported name exists - │ ╭╴ - │ 8 - "x" - │ 8 + "~" - │ ├╴ - │ 8 - "x" - │ 8 + "↑" - │ ├╴ - │ 8 - "x" - │ 8 + "√" - │ ├╴ - │ 8 - "x" - │ 8 + "∛" - │ ├╴ - │ 8 │ "index" - │ ╰╴ ++++ - │ ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:171:21 - │ - ╰▶ unexpected diagnostic: - error[expander::invalid-use-import-binding]: Invalid use import binding - ╭▸ - 6 │ { "#tuple": [{ "#literal": 1 }] }, - │ ━━━━━━━━━━━━━━━━━ expected a simple name to import - │ - ╰ help: each import must be a plain identifier like `foo`, not a qualified path or expression - ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:171:21) -2026-06-15T13:31:06.591967Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] -2026-06-15T13:31:06.592304Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "thunking"] result=Ok(()) -2026-06-15T13:31:06.592317Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["reify"] -2026-06-15T13:31:06.592317Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "normalization"] result=Ok(()) -2026-06-15T13:31:06.592333Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "normalization"] -2026-06-15T13:31:06.592408Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["reify"] result=Ok(()) -2026-06-15T13:31:06.592420Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "import-resolver"] -2026-06-15T13:31:06.592485Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "inference"] result=Ok(()) -2026-06-15T13:31:06.592495Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "inference"] -2026-06-15T13:31:06.592544Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-mir" trial=["pass", "post_inline"] result=Ok(()) -2026-06-15T13:31:06.592558Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] result=Ok(()) -2026-06-15T13:31:06.592561Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-mir" trial=["reify"] -2026-06-15T13:31:06.592580Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] -2026-06-15T13:31:06.592835Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "type-extractor", "definition"] result=Ok(()) -2026-06-15T13:31:06.592846Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "type-extractor", "definition"] -2026-06-15T13:31:06.593139Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "sanitizer"] result=Err(Failed to verify annotation -├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:321:29 -├╴1 additional opaque attachment -│ -╰┬▶ unfulfilled annotation: DiagnosticAnnotation { category: None, severity: Error, message: "Special form cannot be used as a value", line: Some(5) } did not match any emitted diagnostics - │ ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:151:25 - │ - ├▶ unexpected diagnostic: - │ error[expander::unresolved-variable]: Unresolved variable - │ ╭▸ - │ 7 │ "a" - │ │ ━ cannot find `a` in this scope - │ │ - │ ╰ note: this could be a typo, a name used outside its scope, or a missing declaration; if it is a function or type from another module, you may need to import it first - │ help: a similar imported name exists - │ ╭╴ - │ 7 - "a" - │ 7 + "↑" - │ ├╴ - │ 7 - "a" - │ 7 + "√" - │ ├╴ - │ 7 - "a" - │ 7 + "∛" - │ ├╴ - │ 7 │ "access" - │ ├╴ +++++ - │ 7 │ "as" - │ ╰╴ + - │ ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:171:21 - │ - ╰▶ unexpected diagnostic: - error[expander::unresolved-variable]: Unresolved variable - ╭▸ - 4 │ "add", - │ ━━━ cannot find `add` in this scope - │ - ├ help: bring it into scope: `use ::core::math::add in` - ╰ note: this could be a typo, a name used outside its scope, or a missing declaration; if it is a function or type from another module, you may need to import it first - help: use one of these fully qualified paths - ╭╴ - 4 │ "::core::math::add", - ╰╴ ++++++++++++++ - ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:171:21) -2026-06-15T13:31:06.593255Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "sanitizer"] -2026-06-15T13:31:06.593450Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] result=Ok(()) -2026-06-15T13:31:06.593460Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] -2026-06-15T13:31:06.593469Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "import-resolver"] result=Ok(()) -2026-06-15T13:31:06.593482Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["reify"] result=Ok(()) -2026-06-15T13:31:06.593484Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "import-resolver"] -2026-06-15T13:31:06.593496Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] -2026-06-15T13:31:06.593790Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "normalization"] result=Ok(()) -2026-06-15T13:31:06.593798Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "normalization"] -2026-06-15T13:31:06.593843Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "inference"] result=Ok(()) -2026-06-15T13:31:06.593851Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "inference"] -2026-06-15T13:31:06.593912Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] result=Ok(()) -2026-06-15T13:31:06.593926Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] -2026-06-15T13:31:06.594024Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "type-extractor", "definition"] result=Ok(()) -2026-06-15T13:31:06.594037Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "type-extractor", "definition"] -2026-06-15T13:31:06.594295Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] result=Err(Failed to verify annotation -├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:321:29 -├╴1 additional opaque attachment -│ -╰┬▶ unexpected diagnostic: - │ error[expander::unresolved-variable]: Unresolved variable - │ ╭▸ - │ 7 │ "#tuple": ["Int"], - │ │ ━━━ cannot find `Int` in this scope - │ │ - │ ├ help: check the spelling, or import the name with a `use` statement - │ ╰ note: this could be a typo, a name used outside its scope, or a missing declaration; if it is a function or type from another module, you may need to import it first - │ ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:171:21 - │ - ├▶ unexpected diagnostic: - │ error[expander::unresolved-variable]: Unresolved variable - │ ╭▸ - │ 11 │ "x" - │ │ ━ cannot find `x` in this scope - │ │ - │ ╰ note: this could be a typo, a name used outside its scope, or a missing declaration; if it is a function or type from another module, you may need to import it first - │ help: a similar imported name exists - │ ╭╴ - │ 11 - "x" - │ 11 + "~" - │ ├╴ - │ 11 - "x" - │ 11 + "↑" - │ ├╴ - │ 11 - "x" - │ 11 + "√" - │ ├╴ - │ 11 - "x" - │ 11 + "∛" - │ ├╴ - │ 11 │ "index" - │ ╰╴ ++++ - │ ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:171:21 - │ - ╰▶ unexpected diagnostic: - error[expander::unresolved-variable]: Unresolved variable - ╭▸ - 8 │ "#type": "(Int)" - │ ━━━ cannot find `Int` in this scope - │ - ├ help: check the spelling, or import the name with a `use` statement - ╰ note: this could be a typo, a name used outside its scope, or a missing declaration; if it is a function or type from another module, you may need to import it first - ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:171:21) -2026-06-15T13:31:06.594376Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] -2026-06-15T13:31:06.594468Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-mir" trial=["reify"] result=Ok(()) -2026-06-15T13:31:06.594479Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-mir" trial=["reify"] -2026-06-15T13:31:06.594565Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "import-resolver"] result=Ok(()) -2026-06-15T13:31:06.594575Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "import-resolver"] -2026-06-15T13:31:06.594801Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] result=Err(Expected trial to pass, but it failed -├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:390:24 -╰╴1 additional opaque attachment) -2026-06-15T13:31:06.594826Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] -2026-06-15T13:31:06.594795Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "sanitizer"] result=Err(Failed to verify annotation -├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:321:29 -├╴1 additional opaque attachment -│ -╰┬▶ unfulfilled annotation: DiagnosticAnnotation { category: None, severity: Error, message: "Special form cannot be used as a type", line: Some(6) } did not match any emitted diagnostics - │ ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:151:25 - │ - ╰▶ unexpected diagnostic: - error[expander::item-not-found]: Item not found - ╭▸ - 6 │ "::kernel::special_form::let", - │ ┬─────────── ━━━ cannot find `let` in module `::kernel::special_form` - │ │ - │ looked in this module - │ - ╰ help: check the spelling and ensure the item is exported - ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:171:21) -2026-06-15T13:31:06.594886Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "sanitizer"] -2026-06-15T13:31:06.594968Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-mir" trial=["pass", "pre_inline"] result=Ok(()) -2026-06-15T13:31:06.594978Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-mir" trial=["pass", "pre_inline"] -2026-06-15T13:31:06.595215Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] result=Ok(()) -2026-06-15T13:31:06.595230Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] -2026-06-15T13:31:06.595341Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "type-extractor", "definition"] result=Ok(()) -2026-06-15T13:31:06.595352Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "type-extractor", "definition"] -2026-06-15T13:31:06.595635Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] result=Ok(()) -2026-06-15T13:31:06.595642Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] -2026-06-15T13:31:06.595658Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "normalization"] result=Ok(()) -2026-06-15T13:31:06.595667Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "inference"] result=Ok(()) -2026-06-15T13:31:06.595677Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "checking"] -2026-06-15T13:31:06.595668Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "normalization"] -2026-06-15T13:31:06.595744Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "import-resolver"] result=Ok(()) -2026-06-15T13:31:06.595752Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "import-resolver"] -2026-06-15T13:31:06.596094Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] result=Ok(()) -2026-06-15T13:31:06.596108Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] -2026-06-15T13:31:06.596060Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] result=Err(Failed to verify annotation -├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:321:29 -├╴1 additional opaque attachment -│ -╰┬▶ unexpected diagnostic: - │ error[expander::unresolved-variable]: Unresolved variable - │ ╭▸ - │ 13 │ ["+", "a", "b"] - │ │ ━ cannot find `b` in this scope - │ │ - │ ╰ note: this could be a typo, a name used outside its scope, or a missing declaration; if it is a function or type from another module, you may need to import it first - │ help: a similar imported name exists - │ ╭╴ - │ 13 - ["+", "a", "b"] - │ 13 + ["+", "a", "~"] - │ ├╴ - │ 13 - ["+", "a", "b"] - │ 13 + ["+", "a", "↑"] - │ ├╴ - │ 13 - ["+", "a", "b"] - │ 13 + ["+", "a", "√"] - │ ├╴ - │ 13 - ["+", "a", "b"] - │ 13 + ["+", "a", "∛"] - │ ├╴ - │ 13 - ["+", "a", "b"] - │ 13 + ["+", "a", "cbrt"] - │ ╰╴ - │ ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:171:21 - │ - ╰▶ unexpected diagnostic: - error[expander::unresolved-variable]: Unresolved variable - ╭▸ - 13 │ ["+", "a", "b"] - │ ━ cannot find `a` in this scope - │ - ╰ note: this could be a typo, a name used outside its scope, or a missing declaration; if it is a function or type from another module, you may need to import it first - help: a similar imported name exists - ╭╴ - 13 - ["+", "a", "b"] - 13 + ["+", "↑", "b"] - ├╴ - 13 - ["+", "a", "b"] - 13 + ["+", "√", "b"] - ├╴ - 13 - ["+", "a", "b"] - 13 + ["+", "∛", "b"] - ├╴ - 13 │ ["+", "access", "b"] - ├╴ +++++ - 13 │ ["+", "as", "b"] - ╰╴ + - ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:171:21) -2026-06-15T13:31:06.596175Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] -2026-06-15T13:31:06.596375Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] result=Ok(()) -2026-06-15T13:31:06.596385Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] -2026-06-15T13:31:06.596435Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-mir" trial=["reify"] result=Ok(()) -2026-06-15T13:31:06.596446Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-mir" trial=["reify"] -2026-06-15T13:31:06.596484Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-mir" trial=["pass", "pre_inline"] result=Ok(()) -2026-06-15T13:31:06.596494Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-mir" trial=["pass", "dse"] -2026-06-15T13:31:06.596575Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "type-extractor", "definition"] result=Ok(()) -2026-06-15T13:31:06.596591Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "type-extractor", "definition"] -2026-06-15T13:31:06.596750Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "import-resolver"] result=Err(Expected trial to pass, but it failed -├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:390:24 -╰╴1 additional opaque attachment) -2026-06-15T13:31:06.596777Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "import-resolver"] -2026-06-15T13:31:06.596794Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] result=Ok(()) -2026-06-15T13:31:06.596803Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] -2026-06-15T13:31:06.596736Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "sanitizer"] result=Err(Failed to verify annotation -├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:321:29 -├╴1 additional opaque attachment -│ -╰┬▶ unfulfilled annotation: DiagnosticAnnotation { category: None, severity: Error, message: "Remove this constraint from 'T'", line: Some(4) } did not match any emitted diagnostics - │ ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:151:25 - │ - ╰▶ unexpected diagnostic: - error[expander::unresolved-variable]: Unresolved variable - ╭▸ - 4 │ "add", - │ ━━━ cannot find `add` in this scope - │ - ├ help: bring it into scope: `use ::core::math::add in` - ╰ note: this could be a typo, a name used outside its scope, or a missing declaration; if it is a function or type from another module, you may need to import it first - help: use one of these fully qualified paths - ╭╴ - 4 │ "::core::math::add", - ╰╴ ++++++++++++++ - ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:171:21) -2026-06-15T13:31:06.596828Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "import-resolver"] -2026-06-15T13:31:06.597386Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] result=Ok(()) -2026-06-15T13:31:06.597396Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] -2026-06-15T13:31:06.597576Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] result=Ok(()) -2026-06-15T13:31:06.597588Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] -2026-06-15T13:31:06.597816Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "type-extractor", "definition"] result=Ok(()) -2026-06-15T13:31:06.597827Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "type-extractor", "definition"] -2026-06-15T13:31:06.597864Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] result=Err(Expected trial to pass, but it failed -├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:390:24 -╰╴1 additional opaque attachment) -2026-06-15T13:31:06.597886Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] -2026-06-15T13:31:06.597936Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-mir" trial=["reify"] result=Err(Expected trial to pass, but it failed -├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:390:24 -╰╴1 additional opaque attachment) -2026-06-15T13:31:06.597957Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-mir" trial=["reify"] -2026-06-15T13:31:06.598019Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-mir" trial=["pass", "dse"] result=Ok(()) -2026-06-15T13:31:06.598028Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-mir" trial=["pass", "dse"] -2026-06-15T13:31:06.598080Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "import-resolver"] result=Ok(()) -2026-06-15T13:31:06.598095Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "import-resolver"] -2026-06-15T13:31:06.598775Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] result=Err(Failed to verify annotation -├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:321:29 -├╴1 additional opaque attachment -│ -╰┬▶ unexpected diagnostic: - │ error[expander::unresolved-variable]: Unresolved variable - │ ╭▸ - │ 12 │ ["+", "a", "b"] - │ │ ━ cannot find `b` in this scope - │ │ - │ ╰ note: this could be a typo, a name used outside its scope, or a missing declaration; if it is a function or type from another module, you may need to import it first - │ help: a similar imported name exists - │ ╭╴ - │ 12 - ["+", "a", "b"] - │ 12 + ["+", "a", "~"] - │ ├╴ - │ 12 - ["+", "a", "b"] - │ 12 + ["+", "a", "↑"] - │ ├╴ - │ 12 - ["+", "a", "b"] - │ 12 + ["+", "a", "√"] - │ ├╴ - │ 12 - ["+", "a", "b"] - │ 12 + ["+", "a", "∛"] - │ ├╴ - │ 12 - ["+", "a", "b"] - │ 12 + ["+", "a", "cbrt"] - │ ╰╴ - │ ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:171:21 - │ - ╰▶ unexpected diagnostic: - error[expander::unresolved-variable]: Unresolved variable - ╭▸ - 12 │ ["+", "a", "b"] - │ ━ cannot find `a` in this scope - │ - ╰ note: this could be a typo, a name used outside its scope, or a missing declaration; if it is a function or type from another module, you may need to import it first - help: a similar imported name exists - ╭╴ - 12 - ["+", "a", "b"] - 12 + ["+", "↑", "b"] - ├╴ - 12 - ["+", "a", "b"] - 12 + ["+", "√", "b"] - ├╴ - 12 - ["+", "a", "b"] - 12 + ["+", "∛", "b"] - ├╴ - 12 │ ["+", "access", "b"] - ├╴ +++++ - 12 │ ["+", "as", "b"] - ╰╴ + - ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:171:21) -2026-06-15T13:31:06.598850Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] -2026-06-15T13:31:06.598928Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "type-extractor", "definition"] result=Ok(()) -2026-06-15T13:31:06.598940Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "type-extractor", "definition"] -2026-06-15T13:31:06.599013Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] result=Err(Expected trial to pass, but it failed -├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:390:24 -╰╴1 additional opaque attachment) -2026-06-15T13:31:06.599035Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] -2026-06-15T13:31:06.598955Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "import-resolver"] result=Err(Failed to verify annotation -├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:321:29 -├╴1 additional opaque attachment -│ -╰┬▶ unfulfilled annotation: DiagnosticAnnotation { category: None, severity: Error, message: "Cannot find variable 'föo'", line: Some(11) } did not match any emitted diagnostics - │ ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:151:25 - │ - ╰▶ unexpected diagnostic: - error[expander::unresolved-variable]: Unresolved variable - ╭▸ - 11 │ "föo" - │ ━━━ cannot find `föo` in this scope - │ - ╰ note: this could be a typo, a name used outside its scope, or a missing declaration; if it is a function or type from another module, you may need to import it first - help: a similar local binding exists - ╭╴ - 11 - "föo" - 11 + "foo" - ╰╴ - ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:171:21) -2026-06-15T13:31:06.599103Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "import-resolver"] -2026-06-15T13:31:06.599411Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "import-resolver"] result=Ok(()) -2026-06-15T13:31:06.599359Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] result=Err(Failed to verify annotation +2026-06-15T14:19:06.066212Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] +2026-06-15T14:19:06.066841Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-mir" trial=["reify"] result=Ok(()) +2026-06-15T14:19:06.066854Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-mir" trial=["reify"] +2026-06-15T14:19:06.067217Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "checking"] result=Ok(()) +2026-06-15T14:19:06.067243Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "type-extractor"] result=Ok(()) +2026-06-15T14:19:06.067259Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "type-extractor"] +2026-06-15T14:19:06.067212Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "pre-expansion-name-resolver"] result=Err(Expected trial to pass, but it failed +├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:390:24 +╰╴1 additional opaque attachment) +2026-06-15T14:19:06.067244Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "checking"] +2026-06-15T14:19:06.067299Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "pre-expansion-name-resolver"] +2026-06-15T14:19:06.067690Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "type-extractor", "definition"] result=Ok(()) +2026-06-15T14:19:06.067704Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "type-extractor", "definition"] +2026-06-15T14:19:06.067688Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] result=Ok(()) +2026-06-15T14:19:06.067768Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] +2026-06-15T14:19:06.068695Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "pre-expansion-name-resolver"] result=Ok(()) +2026-06-15T14:19:06.068707Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "pre-expansion-name-resolver"] +2026-06-15T14:19:06.068752Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "type-extractor"] result=Ok(()) +2026-06-15T14:19:06.068767Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "type-extractor"] +2026-06-15T14:19:06.068815Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "checking"] result=Ok(()) +2026-06-15T14:19:06.068829Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "checking"] +2026-06-15T14:19:06.068990Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "type-extractor", "definition"] result=Ok(()) +2026-06-15T14:19:06.069003Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "type-extractor", "definition"] +2026-06-15T14:19:06.069187Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] result=Ok(()) +2026-06-15T14:19:06.069197Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] +2026-06-15T14:19:06.069775Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-mir" trial=["reify"] result=Ok(()) +2026-06-15T14:19:06.069798Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-mir" trial=["reify"] +2026-06-15T14:19:06.070024Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "type-extractor"] result=Ok(()) +2026-06-15T14:19:06.070037Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "type-extractor"] +2026-06-15T14:19:06.070174Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "checking"] result=Ok(()) +2026-06-15T14:19:06.070184Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "checking"] +2026-06-15T14:19:06.070245Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "pre-expansion-name-resolver"] result=Err(Expected trial to pass, but it failed +├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:390:24 +╰╴1 additional opaque attachment) +2026-06-15T14:19:06.070286Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "pre-expansion-name-resolver"] +2026-06-15T14:19:06.070370Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] result=Err(Expected trial to pass, but it failed +├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:390:24 +╰╴1 additional opaque attachment) +2026-06-15T14:19:06.070411Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "node-renumberer"] +2026-06-15T14:19:06.070512Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-mir" trial=["pass", "inline"] result=Ok(()) +2026-06-15T14:19:06.070532Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-mir" trial=["pass", "inline"] +2026-06-15T14:19:06.071348Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "type-extractor"] result=Ok(()) +2026-06-15T14:19:06.071360Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "type-extractor", "definition"] +2026-06-15T14:19:06.071515Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "pre-expansion-name-resolver"] result=Ok(()) +2026-06-15T14:19:06.071531Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "pre-expansion-name-resolver"] +2026-06-15T14:19:06.071565Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "node-renumberer"] result=Ok(()) +2026-06-15T14:19:06.071579Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "node-renumberer"] +2026-06-15T14:19:06.071625Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "checking"] result=Ok(()) +2026-06-15T14:19:06.071640Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "checking"] +2026-06-15T14:19:06.070515Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "type-extractor", "definition"] result=Ok(()) +2026-06-15T14:19:06.071754Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "type-extractor", "definition"] +2026-06-15T14:19:06.072519Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "type-extractor", "definition"] result=Ok(()) +2026-06-15T14:19:06.072530Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "type-extractor", "definition"] +2026-06-15T14:19:06.072778Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "pre-expansion-name-resolver"] result=Ok(()) +2026-06-15T14:19:06.072794Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "pre-expansion-name-resolver"] +2026-06-15T14:19:06.072864Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "node-renumberer"] result=Ok(()) +2026-06-15T14:19:06.072878Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "node-renumberer"] +2026-06-15T14:19:06.072901Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "checking"] result=Ok(()) +2026-06-15T14:19:06.072914Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "checking"] +2026-06-15T14:19:06.073084Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "type-extractor", "definition"] result=Ok(()) +2026-06-15T14:19:06.073099Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "type-extractor", "definition"] +2026-06-15T14:19:06.073991Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "pre-expansion-name-resolver"] result=Err(Expected trial to pass, but it failed +├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:390:24 +╰╴1 additional opaque attachment) +2026-06-15T14:19:06.074048Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "pre-expansion-name-resolver"] +2026-06-15T14:19:06.074179Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "type-extractor", "definition"] result=Ok(()) +2026-06-15T14:19:06.074191Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "type-extractor", "definition"] +2026-06-15T14:19:06.074033Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "node-renumberer"] result=Ok(()) +2026-06-15T14:19:06.074330Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "type-extractor", "definition"] result=Ok(()) +2026-06-15T14:19:06.074333Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "type-extractor"] +2026-06-15T14:19:06.074340Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "type-extractor", "definition"] +2026-06-15T14:19:06.074571Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "checking"] result=Ok(()) +2026-06-15T14:19:06.074581Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "checking"] +2026-06-15T14:19:06.075403Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "type-extractor", "definition"] result=Ok(()) +2026-06-15T14:19:06.075430Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "pre-expansion-name-resolver"] result=Ok(()) +2026-06-15T14:19:06.075438Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "type-extractor", "definition"] result=Ok(()) +2026-06-15T14:19:06.075451Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-mir" trial=["reify"] +2026-06-15T14:19:06.075455Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "type-extractor", "definition"] +2026-06-15T14:19:06.075611Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "type-extractor"] result=Ok(()) +2026-06-15T14:19:06.075623Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "type-extractor"] +2026-06-15T14:19:06.075689Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "checking"] result=Err(Expected trial to pass, but it failed +├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:390:24 +╰╴1 additional opaque attachment) +2026-06-15T14:19:06.075731Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "checking"] +2026-06-15T14:19:06.075433Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "type-extractor", "definition"] +2026-06-15T14:19:06.076813Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "type-extractor", "definition"] result=Ok(()) +2026-06-15T14:19:06.076821Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "type-extractor"] result=Ok(()) +2026-06-15T14:19:06.076843Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-mir" trial=["reify"] +2026-06-15T14:19:06.076884Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-mir" trial=["reify"] result=Ok(()) +2026-06-15T14:19:06.076895Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-mir" trial=["reify"] +2026-06-15T14:19:06.076825Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "type-extractor", "definition"] +2026-06-15T14:19:06.077194Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "type-extractor", "definition"] result=Ok(()) +2026-06-15T14:19:06.077205Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "type-extractor", "definition"] +2026-06-15T14:19:06.078040Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "checking"] result=Ok(()) +2026-06-15T14:19:06.078076Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "checking"] +2026-06-15T14:19:06.078369Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "type-extractor", "definition"] result=Ok(()) +2026-06-15T14:19:06.078391Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "type-extractor", "definition"] +2026-06-15T14:19:06.078374Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-mir" trial=["reify"] result=Ok(()) +2026-06-15T14:19:06.078436Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-mir" trial=["reify"] +2026-06-15T14:19:06.078516Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-mir" trial=["reify"] result=Ok(()) +2026-06-15T14:19:06.078534Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-mir" trial=["reify"] +2026-06-15T14:19:06.078546Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "type-extractor", "definition"] result=Ok(()) +2026-06-15T14:19:06.078564Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "type-extractor", "definition"] +2026-06-15T14:19:06.079752Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "type-extractor", "definition"] result=Ok(()) +2026-06-15T14:19:06.079776Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "type-extractor", "definition"] +2026-06-15T14:19:06.079816Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-mir" trial=["reify"] result=Ok(()) +2026-06-15T14:19:06.079753Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "checking"] result=Ok(()) +2026-06-15T14:19:06.079828Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "type-extractor", "definition"] result=Ok(()) +2026-06-15T14:19:06.079851Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-mir" trial=["reify"] +2026-06-15T14:19:06.079873Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "type-extractor", "definition"] +2026-06-15T14:19:06.079861Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "checking"] +2026-06-15T14:19:06.080272Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-mir" trial=["reify"] result=Ok(()) +2026-06-15T14:19:06.080284Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-mir" trial=["reify"] +2026-06-15T14:19:06.080828Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-mir" trial=["pass", "inline"] result=Ok(()) +2026-06-15T14:19:06.080848Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "type-extractor", "definition"] +2026-06-15T14:19:06.081172Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "type-extractor", "definition"] result=Ok(()) +2026-06-15T14:19:06.081184Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "type-extractor", "definition"] +2026-06-15T14:19:06.081258Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "type-extractor", "definition"] result=Ok(()) +2026-06-15T14:19:06.081281Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "type-extractor", "definition"] +2026-06-15T14:19:06.081380Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-mir" trial=["reify"] result=Ok(()) +2026-06-15T14:19:06.081395Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["reify"] +2026-06-15T14:19:06.081431Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "checking"] result=Ok(()) +2026-06-15T14:19:06.081448Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "checking"] +2026-06-15T14:19:06.081681Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "specialization"] result=Ok(()) +2026-06-15T14:19:06.081694Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "specialization"] +2026-06-15T14:19:06.081817Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-mir" trial=["reify"] result=Ok(()) +2026-06-15T14:19:06.081832Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-mir" trial=["reify"] +2026-06-15T14:19:06.082250Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "type-extractor", "definition"] result=Ok(()) +2026-06-15T14:19:06.082262Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "type-extractor", "definition"] +2026-06-15T14:19:06.082481Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["reify"] result=Ok(()) +2026-06-15T14:19:06.082495Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["reify"] +2026-06-15T14:19:06.082607Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "type-extractor", "definition"] result=Ok(()) +2026-06-15T14:19:06.082619Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "type-extractor", "definition"] +2026-06-15T14:19:06.082628Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "type-extractor", "definition"] result=Ok(()) +2026-06-15T14:19:06.082643Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "type-extractor", "definition"] +2026-06-15T14:19:06.083191Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "specialization"] result=Ok(()) +2026-06-15T14:19:06.083204Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "specialization"] +2026-06-15T14:19:06.083290Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "checking"] result=Ok(()) +2026-06-15T14:19:06.083315Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "checking"] +2026-06-15T14:19:06.083518Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-mir" trial=["reify"] result=Ok(()) +2026-06-15T14:19:06.083538Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-mir" trial=["reify"] +2026-06-15T14:19:06.083552Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["reify"] result=Ok(()) +2026-06-15T14:19:06.083566Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["reify"] +2026-06-15T14:19:06.083952Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "type-extractor", "definition"] result=Ok(()) +2026-06-15T14:19:06.083973Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "type-extractor", "definition"] +2026-06-15T14:19:06.083955Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "type-extractor", "definition"] result=Ok(()) +2026-06-15T14:19:06.084193Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "type-extractor", "definition"] +2026-06-15T14:19:06.084209Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "type-extractor", "definition"] result=Ok(()) +2026-06-15T14:19:06.084225Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-mir" trial=["pass", "inst_simplify"] +2026-06-15T14:19:06.084768Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "specialization"] result=Ok(()) +2026-06-15T14:19:06.084786Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "thunking"] +2026-06-15T14:19:06.084924Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["reify"] result=Ok(()) +2026-06-15T14:19:06.084953Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["reify"] +2026-06-15T14:19:06.085020Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "checking"] result=Ok(()) +2026-06-15T14:19:06.085033Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "checking"] +2026-06-15T14:19:06.085259Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "type-extractor", "definition"] result=Ok(()) +2026-06-15T14:19:06.085273Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "type-extractor", "definition"] +2026-06-15T14:19:06.085513Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "type-extractor", "definition"] result=Ok(()) +2026-06-15T14:19:06.085525Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "type-extractor", "definition"] +2026-06-15T14:19:06.086094Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "thunking"] result=Ok(()) +2026-06-15T14:19:06.086113Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "thunking"] +2026-06-15T14:19:06.086463Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "type-extractor", "definition"] result=Ok(()) +2026-06-15T14:19:06.086476Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "type-extractor", "definition"] +2026-06-15T14:19:06.086495Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "checking"] result=Ok(()) +2026-06-15T14:19:06.086508Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "checking"] +2026-06-15T14:19:06.086522Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["reify"] result=Ok(()) +2026-06-15T14:19:06.086554Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["reify"] +2026-06-15T14:19:06.086882Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "type-extractor", "definition"] result=Ok(()) +2026-06-15T14:19:06.086901Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "type-extractor", "definition"] +2026-06-15T14:19:06.087371Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "thunking"] result=Ok(()) +2026-06-15T14:19:06.087385Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "thunking"] +2026-06-15T14:19:06.087756Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "type-extractor", "definition"] result=Ok(()) +2026-06-15T14:19:06.087777Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "thunking"] +2026-06-15T14:19:06.087880Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["reify"] result=Ok(()) +2026-06-15T14:19:06.087911Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "checking"] +2026-06-15T14:19:06.088112Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "type-extractor", "definition"] result=Ok(()) +2026-06-15T14:19:06.088125Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "type-extractor", "definition"] +2026-06-15T14:19:06.088341Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "checking"] result=Ok(()) +2026-06-15T14:19:06.088360Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-mir" trial=["pass", "data-dependency"] +2026-06-15T14:19:06.088659Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "thunking"] result=Ok(()) +2026-06-15T14:19:06.088671Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "specialization"] +2026-06-15T14:19:06.089220Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "thunking"] result=Ok(()) +2026-06-15T14:19:06.089235Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "checking"] +2026-06-15T14:19:06.089502Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-mir" trial=["pass", "data-dependency"] result=Ok(()) +2026-06-15T14:19:06.089514Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-mir" trial=["pass", "data-dependency"] +2026-06-15T14:19:06.089573Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "type-extractor", "definition"] result=Ok(()) +2026-06-15T14:19:06.089587Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "type-extractor"] +2026-06-15T14:19:06.089882Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "checking"] result=Ok(()) +2026-06-15T14:19:06.089893Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "checking"] +2026-06-15T14:19:06.090354Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "specialization"] result=Ok(()) +2026-06-15T14:19:06.090386Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "specialization"] +2026-06-15T14:19:06.090566Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "checking"] result=Ok(()) +2026-06-15T14:19:06.090578Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "checking"] +2026-06-15T14:19:06.090998Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "type-extractor"] result=Ok(()) +2026-06-15T14:19:06.091008Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "type-extractor"] +2026-06-15T14:19:06.091606Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "checking"] result=Ok(()) +2026-06-15T14:19:06.091620Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "checking"] +2026-06-15T14:19:06.092178Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "type-extractor"] result=Ok(()) +2026-06-15T14:19:06.092191Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "type-extractor"] +2026-06-15T14:19:06.092476Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-mir" trial=["reify"] result=Err(Expected trial to pass, but it failed +├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:390:24 +╰╴1 additional opaque attachment) +2026-06-15T14:19:06.092529Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-mir" trial=["reify"] +2026-06-15T14:19:06.093049Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "checking"] result=Ok(()) +2026-06-15T14:19:06.093071Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "specialization"] +2026-06-15T14:19:06.093120Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-mir" trial=["pass", "inst_simplify"] result=Ok(()) +2026-06-15T14:19:06.093132Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-mir" trial=["pass", "inst_simplify"] +2026-06-15T14:19:06.093396Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "type-extractor"] result=Ok(()) +2026-06-15T14:19:06.093407Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "type-extractor"] +2026-06-15T14:19:06.094668Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "type-extractor"] result=Ok(()) +2026-06-15T14:19:06.094680Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-eval" trial=["postgres"] +2026-06-15T14:19:06.094687Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-mir" trial=["pass", "inst_simplify"] result=Ok(()) +2026-06-15T14:19:06.094699Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-mir" trial=["pass", "inst_simplify"] +2026-06-15T14:19:06.094926Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-mir" trial=["reify"] result=Ok(()) +2026-06-15T14:19:06.094954Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-mir" trial=["pass", "inst_simplify"] +2026-06-15T14:19:06.096264Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-mir" trial=["pass", "inst_simplify"] result=Ok(()) +2026-06-15T14:19:06.096280Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-mir" trial=["pass", "inst_simplify"] +2026-06-15T14:19:06.096489Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-mir" trial=["pass", "inst_simplify"] result=Ok(()) +2026-06-15T14:19:06.096502Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-mir" trial=["pass", "administrative_reduction"] +2026-06-15T14:19:06.097313Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "checking"] result=Ok(()) +2026-06-15T14:19:06.097325Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "checking"] +2026-06-15T14:19:06.097904Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-mir" trial=["pass", "inst_simplify"] result=Ok(()) +2026-06-15T14:19:06.097919Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-mir" trial=["pass", "inst_simplify"] +2026-06-15T14:19:06.098346Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-mir" trial=["pass", "administrative_reduction"] result=Ok(()) +2026-06-15T14:19:06.098376Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-mir" trial=["pass", "administrative_reduction"] +2026-06-15T14:19:06.099033Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "checking"] result=Ok(()) +2026-06-15T14:19:06.099048Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-mir" trial=["pass", "inst_simplify"] +2026-06-15T14:19:06.100692Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-mir" trial=["pass", "inst_simplify"] result=Ok(()) +2026-06-15T14:19:06.100710Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-mir" trial=["pass", "inst_simplify"] +2026-06-15T14:19:06.102235Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-mir" trial=["pass", "inst_simplify"] result=Ok(()) +2026-06-15T14:19:06.102258Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-mir" trial=["pass", "inline"] +2026-06-15T14:19:06.104375Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "specialization"] result=Err(Failed to verify annotation ├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:321:29 ├╴1 additional opaque attachment │ -╰┬▶ unfulfilled annotation: DiagnosticAnnotation { category: None, severity: Error, message: "expected `*`, a tuple of names, or a struct of aliases", line: Some(8) } did not match any emitted diagnostics +╰┬▶ unfulfilled annotation: DiagnosticAnnotation { category: None, severity: Error, message: "This is not a graph intrinsic operation", line: Some(6) } did not match any emitted diagnostics │ ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:151:25 │ ├▶ unexpected diagnostic: - │ error[expander::unresolved-variable]: Unresolved variable - │ ╭▸ - │ 12 │ "x" - │ │ ━ cannot find `x` in this scope - │ │ - │ ╰ note: this could be a typo, a name used outside its scope, or a missing declaration; if it is a function or type from another module, you may need to import it first - │ help: a similar imported name exists - │ ╭╴ - │ 12 - "x" - │ 12 + "~" - │ ├╴ - │ 12 - "x" - │ 12 + "↑" - │ ├╴ - │ 12 - "x" - │ 12 + "√" - │ ├╴ - │ 12 - "x" - │ 12 + "∛" - │ ├╴ - │ 12 │ "index" - │ ╰╴ ++++ - │ ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:171:21 - │ - ├▶ unexpected diagnostic: - │ error[expander::package-not-found]: Package not found + │ error[type-check::bound-constraint-violation]: Type bound constraint violation │ ╭▸ - │ 5 │ "::math", - │ │ ┬─┯━━━ - │ │ │ │ - │ │ │ cannot find package `math` - │ │ in this path + │ 1 │ //@ run: fail + │ │ ─ Upper bound `::graph::Graph('marker: ?30)` is not a supertype of the lower bound + │ ‡ + │ 6 │ ["fn", { "#tuple": [] }, { "#struct": { "graph": "_" } }, "_", {"#literal": 0}], + │ │ ┯ ─ Lower bound `Integer` must be a subtype of the upper bound + │ │ │ + │ │ Type variable has incompatible upper and lower bounds │ │ - │ ├ help: check the package name, or add it to the project dependencies - │ ╰ note: absolute paths start from an installed package + │ ├ help: These type bounds create an impossible constraint. To fix this: + │ │ 1. Modify `Integer` to be a proper subtype of `::graph::Graph('marker: ?30)` + │ │ 2. Or adjust `::graph::Graph('marker: ?30)` to be a supertype of `Integer` + │ │ 3. Or check your code for contradictory type assertions + │ ╰ note: During type inference, when a variable has both upper and lower bounds, the relationship 'lower <: upper' must hold. This ensures a valid solution exists in the type system. When this relationship is violated, it means your code is requiring contradictory types for the same variable. │ ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:171:21 │ ╰▶ unexpected diagnostic: - error[expander::invalid-use-alias]: Invalid use alias + error[type-check::bound-constraint-violation]: Type bound constraint violation ╭▸ - 8 │ "x": { "#literal": 1 } - │ ━━━━━━━━━━━━━━━━━ expected `_` or a simple identifier as the alias + 1 │ //@ run: fail + │ ─ Upper bound `::graph::Graph('marker: ?30)` is not a supertype of the lower bound + ‡ + 5 │ ┏ [ + 6 │ ┃ ["fn", { "#tuple": [] }, { "#struct": { "graph": "_" } }, "_", {"#literal": 0}], + │ ┃ ─ Lower bound `Integer` must be a subtype of the upper bound + 7 │ ┃ //~^ ERROR This is not a graph intrinsic operation + 8 │ ┃ ["::graph::head::entities", ["::graph::tmp::decision_time_now"]] + 9 │ ┃ ] + │ ┗━━━┛ Type variable has incompatible upper and lower bounds │ - ╰ help: use `_` to keep the original name or a simple identifier to rename: `(name: alias)` or `(name: _)` + ├ help: These type bounds create an impossible constraint. To fix this: + │ 1. Modify `Integer` to be a proper subtype of `::graph::Graph('marker: ?30)` + │ 2. Or adjust `::graph::Graph('marker: ?30)` to be a supertype of `Integer` + │ 3. Or check your code for contradictory type assertions + ╰ note: During type inference, when a variable has both upper and lower bounds, the relationship 'lower <: upper' must hold. This ensures a valid solution exists in the type system. When this relationship is violated, it means your code is requiring contradictory types for the same variable. ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:171:21) -2026-06-15T13:31:06.599445Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "import-resolver"] -2026-06-15T13:31:06.599459Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] -2026-06-15T13:31:06.599519Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-mir" trial=["pass", "dse"] result=Ok(()) -2026-06-15T13:31:06.599531Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-mir" trial=["pass", "dse"] -2026-06-15T13:31:06.599542Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-mir" trial=["reify"] result=Ok(()) -2026-06-15T13:31:06.599572Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-mir" trial=["pass", "inline"] -2026-06-15T13:31:06.600349Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] result=Err(Expected trial to pass, but it failed -├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:390:24 -╰╴1 additional opaque attachment) -2026-06-15T13:31:06.600372Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] -2026-06-15T13:31:06.600373Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "import-resolver"] result=Ok(()) -2026-06-15T13:31:06.600417Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "import-resolver"] -2026-06-15T13:31:06.600484Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] result=Err(Failed to verify annotation -├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:321:29 -├╴1 additional opaque attachment -│ -╰─▶ unexpected diagnostic: - error[expander::unresolved-variable]: Unresolved variable - ╭▸ - 7 │ { "#struct": { "foo": "Bar" } }, - │ ━━━ cannot find `Bar` in this scope - │ - ├ help: check the spelling, or import the name with a `use` statement - ╰ note: this could be a typo, a name used outside its scope, or a missing declaration; if it is a function or type from another module, you may need to import it first - ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:171:21) -2026-06-15T13:31:06.600519Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] -2026-06-15T13:31:06.600581Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "type-extractor", "definition"] result=Err(Failed to verify annotation -├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:321:29 -├╴1 additional opaque attachment -│ -╰┬▶ unfulfilled annotation: DiagnosticAnnotation { category: None, severity: Error, message: "unexpected argument", line: Some(6) } did not match any emitted diagnostics - │ ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:151:25 - │ - ╰▶ unexpected diagnostic: - error[type-extractor::generic-parameter-mismatch]: Incorrect number of type parameters - ╭▸ - 6 │ "Some", - │ ┯━━━━━━━━━━━━┬─────━ - │ │ │ - │ │ Remove this argument - │ Type `::core::option::Some` takes 1 type parameter, but 2 were provided - │ - ├ help: Remove the extra parameter(s): `::core::option::Some` - ╰ note: Generic type parameters allow types to work with different data types while maintaining type safety. Each generic type has specific requirements for the number and names of type parameters it accepts. For example, List requires exactly one type parameter, while Dict requires two. - ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:171:21) -2026-06-15T13:31:06.600534Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] result=Err(Failed to verify annotation -├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:321:29 -├╴1 additional opaque attachment -│ -╰┬▶ unexpected diagnostic: - │ error[expander::unresolved-variable]: Unresolved variable - │ ╭▸ - │ 12 │ ["+", "a", "b"] - │ │ ━ cannot find `b` in this scope - │ │ - │ ╰ note: this could be a typo, a name used outside its scope, or a missing declaration; if it is a function or type from another module, you may need to import it first - │ help: a similar imported name exists - │ ╭╴ - │ 12 - ["+", "a", "b"] - │ 12 + ["+", "a", "~"] - │ ├╴ - │ 12 - ["+", "a", "b"] - │ 12 + ["+", "a", "↑"] - │ ├╴ - │ 12 - ["+", "a", "b"] - │ 12 + ["+", "a", "√"] - │ ├╴ - │ 12 - ["+", "a", "b"] - │ 12 + ["+", "a", "∛"] - │ ├╴ - │ 12 - ["+", "a", "b"] - │ 12 + ["+", "a", "cbrt"] - │ ╰╴ - │ ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:171:21 - │ - ├▶ unexpected diagnostic: - │ error[expander::unresolved-variable]: Unresolved variable - │ ╭▸ - │ 6 │ "#struct": { "T": "Int" }, - │ │ ━━━ cannot find `Int` in this scope - │ │ - │ ├ help: check the spelling, or import the name with a `use` statement - │ ╰ note: this could be a typo, a name used outside its scope, or a missing declaration; if it is a function or type from another module, you may need to import it first - │ ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:171:21 - │ - ╰▶ unexpected diagnostic: - error[expander::unresolved-variable]: Unresolved variable - ╭▸ - 12 │ ["+", "a", "b"] - │ ━ cannot find `a` in this scope - │ - ╰ note: this could be a typo, a name used outside its scope, or a missing declaration; if it is a function or type from another module, you may need to import it first - help: a similar imported name exists - ╭╴ - 12 - ["+", "a", "b"] - 12 + ["+", "↑", "b"] - ├╴ - 12 - ["+", "a", "b"] - 12 + ["+", "√", "b"] - ├╴ - 12 - ["+", "a", "b"] - 12 + ["+", "∛", "b"] - ├╴ - 12 │ ["+", "access", "b"] - ├╴ +++++ - 12 │ ["+", "as", "b"] - ╰╴ + - ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:171:21) -2026-06-15T13:31:06.600662Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "type-extractor", "definition"] -2026-06-15T13:31:06.600669Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] -2026-06-15T13:31:06.600748Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] result=Err(Expected trial to pass, but it failed -├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:390:24 -╰╴1 additional opaque attachment) -2026-06-15T13:31:06.600774Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] -2026-06-15T13:31:06.600975Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-mir" trial=["pass", "dse"] result=Ok(()) -2026-06-15T13:31:06.600985Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-mir" trial=["pass", "dse"] -2026-06-15T13:31:06.601534Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "import-resolver"] result=Err(Failed to verify annotation -├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:321:29 -├╴1 additional opaque attachment -│ -╰┬▶ unfulfilled annotation: DiagnosticAnnotation { category: None, severity: Error, message: "Remove this generic argument", line: Some(3) } did not match any emitted diagnostics - │ ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:151:25 - │ - ├▶ unexpected diagnostic: - │ error[expander::generic-arguments-in-module]: Generic arguments in module path - │ ╭▸ - │ 3 │ ["::math::add", { "#literal": 2 }, { "#literal": 3 }] - │ │ ━ generic argument not allowed here - │ │ - │ ├ help: move the generic arguments to the final segment of the path, or remove them - │ ╰ note: modules are not generic; only the final item in a path can be parameterized - │ ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:171:21 - │ - ╰▶ unexpected diagnostic: - error[expander::unresolved-variable]: Unresolved variable - ╭▸ - 3 │ ["::math::add", { "#literal": 2 }, { "#literal": 3 }] - │ ━ cannot find `T` in this scope - │ - ╰ note: this could be a typo, a name used outside its scope, or a missing declaration; if it is a function or type from another module, you may need to import it first - help: a similar imported name exists - ╭╴ - 3 - ["::math::add", { "#literal": 2 }, { "#literal": 3 }] - 3 + ["::math::add", { "#literal": 2 }, { "#literal": 3 }] - ├╴ - 3 - ["::math::add", { "#literal": 2 }, { "#literal": 3 }] - 3 + ["::math::add", { "#literal": 2 }, { "#literal": 3 }] - ├╴ - 3 - ["::math::add", { "#literal": 2 }, { "#literal": 3 }] - 3 + ["::math::add", { "#literal": 2 }, { "#literal": 3 }] - ├╴ - 3 - ["::math::add", { "#literal": 2 }, { "#literal": 3 }] - 3 + ["::math::add", { "#literal": 2 }, { "#literal": 3 }] - ├╴ - 3 - ["::math::add", { "#literal": 2 }, { "#literal": 3 }] - 3 + ["::math<|>::add", { "#literal": 2 }, { "#literal": 3 }] - ╰╴ - ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:171:21) -2026-06-15T13:31:06.601600Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "import-resolver"] -2026-06-15T13:31:06.601668Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] result=Ok(()) -2026-06-15T13:31:06.601684Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] -2026-06-15T13:31:06.601750Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] result=Ok(()) -2026-06-15T13:31:06.601764Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] -2026-06-15T13:31:06.601764Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "import-resolver"] result=Ok(()) -2026-06-15T13:31:06.601786Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "import-resolver"] -2026-06-15T13:31:06.601986Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "type-extractor", "definition"] result=Ok(()) -2026-06-15T13:31:06.601999Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "type-extractor", "definition"] -2026-06-15T13:31:06.602355Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] result=Err(Failed to verify annotation -├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:321:29 -├╴1 additional opaque attachment -│ -╰─▶ unexpected diagnostic: - error[expander::unresolved-variable]: Unresolved variable - ╭▸ - 7 │ { "#struct": { "foo": "Bar" } }, - │ ━━━ cannot find `Bar` in this scope - │ - ├ help: check the spelling, or import the name with a `use` statement - ╰ note: this could be a typo, a name used outside its scope, or a missing declaration; if it is a function or type from another module, you may need to import it first - ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:171:21) -2026-06-15T13:31:06.602397Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] -2026-06-15T13:31:06.602915Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] result=Ok(()) -2026-06-15T13:31:06.602925Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] -2026-06-15T13:31:06.602949Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] result=Err(Expected trial to pass, but it failed -├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:390:24 -╰╴1 additional opaque attachment) -2026-06-15T13:31:06.602975Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "pre-expansion-name-resolver"] -2026-06-15T13:31:06.603098Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] result=Err(Failed to verify annotation -├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:321:29 -├╴1 additional opaque attachment -│ -╰┬▶ unexpected diagnostic: - │ error[expander::unresolved-variable]: Unresolved variable - │ ╭▸ - │ 9 │ ["+", "a", "b"] - │ │ ━ cannot find `b` in this scope - │ │ - │ ╰ note: this could be a typo, a name used outside its scope, or a missing declaration; if it is a function or type from another module, you may need to import it first - │ help: a similar imported name exists - │ ╭╴ - │ 9 - ["+", "a", "b"] - │ 9 + ["+", "a", "~"] - │ ├╴ - │ 9 - ["+", "a", "b"] - │ 9 + ["+", "a", "↑"] - │ ├╴ - │ 9 - ["+", "a", "b"] - │ 9 + ["+", "a", "√"] - │ ├╴ - │ 9 - ["+", "a", "b"] - │ 9 + ["+", "a", "∛"] - │ ├╴ - │ 9 - ["+", "a", "b"] - │ 9 + ["+", "a", "cbrt"] - │ ╰╴ - │ ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:171:21 - │ - ╰▶ unexpected diagnostic: - error[expander::unresolved-variable]: Unresolved variable - ╭▸ - 9 │ ["+", "a", "b"] - │ ━ cannot find `a` in this scope - │ - ╰ note: this could be a typo, a name used outside its scope, or a missing declaration; if it is a function or type from another module, you may need to import it first - help: a similar imported name exists - ╭╴ - 9 - ["+", "a", "b"] - 9 + ["+", "↑", "b"] - ├╴ - 9 - ["+", "a", "b"] - 9 + ["+", "√", "b"] - ├╴ - 9 - ["+", "a", "b"] - 9 + ["+", "∛", "b"] - ├╴ - 9 │ ["+", "access", "b"] - ├╴ +++++ - 9 │ ["+", "as", "b"] - ╰╴ + - ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:171:21) -2026-06-15T13:31:06.603180Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] -2026-06-15T13:31:06.603180Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "type-extractor", "definition"] result=Ok(()) -2026-06-15T13:31:06.603238Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "type-extractor", "definition"] -2026-06-15T13:31:06.603266Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "import-resolver"] result=Ok(()) -2026-06-15T13:31:06.603292Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "import-resolver"] -2026-06-15T13:31:06.603524Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "import-resolver"] result=Err(Failed to verify annotation -├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:321:29 -├╴1 additional opaque attachment -│ -╰┬▶ unfulfilled annotation: DiagnosticAnnotation { category: None, severity: Error, message: "Generic arguments are not allowed here", line: Some(3) } did not match any emitted diagnostics - │ ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:151:25 - │ - ├▶ unexpected diagnostic: - │ error[expander::item-not-found]: Item not found - │ ╭▸ - │ 3 │ ["use", "kernel::type", { "#tuple": ["T"] }, "_"] - │ │ ┬─── ━ cannot find `T` in module `kernel::type` - │ │ │ - │ │ looked in this module - │ ╰╴ - │ help: a similar item exists in this module - │ ╭╴ - │ 3 - ["use", "kernel::type", { "#tuple": ["T"] }, "_"] - │ 3 + ["use", "kernel::type", { "#tuple": ["Number"] }, "_"] - │ ├╴ - │ 3 - ["use", "kernel::type", { "#tuple": ["T"] }, "_"] - │ 3 + ["use", "kernel::type", { "#tuple": ["String"] }, "_"] - │ ├╴ - │ 3 - ["use", "kernel::type", { "#tuple": ["T"] }, "_"] - │ 3 + ["use", "kernel::type", { "#tuple": ["Union"] }, "_"] - │ ├╴ - │ 3 - ["use", "kernel::type", { "#tuple": ["T"] }, "_"] - │ 3 + ["use", "kernel::type", { "#tuple": ["Unknown"] }, "_"] - │ ├╴ - │ 3 - ["use", "kernel::type", { "#tuple": ["T"] }, "_"] - │ 3 + ["use", "kernel::type", { "#tuple": ["|"] }, "_"] - │ ╰╴ - │ ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:171:21 - │ - ╰▶ unexpected diagnostic: - error[expander::use-path-generic-arguments]: Generic arguments in use path - ╭▸ - 3 │ ["use", "kernel::type", { "#tuple": ["T"] }, "_"] - │ ━━━━━━━━━━━━━━━ generic arguments are not allowed in `use` paths - │ - ╰ help: remove the generic arguments; `use` imports modules and items, which do not take type parameters at the import site - ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:171:21) -2026-06-15T13:31:06.603585Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "import-resolver"] -2026-06-15T13:31:06.604219Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "specialization"] result=Ok(()) -2026-06-15T13:31:06.604228Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "specialization"] -2026-06-15T13:31:06.604368Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "pre-expansion-name-resolver"] result=Err(Expected trial to pass, but it failed -├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:390:24 -╰╴1 additional opaque attachment) -2026-06-15T13:31:06.604396Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "pre-expansion-name-resolver"] -2026-06-15T13:31:06.604494Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] result=Err(Failed to verify annotation -├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:321:29 -├╴1 additional opaque attachment -│ -╰┬▶ unexpected diagnostic: - │ error[expander::unresolved-variable]: Unresolved variable - │ ╭▸ - │ 7 │ { "#struct": { "foo": "Bar" } }, - │ │ ━━━ cannot find `Bar` in this scope - │ │ - │ ├ help: check the spelling, or import the name with a `use` statement - │ ╰ note: this could be a typo, a name used outside its scope, or a missing declaration; if it is a function or type from another module, you may need to import it first - │ ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:171:21 - │ - ╰▶ unexpected diagnostic: - error[expander::unresolved-variable]: Unresolved variable - ╭▸ - 5 │ "Foo", - │ ━━━ cannot find `Bar` in this scope - │ - ├ help: check the spelling, or import the name with a `use` statement - ╰ note: this could be a typo, a name used outside its scope, or a missing declaration; if it is a function or type from another module, you may need to import it first - ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:171:21) -2026-06-15T13:31:06.604527Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] result=Err(Failed to verify annotation -├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:321:29 -├╴1 additional opaque attachment -│ -╰─▶ unexpected diagnostic: - error[expander::unresolved-variable]: Unresolved variable - ╭▸ - 8 │ "x" - │ ━ cannot find `x` in this scope - │ - ╰ note: this could be a typo, a name used outside its scope, or a missing declaration; if it is a function or type from another module, you may need to import it first - help: a similar imported name exists - ╭╴ - 8 - "x" - 8 + "~" - ├╴ - 8 - "x" - 8 + "↑" - ├╴ - 8 - "x" - 8 + "√" - ├╴ - 8 - "x" - 8 + "∛" - ├╴ - 8 │ "index" - ╰╴ ++++ - ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:171:21) -2026-06-15T13:31:06.604599Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] -2026-06-15T13:31:06.604614Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] -2026-06-15T13:31:06.604684Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "import-resolver"] result=Ok(()) -2026-06-15T13:31:06.604696Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "import-resolver"] -2026-06-15T13:31:06.604843Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-mir" trial=["pass", "inline"] result=Ok(()) -2026-06-15T13:31:06.604854Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-mir" trial=["pass", "inline"] -2026-06-15T13:31:06.604879Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "import-resolver"] result=Ok(()) -2026-06-15T13:31:06.604903Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "import-resolver"] -2026-06-15T13:31:06.604904Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "type-extractor", "definition"] result=Ok(()) -2026-06-15T13:31:06.604928Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "type-extractor", "definition"] -2026-06-15T13:31:06.605532Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "pre-expansion-name-resolver"] result=Err(Expected trial to pass, but it failed -├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:390:24 -╰╴1 additional opaque attachment) -2026-06-15T13:31:06.605555Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "pre-expansion-name-resolver"] -2026-06-15T13:31:06.605654Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "specialization"] result=Ok(()) -2026-06-15T13:31:06.605670Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-mir" trial=["reify"] -2026-06-15T13:31:06.606055Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] result=Ok(()) -2026-06-15T13:31:06.606071Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] -2026-06-15T13:31:06.606193Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "import-resolver"] result=Ok(()) -2026-06-15T13:31:06.606203Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "import-resolver"] -2026-06-15T13:31:06.606286Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "import-resolver"] result=Err(Failed to verify annotation -├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:321:29 -├╴1 additional opaque attachment -│ -╰┬▶ unfulfilled annotation: DiagnosticAnnotation { category: None, severity: Error, message: "Cannot find variable 'shl'", line: Some(7) } did not match any emitted diagnostics - │ ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:151:25 - │ - ╰▶ unexpected diagnostic: - error[expander::unresolved-variable]: Unresolved variable - ╭▸ - 7 │ "shl" - │ ━━━ cannot find `shl` in this scope - │ - ├ help: bring it into scope: `use ::core::bits::shl in` - ╰ note: this could be a typo, a name used outside its scope, or a missing declaration; if it is a function or type from another module, you may need to import it first - help: use one of these fully qualified paths - ╭╴ - 7 │ "::core::bits::shl" - ╰╴ ++++++++++++++ - ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:171:21) -2026-06-15T13:31:06.606330Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "import-resolver"] -2026-06-15T13:31:06.606376Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "type-extractor", "definition"] result=Ok(()) -2026-06-15T13:31:06.606408Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "type-extractor", "definition"] -2026-06-15T13:31:06.606337Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] result=Err(Failed to verify annotation -├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:321:29 -├╴1 additional opaque attachment -│ -╰┬▶ unexpected diagnostic: - │ error[expander::unresolved-variable]: Unresolved variable - │ ╭▸ - │ 8 │ "x" - │ │ ━ cannot find `x` in this scope - │ │ - │ ╰ note: this could be a typo, a name used outside its scope, or a missing declaration; if it is a function or type from another module, you may need to import it first - │ help: a similar imported name exists - │ ╭╴ - │ 8 - "x" - │ 8 + "~" - │ ├╴ - │ 8 - "x" - │ 8 + "↑" - │ ├╴ - │ 8 - "x" - │ 8 + "√" - │ ├╴ - │ 8 - "x" - │ 8 + "∛" - │ ├╴ - │ 8 │ "index" - │ ╰╴ ++++ - │ ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:171:21 - │ - ╰▶ unexpected diagnostic: - error[expander::invalid-use-import-binding]: Invalid use import binding - ╭▸ - 6 │ { "#tuple": ["::core::math::sub"], "#type": "Number" }, - │ ━━━━━━━━━━━━━━━━━ expected a simple name to import - │ - ╰ help: each import must be a plain identifier like `foo`, not a qualified path or expression - ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:171:21 - -stderr discrepancy, try to bless the output: -Differences (-Expected|+Received): - ╭▸ - 6 │ { "#tuple": ["::core::math::sub"], "#type": "Number" }, - │ ━━━━━━━━━━━━━━━━━ expected a simple name to import - │ -- ╰ help: each import must be a plain identifier like `foo`, not a qualified path or expression -+ ╰ help: each import must be a plain identifier like `foo`, not a qualified path or expression -+ -+error[expander::use-imports-type-annotation]: Type annotation on use imports -+ ╭▸ -+6 │ { "#tuple": ["::core::math::sub"], "#type": "Number" }, -+ │ ━━━━━━ type annotations are not allowed on the import list -+ │ -+ ╰ help: remove the type annotation; the import list declares which names to bring into scope, not a typed value -├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:140:9 -╰╴1 additional opaque attachment) -2026-06-15T13:31:06.606392Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-mir" trial=["pass", "inline"] result=Ok(()) -2026-06-15T13:31:06.606468Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] -2026-06-15T13:31:06.606474Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-mir" trial=["pass", "inline"] -2026-06-15T13:31:06.606867Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "pre-expansion-name-resolver"] result=Err(Expected trial to pass, but it failed -├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:390:24 -╰╴1 additional opaque attachment) -2026-06-15T13:31:06.606904Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "pre-expansion-name-resolver"] -2026-06-15T13:31:06.607091Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] result=Err(Failed to verify annotation -├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:321:29 -├╴1 additional opaque attachment -│ -╰┬▶ unexpected diagnostic: - │ error[expander::unresolved-variable]: Unresolved variable - │ ╭▸ - │ 9 │ ["+", "a", "b"] - │ │ ━ cannot find `b` in this scope - │ │ - │ ╰ note: this could be a typo, a name used outside its scope, or a missing declaration; if it is a function or type from another module, you may need to import it first - │ help: a similar imported name exists - │ ╭╴ - │ 9 - ["+", "a", "b"] - │ 9 + ["+", "a", "~"] - │ ├╴ - │ 9 - ["+", "a", "b"] - │ 9 + ["+", "a", "↑"] - │ ├╴ - │ 9 - ["+", "a", "b"] - │ 9 + ["+", "a", "√"] - │ ├╴ - │ 9 - ["+", "a", "b"] - │ 9 + ["+", "a", "∛"] - │ ├╴ - │ 9 - ["+", "a", "b"] - │ 9 + ["+", "a", "cbrt"] - │ ╰╴ - │ ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:171:21 - │ - ╰▶ unexpected diagnostic: - error[expander::unresolved-variable]: Unresolved variable - ╭▸ - 9 │ ["+", "a", "b"] - │ ━ cannot find `a` in this scope - │ - ╰ note: this could be a typo, a name used outside its scope, or a missing declaration; if it is a function or type from another module, you may need to import it first - help: a similar imported name exists - ╭╴ - 9 - ["+", "a", "b"] - 9 + ["+", "↑", "b"] - ├╴ - 9 - ["+", "a", "b"] - 9 + ["+", "√", "b"] - ├╴ - 9 - ["+", "a", "b"] - 9 + ["+", "∛", "b"] - ├╴ - 9 │ ["+", "access", "b"] - ├╴ +++++ - 9 │ ["+", "as", "b"] - ╰╴ + - ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:171:21) -2026-06-15T13:31:06.607170Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] -2026-06-15T13:31:06.607416Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "import-resolver"] result=Ok(()) -2026-06-15T13:31:06.607426Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "import-resolver"] -2026-06-15T13:31:06.607433Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-mir" trial=["reify"] result=Ok(()) -2026-06-15T13:31:06.607445Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-mir" trial=["reify"] -2026-06-15T13:31:06.607469Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "import-resolver"] result=Ok(()) -2026-06-15T13:31:06.607504Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "import-resolver"] -2026-06-15T13:31:06.607868Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "type-extractor", "definition"] result=Ok(()) -2026-06-15T13:31:06.607890Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "type-extractor", "definition"] -2026-06-15T13:31:06.608015Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] result=Err(Failed to verify annotation -├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:321:29 -├╴1 additional opaque attachment -│ -╰┬▶ unfulfilled annotation: DiagnosticAnnotation { category: None, severity: Error, message: "Remove this extra segment", line: Some(4) } did not match any emitted diagnostics - │ ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:151:25 - │ - ╰▶ unexpected diagnostic: - error[expander::module-required]: Module required - ╭▸ - 4 │ "::kernel::special_form::if::extra", - │ ┯━ ───── cannot access items inside a non-module - │ │ - │ `::kernel::special_form::if` is a value, not a module - │ - ├ help: if you meant to access a field, use `.` instead of `::` - ╰ note: the `::` separator navigates into modules; values and types do not contain sub-items - ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:171:21) -2026-06-15T13:31:06.608082Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] -2026-06-15T13:31:06.608079Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] result=Err(Failed to verify annotation -├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:321:29 -├╴1 additional opaque attachment -│ -╰─▶ unexpected diagnostic: - error[expander::unresolved-variable]: Unresolved variable - ╭▸ - 7 │ ["+", { "#literal": 1 }, { "#literal": 2 }], - │ ━ cannot find `+` in this scope - │ - ╰ note: this could be a typo, a name used outside its scope, or a missing declaration; if it is a function or type from another module, you may need to import it first - help: a similar imported name exists - ╭╴ - 7 - ["+", { "#literal": 1 }, { "#literal": 2 }], - 7 + ["String", { "#literal": 1 }, { "#literal": 2 }], - ├╴ - 7 - ["+", { "#literal": 1 }, { "#literal": 2 }], - 7 + ["Union", { "#literal": 1 }, { "#literal": 2 }], - ├╴ - 7 - ["+", { "#literal": 1 }, { "#literal": 2 }], - 7 + ["Unknown", { "#literal": 1 }, { "#literal": 2 }], - ├╴ - 7 - ["+", { "#literal": 1 }, { "#literal": 2 }], - 7 + ["Url", { "#literal": 1 }, { "#literal": 2 }], - ├╴ - 7 - ["+", { "#literal": 1 }, { "#literal": 2 }], - 7 + ["|", { "#literal": 1 }, { "#literal": 2 }], - ╰╴ - ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:171:21) -2026-06-15T13:31:06.608125Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] -2026-06-15T13:31:06.608323Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] result=Ok(()) -2026-06-15T13:31:06.608332Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] -2026-06-15T13:31:06.608383Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "pre-expansion-name-resolver"] result=Err(Expected trial to pass, but it failed -├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:390:24 -╰╴1 additional opaque attachment) -2026-06-15T13:31:06.608408Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "pre-expansion-name-resolver"] -2026-06-15T13:31:06.608700Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "import-resolver"] result=Ok(()) -2026-06-15T13:31:06.608709Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "import-resolver"] -2026-06-15T13:31:06.608788Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-mir" trial=["pass", "inline"] result=Ok(()) -2026-06-15T13:31:06.608792Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "import-resolver"] result=Ok(()) -2026-06-15T13:31:06.608821Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "import-resolver"] -2026-06-15T13:31:06.608801Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-mir" trial=["pass", "inline"] -2026-06-15T13:31:06.608989Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-mir" trial=["reify"] result=Ok(()) -2026-06-15T13:31:06.609004Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "checking"] -2026-06-15T13:31:06.609196Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "type-extractor", "definition"] result=Ok(()) -2026-06-15T13:31:06.609215Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "type-extractor", "definition"] -2026-06-15T13:31:06.609364Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] result=Ok(()) -2026-06-15T13:31:06.609375Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] -2026-06-15T13:31:06.609539Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] result=Err(Expected trial to pass, but it failed -├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:390:24 -╰╴1 additional opaque attachment) -2026-06-15T13:31:06.609579Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] -2026-06-15T13:31:06.609885Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "import-resolver"] result=Ok(()) -2026-06-15T13:31:06.609896Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "import-resolver"] -2026-06-15T13:31:06.609857Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] result=Err(Failed to verify annotation -├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:321:29 -├╴1 additional opaque attachment -│ -╰┬▶ unfulfilled annotation: DiagnosticAnnotation { category: None, severity: Error, message: "This special form path is invalid", line: Some(3) } did not match any emitted diagnostics - │ ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:151:25 - │ - ╰▶ unexpected diagnostic: - error[expander::item-not-found]: Item not found - ╭▸ - 3 │ ["::kernel::special_form::headpat"] - │ ┬─────────── ━━━━━━━ cannot find `headpat` in module `::kernel::special_form` - │ │ - │ looked in this module - │ - ╰ help: check the spelling and ensure the item is exported - ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:171:21) -2026-06-15T13:31:06.609918Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] -2026-06-15T13:31:06.609921Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "import-resolver"] result=Ok(()) -2026-06-15T13:31:06.609911Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "pre-expansion-name-resolver"] result=Err(Expected trial to pass, but it failed -├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:390:24 -╰╴1 additional opaque attachment) -2026-06-15T13:31:06.609946Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "import-resolver"] -2026-06-15T13:31:06.609962Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "pre-expansion-name-resolver"] -2026-06-15T13:31:06.610671Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "checking"] result=Ok(()) -2026-06-15T13:31:06.610682Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "checking"] -2026-06-15T13:31:06.610698Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "type-extractor", "definition"] result=Ok(()) -2026-06-15T13:31:06.610714Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "type-extractor"] -2026-06-15T13:31:06.610801Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] result=Err(Failed to verify annotation -├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:321:29 -├╴1 additional opaque attachment -│ -╰─▶ unexpected diagnostic: - error[expander::unresolved-variable]: Unresolved variable - ╭▸ - 7 │ { "#struct": { "foo": "Bar" } }, - │ ━━━ cannot find `Bar` in this scope - │ - ├ help: check the spelling, or import the name with a `use` statement - ╰ note: this could be a typo, a name used outside its scope, or a missing declaration; if it is a function or type from another module, you may need to import it first - ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:171:21) -2026-06-15T13:31:06.610861Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] result=Err(Expected trial to pass, but it failed -├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:390:24 -╰╴1 additional opaque attachment) -2026-06-15T13:31:06.610876Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] -2026-06-15T13:31:06.610882Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] -2026-06-15T13:31:06.610938Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "import-resolver"] result=Ok(()) -2026-06-15T13:31:06.610950Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "import-resolver"] -2026-06-15T13:31:06.611101Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "pre-expansion-name-resolver"] result=Err(Expected trial to pass, but it failed -├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:390:24 -╰╴1 additional opaque attachment) -2026-06-15T13:31:06.611125Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "pre-expansion-name-resolver"] -2026-06-15T13:31:06.611227Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "import-resolver"] result=Ok(()) -2026-06-15T13:31:06.611244Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "import-resolver"] -2026-06-15T13:31:06.611360Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] result=Ok(()) -2026-06-15T13:31:06.611373Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] -2026-06-15T13:31:06.611991Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "type-extractor"] result=Ok(()) -2026-06-15T13:31:06.612001Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "type-extractor"] -2026-06-15T13:31:06.612075Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "checking"] result=Ok(()) -2026-06-15T13:31:06.612084Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "checking"] -2026-06-15T13:31:06.612142Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] result=Err(Expected trial to pass, but it failed -├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:390:24 -╰╴1 additional opaque attachment) -2026-06-15T13:31:06.612170Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] -2026-06-15T13:31:06.612195Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] result=Ok(()) -2026-06-15T13:31:06.612207Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] -2026-06-15T13:31:06.612203Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "import-resolver"] result=Ok(()) -2026-06-15T13:31:06.612231Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "import-resolver"] -2026-06-15T13:31:06.612322Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "pre-expansion-name-resolver"] result=Ok(()) -2026-06-15T13:31:06.612336Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "pre-expansion-name-resolver"] -2026-06-15T13:31:06.612550Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "import-resolver"] result=Ok(()) -2026-06-15T13:31:06.612566Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "import-resolver"] -2026-06-15T13:31:06.612666Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] result=Err(Expected trial to pass, but it failed -├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:390:24 -╰╴1 additional opaque attachment) -2026-06-15T13:31:06.612699Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "import-resolver", "continue"] -2026-06-15T13:31:06.613032Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "type-extractor"] result=Ok(()) -2026-06-15T13:31:06.613044Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "type-extractor"] -2026-06-15T13:31:06.613428Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] result=Ok(()) -2026-06-15T13:31:06.613436Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] -2026-06-15T13:31:06.613663Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "import-resolver"] result=Ok(()) -2026-06-15T13:31:06.613681Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-mir" trial=["pass", "inline"] -2026-06-15T13:31:06.613721Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] result=Err(Failed to verify annotation -├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:321:29 -├╴1 additional opaque attachment -│ -╰─▶ unexpected diagnostic: - error[expander::unresolved-variable]: Unresolved variable - ╭▸ - 5 │ "tuple", - │ ━━━━━ cannot find `tuple` in this scope - │ - ├ help: check the spelling, or import the name with a `use` statement - ╰ note: this could be a typo, a name used outside its scope, or a missing declaration; if it is a function or type from another module, you may need to import it first - ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:171:21) -2026-06-15T13:31:06.613755Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] -2026-06-15T13:31:06.613753Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "pre-expansion-name-resolver"] result=Err(Expected trial to pass, but it failed -├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:390:24 -╰╴1 additional opaque attachment) -2026-06-15T13:31:06.613773Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "pre-expansion-name-resolver"] -2026-06-15T13:31:06.613883Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "import-resolver"] result=Ok(()) -2026-06-15T13:31:06.613901Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "import-resolver"] -2026-06-15T13:31:06.614118Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "type-extractor"] result=Ok(()) -2026-06-15T13:31:06.614128Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "type-extractor"] -2026-06-15T13:31:06.614393Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "import-resolver", "continue"] result=Err(Failed to verify annotation -├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:321:29 -├╴1 additional opaque attachment -│ -╰┬▶ unfulfilled annotation: DiagnosticAnnotation { category: None, severity: Error, message: "Cannot find variable 'T'", line: Some(7) } did not match any emitted diagnostics - │ ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:151:25 - │ - ╰▶ unexpected diagnostic: - error[expander::unresolved-variable]: Unresolved variable - ╭▸ - 7 │ "T", - │ ━ cannot find `T` in this scope - │ - ╰ note: this could be a typo, a name used outside its scope, or a missing declaration; if it is a function or type from another module, you may need to import it first - help: a similar local binding exists - ╭╴ - 7 - "T", - 7 + "Foo", - ╰╴ - help: a similar imported name exists - ╭╴ - 7 - "T", - 7 + "String", - ├╴ - 7 - "T", - 7 + "Union", - ├╴ - 7 - "T", - 7 + "Unknown", - ├╴ - 7 - "T", - 7 + "Url", - ├╴ - 7 - "T", - 7 + "|", - ╰╴ - ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:171:21) -2026-06-15T13:31:06.614460Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "import-resolver", "continue"] -2026-06-15T13:31:06.615005Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] result=Ok(()) -2026-06-15T13:31:06.615016Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] -2026-06-15T13:31:06.615089Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "normalization"] result=Ok(()) -2026-06-15T13:31:06.615097Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "normalization"] -2026-06-15T13:31:06.615297Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "pre-expansion-name-resolver"] result=Err(Expected trial to pass, but it failed -├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:390:24 -╰╴1 additional opaque attachment) -2026-06-15T13:31:06.615326Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "pre-expansion-name-resolver"] -2026-06-15T13:31:06.615368Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "type-extractor"] result=Ok(()) -2026-06-15T13:31:06.615380Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-eval" trial=["postgres"] -2026-06-15T13:31:06.615408Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "import-resolver"] result=Ok(()) -2026-06-15T13:31:06.615440Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "import-resolver"] -2026-06-15T13:31:06.615576Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] result=Err(Failed to verify annotation -├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:321:29 -├╴1 additional opaque attachment -│ -╰┬▶ unfulfilled annotation: DiagnosticAnnotation { category: None, severity: Error, message: "expected a simple name to import", line: Some(8) } did not match any emitted diagnostics - │ ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:151:25 - │ - ├▶ unexpected diagnostic: - │ error[expander::unresolved-variable]: Unresolved variable - │ ╭▸ - │ 12 │ "x" - │ │ ━ cannot find `x` in this scope - │ │ - │ ╰ note: this could be a typo, a name used outside its scope, or a missing declaration; if it is a function or type from another module, you may need to import it first - │ help: a similar imported name exists - │ ╭╴ - │ 12 - "x" - │ 12 + "~" - │ ├╴ - │ 12 - "x" - │ 12 + "↑" - │ ├╴ - │ 12 - "x" - │ 12 + "√" - │ ├╴ - │ 12 - "x" - │ 12 + "∛" - │ ├╴ - │ 12 │ "index" - │ ╰╴ ++++ - │ ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:171:21 - │ - ├▶ unexpected diagnostic: - │ error[expander::item-not-found]: Item not found - │ ╭▸ - │ 5 │ "::core", - │ │ ──── looked in this module - │ ‡ - │ 8 │ "x": "::core::math::sub" - │ │ ━ cannot find `x` in module `::core` - │ ╰╴ - │ help: a similar item exists in this module - │ ╭╴ - │ 8 - "x": "::core::math::sub" - │ 8 + "math": "::core::math::sub" - │ ├╴ - │ 8 - "x": "::core::math::sub" - │ 8 + "option": "::core::math::sub" - │ ├╴ - │ 8 - "x": "::core::math::sub" - │ 8 + "result": "::core::math::sub" - │ ├╴ - │ 8 - "x": "::core::math::sub" - │ 8 + "url": "::core::math::sub" - │ ├╴ - │ 8 - "x": "::core::math::sub" - │ 8 + "uuid": "::core::math::sub" - │ ╰╴ - │ ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:171:21 - │ - ╰▶ unexpected diagnostic: - error[expander::invalid-use-alias]: Invalid use alias - ╭▸ - 8 │ "x": "::core::math::sub" - │ ━━━━━━━━━━━━━━━━━ expected `_` or a simple identifier as the alias - │ - ╰ help: use `_` to keep the original name or a simple identifier to rename: `(name: alias)` or `(name: _)` - ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:171:21) -2026-06-15T13:31:06.615677Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] -2026-06-15T13:31:06.615989Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "import-resolver", "continue"] result=Err(Failed to verify annotation -├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:321:29 -├╴1 additional opaque attachment -│ -╰┬▶ unfulfilled annotation: DiagnosticAnnotation { category: None, severity: Error, message: "Cannot find variable 'shl'", line: Some(5) } did not match any emitted diagnostics - │ ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:151:25 - │ - ╰▶ unexpected diagnostic: - error[expander::unresolved-variable]: Unresolved variable - ╭▸ - 5 │ "shl", - │ ━━━ cannot find `shl` in this scope - │ - ├ help: bring it into scope: `use ::core::bits::shl in` - ╰ note: this could be a typo, a name used outside its scope, or a missing declaration; if it is a function or type from another module, you may need to import it first - help: use one of these fully qualified paths - ╭╴ - 5 │ "::core::bits::shl", - ╰╴ ++++++++++++++ - ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:171:21) -2026-06-15T13:31:06.616042Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "import-resolver", "continue"] -2026-06-15T13:31:06.616401Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "normalization"] result=Ok(()) -2026-06-15T13:31:06.616408Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "normalization"] -2026-06-15T13:31:06.616453Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "pre-expansion-name-resolver"] result=Err(Expected trial to pass, but it failed -├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:390:24 -╰╴1 additional opaque attachment) -2026-06-15T13:31:06.616477Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "pre-expansion-name-resolver"] -2026-06-15T13:31:06.616592Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "import-resolver"] result=Ok(()) -2026-06-15T13:31:06.616608Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "specialization"] -2026-06-15T13:31:06.617024Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] result=Ok(()) -2026-06-15T13:31:06.617038Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] -2026-06-15T13:31:06.617517Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] result=Err(Failed to verify annotation -├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:321:29 -├╴1 additional opaque attachment -│ -╰┬▶ unfulfilled annotation: DiagnosticAnnotation { category: None, severity: Error, message: "`T` is already declared as a generic parameter", line: Some(5) } did not match any emitted diagnostics - │ ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:151:25 - │ - ├▶ unexpected diagnostic: - │ error[expander::unresolved-variable]: Unresolved variable - │ ╭▸ - │ 9 │ ["+", "a", "b"] - │ │ ━ cannot find `b` in this scope - │ │ - │ ╰ note: this could be a typo, a name used outside its scope, or a missing declaration; if it is a function or type from another module, you may need to import it first - │ help: a similar imported name exists - │ ╭╴ - │ 9 - ["+", "a", "b"] - │ 9 + ["+", "a", "~"] - │ ├╴ - │ 9 - ["+", "a", "b"] - │ 9 + ["+", "a", "↑"] - │ ├╴ - │ 9 - ["+", "a", "b"] - │ 9 + ["+", "a", "√"] - │ ├╴ - │ 9 - ["+", "a", "b"] - │ 9 + ["+", "a", "∛"] - │ ├╴ - │ 9 - ["+", "a", "b"] - │ 9 + ["+", "a", "cbrt"] - │ ╰╴ - │ ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:171:21 - │ - ├▶ unexpected diagnostic: - │ error[expander::unresolved-variable]: Unresolved variable - │ ╭▸ - │ 9 │ ["+", "a", "b"] - │ │ ━ cannot find `a` in this scope - │ │ - │ ╰ note: this could be a typo, a name used outside its scope, or a missing declaration; if it is a function or type from another module, you may need to import it first - │ help: a similar imported name exists - │ ╭╴ - │ 9 - ["+", "a", "b"] - │ 9 + ["+", "↑", "b"] - │ ├╴ - │ 9 - ["+", "a", "b"] - │ 9 + ["+", "√", "b"] - │ ├╴ - │ 9 - ["+", "a", "b"] - │ 9 + ["+", "∛", "b"] - │ ├╴ - │ 9 │ ["+", "access", "b"] - │ ├╴ +++++ - │ 9 │ ["+", "as", "b"] - │ ╰╴ + - │ ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:171:21 - │ - ╰▶ unexpected diagnostic: - error[expander::duplicate-fn-generic]: Duplicate generic parameter - ╭▸ - 5 │ { "#tuple": ["T", "T"] }, - │ ┬ ━ duplicate generic parameter `T` - │ │ - │ `T` was first declared here - │ - ╰ help: remove the duplicate declaration or use a different name - ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:171:21) -2026-06-15T13:31:06.617616Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "import-resolver", "continue"] result=Err(Failed to verify annotation -├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:321:29 -├╴1 additional opaque attachment -│ -╰─▶ unexpected diagnostic: - error[expander::unresolved-variable]: Unresolved variable - ╭▸ - 9 │ ["add", { "#literal": 1 }, { "#literal": 2 }] - │ ━━━ cannot find `add` in this scope - │ - ├ help: bring it into scope: `use ::core::math::add in` - ╰ note: this could be a typo, a name used outside its scope, or a missing declaration; if it is a function or type from another module, you may need to import it first - help: use one of these fully qualified paths - ╭╴ - 9 │ ["::core::math::add", { "#literal": 1 }, { "#literal": 2 }] - ╰╴ ++++++++++++++ - ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:171:21) -2026-06-15T13:31:06.617666Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] -2026-06-15T13:31:06.617670Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "import-resolver", "continue"] -2026-06-15T13:31:06.617734Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "normalization"] result=Ok(()) -2026-06-15T13:31:06.617744Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "normalization"] -2026-06-15T13:31:06.617957Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "pre-expansion-name-resolver"] result=Err(Expected trial to pass, but it failed -├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:390:24 -╰╴1 additional opaque attachment) -2026-06-15T13:31:06.617981Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "pre-expansion-name-resolver"] -2026-06-15T13:31:06.618234Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] result=Err(Expected trial to pass, but it failed -├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:390:24 -╰╴1 additional opaque attachment) -2026-06-15T13:31:06.618255Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] -2026-06-15T13:31:06.618293Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "specialization"] result=Ok(()) -2026-06-15T13:31:06.618302Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "specialization"] -2026-06-15T13:31:06.619105Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "normalization"] result=Ok(()) -2026-06-15T13:31:06.619114Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "normalization"] -2026-06-15T13:31:06.619178Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "pre-expansion-name-resolver"] result=Err(Expected trial to pass, but it failed -├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:390:24 -╰╴1 additional opaque attachment) -2026-06-15T13:31:06.619209Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "pre-expansion-name-resolver"] -2026-06-15T13:31:06.619218Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] result=Ok(()) -2026-06-15T13:31:06.619249Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] -2026-06-15T13:31:06.619228Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "import-resolver", "continue"] result=Err(Failed to verify annotation -├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:321:29 -├╴1 additional opaque attachment -│ -╰┬▶ unfulfilled annotation: DiagnosticAnnotation { category: None, severity: Error, message: "Cannot find variable 'Bar'", line: Some(6) } did not match any emitted diagnostics - │ ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:151:25 - │ - ╰▶ unexpected diagnostic: - error[expander::unresolved-variable]: Unresolved variable - ╭▸ - 6 │ "Foo", - │ ━━━ cannot find `Bar` in this scope - │ - ├ help: check the spelling, or import the name with a `use` statement - ╰ note: this could be a typo, a name used outside its scope, or a missing declaration; if it is a function or type from another module, you may need to import it first - ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:171:21) -2026-06-15T13:31:06.619275Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "import-resolver"] -2026-06-15T13:31:06.619565Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] result=Ok(()) -2026-06-15T13:31:06.619589Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "ctor"] -2026-06-15T13:31:06.620220Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "specialization"] result=Err(Failed to verify annotation -├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:321:29 -├╴1 additional opaque attachment -│ -╰┬▶ unfulfilled annotation: DiagnosticAnnotation { category: None, severity: Error, message: "This is not a graph intrinsic operation", line: Some(6) } did not match any emitted diagnostics - │ ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:151:25 - │ - ╰▶ unexpected diagnostic: - error[lowering::expander::unresolved-variable]: Unresolved variable - ╭▸ - 6 │ ["fn", { "#tuple": [] }, { "#struct": { "graph": "_" } }, "_", "graph"], - │ ━━━━━ cannot find `graph` in this scope - │ - ├ help: check the spelling, or import the name with a `use` statement - ╰ note: this could be a typo, a name used outside its scope, or a missing declaration; if it is a function or type from another module, you may need to import it first - ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:171:21) -2026-06-15T13:31:06.620302Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "specialization"] -2026-06-15T13:31:06.620548Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "import-resolver"] result=Err(Failed to verify annotation -├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:321:29 -├╴1 additional opaque attachment -│ -╰┬▶ unfulfilled annotation: DiagnosticAnnotation { category: None, severity: Error, message: "'lshift' not found in module 'core::bits'", line: Some(3) } did not match any emitted diagnostics - │ ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:151:25 - │ - ╰▶ unexpected diagnostic: - error[expander::item-not-found]: Item not found - ╭▸ - 3 │ ["use", "core::bits", { "#tuple": ["lshift"] }, "_"] - │ ┬─── ━━━━━━ cannot find `lshift` in module `core::bits` - │ │ - │ looked in this module - │ - ╰ help: check the spelling and ensure the item is exported - ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:171:21) -2026-06-15T13:31:06.620592Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "import-resolver"] -2026-06-15T13:31:06.620592Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "pre-expansion-name-resolver"] result=Err(Expected trial to pass, but it failed -├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:390:24 -╰╴1 additional opaque attachment) -2026-06-15T13:31:06.620623Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "pre-expansion-name-resolver"] -2026-06-15T13:31:06.620748Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] result=Ok(()) -2026-06-15T13:31:06.620764Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] -2026-06-15T13:31:06.620946Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "normalization"] result=Ok(()) -2026-06-15T13:31:06.620957Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "normalization"] -2026-06-15T13:31:06.621019Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "ctor"] result=Ok(()) -2026-06-15T13:31:06.621028Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "ctor"] -2026-06-15T13:31:06.621709Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "import-resolver"] result=Ok(()) -2026-06-15T13:31:06.621718Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "import-resolver"] -2026-06-15T13:31:06.621806Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "pre-expansion-name-resolver"] result=Err(Expected trial to pass, but it failed -├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:390:24 -╰╴1 additional opaque attachment) -2026-06-15T13:31:06.621842Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "pre-expansion-name-resolver"] -2026-06-15T13:31:06.622270Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "ctor"] result=Ok(()) -2026-06-15T13:31:06.622280Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "ctor"] -2026-06-15T13:31:06.622433Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] result=Err(Failed to verify annotation -├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:321:29 -├╴1 additional opaque attachment -│ -╰─▶ unfulfilled annotation: DiagnosticAnnotation { category: None, severity: Error, message: "cannot use a literal value as a type", line: Some(3) } did not match any emitted diagnostics - ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:151:25) -2026-06-15T13:31:06.622482Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] -2026-06-15T13:31:06.622490Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "normalization"] result=Ok(()) -2026-06-15T13:31:06.622502Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "normalization"] -2026-06-15T13:31:06.622921Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "import-resolver"] result=Ok(()) -2026-06-15T13:31:06.622935Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "import-resolver"] -2026-06-15T13:31:06.623224Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "pre-expansion-name-resolver"] result=Err(Expected trial to pass, but it failed -├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:390:24 -╰╴1 additional opaque attachment) -2026-06-15T13:31:06.623243Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "pre-expansion-name-resolver"] -2026-06-15T13:31:06.623902Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "normalization"] result=Ok(()) -2026-06-15T13:31:06.623915Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "alias-replacement"] -2026-06-15T13:31:06.624100Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "import-resolver"] result=Ok(()) -2026-06-15T13:31:06.624113Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "import-resolver"] -2026-06-15T13:31:06.624148Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "ctor"] result=Ok(()) -2026-06-15T13:31:06.624158Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "ctor"] -2026-06-15T13:31:06.624781Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "pre-expansion-name-resolver"] result=Err(Expected trial to pass, but it failed -├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:390:24 -╰╴1 additional opaque attachment) -2026-06-15T13:31:06.624816Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "pre-expansion-name-resolver"] -2026-06-15T13:31:06.625159Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "import-resolver"] result=Ok(()) -2026-06-15T13:31:06.625170Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "import-resolver"] -2026-06-15T13:31:06.625214Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "alias-replacement"] result=Ok(()) -2026-06-15T13:31:06.625227Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "alias-replacement"] -2026-06-15T13:31:06.625330Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "ctor"] result=Ok(()) -2026-06-15T13:31:06.625342Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "ctor"] -2026-06-15T13:31:06.625268Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] result=Err(Failed to verify annotation -├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:321:29 -├╴1 additional opaque attachment -│ -╰┬▶ unfulfilled annotation: DiagnosticAnnotation { category: None, severity: Error, message: "`a` is already declared as a parameter", line: Some(6) } did not match any emitted diagnostics - │ ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:151:25 - │ - ├▶ unexpected diagnostic: - │ error[expander::unresolved-variable]: Unresolved variable - │ ╭▸ - │ 9 │ ["+", "a", "b"] - │ │ ━ cannot find `b` in this scope - │ │ - │ ╰ note: this could be a typo, a name used outside its scope, or a missing declaration; if it is a function or type from another module, you may need to import it first - │ help: a similar local binding exists - │ ╭╴ - │ 9 - ["+", "a", "b"] - │ 9 + ["+", "a", "a"] - │ ╰╴ - │ help: a similar imported name exists - │ ╭╴ - │ 9 - ["+", "a", "b"] - │ 9 + ["+", "a", "~"] - │ ├╴ - │ 9 - ["+", "a", "b"] - │ 9 + ["+", "a", "↑"] - │ ├╴ - │ 9 - ["+", "a", "b"] - │ 9 + ["+", "a", "√"] - │ ├╴ - │ 9 - ["+", "a", "b"] - │ 9 + ["+", "a", "∛"] - │ ├╴ - │ 9 - ["+", "a", "b"] - │ 9 + ["+", "a", "cbrt"] - │ ╰╴ - │ ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:171:21 - │ - ├▶ unexpected diagnostic: - │ error[expander::unresolved-variable]: Unresolved variable - │ ╭▸ - │ 6 │ { "#struct": { "a": "Int", "a": "Int" } }, - │ │ ━━━ cannot find `Int` in this scope - │ │ - │ ├ help: check the spelling, or import the name with a `use` statement - │ ╰ note: this could be a typo, a name used outside its scope, or a missing declaration; if it is a function or type from another module, you may need to import it first - │ ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:171:21 - │ - ├▶ unexpected diagnostic: - │ error[expander::duplicate-fn-parameter]: Duplicate function parameter - │ ╭▸ - │ 6 │ { "#struct": { "a": "Int", "a": "Int" } }, - │ │ ┬───────── ━━━━━━━━━━ duplicate parameter `a` - │ │ │ - │ │ `a` was first declared here - │ │ - │ ╰ help: remove the duplicate parameter or use a different name - │ ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:171:21 - │ - ╰▶ unexpected diagnostic: - error[expander::unresolved-variable]: Unresolved variable - ╭▸ - 6 │ { "#struct": { "a": "Int", "a": "Int" } }, - │ ━━━ cannot find `Int` in this scope - │ - ├ help: check the spelling, or import the name with a `use` statement - ╰ note: this could be a typo, a name used outside its scope, or a missing declaration; if it is a function or type from another module, you may need to import it first - ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:171:21) -2026-06-15T13:31:06.625384Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] -2026-06-15T13:31:06.626053Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "pre-expansion-name-resolver"] result=Err(Expected trial to pass, but it failed -├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:390:24 -╰╴1 additional opaque attachment) -2026-06-15T13:31:06.626074Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "pre-expansion-name-resolver"] -2026-06-15T13:31:06.626321Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "import-resolver"] result=Ok(()) -2026-06-15T13:31:06.626337Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] -2026-06-15T13:31:06.626619Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] result=Ok(()) -2026-06-15T13:31:06.626628Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] -2026-06-15T13:31:06.626771Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "alias-replacement"] result=Ok(()) -2026-06-15T13:31:06.626782Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "alias-replacement"] -2026-06-15T13:31:06.627194Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "pre-expansion-name-resolver"] result=Err(Expected trial to pass, but it failed -├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:390:24 -╰╴1 additional opaque attachment) -2026-06-15T13:31:06.627218Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "pre-expansion-name-resolver"] -2026-06-15T13:31:06.627374Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "ctor"] result=Err(Failed to verify annotation -├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:321:29 -├╴1 additional opaque attachment -│ -╰┬▶ unfulfilled annotation: DiagnosticAnnotation { category: None, severity: Error, message: "unexpected argument", line: Some(8) } did not match any emitted diagnostics - │ ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:151:25 - │ - ╰▶ unexpected diagnostic: - error[lower::generic-argument-mismatch]: Incorrect number of type arguments - ╭▸ - 8 │ "Person", - │ ┯━━━━━━━━━━━━━━━━━━━━━━┬──────━ - │ │ │ - │ │ Remove this argument - │ This type constructor requires 2 generic arguments, but 3 were provided - │ - ├ help: This type constructor accepts exactly 2 generic arguments. Remove the extra parameter: Person:0 - ╰ note: Generic type parameters must be provided when instantiating parameterized types. Each parameter corresponds to a specific type that will be substituted throughout the type definition. - ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:171:21) -2026-06-15T13:31:06.627435Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "ctor"] -2026-06-15T13:31:06.627580Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] result=Err(Expected trial to pass, but it failed -├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:390:24 -╰╴1 additional opaque attachment) -2026-06-15T13:31:06.627608Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] -2026-06-15T13:31:06.627926Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] result=Ok(()) -2026-06-15T13:31:06.627941Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "specialization"] -2026-06-15T13:31:06.628450Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "pre-expansion-name-resolver"] result=Err(Expected trial to pass, but it failed -├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:390:24 -╰╴1 additional opaque attachment) -2026-06-15T13:31:06.628468Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "pre-expansion-name-resolver"] -2026-06-15T13:31:06.628737Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "alias-replacement"] result=Err(Failed to verify annotation -├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:321:29 -├╴1 additional opaque attachment -│ -╰┬▶ unfulfilled annotation: DiagnosticAnnotation { category: None, severity: Error, message: "additional type arguments are provided here", line: Some(10) } did not match any emitted diagnostics - │ ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:151:25 - │ - ├▶ unexpected diagnostic: - │ error[lowering::expander::intrinsic-generic-arguments]: Generic arguments on intrinsic - │ ╭▸ - │ 10 │ "foo", - │ │ ━━━━━━━━━━━ `foo` does not accept generic arguments - │ │ - │ ╰ help: remove the generic arguments from `foo` - │ ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:171:21 - │ - ╰▶ unexpected diagnostic: - error[lowering::expander::intrinsic-generic-arguments]: Generic arguments on intrinsic - ╭▸ - 6 │ "core::math::add", - │ ━━━━━━━━━━━━ `add` does not accept generic arguments - │ - ╰ help: remove the generic arguments from `add` - ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:171:21) -2026-06-15T13:31:06.628885Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] result=Ok(()) -2026-06-15T13:31:06.628899Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] -2026-06-15T13:31:06.628884Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "alias-replacement"] -2026-06-15T13:31:06.629840Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "pre-expansion-name-resolver"] result=Err(Expected trial to pass, but it failed -├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:390:24 -╰╴1 additional opaque attachment) -2026-06-15T13:31:06.629864Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "pre-expansion-name-resolver"] -2026-06-15T13:31:06.630011Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "ctor"] result=Ok(()) -2026-06-15T13:31:06.630027Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "ctor"] -2026-06-15T13:31:06.630123Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "specialization"] result=Ok(()) -2026-06-15T13:31:06.630138Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "checking"] -2026-06-15T13:31:06.630569Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "alias-replacement"] result=Ok(()) -2026-06-15T13:31:06.630578Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "alias-replacement"] -2026-06-15T13:31:06.631189Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "pre-expansion-name-resolver"] result=Err(Expected trial to pass, but it failed -├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:390:24 -╰╴1 additional opaque attachment) -2026-06-15T13:31:06.631212Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "pre-expansion-name-resolver"] -2026-06-15T13:31:06.631244Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] result=Err(Failed to verify annotation -├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:321:29 -├╴1 additional opaque attachment -│ -╰┬▶ unexpected diagnostic: - │ error[expander::unresolved-variable]: Unresolved variable - │ ╭▸ - │ 12 │ ["+", "a", "b"] - │ │ ━ cannot find `b` in this scope - │ │ - │ ╰ note: this could be a typo, a name used outside its scope, or a missing declaration; if it is a function or type from another module, you may need to import it first - │ help: a similar imported name exists - │ ╭╴ - │ 12 - ["+", "a", "b"] - │ 12 + ["+", "a", "~"] - │ ├╴ - │ 12 - ["+", "a", "b"] - │ 12 + ["+", "a", "↑"] - │ ├╴ - │ 12 - ["+", "a", "b"] - │ 12 + ["+", "a", "√"] - │ ├╴ - │ 12 - ["+", "a", "b"] - │ 12 + ["+", "a", "∛"] - │ ├╴ - │ 12 - ["+", "a", "b"] - │ 12 + ["+", "a", "cbrt"] - │ ╰╴ - │ ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:171:21 - │ - ╰▶ unexpected diagnostic: - error[expander::unresolved-variable]: Unresolved variable - ╭▸ - 12 │ ["+", "a", "b"] - │ ━ cannot find `a` in this scope - │ - ╰ note: this could be a typo, a name used outside its scope, or a missing declaration; if it is a function or type from another module, you may need to import it first - help: a similar imported name exists - ╭╴ - 12 - ["+", "a", "b"] - 12 + ["+", "↑", "b"] - ├╴ - 12 - ["+", "a", "b"] - 12 + ["+", "√", "b"] - ├╴ - 12 - ["+", "a", "b"] - 12 + ["+", "∛", "b"] - ├╴ - 12 │ ["+", "access", "b"] - ├╴ +++++ - 12 │ ["+", "as", "b"] - ╰╴ + - ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:171:21) -2026-06-15T13:31:06.631326Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] -2026-06-15T13:31:06.631539Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "checking"] result=Ok(()) -2026-06-15T13:31:06.631545Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "ctor"] result=Ok(()) -2026-06-15T13:31:06.631554Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "graph-hoisting"] -2026-06-15T13:31:06.631557Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "inference"] -2026-06-15T13:31:06.631834Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "alias-replacement"] result=Ok(()) -2026-06-15T13:31:06.631845Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "alias-replacement"] -2026-06-15T13:31:06.632591Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "pre-expansion-name-resolver"] result=Err(Expected trial to pass, but it failed -├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:390:24 -╰╴1 additional opaque attachment) -2026-06-15T13:31:06.632628Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "pre-expansion-name-resolver"] -2026-06-15T13:31:06.632815Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "inference"] result=Err(Failed to verify annotation -├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:321:29 -├╴1 additional opaque attachment -│ -╰┬▶ unfulfilled annotation: DiagnosticAnnotation { category: None, severity: Error, message: "Type variable has incompatible upper and lower bounds", line: Some(4) } did not match any emitted diagnostics - │ ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:151:25 - │ - ╰▶ unexpected diagnostic: - error[lowering::expander::intrinsic-generic-arguments]: Generic arguments on intrinsic - ╭▸ - 4 │ "`+`", - │ ━━━━━━━━━━━━━━━━━━━ `+` does not accept generic arguments - │ - ╰ help: remove the generic arguments from `+` - ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:171:21) -2026-06-15T13:31:06.632866Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "inference"] -2026-06-15T13:31:06.633056Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "alias-replacement"] result=Ok(()) -2026-06-15T13:31:06.633064Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "alias-replacement"] -2026-06-15T13:31:06.633470Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] result=Err(Failed to verify annotation -├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:321:29 -├╴1 additional opaque attachment -│ -╰┬▶ unexpected diagnostic: - │ error[expander::unresolved-variable]: Unresolved variable - │ ╭▸ - │ 11 │ "x" - │ │ ━ cannot find `x` in this scope - │ │ - │ ╰ note: this could be a typo, a name used outside its scope, or a missing declaration; if it is a function or type from another module, you may need to import it first - │ help: a similar imported name exists - │ ╭╴ - │ 11 - "x" - │ 11 + "~" - │ ├╴ - │ 11 - "x" - │ 11 + "↑" - │ ├╴ - │ 11 - "x" - │ 11 + "√" - │ ├╴ - │ 11 - "x" - │ 11 + "∛" - │ ├╴ - │ 11 │ "index" - │ ╰╴ ++++ - │ ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:171:21 - │ - ╰▶ unexpected diagnostic: - error[expander::package-not-found]: Package not found - ╭▸ - 5 │ "::math", - │ ┬─┯━━━ - │ │ │ - │ │ cannot find package `math` - │ in this path - │ - ├ help: check the package name, or add it to the project dependencies - ╰ note: absolute paths start from an installed package - ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:171:21 - -stderr discrepancy, try to bless the output: -Differences (-Expected|+Received): - │ │ cannot find package `math` - │ in this path - │ - ├ help: check the package name, or add it to the project dependencies -- ╰ note: absolute paths start from an installed package -+ ╰ note: absolute paths start from an installed package -+ -+error[expander::use-imports-type-annotation]: Type annotation on use imports -+ ╭▸ -+8 │ "#type": "X" -+ │ ━ type annotations are not allowed on the import list -+ │ -+ ╰ help: remove the type annotation; the import list declares which names to bring into scope, not a typed value -├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:140:9 -╰╴1 additional opaque attachment) -2026-06-15T13:31:06.633556Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] -2026-06-15T13:31:06.633796Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "pre-expansion-name-resolver"] result=Err(Expected trial to pass, but it failed -├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:390:24 -╰╴1 additional opaque attachment) -2026-06-15T13:31:06.633813Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "pre-expansion-name-resolver"] -2026-06-15T13:31:06.634167Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "alias-replacement"] result=Ok(()) -2026-06-15T13:31:06.634178Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "alias-replacement"] -2026-06-15T13:31:06.634256Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "checking"] result=Ok(()) -2026-06-15T13:31:06.634266Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "checking"] -2026-06-15T13:31:06.634294Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "inference"] result=Ok(()) -2026-06-15T13:31:06.634304Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "inference"] -2026-06-15T13:31:06.634762Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] result=Ok(()) -2026-06-15T13:31:06.634776Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] -2026-06-15T13:31:06.634976Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "pre-expansion-name-resolver"] result=Ok(()) -2026-06-15T13:31:06.634986Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "node-renumberer"] -2026-06-15T13:31:06.635473Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "checking"] result=Ok(()) -2026-06-15T13:31:06.635486Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "checking"] -2026-06-15T13:31:06.635512Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "alias-replacement"] result=Ok(()) -2026-06-15T13:31:06.635520Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "alias-replacement"] -2026-06-15T13:31:06.635955Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "inference"] result=Ok(()) -2026-06-15T13:31:06.635967Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "inference"] -2026-06-15T13:31:06.636080Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] result=Ok(()) -2026-06-15T13:31:06.636094Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] -2026-06-15T13:31:06.636210Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "node-renumberer"] result=Ok(()) -2026-06-15T13:31:06.636218Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "node-renumberer"] -2026-06-15T13:31:06.636587Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "alias-replacement"] result=Ok(()) -2026-06-15T13:31:06.636596Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "alias-replacement"] -2026-06-15T13:31:06.636732Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "checking"] result=Ok(()) -2026-06-15T13:31:06.636741Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "checking"] -2026-06-15T13:31:06.637406Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "node-renumberer"] result=Ok(()) -2026-06-15T13:31:06.637419Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "node-renumberer"] -2026-06-15T13:31:06.637618Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "alias-replacement"] result=Err(Expected trial to pass, but it failed -├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:390:24 -╰╴1 additional opaque attachment) -2026-06-15T13:31:06.637656Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-eval" trial=["postgres"] -2026-06-15T13:31:06.638104Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "checking"] result=Ok(()) -2026-06-15T13:31:06.638114Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "checking"] -2026-06-15T13:31:06.638222Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "inference"] result=Ok(()) -2026-06-15T13:31:06.638230Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "inference"] -2026-06-15T13:31:06.638559Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "node-renumberer"] result=Ok(()) -2026-06-15T13:31:06.638571Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "type-extractor"] -2026-06-15T13:31:06.639747Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "inference"] result=Ok(()) -2026-06-15T13:31:06.639757Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "checking"] result=Ok(()) -2026-06-15T13:31:06.639769Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "checking"] -2026-06-15T13:31:06.639760Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "inference"] -2026-06-15T13:31:06.639918Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "type-extractor"] result=Ok(()) -2026-06-15T13:31:06.639932Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "type-extractor"] -2026-06-15T13:31:06.640916Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "specialization"] result=Ok(()) -2026-06-15T13:31:06.640933Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "checking"] -2026-06-15T13:31:06.641180Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "inference"] result=Ok(()) -2026-06-15T13:31:06.641190Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "inference"] -2026-06-15T13:31:06.641204Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "type-extractor"] result=Ok(()) -2026-06-15T13:31:06.641212Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "checking"] result=Ok(()) -2026-06-15T13:31:06.641227Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "type-extractor"] -2026-06-15T13:31:06.641235Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "checking"] -2026-06-15T13:31:06.642421Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "checking"] result=Ok(()) -2026-06-15T13:31:06.642438Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "checking"] -2026-06-15T13:31:06.642323Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] result=Err(Failed to verify annotation -├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:321:29 -├╴1 additional opaque attachment -│ -╰┬▶ unfulfilled annotation: DiagnosticAnnotation { category: None, severity: Error, message: "cannot use an `as` expression as a type", line: Some(13) } did not match any emitted diagnostics - │ ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:151:25 - │ - ├▶ unexpected diagnostic: - │ error[expander::item-not-found]: Item not found - │ ╭▸ - │ 13 │ ["::kernel::special_form::as", "x", "X"] - │ │ ┬─────────── ━━ cannot find `as` in module `::kernel::special_form` - │ │ │ - │ │ looked in this module - │ │ - │ ╰ help: check the spelling and ensure the item is exported - │ ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:171:21 - │ - ├▶ unexpected diagnostic: - │ error[expander::unresolved-variable]: Unresolved variable - │ ╭▸ - │ 13 │ ["::kernel::special_form::as", "x", "X"] - │ │ ━ cannot find `x` in this scope - │ │ - │ ╰ note: this could be a typo, a name used outside its scope, or a missing declaration; if it is a function or type from another module, you may need to import it first - │ help: a similar imported name exists - │ ╭╴ - │ 13 - ["::kernel::special_form::as", "x", "X"] - │ 13 + ["::kernel::special_form::as", "String", "X"] - │ ├╴ - │ 13 - ["::kernel::special_form::as", "x", "X"] - │ 13 + ["::kernel::special_form::as", "Union", "X"] - │ ├╴ - │ 13 - ["::kernel::special_form::as", "x", "X"] - │ 13 + ["::kernel::special_form::as", "Unknown", "X"] - │ ├╴ - │ 13 - ["::kernel::special_form::as", "x", "X"] - │ 13 + ["::kernel::special_form::as", "Url", "X"] - │ ├╴ - │ 13 - ["::kernel::special_form::as", "x", "X"] - │ 13 + ["::kernel::special_form::as", "|", "X"] - │ ╰╴ - │ ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:171:21 - │ - ├▶ unexpected diagnostic: - │ error[expander::unresolved-variable]: Unresolved variable - │ ╭▸ - │ 13 │ ["::kernel::special_form::as", "x", "X"] - │ │ ━ cannot find `X` in this scope - │ │ - │ ╰ note: this could be a typo, a name used outside its scope, or a missing declaration; if it is a function or type from another module, you may need to import it first - │ help: a similar imported name exists - │ ╭╴ - │ 13 - ["::kernel::special_form::as", "x", "X"] - │ 13 + ["::kernel::special_form::as", "x", "String"] - │ ├╴ - │ 13 - ["::kernel::special_form::as", "x", "X"] - │ 13 + ["::kernel::special_form::as", "x", "Union"] - │ ├╴ - │ 13 - ["::kernel::special_form::as", "x", "X"] - │ 13 + ["::kernel::special_form::as", "x", "Unknown"] - │ ├╴ - │ 13 - ["::kernel::special_form::as", "x", "X"] - │ 13 + ["::kernel::special_form::as", "x", "Url"] - │ ├╴ - │ 13 - ["::kernel::special_form::as", "x", "X"] - │ 13 + ["::kernel::special_form::as", "x", "|"] - │ ╰╴ - │ ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:171:21 - │ - ├▶ unexpected diagnostic: - │ error[expander::unresolved-variable]: Unresolved variable - │ ╭▸ - │ 19 │ { "#list": ["a", "b"] } - │ │ ━ cannot find `a` in this scope - │ │ - │ ╰ note: this could be a typo, a name used outside its scope, or a missing declaration; if it is a function or type from another module, you may need to import it first - │ help: a similar imported name exists - │ ╭╴ - │ 19 - { "#list": ["a", "b"] } - │ 19 + { "#list": ["Union", "b"] } - │ ├╴ - │ 19 - { "#list": ["a", "b"] } - │ 19 + { "#list": ["Unknown", "b"] } - │ ├╴ - │ 19 - { "#list": ["a", "b"] } - │ 19 + { "#list": ["Url", "b"] } - │ ├╴ - │ 19 - { "#list": ["a", "b"] } - │ 19 + { "#list": ["|", "b"] } - │ ├╴ - │ 19 - { "#list": ["a", "b"] } - │ 19 + { "#list": ["Boolean", "b"] } - │ ╰╴ - │ ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:171:21 - │ - ├▶ unexpected diagnostic: - │ error[expander::unresolved-variable]: Unresolved variable - │ ╭▸ - │ 19 │ { "#list": ["a", "b"] } - │ │ ━ cannot find `b` in this scope - │ │ - │ ╰ note: this could be a typo, a name used outside its scope, or a missing declaration; if it is a function or type from another module, you may need to import it first - │ help: a similar imported name exists - │ ╭╴ - │ 19 - { "#list": ["a", "b"] } - │ 19 + { "#list": ["a", "Union"] } - │ ├╴ - │ 19 - { "#list": ["a", "b"] } - │ 19 + { "#list": ["a", "Unknown"] } - │ ├╴ - │ 19 - { "#list": ["a", "b"] } - │ 19 + { "#list": ["a", "Url"] } - │ ├╴ - │ 19 - { "#list": ["a", "b"] } - │ 19 + { "#list": ["a", "|"] } - │ ├╴ - │ 19 - { "#list": ["a", "b"] } - │ 19 + { "#list": ["a", "Number"] } - │ ╰╴ - │ ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:171:21 - │ - ├▶ unexpected diagnostic: - │ error[expander::unresolved-variable]: Unresolved variable - │ ╭▸ - │ 22 │ { "#dict": { "a": "b" } } - │ │ ━ cannot find `b` in this scope - │ │ - │ ╰ note: this could be a typo, a name used outside its scope, or a missing declaration; if it is a function or type from another module, you may need to import it first - │ help: a similar imported name exists - │ ╭╴ - │ 22 - { "#dict": { "a": "b" } } - │ 22 + { "#dict": { "a": "Union" } } - │ ├╴ - │ 22 - { "#dict": { "a": "b" } } - │ 22 + { "#dict": { "a": "Unknown" } } - │ ├╴ - │ 22 - { "#dict": { "a": "b" } } - │ 22 + { "#dict": { "a": "Url" } } - │ ├╴ - │ 22 - { "#dict": { "a": "b" } } - │ 22 + { "#dict": { "a": "|" } } - │ ├╴ - │ 22 - { "#dict": { "a": "b" } } - │ 22 + { "#dict": { "a": "Number" } } - │ ╰╴ - │ ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:171:21 - │ - ╰▶ unexpected diagnostic: - error[expander::unresolved-variable]: Unresolved variable - ╭▸ - 11 │ "x", - │ ━ cannot find `x` in this scope - │ - ╰ note: this could be a typo, a name used outside its scope, or a missing declaration; if it is a function or type from another module, you may need to import it first - help: a similar imported name exists - ╭╴ - 11 - "x", - 11 + "~", - ├╴ - 11 - "x", - 11 + "↑", - ├╴ - 11 - "x", - 11 + "√", - ├╴ - 11 - "x", - 11 + "∛", - ├╴ - 11 │ "index", - ╰╴ ++++ - ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:171:21) -2026-06-15T13:31:06.642539Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "type-extractor"] result=Ok(()) -2026-06-15T13:31:06.642570Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "checking"] -2026-06-15T13:31:06.642595Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "type-extractor"] -2026-06-15T13:31:06.642829Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "inference"] result=Ok(()) -2026-06-15T13:31:06.642840Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "inference"] -2026-06-15T13:31:06.642861Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "checking"] result=Ok(()) -2026-06-15T13:31:06.642870Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "checking"] -2026-06-15T13:31:06.644041Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "checking"] result=Ok(()) -2026-06-15T13:31:06.644051Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "checking"] -2026-06-15T13:31:06.644116Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "checking"] result=Ok(()) -2026-06-15T13:31:06.644126Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "checking"] -2026-06-15T13:31:06.644149Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "inference"] result=Ok(()) -2026-06-15T13:31:06.644158Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "inference"] -2026-06-15T13:31:06.644281Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "type-extractor"] result=Ok(()) -2026-06-15T13:31:06.644311Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "type-extractor"] -2026-06-15T13:31:06.644463Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "checking"] result=Ok(()) -2026-06-15T13:31:06.644475Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "checking"] -2026-06-15T13:31:06.645648Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "checking"] result=Ok(()) -2026-06-15T13:31:06.645657Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "checking"] -2026-06-15T13:31:06.645760Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "checking"] result=Ok(()) -2026-06-15T13:31:06.645767Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "checking"] -2026-06-15T13:31:06.646536Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "type-extractor"] result=Ok(()) -2026-06-15T13:31:06.646561Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "type-extractor"] -2026-06-15T13:31:06.647156Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "checking"] result=Ok(()) -2026-06-15T13:31:06.647168Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "checking"] -2026-06-15T13:31:06.647713Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "inference"] result=Ok(()) -2026-06-15T13:31:06.647721Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "inference"] -2026-06-15T13:31:06.647901Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "type-extractor"] result=Ok(()) -2026-06-15T13:31:06.647927Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "type-extractor"] -2026-06-15T13:31:06.648391Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "checking"] result=Ok(()) -2026-06-15T13:31:06.648401Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "checking"] -2026-06-15T13:31:06.649043Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "inference"] result=Ok(()) -2026-06-15T13:31:06.649053Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "inference"] -2026-06-15T13:31:06.649110Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "checking"] result=Ok(()) -2026-06-15T13:31:06.649120Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "checking"] -2026-06-15T13:31:06.649288Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "type-extractor"] result=Ok(()) -2026-06-15T13:31:06.649304Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "type-extractor", "definition"] -2026-06-15T13:31:06.649950Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "checking"] result=Ok(()) -2026-06-15T13:31:06.649962Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "checking"] -2026-06-15T13:31:06.650053Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "inference"] result=Err(Expected trial to pass, but it failed -├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:390:24 -╰╴1 additional opaque attachment) -2026-06-15T13:31:06.650084Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "inference"] -2026-06-15T13:31:06.650310Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-mir" trial=["reify"] result=Ok(()) -2026-06-15T13:31:06.650325Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-mir" trial=["pass", "post_inline"] -2026-06-15T13:31:06.650434Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "checking"] result=Err(Expected trial to pass, but it failed -├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:390:24 -╰╴1 additional opaque attachment) -2026-06-15T13:31:06.650456Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "checking"] -2026-06-15T13:31:06.650507Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "type-extractor", "definition"] result=Ok(()) -2026-06-15T13:31:06.650527Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "type-extractor", "definition"] -2026-06-15T13:31:06.650956Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "checking"] result=Err(Expected trial to pass, but it failed -├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:390:24 -╰╴1 additional opaque attachment) -2026-06-15T13:31:06.650978Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "checking"] -2026-06-15T13:31:06.651809Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "checking"] result=Ok(()) -2026-06-15T13:31:06.651818Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "checking"] -2026-06-15T13:31:06.652072Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "type-extractor", "definition"] result=Ok(()) -2026-06-15T13:31:06.652091Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "type-extractor", "definition"] -2026-06-15T13:31:06.652221Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-mir" trial=["pass", "post_inline"] result=Ok(()) -2026-06-15T13:31:06.652232Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-mir" trial=["pass", "post_inline"] -2026-06-15T13:31:06.652826Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "inference"] result=Ok(()) -2026-06-15T13:31:06.652836Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "inference"] -2026-06-15T13:31:06.653129Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "checking"] result=Ok(()) -2026-06-15T13:31:06.653137Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "checking"] -2026-06-15T13:31:06.653192Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "checking"] result=Ok(()) -2026-06-15T13:31:06.653203Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "checking"] -2026-06-15T13:31:06.653274Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-eval" trial=["postgres"] result=Ok(()) -2026-06-15T13:31:06.653284Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-eval" trial=["postgres"] -2026-06-15T13:31:06.653397Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "type-extractor", "definition"] result=Ok(()) -2026-06-15T13:31:06.653421Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "type-extractor", "definition"] -2026-06-15T13:31:06.654503Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "checking"] result=Ok(()) -2026-06-15T13:31:06.654515Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "checking"] -2026-06-15T13:31:06.654629Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "checking"] result=Ok(()) -2026-06-15T13:31:06.654638Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "checking"] -2026-06-15T13:31:06.654645Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "type-extractor", "definition"] result=Ok(()) -2026-06-15T13:31:06.654658Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "type-extractor", "definition"] -2026-06-15T13:31:06.654732Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-mir" trial=["pass", "post_inline"] result=Ok(()) -2026-06-15T13:31:06.654748Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-mir" trial=["pass", "pre_inline"] -2026-06-15T13:31:06.654973Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "inference"] result=Ok(()) -2026-06-15T13:31:06.654982Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "inference"] -2026-06-15T13:31:06.655932Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "checking"] result=Ok(()) -2026-06-15T13:31:06.655941Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "checking"] -2026-06-15T13:31:06.655943Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "checking"] result=Ok(()) -2026-06-15T13:31:06.655953Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "checking"] -2026-06-15T13:31:06.656003Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "type-extractor", "definition"] result=Ok(()) -2026-06-15T13:31:06.656024Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "type-extractor", "definition"] -2026-06-15T13:31:06.656276Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-mir" trial=["pass", "pre_inline"] result=Ok(()) -2026-06-15T13:31:06.656287Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-mir" trial=["pass", "pre_inline"] -2026-06-15T13:31:06.656465Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "inference"] result=Ok(()) -2026-06-15T13:31:06.656475Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "inference"] -2026-06-15T13:31:06.656970Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "checking"] result=Ok(()) -2026-06-15T13:31:06.656984Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-mir" trial=["pass", "inline"] -2026-06-15T13:31:06.657303Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "type-extractor", "definition"] result=Ok(()) -2026-06-15T13:31:06.657320Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "type-extractor", "definition"] -2026-06-15T13:31:06.657616Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "checking"] result=Ok(()) -2026-06-15T13:31:06.657627Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "checking"] -2026-06-15T13:31:06.657773Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-mir" trial=["pass", "pre_inline"] result=Ok(()) -2026-06-15T13:31:06.657783Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-mir" trial=["pass", "pre_inline"] -2026-06-15T13:31:06.657819Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "inference"] result=Ok(()) -2026-06-15T13:31:06.657827Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "inference"] -2026-06-15T13:31:06.658553Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "checking"] result=Ok(()) -2026-06-15T13:31:06.658570Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-mir" trial=["pass", "inline"] -2026-06-15T13:31:06.658793Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "type-extractor", "definition"] result=Ok(()) -2026-06-15T13:31:06.658818Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "type-extractor", "definition"] -2026-06-15T13:31:06.659158Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-mir" trial=["pass", "pre_inline"] result=Ok(()) -2026-06-15T13:31:06.659170Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-mir" trial=["pass", "pre_inline"] -2026-06-15T13:31:06.659213Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "checking"] result=Ok(()) -2026-06-15T13:31:06.659223Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "checking"] -2026-06-15T13:31:06.659271Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-mir" trial=["pass", "inline"] result=Ok(()) -2026-06-15T13:31:06.659283Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-mir" trial=["pass", "inline"] -2026-06-15T13:31:06.659345Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "inference"] result=Ok(()) -2026-06-15T13:31:06.659355Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "inference"] -2026-06-15T13:31:06.660121Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "type-extractor", "definition"] result=Ok(()) -2026-06-15T13:31:06.660139Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "type-extractor", "definition"] -2026-06-15T13:31:06.660346Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-mir" trial=["pass", "inline"] result=Ok(()) -2026-06-15T13:31:06.660360Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-mir" trial=["pass", "data-dependency"] -2026-06-15T13:31:06.660875Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "checking"] result=Ok(()) -2026-06-15T13:31:06.660876Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-mir" trial=["pass", "pre_inline"] result=Ok(()) -2026-06-15T13:31:06.660884Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "checking"] -2026-06-15T13:31:06.660892Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-mir" trial=["pass", "data-dependency"] -2026-06-15T13:31:06.661102Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "inference"] result=Ok(()) -2026-06-15T13:31:06.661111Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "inference"] -2026-06-15T13:31:06.661387Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "type-extractor", "definition"] result=Ok(()) -2026-06-15T13:31:06.661402Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "type-extractor", "definition"] -2026-06-15T13:31:06.662343Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "inference"] result=Ok(()) -2026-06-15T13:31:06.662355Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "inference"] -2026-06-15T13:31:06.662592Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-mir" trial=["pass", "data-dependency"] result=Ok(()) -2026-06-15T13:31:06.662600Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-mir" trial=["pass", "data-dependency"] -2026-06-15T13:31:06.662637Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-mir" trial=["pass", "data-dependency"] result=Ok(()) -2026-06-15T13:31:06.662638Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "checking"] result=Ok(()) -2026-06-15T13:31:06.662644Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-mir" trial=["pass", "data-dependency"] -2026-06-15T13:31:06.662649Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "checking"] -2026-06-15T13:31:06.662748Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "type-extractor", "definition"] result=Ok(()) -2026-06-15T13:31:06.662761Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "type-extractor", "definition"] -2026-06-15T13:31:06.663724Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "inference"] result=Ok(()) -2026-06-15T13:31:06.663733Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "inference"] -2026-06-15T13:31:06.663833Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "checking"] result=Ok(()) -2026-06-15T13:31:06.663848Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "checking"] -2026-06-15T13:31:06.663956Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "type-extractor", "definition"] result=Ok(()) -2026-06-15T13:31:06.663971Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "type-extractor", "definition"] -2026-06-15T13:31:06.663837Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-mir" trial=["pass", "inline"] result=Ok(()) -2026-06-15T13:31:06.664156Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-mir" trial=["pass", "data-dependency"] -2026-06-15T13:31:06.665086Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "checking"] result=Ok(()) -2026-06-15T13:31:06.665094Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "checking"] -2026-06-15T13:31:06.665226Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "type-extractor", "definition"] result=Ok(()) -2026-06-15T13:31:06.665249Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-mir" trial=["pass", "data-dependency"] -2026-06-15T13:31:06.665054Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "inference"] result=Err(Expected trial to pass, but it failed -├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:390:24 -╰╴1 additional opaque attachment) -2026-06-15T13:31:06.665540Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "inference"] -2026-06-15T13:31:06.665544Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-mir" trial=["pass", "data-dependency"] result=Ok(()) -2026-06-15T13:31:06.665554Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-mir" trial=["pass", "data-dependency"] -2026-06-15T13:31:06.666328Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-mir" trial=["pass", "data-dependency"] result=Ok(()) -2026-06-15T13:31:06.666336Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-mir" trial=["pass", "data-dependency"] -2026-06-15T13:31:06.666679Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "checking"] result=Ok(()) -2026-06-15T13:31:06.666694Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-eval" trial=["postgres"] -2026-06-15T13:31:06.666743Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "inference"] result=Ok(()) -2026-06-15T13:31:06.666752Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "inference"] -2026-06-15T13:31:06.666987Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-mir" trial=["pass", "data-dependency"] result=Ok(()) -2026-06-15T13:31:06.666996Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-mir" trial=["pass", "data-dependency"] -2026-06-15T13:31:06.667298Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-mir" trial=["pass", "data-dependency"] result=Ok(()) -2026-06-15T13:31:06.667307Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-mir" trial=["pass", "data-dependency"] -2026-06-15T13:31:06.668483Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-mir" trial=["pass", "data-dependency"] result=Ok(()) -2026-06-15T13:31:06.668496Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "inference"] -2026-06-15T13:31:06.668510Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-mir" trial=["pass", "inline"] result=Ok(()) -2026-06-15T13:31:06.668549Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-mir" trial=["pass", "dse"] -2026-06-15T13:31:06.668785Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-mir" trial=["pass", "data-dependency"] result=Ok(()) -2026-06-15T13:31:06.668797Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-mir" trial=["pass", "data-dependency"] -2026-06-15T13:31:06.669000Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "inference"] result=Ok(()) -2026-06-15T13:31:06.669014Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-eval" trial=["postgres"] -2026-06-15T13:31:06.669595Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-mir" trial=["pass", "data-dependency"] result=Ok(()) -2026-06-15T13:31:06.669606Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "inference", "intrinsics"] -2026-06-15T13:31:06.670382Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "inference"] result=Ok(()) -2026-06-15T13:31:06.670393Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "inference"] -2026-06-15T13:31:06.670541Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-mir" trial=["pass", "dse"] result=Ok(()) -2026-06-15T13:31:06.670559Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-mir" trial=["pass", "cfg_simplify"] -2026-06-15T13:31:06.670677Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-mir" trial=["pass", "data-dependency"] result=Ok(()) -2026-06-15T13:31:06.670685Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-mir" trial=["pass", "data-dependency"] -2026-06-15T13:31:06.670931Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "inference", "intrinsics"] result=Ok(()) -2026-06-15T13:31:06.670941Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "inference", "intrinsics"] -2026-06-15T13:31:06.671829Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "inference"] result=Ok(()) -2026-06-15T13:31:06.671844Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-eval" trial=["postgres"] -2026-06-15T13:31:06.672027Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "inference", "intrinsics"] result=Ok(()) -2026-06-15T13:31:06.672035Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "inference", "intrinsics"] -2026-06-15T13:31:06.672847Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-mir" trial=["pass", "cfg_simplify"] result=Ok(()) -2026-06-15T13:31:06.672863Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-mir" trial=["pass", "cfg_simplify"] -2026-06-15T13:31:06.673491Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "inference", "intrinsics"] result=Ok(()) -2026-06-15T13:31:06.673507Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-eval" trial=["postgres"] -2026-06-15T13:31:06.674270Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-mir" trial=["pass", "cfg_simplify"] result=Ok(()) -2026-06-15T13:31:06.674278Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-mir" trial=["pass", "cfg_simplify"] -2026-06-15T13:31:06.675849Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-mir" trial=["pass", "cfg_simplify"] result=Ok(()) -2026-06-15T13:31:06.675862Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-mir" trial=["pass", "cfg_simplify"] -2026-06-15T13:31:06.677343Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-mir" trial=["pass", "cfg_simplify"] result=Ok(()) -2026-06-15T13:31:06.677355Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-mir" trial=["pass", "cfg_simplify"] -2026-06-15T13:31:06.679167Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-mir" trial=["pass", "cfg_simplify"] result=Ok(()) -2026-06-15T13:31:06.679183Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-mir" trial=["pass", "cfg_simplify"] -2026-06-15T13:31:06.692529Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-mir" trial=["pass", "data-dependency"] result=Ok(()) -2026-06-15T13:31:06.692558Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-mir" trial=["pass", "data-dependency"] -2026-06-15T13:31:06.694797Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-mir" trial=["pass", "data-dependency"] result=Ok(()) -2026-06-15T13:31:06.694818Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-mir" trial=["pass", "data-dependency"] -2026-06-15T13:31:06.696702Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-mir" trial=["pass", "data-dependency"] result=Ok(()) -2026-06-15T13:31:06.696718Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-mir" trial=["interpret"] -2026-06-15T13:31:06.700551Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-mir" trial=["interpret"] result=Ok(()) -2026-06-15T13:31:06.700578Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-eval" trial=["postgres"] -2026-06-15T13:31:06.702973Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-mir" trial=["pass", "data-dependency"] result=Ok(()) -2026-06-15T13:31:06.702988Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-mir" trial=["pass", "data-dependency"] -2026-06-15T13:31:06.704265Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "specialization"] result=Ok(()) -2026-06-15T13:31:06.704280Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-eval" trial=["postgres"] -2026-06-15T13:31:06.704443Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-mir" trial=["pass", "data-dependency"] result=Ok(()) -2026-06-15T13:31:06.704452Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-mir" trial=["pass", "data-dependency"] -2026-06-15T13:31:06.706028Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-mir" trial=["pass", "data-dependency"] result=Ok(()) -2026-06-15T13:31:06.706045Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-eval" trial=["postgres"] -2026-06-15T13:31:06.725704Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "checking"] result=Ok(()) -2026-06-15T13:31:06.725746Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-eval" trial=["postgres"] -2026-06-15T13:31:06.727617Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-eval" trial=["postgres"] result=Ok(()) -2026-06-15T13:31:06.727643Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-eval" trial=["postgres"] -2026-06-15T13:31:06.756531Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-mir" trial=["pass", "inline"] result=Ok(()) -2026-06-15T13:31:06.756575Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-mir" trial=["pass", "cfg_simplify"] -2026-06-15T13:31:06.757055Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-eval" trial=["postgres"] result=Ok(()) -2026-06-15T13:31:06.757070Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-eval" trial=["postgres"] -2026-06-15T13:31:06.758185Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-eval" trial=["postgres"] result=Ok(()) -2026-06-15T13:31:06.758212Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-eval" trial=["postgres"] -2026-06-15T13:31:06.758338Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-mir" trial=["pass", "cfg_simplify"] result=Ok(()) -2026-06-15T13:31:06.758349Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-mir" trial=["pass", "cfg_simplify"] -2026-06-15T13:31:06.758653Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-eval" trial=["postgres"] result=Ok(()) -2026-06-15T13:31:06.758664Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-eval" trial=["postgres"] -2026-06-15T13:31:06.759712Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-mir" trial=["pass", "cfg_simplify"] result=Ok(()) -2026-06-15T13:31:06.759733Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-eval" trial=["postgres"] -2026-06-15T13:31:06.760456Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-eval" trial=["postgres"] result=Ok(()) -2026-06-15T13:31:06.760469Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-eval" trial=["postgres"] -2026-06-15T13:31:06.785434Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-eval" trial=["postgres"] result=Ok(()) -2026-06-15T13:31:06.785470Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-eval" trial=["postgres"] -2026-06-15T13:31:06.797150Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-eval" trial=["postgres"] result=Ok(()) -2026-06-15T13:31:06.797192Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "graph-hoisting"] -2026-06-15T13:31:06.808332Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-eval" trial=["postgres"] result=Ok(()) -2026-06-15T13:31:06.808365Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-eval" trial=["postgres"] -2026-06-15T13:31:06.813304Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-eval" trial=["postgres"] result=Ok(()) -2026-06-15T13:31:06.813342Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "graph-hoisting"] -2026-06-15T13:31:06.814557Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-eval" trial=["postgres"] result=Ok(()) -2026-06-15T13:31:06.814583Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-mir" trial=["pass", "data-dependency"] -2026-06-15T13:31:06.816345Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-mir" trial=["pass", "data-dependency"] result=Ok(()) -2026-06-15T13:31:06.816364Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-mir" trial=["pass", "data-dependency"] -2026-06-15T13:31:06.817901Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-mir" trial=["pass", "data-dependency"] result=Ok(()) -2026-06-15T13:31:06.817924Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "graph-hoisting"] -2026-06-15T13:31:06.818265Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "graph-hoisting"] result=Ok(()) -2026-06-15T13:31:06.818279Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "graph-hoisting"] -2026-06-15T13:31:06.831966Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-eval" trial=["postgres"] result=Ok(()) -2026-06-15T13:31:06.832006Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-eval" trial=["postgres"] -2026-06-15T13:31:06.837145Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-eval" trial=["postgres"] result=Ok(()) -2026-06-15T13:31:06.837178Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "graph-hoisting"] -2026-06-15T13:31:06.838880Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "graph-hoisting"] result=Ok(()) -2026-06-15T13:31:06.838903Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "graph-hoisting"] -2026-06-15T13:31:06.840981Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "graph-hoisting"] result=Ok(()) -2026-06-15T13:31:06.841003Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "graph-hoisting"] -2026-06-15T13:31:06.841053Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-eval" trial=["postgres"] result=Ok(()) -2026-06-15T13:31:06.841073Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "name-mangler"] -2026-06-15T13:31:06.842500Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "name-mangler"] result=Err(Expected trial to pass, but it failed -├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:390:24 -╰╴1 additional opaque attachment) -2026-06-15T13:31:06.842542Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "name-mangler"] -2026-06-15T13:31:06.843593Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "name-mangler"] result=Ok(()) -2026-06-15T13:31:06.843603Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "name-mangler"] -2026-06-15T13:31:06.844591Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "name-mangler"] result=Err(Expected trial to pass, but it failed -├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:390:24 -╰╴1 additional opaque attachment) -2026-06-15T13:31:06.844617Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "name-mangler"] -2026-06-15T13:31:06.845977Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "name-mangler"] result=Err(Expected trial to pass, but it failed -├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:390:24 -╰╴1 additional opaque attachment) -2026-06-15T13:31:06.846041Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "name-mangler"] -2026-06-15T13:31:06.847443Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "name-mangler"] result=Ok(()) -2026-06-15T13:31:06.847480Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-eval" trial=["postgres"] -2026-06-15T13:31:06.849548Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-eval" trial=["postgres"] result=Ok(()) -2026-06-15T13:31:06.849571Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "graph-hoisting"] -2026-06-15T13:31:06.854593Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "graph-hoisting"] result=Ok(()) -2026-06-15T13:31:06.854613Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "name-mangler"] -2026-06-15T13:31:06.855293Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-eval" trial=["postgres"] result=Ok(()) -2026-06-15T13:31:06.855311Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "graph-hoisting"] -2026-06-15T13:31:06.855744Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "name-mangler"] result=Err(Expected trial to pass, but it failed -├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:390:24 -╰╴1 additional opaque attachment) -2026-06-15T13:31:06.855789Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-eval" trial=["postgres"] -2026-06-15T13:31:06.860068Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-eval" trial=["postgres"] result=Ok(()) -2026-06-15T13:31:06.860963Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-eval" trial=["postgres"] result=Ok(()) -2026-06-15T13:31:06.861901Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-eval" trial=["postgres"] result=Ok(()) -2026-06-15T13:31:06.862471Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "graph-hoisting"] result=Ok(()) -2026-06-15T13:31:06.867574Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "graph-hoisting"] result=Ok(()) -2026-06-15T13:31:06.877571Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "graph-hoisting"] result=Ok(()) -2026-06-15T13:31:06.907369Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "graph-hoisting"] result=Ok(()) -2026-06-15T13:31:06.908169Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "graph-hoisting"] result=Ok(()) -2026-06-15T13:31:06.913441Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-eval" trial=["postgres"] result=Ok(()) -2026-06-15T13:31:06.924295Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "graph-hoisting"] result=Ok(()) -2026-06-15T13:31:06.954068Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-eval" trial=["postgres"] result=Ok(()) -2026-06-15T13:31:06.977112Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-eval" trial=["postgres"] result=Ok(()) -2026-06-15T13:31:07.351376Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-mir" trial=["pass", "inst_simplify"] result=Ok(()) -2026-06-15T13:31:07.367601Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-mir" trial=["pass", "dse"] result=Ok(()) -2026-06-15T13:31:07.433776Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-mir" trial=["pass", "cfg_simplify"] result=Ok(()) -2026-06-15T13:31:07.552197Z  INFO run{namespace="reify" name="nested-if"}: hashql_compiletest::suite::mir_reify: time taken to generate diagram: 974.838ms -2026-06-15T13:31:07.558478Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-mir" trial=["reify"] result=Ok(()) -2026-06-15T13:31:07.670541Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-mir" trial=["pass", "forward_substitution"] result=Ok(()) -2026-06-15T13:31:07.670567Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-mir" trial=["pass", "forward_substitution"] -2026-06-15T13:31:07.672570Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-mir" trial=["pass", "forward_substitution"] result=Ok(()) -2026-06-15T13:31:07.672583Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-mir" trial=["pass", "forward_substitution"] -2026-06-15T13:31:07.674062Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-mir" trial=["pass", "forward_substitution"] result=Ok(()) -2026-06-15T13:31:07.674072Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-mir" trial=["pass", "forward_substitution"] -2026-06-15T13:31:07.675693Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-mir" trial=["pass", "forward_substitution"] result=Ok(()) -2026-06-15T13:31:11.855395Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-mir" trial=["pass", "post_inline"] result=Ok(()) +2026-06-15T14:19:06.104478Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-mir" trial=["pass", "inst_simplify"] +2026-06-15T14:19:06.105157Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-mir" trial=["pass", "administrative_reduction"] result=Ok(()) +2026-06-15T14:19:06.105169Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-mir" trial=["pass", "administrative_reduction"] +2026-06-15T14:19:06.105864Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-mir" trial=["pass", "inst_simplify"] result=Ok(()) +2026-06-15T14:19:06.105879Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-eval" trial=["postgres"] +2026-06-15T14:19:06.106880Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-mir" trial=["pass", "administrative_reduction"] result=Ok(()) +2026-06-15T14:19:06.106892Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-mir" trial=["pass", "administrative_reduction"] +2026-06-15T14:19:06.108954Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-mir" trial=["pass", "inline"] result=Ok(()) +2026-06-15T14:19:06.108984Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-mir" trial=["pass", "inline"] +2026-06-15T14:19:06.109418Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-mir" trial=["pass", "administrative_reduction"] result=Ok(()) +2026-06-15T14:19:06.109692Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-mir" trial=["pass", "administrative_reduction"] +2026-06-15T14:19:06.111306Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-mir" trial=["pass", "inline"] result=Ok(()) +2026-06-15T14:19:06.111414Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-mir" trial=["pass", "inst_simplify"] +2026-06-15T14:19:06.111842Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-mir" trial=["pass", "administrative_reduction"] result=Ok(()) +2026-06-15T14:19:06.111856Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-mir" trial=["pass", "administrative_reduction"] +2026-06-15T14:19:06.113535Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-mir" trial=["pass", "administrative_reduction"] result=Ok(()) +2026-06-15T14:19:06.113547Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-mir" trial=["pass", "post_inline"] +2026-06-15T14:19:06.113633Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-mir" trial=["pass", "inst_simplify"] result=Ok(()) +2026-06-15T14:19:06.113664Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-mir" trial=["pass", "inst_simplify"] +2026-06-15T14:19:06.118074Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-mir" trial=["pass", "inst_simplify"] result=Ok(()) +2026-06-15T14:19:06.118099Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-mir" trial=["pass", "inst_simplify"] +2026-06-15T14:19:06.118705Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-mir" trial=["pass", "post_inline"] result=Ok(()) +2026-06-15T14:19:06.118718Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-mir" trial=["pass", "post_inline"] +2026-06-15T14:19:06.119417Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-mir" trial=["pass", "inst_simplify"] result=Ok(()) +2026-06-15T14:19:06.119428Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-mir" trial=["pass", "inst_simplify"] +2026-06-15T14:19:06.121178Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-mir" trial=["pass", "post_inline"] result=Ok(()) +2026-06-15T14:19:06.121202Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-mir" trial=["pass", "forward_substitution"] +2026-06-15T14:19:06.124973Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-mir" trial=["pass", "forward_substitution"] result=Ok(()) +2026-06-15T14:19:06.125046Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-mir" trial=["pass", "forward_substitution"] +2026-06-15T14:19:06.126783Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-mir" trial=["pass", "forward_substitution"] result=Ok(()) +2026-06-15T14:19:06.126805Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-mir" trial=["pass", "inst_simplify"] +2026-06-15T14:19:06.129131Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-mir" trial=["pass", "inst_simplify"] result=Ok(()) +2026-06-15T14:19:06.129147Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-mir" trial=["pass", "inst_simplify"] +2026-06-15T14:19:06.130457Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-mir" trial=["pass", "inst_simplify"] result=Ok(()) +2026-06-15T14:19:06.130476Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-eval" trial=["postgres"] +2026-06-15T14:19:06.133345Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-mir" trial=["pass", "inst_simplify"] result=Ok(()) +2026-06-15T14:19:06.133377Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-mir" trial=["pass", "inst_simplify"] +2026-06-15T14:19:06.135359Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "specialization"] result=Ok(()) +2026-06-15T14:19:06.135384Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-mir" trial=["reify"] +2026-06-15T14:19:06.135889Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-eval" trial=["postgres"] result=Ok(()) +2026-06-15T14:19:06.135915Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-eval" trial=["postgres"] +2026-06-15T14:19:06.136959Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-mir" trial=["pass", "inst_simplify"] result=Ok(()) +2026-06-15T14:19:06.136989Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-mir" trial=["pass", "inst_simplify"] +2026-06-15T14:19:06.138099Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-mir" trial=["reify"] result=Ok(()) +2026-06-15T14:19:06.138118Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-mir" trial=["reify"] +2026-06-15T14:19:06.138771Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-mir" trial=["pass", "inst_simplify"] result=Ok(()) +2026-06-15T14:19:06.138797Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-mir" trial=["pass", "inst_simplify"] +2026-06-15T14:19:06.142044Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-mir" trial=["reify"] result=Ok(()) +2026-06-15T14:19:06.142081Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-eval" trial=["postgres"] +2026-06-15T14:19:06.142421Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-mir" trial=["pass", "inst_simplify"] result=Ok(()) +2026-06-15T14:19:06.142441Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-mir" trial=["pass", "inst_simplify"] +2026-06-15T14:19:06.143752Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-mir" trial=["pass", "inst_simplify"] result=Ok(()) +2026-06-15T14:19:06.143771Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-eval" trial=["postgres"] +2026-06-15T14:19:06.147258Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-mir" trial=["pass", "data-dependency"] result=Ok(()) +2026-06-15T14:19:06.147282Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-mir" trial=["pass", "data-dependency"] +2026-06-15T14:19:06.148951Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-mir" trial=["pass", "data-dependency"] result=Ok(()) +2026-06-15T14:19:06.148973Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-mir" trial=["pass", "data-dependency"] +2026-06-15T14:19:06.150765Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-mir" trial=["pass", "data-dependency"] result=Ok(()) +2026-06-15T14:19:06.150791Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-mir" trial=["pass", "data-dependency"] +2026-06-15T14:19:06.152844Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-mir" trial=["pass", "data-dependency"] result=Ok(()) +2026-06-15T14:19:06.152866Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-mir" trial=["pass", "data-dependency"] +2026-06-15T14:19:06.154415Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-mir" trial=["pass", "data-dependency"] result=Ok(()) +2026-06-15T14:19:06.154433Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-mir" trial=["pass", "data-dependency"] +2026-06-15T14:19:06.155910Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-mir" trial=["pass", "data-dependency"] result=Ok(()) +2026-06-15T14:19:06.155925Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-mir" trial=["pass", "data-dependency"] +2026-06-15T14:19:06.157542Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-mir" trial=["pass", "data-dependency"] result=Ok(()) +2026-06-15T14:19:06.157567Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-mir" trial=["pass", "data-dependency"] +2026-06-15T14:19:06.159385Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-mir" trial=["pass", "data-dependency"] result=Ok(()) +2026-06-15T14:19:06.159407Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-mir" trial=["pass", "data-dependency"] +2026-06-15T14:19:06.160127Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-mir" trial=["reify"] result=Ok(()) +2026-06-15T14:19:06.160160Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-eval" trial=["postgres"] +2026-06-15T14:19:06.161009Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-mir" trial=["pass", "data-dependency"] result=Ok(()) +2026-06-15T14:19:06.161032Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-mir" trial=["pass", "data-dependency"] +2026-06-15T14:19:06.162708Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-mir" trial=["pass", "data-dependency"] result=Ok(()) +2026-06-15T14:19:06.162728Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-mir" trial=["pass", "data-dependency"] +2026-06-15T14:19:06.164270Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-mir" trial=["pass", "data-dependency"] result=Ok(()) +2026-06-15T14:19:06.164283Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-mir" trial=["pass", "data-dependency"] +2026-06-15T14:19:06.165753Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-mir" trial=["pass", "data-dependency"] result=Ok(()) +2026-06-15T14:19:06.165764Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-mir" trial=["pass", "data-dependency"] +2026-06-15T14:19:06.186193Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "specialization"] result=Ok(()) +2026-06-15T14:19:06.186234Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "specialization"] +2026-06-15T14:19:06.188602Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "specialization"] result=Ok(()) +2026-06-15T14:19:06.188642Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "graph-hoisting"] +2026-06-15T14:19:06.189223Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-mir" trial=["pass", "data-dependency"] result=Ok(()) +2026-06-15T14:19:06.189238Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-mir" trial=["pass", "data-dependency"] +2026-06-15T14:19:06.191409Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-mir" trial=["pass", "data-dependency"] result=Ok(()) +2026-06-15T14:19:06.191436Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-mir" trial=["pass", "data-dependency"] +2026-06-15T14:19:06.193354Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-mir" trial=["pass", "data-dependency"] result=Ok(()) +2026-06-15T14:19:06.193382Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-mir" trial=["interpret"] +2026-06-15T14:19:06.196721Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-mir" trial=["pass", "inline"] result=Ok(()) +2026-06-15T14:19:06.196766Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-eval" trial=["postgres"] +2026-06-15T14:19:06.204255Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-mir" trial=["interpret"] result=Ok(()) +2026-06-15T14:19:06.204318Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-eval" trial=["postgres"] +2026-06-15T14:19:06.219589Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "checking"] result=Ok(()) +2026-06-15T14:19:06.219645Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-eval" trial=["postgres"] +2026-06-15T14:19:06.220030Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-eval" trial=["postgres"] result=Ok(()) +2026-06-15T14:19:06.220048Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-eval" trial=["postgres"] +2026-06-15T14:19:06.222931Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-eval" trial=["postgres"] result=Ok(()) +2026-06-15T14:19:06.222962Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-eval" trial=["postgres"] +2026-06-15T14:19:06.227280Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-eval" trial=["postgres"] result=Ok(()) +2026-06-15T14:19:06.227320Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-eval" trial=["postgres"] +2026-06-15T14:19:06.242937Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-eval" trial=["postgres"] result=Ok(()) +2026-06-15T14:19:06.242982Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-eval" trial=["postgres"] +2026-06-15T14:19:06.259368Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "graph-hoisting"] result=Ok(()) +2026-06-15T14:19:06.259405Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "graph-hoisting"] +2026-06-15T14:19:06.263577Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "graph-hoisting"] result=Ok(()) +2026-06-15T14:19:06.263611Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "graph-hoisting"] +2026-06-15T14:19:06.272367Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-eval" trial=["postgres"] result=Ok(()) +2026-06-15T14:19:06.272401Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-eval" trial=["postgres"] +2026-06-15T14:19:06.276073Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-eval" trial=["postgres"] result=Ok(()) +2026-06-15T14:19:06.276102Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-eval" trial=["postgres"] +2026-06-15T14:19:06.286515Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-eval" trial=["postgres"] result=Ok(()) +2026-06-15T14:19:06.286536Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-mir" trial=["pass", "data-dependency"] +2026-06-15T14:19:06.288145Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-mir" trial=["pass", "data-dependency"] result=Ok(()) +2026-06-15T14:19:06.288157Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-mir" trial=["pass", "data-dependency"] +2026-06-15T14:19:06.289606Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-mir" trial=["pass", "data-dependency"] result=Ok(()) +2026-06-15T14:19:06.289624Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-eval" trial=["postgres"] +2026-06-15T14:19:06.295939Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-eval" trial=["postgres"] result=Ok(()) +2026-06-15T14:19:06.295961Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "name-mangler"] +2026-06-15T14:19:06.297321Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "name-mangler"] result=Err(Expected trial to pass, but it failed +├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:390:24 +╰╴1 additional opaque attachment) +2026-06-15T14:19:06.297365Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "name-mangler"] +2026-06-15T14:19:06.298529Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "name-mangler"] result=Ok(()) +2026-06-15T14:19:06.298540Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "name-mangler"] +2026-06-15T14:19:06.299644Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "name-mangler"] result=Err(Expected trial to pass, but it failed +├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:390:24 +╰╴1 additional opaque attachment) +2026-06-15T14:19:06.299667Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "name-mangler"] +2026-06-15T14:19:06.300880Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "name-mangler"] result=Err(Expected trial to pass, but it failed +├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:390:24 +╰╴1 additional opaque attachment) +2026-06-15T14:19:06.300901Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "name-mangler"] +2026-06-15T14:19:06.301634Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "graph-hoisting"] result=Ok(()) +2026-06-15T14:19:06.301647Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "graph-hoisting"] +2026-06-15T14:19:06.302094Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "name-mangler"] result=Ok(()) +2026-06-15T14:19:06.302108Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-eval" trial=["postgres"] +2026-06-15T14:19:06.302890Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "graph-hoisting"] result=Ok(()) +2026-06-15T14:19:06.302906Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "graph-hoisting"] +2026-06-15T14:19:06.311964Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-eval" trial=["postgres"] result=Ok(()) +2026-06-15T14:19:06.311988Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "graph-hoisting"] +2026-06-15T14:19:06.318313Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-eval" trial=["postgres"] result=Ok(()) +2026-06-15T14:19:06.318337Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-eval" trial=["postgres"] +2026-06-15T14:19:06.319622Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-eval" trial=["postgres"] result=Ok(()) +2026-06-15T14:19:06.319643Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "graph-hoisting"] +2026-06-15T14:19:06.328907Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-eval" trial=["postgres"] result=Ok(()) +2026-06-15T14:19:06.328944Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "graph-hoisting"] +2026-06-15T14:19:06.330720Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "graph-hoisting"] result=Ok(()) +2026-06-15T14:19:06.330741Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "graph-hoisting"] +2026-06-15T14:19:06.336390Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-eval" trial=["postgres"] result=Ok(()) +2026-06-15T14:19:06.336428Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "name-mangler"] +2026-06-15T14:19:06.341859Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "name-mangler"] result=Err(Expected trial to pass, but it failed +├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:390:24 +╰╴1 additional opaque attachment) +2026-06-15T14:19:06.341998Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-eval" trial=["postgres"] +2026-06-15T14:19:06.349695Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-eval" trial=["postgres"] result=Ok(()) +2026-06-15T14:19:06.349742Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-eval" trial=["postgres"] +2026-06-15T14:19:06.352232Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-eval" trial=["postgres"] result=Ok(()) +2026-06-15T14:19:06.358359Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-eval" trial=["postgres"] result=Ok(()) +2026-06-15T14:19:06.362218Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "graph-hoisting"] result=Ok(()) +2026-06-15T14:19:06.370826Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "graph-hoisting"] result=Ok(()) +2026-06-15T14:19:06.372470Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "graph-hoisting"] result=Ok(()) +2026-06-15T14:19:06.376724Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-eval" trial=["postgres"] result=Ok(()) +2026-06-15T14:19:06.399809Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-eval" trial=["postgres"] result=Ok(()) +2026-06-15T14:19:06.412255Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "graph-hoisting"] result=Ok(()) +2026-06-15T14:19:06.415224Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-eval" trial=["postgres"] result=Ok(()) +2026-06-15T14:19:06.415433Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "graph-hoisting"] result=Ok(()) +2026-06-15T14:19:06.460582Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-eval" trial=["postgres"] result=Ok(()) +2026-06-15T14:19:06.469175Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-eval" trial=["postgres"] result=Ok(()) +2026-06-15T14:19:06.856829Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-mir" trial=["pass", "dse"] result=Ok(()) +2026-06-15T14:19:06.857441Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-mir" trial=["pass", "cfg_simplify"] result=Ok(()) +2026-06-15T14:19:06.869671Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-mir" trial=["pass", "inst_simplify"] result=Ok(()) +2026-06-15T14:19:07.068736Z  INFO run{namespace="reify" name="nested-if"}: hashql_compiletest::suite::mir_reify: time taken to generate diagram: 1.031430583s +2026-06-15T14:19:07.068937Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-mir" trial=["reify"] result=Ok(()) +2026-06-15T14:19:07.209031Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-mir" trial=["pass", "forward_substitution"] result=Ok(()) +2026-06-15T14:19:07.209065Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-mir" trial=["pass", "forward_substitution"] +2026-06-15T14:19:07.210959Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-mir" trial=["pass", "forward_substitution"] result=Ok(()) +2026-06-15T14:19:07.210971Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-mir" trial=["pass", "forward_substitution"] +2026-06-15T14:19:07.212533Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-mir" trial=["pass", "forward_substitution"] result=Ok(()) +2026-06-15T14:19:07.212553Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-mir" trial=["pass", "forward_substitution"] +2026-06-15T14:19:07.214127Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-mir" trial=["pass", "forward_substitution"] result=Ok(()) +2026-06-15T14:19:11.555054Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-mir" trial=["pass", "post_inline"] result=Ok(()) +[PASS] hashql-ast::lower::expander::special-form-expander::fn-generics-tuple [PASS] hashql-ast::lower::name-mangler::type-generics-nested -[FAIL] hashql-ast::lower::expander::special-form-expander::fn-generics-tuple +[PASS] hashql-ast::lower::expander::import-resolver::path-normalization [PASS] hashql-ast::lower::expander::special-form-expander::let-4 +[PASS] hashql-ast::lower::expander::import-resolver::universe-ambiguity-resolution +[PASS] hashql-ast::lower::expander::import-resolver::closure-generic-not-resolved +[PASS] hashql-ast::lower::sanitizer::special-form-value +[PASS] hashql-hir::lower::inference::intrinsics::unrelated [PASS] hashql-hir::lower::thunking::nested-call -[PASS] hashql-hir::reify::local-variable -[FAIL] hashql-ast::lower::expander::special-form-expander::type-expr-tuple +[PASS] hashql-hir::lower::checking::closure-not-generic +[PASS] hashql-ast::lower::expander::import-resolver::continue::unresolved-type [PASS] hashql-ast::lower::name-mangler::overwrite -[PASS] hashql-mir::reify::binary +[PASS] hashql-ast::lower::expander::import-resolver::nested-resolution +[PASS] hashql-ast::lower::expander::import-resolver::shadowed-imports [PASS] hashql-ast::lower::expander::special-form-expander::newtype-4 -[PASS] hashql-mir::pass::inst_simplify::const-fold-gte -[PASS] hashql-mir::pass::inst_simplify::identity-or-false -[PASS] hashql-mir::pass::inst_simplify::const-fold-lte -[PASS] hashql-mir::pass::inst_simplify::const-fold-ne -[PASS] hashql-mir::pass::inst_simplify::annihilator-and-false -[PASS] hashql-mir::pass::inst_simplify::identical-operand-lt -[PASS] hashql-mir::pass::inst_simplify::identity-and-true +[PASS] hashql-ast::lower::expander::special-form-expander::type-expr-tuple [PASS] hashql-mir::pass::cfg_simplify::closure-with-const-branch -[PASS] hashql-mir::pass::forward_substitution::param-const-agree -[FAIL] hashql-hir::reify::variable-generics +[PASS] hashql-mir::pass::pre_inline::nested-if-constant +[PASS] hashql-ast::lower::expander::import-resolver::rollback +[PASS] hashql-mir::pass::pre_inline::thunk-with-dead-code +[PASS] hashql-ast::lower::sanitizer::special-form-type-position +[PASS] hashql-hir::lower::inference::literal [PASS] hashql-mir::pass::post_inline::closure-env-cleanup [PASS] hashql-hir::lower::thunking::return-primitive -[FAIL] hashql-ast::lower::expander::special-form-expander::use-tuple -[FAIL] hashql-ast::lower::name-mangler::type -[FAIL] hashql-ast::lower::expander::special-form-expander::use-glob-not-ident -[PASS] hashql-hir::reify::binding-type-assertion -[PASS] hashql-mir::reify::tuple-index -[PASS] hashql-hir::reify::qualified-variable -[PASS] hashql-mir::pass::inst_simplify::identical-operand-gte -[PASS] hashql-mir::pass::inst_simplify::identical-operand-eq -[PASS] hashql-mir::pass::inst_simplify::const-fold-eq -[PASS] hashql-hir::lower::normalization::binary-operation-left -[PASS] hashql-mir::reify::input-default -[PASS] hashql-mir::pass::administrative_reduction::thunk-aggregate -[PASS] hashql-mir::pass::inst_simplify::chained-const-fold -[PASS] hashql-ast::lower::name-mangler::overwrite-body -[FAIL] hashql-ast::lower::expander::special-form-expander::let-argument-not-ident -[PASS] hashql-mir::pass::forward_substitution::chained-projection -[PASS] hashql-ast::lower::expander::special-form-expander::as-3 -[PASS] hashql-hir::reify::field -[PASS] hashql-mir::reify::closure-captured-var -[PASS] hashql-hir::reify::call-multiple-arguments -[PASS] hashql-mir::reify::input-required -[PASS] hashql-hir::lower::normalization::let-nested -[FAIL] hashql-ast::lower::name-mangler::newtype -[PASS] hashql-mir::pass::inst_simplify::const-fold-gt -[PASS] hashql-mir::pass::inst_simplify::const-propagation-locals -[PASS] hashql-mir::reify::nested-tuple-index -[PASS] hashql-mir::pass::inst_simplify::identical-operand-lte -[FAIL] hashql-ast::lower::expander::special-form-expander::type-expr-call-union -[PASS] hashql-hir::reify::closure-multiple-inputs -[FAIL] hashql-ast::lower::expander::special-form-expander::type-struct-has-type -[PASS] hashql-mir::reify::if-else -[PASS] hashql-hir::reify::underscore -[FAIL] hashql-ast::lower::name-mangler::diverging -[PASS] hashql-mir::reify::external-module -[PASS] hashql-mir::pass::administrative_reduction::closure-chain -[PASS] hashql-mir::reify::dict-index -[PASS] hashql-hir::lower::inference::intrinsics::unrelated -[PASS] hashql-mir::reify::ctor-empty -[PASS] hashql-mir::pass::inst_simplify::annihilator-or-true -[PASS] hashql-hir::lower::normalization::closure -[FAIL] hashql-ast::lower::expander::special-form-expander::input-3 -[PASS] hashql-hir::reify::list -[PASS] hashql-mir::pass::inst_simplify::const-fold-lt -[PASS] hashql-ast::lower::expander::special-form-expander::access-field-literal-boolean -[FAIL] hashql-ast::lower::name-mangler::newtype-generics -[PASS] hashql-hir::lower::inference::literal -[PASS] hashql-mir::reify::ctor -[PASS] hashql-mir::reify::top-level-external-module -[PASS] hashql-hir::reify::input -[PASS] hashql-hir::lower::normalization::field-access -[FAIL] hashql-ast::lower::expander::special-form-expander::let-collect-all-errors -[FAIL] hashql-ast::lower::expander::special-form-expander::index-2 -[PASS] hashql-mir::reify::struct-index -[PASS] hashql-mir::pass::inst_simplify::identical-operand-gt -[PASS] hashql-mir::pass::inst_simplify::identical-operand-ne -[PASS] hashql-mir::pass::administrative_reduction::forwarding-closure -[FAIL] hashql-ast::lower::name-mangler::fn-args -[PASS] hashql-mir::reify::empty-tuple -[PASS] hashql-hir::reify::as -[PASS] hashql-hir::lower::inference::tuple -[FAIL] hashql-ast::lower::expander::special-form-expander::type-collect-all-errors -[PASS] hashql-mir::reify::nested-let -[PASS] hashql-ast::lower::type-extractor::definition::contractive-union -[FAIL] hashql-ast::lower::expander::special-form-expander::fn-4 -[PASS] hashql-mir::reify::literal -[PASS] hashql-hir::lower::normalization::dict -[PASS] hashql-ast::lower::name-mangler::type-generics-interdependent-generics -[PASS] hashql-mir::pass::administrative_reduction::non-reducible-computation -[PASS] hashql-hir::lower::specialization::complex -[PASS] hashql-hir::reify::let-type-annotation -[PASS] hashql-hir::reify::literal-type-annotation -[FAIL] hashql-ast::lower::expander::special-form-expander::access-field-literal-valid -[PASS] hashql-ast::lower::type-extractor::definition::translation-intersection -[FAIL] hashql-ast::lower::expander::special-form-expander::use-glob -[PASS] hashql-hir::reify::index -[PASS] hashql-ast::lower::name-mangler::fn-types-of-args -[PASS] hashql-hir::lower::normalization::if-then -[PASS] hashql-mir::reify::ctor-cached-closure -[PASS] hashql-hir::lower::inference::ctor-bounded-invalid -[PASS] hashql-hir::reify::input-default -[PASS] hashql-hir::reify::if -[FAIL] hashql-ast::lower::expander::special-form-expander::unknown-special-form-typo -[PASS] hashql-ast::lower::type-extractor::definition::translation-tuple -[FAIL] hashql-ast::lower::name-mangler::path -[PASS] hashql-hir::lower::specialization::unary -[PASS] hashql-ast::lower::expander::special-form-expander::use-literal -[PASS] hashql-mir::pass::administrative_reduction::thunk-simple -[PASS] hashql-hir::reify::closure -[PASS] hashql-hir::lower::inference::if-test -[PASS] hashql-hir::reify::if-partial -[PASS] hashql-hir::lower::normalization::binary-operation -[PASS] hashql-ast::lower::name-mangler::simple -[PASS] hashql-mir::reify::closure -[PASS] hashql-ast::lower::type-extractor::definition::result -[PASS] hashql-mir::pass::administrative_reduction::multiple-thunks -[PASS] hashql-hir::lower::specialization::bits -[PASS] hashql-hir::reify::let -[PASS] hashql-hir::lower::inference::collect-variable -[PASS] hashql-hir::lower::normalization::binding-value -[PASS] hashql-hir::reify::dict -[FAIL] hashql-ast::lower::expander::special-form-expander::type-expr-call-arbitrary -[PASS] hashql-ast::lower::name-mangler::fn-types-of-ret -[FAIL] hashql-ast::lower::expander::special-form-expander::fn-generics-tuple-literal -[PASS] hashql-hir::lower::thunking::return-local -[PASS] hashql-ast::lower::type-extractor::definition::unused-generic-parameter -[FAIL] hashql-hir::lower::inference::closure-call-unconstrained-direct -[PASS] hashql-hir::reify::nested-expressions -[PASS] hashql-hir::lower::normalization::index-access -[PASS] hashql-mir::reify::extermal-module-export -[FAIL] hashql-ast::lower::expander::special-form-expander::not-enough-segments -[PASS] hashql-ast::lower::name-mangler::let -[PASS] hashql-ast::lower::type-extractor::definition::generics-with-params -[FAIL] hashql-ast::lower::expander::special-form-expander::type-expr-struct -[PASS] hashql-hir::lower::thunking::closure -[PASS] hashql-mir::pass::post_inline::cascading-simplification -[FAIL] hashql-ast::lower::expander::special-form-expander::fn-generics-struct-literal -[PASS] hashql-hir::reify::literal -[PASS] hashql-hir::lower::inference::dict-multi-value -[FAIL] hashql-ast::lower::name-mangler::fn-types -[PASS] hashql-hir::lower::normalization::list -[FAIL] hashql-ast::lower::expander::special-form-expander::type-generic-constraint -[PASS] hashql-ast::lower::type-extractor::definition::non-contractive-type -[PASS] hashql-mir::pass::pre_inline::thunk-with-dead-code -[PASS] hashql-hir::lower::thunking::dependent-call -[PASS] hashql-hir::reify::tuple -[PASS] hashql-ast::lower::expander::special-form-expander::index-1 -[PASS] hashql-ast::lower::name-mangler::type-generics -[PASS] hashql-hir::lower::inference::call -[FAIL] hashql-ast::lower::expander::special-form-expander::generics -[PASS] hashql-hir::lower::normalization::input -[PASS] hashql-ast::lower::type-extractor::definition::dict-parameter-count-mismatch-too-many -[PASS] hashql-ast::lower::expander::special-form-expander::newtype-3 -[PASS] hashql-mir::pass::pre_inline::nested-let-cleanup -[FAIL] hashql-ast::lower::expander::special-form-expander::use-tuple-literal -[PASS] hashql-hir::lower::thunking::tuple-index -[PASS] hashql-hir::lower::normalization::type-assertion-erase -[PASS] hashql-hir::reify::call -[PASS] hashql-hir::lower::inference::struct -[PASS] hashql-mir::pass::post_inline::nested-branch-elimination -[PASS] hashql-ast::lower::expander::special-form-expander::use-2 -[PASS] hashql-ast::lower::type-extractor::definition::locals-generic-params -[FAIL] hashql-ast::lower::sanitizer::special-form-value -[PASS] hashql-ast::lower::expander::special-form-expander::input-1 -[PASS] hashql-ast::lower::expander::import-resolver::closure-generic-not-resolved -[PASS] hashql-hir::reify::struct -[PASS] hashql-hir::lower::normalization::binding-body -[PASS] hashql-hir::lower::inference::list-empty -[PASS] hashql-ast::lower::expander::special-form-expander::let-2 -[PASS] hashql-ast::lower::type-extractor::definition::path-global-resolution -[FAIL] hashql-ast::lower::expander::special-form-expander::type-tuple-has-type -[PASS] hashql-mir::reify::null-value-in-binary -[PASS] hashql-ast::lower::expander::import-resolver::nested-resolution -[FAIL] hashql-ast::lower::sanitizer::special-form-type-position -[FAIL] hashql-ast::lower::expander::special-form-expander::use-struct -[PASS] hashql-mir::pass::pre_inline::chain-simplification -[PASS] hashql-ast::lower::expander::special-form-expander::access-field-index-out-of-bounds -[PASS] hashql-ast::lower::type-extractor::definition::list-parameter-count-mismatch-too-many -[PASS] hashql-ast::lower::expander::special-form-expander::use-glob-not-star -[PASS] hashql-hir::lower::normalization::binary-operation-right -[PASS] hashql-hir::lower::inference::qualified-variable +[PASS] hashql-hir::lower::checking::input-default +[PASS] hashql-ast::lower::expander::import-resolver::continue::unresolved-value +[PASS] hashql-ast::lower::name-mangler::type +[PASS] hashql-ast::lower::expander::import-resolver::shadowed-prelude +[PASS] hashql-ast::lower::expander::special-form-expander::use-glob-not-ident +[PASS] hashql-ast::lower::expander::special-form-expander::use-tuple [PASS] hashql-ast::lower::expander::import-resolver::closure-mixed-resolution -[FAIL] hashql-ast::lower::expander::special-form-expander::fn-generics-tuple-path -[PASS] hashql-ast::lower::expander::special-form-expander::if-1 -[PASS] hashql-ast::lower::expander::special-form-expander::if-2 -[PASS] hashql-mir::reify::list-index -[PASS] hashql-mir::pass::pre_inline::basic-constant-folding -[PASS] hashql-ast::lower::type-extractor::definition::env-type-interning [FAIL] hashql-ast::lower::sanitizer::constraint -[FAIL] hashql-ast::lower::expander::import-resolver::generic-arguments-in-final-segment -[PASS] hashql-ast::lower::expander::special-form-expander::let-argument-not-path -[PASS] hashql-ast::lower::expander::special-form-expander::type-2 -[PASS] hashql-ast::lower::expander::special-form-expander::newtype-2 -[PASS] hashql-ast::lower::type-extractor::definition::path-local-resolution -[FAIL] hashql-ast::lower::expander::special-form-expander::input-2 -[FAIL] hashql-mir::reify::monomorphized-closure -[PASS] hashql-mir::pass::dse::used-local-preserved -[PASS] hashql-ast::lower::expander::import-resolver::generic-constraints.newtype -[FAIL] hashql-ast::lower::expander::special-form-expander::fn-generics-tuple-type -[PASS] hashql-ast::lower::type-extractor::definition::translation-struct -[FAIL] hashql-ast::lower::expander::import-resolver::unresolver-variable -[FAIL] hashql-ast::lower::expander::special-form-expander::type-unknown -[FAIL] hashql-ast::lower::expander::special-form-expander::use-struct-literal -[PASS] hashql-ast::lower::expander::import-resolver::local-binding-type -[PASS] hashql-mir::pass::dse::nested-tuple-projection -[PASS] hashql-mir::reify::null-value -[FAIL] hashql-ast::lower::expander::special-form-expander::fn-generics-struct -[PASS] hashql-ast::lower::expander::import-resolver::multiple-named-imports -[FAIL] hashql-ast::lower::expander::special-form-expander::type-generic-struct -[FAIL] hashql-ast::lower::expander::special-form-expander::fn-generics-struct-type -[FAIL] hashql-ast::lower::type-extractor::definition::global-generic-constraint-too-many -[FAIL] hashql-ast::lower::expander::special-form-expander::use-3 -[PASS] hashql-mir::pass::dse::live-in-branch -[FAIL] hashql-ast::lower::expander::import-resolver::generic-argument-absolute-path -[PASS] hashql-ast::lower::expander::special-form-expander::labeled-argument -[PASS] hashql-ast::lower::expander::special-form-expander::fn-5 -[PASS] hashql-ast::lower::expander::import-resolver::newtype-scope -[PASS] hashql-ast::lower::type-extractor::definition::constraints-invalid-location -[FAIL] hashql-ast::lower::expander::special-form-expander::type-generic-relative-path -[PASS] hashql-ast::lower::expander::special-form-expander::index-3 -[FAIL] hashql-ast::lower::expander::special-form-expander::type-3 -[FAIL] hashql-ast::lower::expander::special-form-expander::fn-params-tuple -[PASS] hashql-ast::lower::type-extractor::definition::global-generic-constraint-not-enough -[PASS] hashql-ast::lower::expander::import-resolver::substitution -[FAIL] hashql-ast::lower::expander::import-resolver::generic-argument-use-path -[PASS] hashql-hir::lower::specialization::minimal-graph -[FAIL] hashql-ast::lower::expander::pre-expansion-name-resolver::re-assign-prelude -[FAIL] hashql-ast::lower::expander::special-form-expander::type-generic-duplicate -[FAIL] hashql-ast::lower::expander::special-form-expander::use-tuple-path -[PASS] hashql-ast::lower::expander::import-resolver::universe-ambiguity-resolution -[PASS] hashql-mir::pass::inline::closure-inline -[PASS] hashql-ast::lower::expander::import-resolver::module-not-found -[PASS] hashql-ast::lower::type-extractor::definition::duplicate-fields -[FAIL] hashql-ast::lower::expander::pre-expansion-name-resolver::newtype-4 -[PASS] hashql-hir::lower::specialization::bool -[PASS] hashql-ast::lower::expander::special-form-expander::type-4 -[PASS] hashql-ast::lower::expander::import-resolver::path-normalization -[FAIL] hashql-ast::lower::expander::import-resolver::rollback -[FAIL] hashql-ast::lower::expander::special-form-expander::use-tuple-type -[PASS] hashql-ast::lower::type-extractor::definition::dict-parameter-count-mismatch -[PASS] hashql-mir::pass::inline::simple-ctor -[FAIL] hashql-ast::lower::expander::pre-expansion-name-resolver::re-assign -[FAIL] hashql-ast::lower::expander::special-form-expander::fn-generics-literal -[PASS] hashql-ast::lower::expander::import-resolver::shadowed-imports -[PASS] hashql-mir::reify::reassign -[PASS] hashql-ast::lower::expander::import-resolver::use-shadowing-let -[PASS] hashql-ast::lower::type-extractor::definition::generics-apply-params -[FAIL] hashql-ast::lower::expander::special-form-expander::too-many-segments -[FAIL] hashql-ast::lower::expander::special-form-expander::type-expr-call-not-path -[PASS] hashql-ast::lower::expander::special-form-expander::access-field-literal-string -[FAIL] hashql-ast::lower::expander::pre-expansion-name-resolver::let-absolute -[PASS] hashql-ast::lower::expander::import-resolver::shadowed-prelude -[PASS] hashql-mir::pass::inline::too-large-to-inline -[PASS] hashql-ast::lower::expander::import-resolver::use-shadowing-use -[PASS] hashql-mir::reify::dict-computed-key -[PASS] hashql-ast::lower::type-extractor::definition::locals-type-extraction -[PASS] hashql-ast::lower::expander::special-form-expander::if-3 -[FAIL] hashql-ast::lower::expander::special-form-expander::fn-generics-struct-underscore -[FAIL] hashql-ast::lower::expander::special-form-expander::unknown-special-form -[PASS] hashql-ast::lower::expander::import-resolver::local-binding-recursive-value -[FAIL] hashql-ast::lower::expander::pre-expansion-name-resolver::nested-let +[PASS] hashql-mir::pass::pre_inline::inst-simplify-with-propagation +[PASS] hashql-hir::lower::inference::tuple +[PASS] hashql-mir::pass::pre_inline::nested-let-cleanup +[PASS] hashql-ast::lower::expander::import-resolver::use-shadowing-let +[PASS] hashql-hir::lower::normalization::binary-operation-left +[PASS] hashql-mir::pass::inline::closure-inline +[PASS] hashql-ast::lower::name-mangler::overwrite-body +[PASS] hashql-mir::reify::closure-captured-var [PASS] hashql-ast::lower::expander::import-resolver::closure-complex-return-type -[PASS] hashql-hir::lower::checking::closure-not-generic -[PASS] hashql-ast::lower::type-extractor::definition::generics-param-count-mismatch -[FAIL] hashql-ast::lower::expander::special-form-expander::type-generic-generic-ident -[FAIL] hashql-ast::lower::expander::special-form-expander::type-infer -[PASS] hashql-ast::lower::expander::import-resolver::local-binding-value -[FAIL] hashql-ast::lower::expander::pre-expansion-name-resolver::absolute-path +[PASS] hashql-ast::lower::expander::import-resolver::continue::use-not-found +[PASS] hashql-ast::lower::expander::special-form-expander::as-3 +[FAIL] hashql-ast::lower::expander::import-resolver::generic-arguments-in-final-segment +[PASS] hashql-ast::lower::expander::special-form-expander::let-argument-not-ident +[PASS] hashql-ast::lower::expander::import-resolver::generic-constraints.newtype +[PASS] hashql-mir::pass::pre_inline::dead-code-after-propagation +[PASS] hashql-ast::lower::expander::import-resolver::use-shadowing-use +[FAIL] hashql-ast::lower::name-mangler::newtype +[PASS] hashql-hir::lower::inference::ctor-bounded-invalid [PASS] hashql-ast::lower::expander::import-resolver::basic-absolute-imports -[PASS] hashql-ast::lower::expander::special-form-expander::let-5 -[PASS] hashql-ast::lower::type-extractor::graph-pipeline-inferred-closure -[PASS] hashql-hir::lower::checking::input-default -[FAIL] hashql-ast::lower::expander::special-form-expander::as-2 -[PASS] hashql-ast::lower::expander::special-form-expander::let-3 -[PASS] hashql-ast::lower::expander::import-resolver::local-binding-recursive-type -[PASS] hashql-ast::lower::expander::pre-expansion-name-resolver::alias-absolute-path +[PASS] hashql-mir::pass::pre_inline::chain-simplification +[PASS] hashql-mir::pass::inline::simple-ctor +[FAIL] hashql-ast::lower::expander::special-form-expander::type-expr-call-union +[PASS] hashql-mir::reify::dict-index +[PASS] hashql-hir::lower::normalization::let-nested +[PASS] hashql-ast::lower::expander::special-form-expander::type-struct-has-type +[PASS] hashql-ast::lower::expander::import-resolver::continue::unresolved-nested +[PASS] hashql-ast::lower::expander::import-resolver::unresolver-variable +[PASS] hashql-ast::lower::expander::import-resolver::local-binding-type +[PASS] hashql-ast::lower::name-mangler::diverging [PASS] hashql-ast::lower::expander::import-resolver::complex-nested-type-parameters -[FAIL] hashql-ast::lower::expander::special-form-expander::type-expr-call-intersection -[PASS] hashql-ast::lower::type-extractor::let-binding-type -[PASS] hashql-ast::lower::expander::special-form-expander::use-4 -[PASS] hashql-ast::lower::expander::import-resolver::basic-glob-import -[FAIL] hashql-ast::lower::expander::special-form-expander::access-field-literal-type-annotation -[FAIL] hashql-ast::lower::expander::pre-expansion-name-resolver::newtype-3-alias +[PASS] hashql-hir::lower::inference::if-test +[PASS] hashql-mir::pass::pre_inline::basic-constant-folding +[PASS] hashql-ast::lower::expander::special-form-expander::input-3 +[PASS] hashql-mir::pass::pre_inline::closure-with-dead-branch +[PASS] hashql-mir::reify::ctor +[PASS] hashql-ast::lower::expander::special-form-expander::access-field-literal-boolean +[PASS] hashql-mir::pass::inline::too-large-to-inline +[PASS] hashql-ast::lower::expander::import-resolver::multiple-named-imports +[PASS] hashql-ast::lower::expander::import-resolver::item-not-found +[FAIL] hashql-ast::lower::name-mangler::newtype-generics +[PASS] hashql-hir::lower::normalization::closure [PASS] hashql-ast::lower::expander::import-resolver::prelude -[PASS] hashql-ast::lower::type-extractor::union-type -[FAIL] hashql-ast::lower::expander::import-resolver::continue::unresolved-type -[PASS] hashql-ast::lower::expander::special-form-expander::access-1 -[PASS] hashql-hir::lower::normalization::graph-read-head -[FAIL] hashql-ast::lower::expander::pre-expansion-name-resolver::type-3-alias -[PASS] hashql-ast::lower::type-extractor::closure-generics -[PASS] hashql-ast::lower::expander::import-resolver::regression-generic-arguments-identifier -[FAIL] hashql-ast::lower::expander::special-form-expander::use-struct-path -[FAIL] hashql-ast::lower::expander::import-resolver::continue::unresolved-value -[PASS] hashql-hir::lower::normalization::tuple -[FAIL] hashql-ast::lower::expander::pre-expansion-name-resolver::multi-segment-resolution -[PASS] hashql-ast::lower::expander::import-resolver::generic-constraints-type -[PASS] hashql-ast::lower::expander::special-form-expander::if-4 -[FAIL] hashql-ast::lower::expander::special-form-expander::fn-generics-duplicates -[FAIL] hashql-ast::lower::expander::import-resolver::continue::use-not-found -[PASS] hashql-hir::lower::normalization::if-test -[FAIL] hashql-ast::lower::expander::pre-expansion-name-resolver::let-3-alias -[FAIL] hashql-ast::lower::expander::special-form-expander::type-never -[PASS] hashql-hir::lower::specialization::math -[PASS] hashql-hir::lower::normalization::nested-and-or -[FAIL] hashql-ast::lower::expander::pre-expansion-name-resolver::newtype-3 -[PASS] hashql-ast::lower::expander::special-form-expander::access-3 -[FAIL] hashql-ast::lower::expander::import-resolver::continue::unresolved-nested -[PASS] hashql-ast::lower::expander::special-form-expander::does-not-touch-non-kernel -[FAIL] hashql-hir::lower::specialization::collect-custom-collect -[FAIL] hashql-ast::lower::expander::import-resolver::item-not-found -[FAIL] hashql-ast::lower::expander::pre-expansion-name-resolver::resolve-symbol -[PASS] hashql-ast::lower::expander::special-form-expander::input-4 -[PASS] hashql-hir::lower::normalization::call +[FAIL] hashql-ast::lower::expander::special-form-expander::index-2 +[PASS] hashql-hir::lower::inference::collect-variable +[PASS] hashql-mir::pass::dse::used-local-preserved [PASS] hashql-hir::lower::ctor::local +[PASS] hashql-ast::lower::expander::import-resolver::local-binding-recursive-value [PASS] hashql-ast::lower::expander::import-resolver::glob-not-found -[FAIL] hashql-ast::lower::expander::pre-expansion-name-resolver::type-4 +[PASS] hashql-ast::lower::expander::import-resolver::newtype-scope +[PASS] hashql-ast::lower::expander::import-resolver::generic-argument-absolute-path +[PASS] hashql-ast::lower::expander::special-form-expander::let-collect-all-errors +[PASS] hashql-mir::reify::nested-let +[PASS] hashql-ast::lower::name-mangler::fn-args +[PASS] hashql-ast::lower::expander::special-form-expander::fn-4 +[PASS] hashql-hir::lower::normalization::field-access +[PASS] hashql-ast::lower::expander::import-resolver::regression-generic-arguments-identifier +[FAIL] hashql-hir::lower::inference::closure-call-unconstrained-direct [PASS] hashql-hir::lower::ctor::explicit-type -[FAIL] hashql-ast::lower::expander::special-form-expander::newtype-collect-all-errors -[PASS] hashql-hir::lower::normalization::if-else [PASS] hashql-ast::lower::expander::import-resolver::basic-relative-import -[FAIL] hashql-ast::lower::expander::pre-expansion-name-resolver::alias-symbol -[PASS] hashql-hir::lower::normalization::struct +[PASS] hashql-mir::pass::dse::nested-tuple-projection +[PASS] hashql-ast::lower::expander::import-resolver::substitution +[PASS] hashql-ast::lower::expander::import-resolver::local-binding-value +[PASS] hashql-ast::lower::expander::special-form-expander::type-collect-all-errors +[FAIL] hashql-ast::lower::expander::special-form-expander::access-field-literal-valid +[PASS] hashql-ast::lower::name-mangler::type-generics-interdependent-generics +[PASS] hashql-ast::lower::expander::special-form-expander::use-glob [PASS] hashql-ast::lower::expander::import-resolver::basic-renamed-import +[FAIL] hashql-ast::lower::expander::import-resolver::generic-argument-use-path +[PASS] hashql-hir::lower::normalization::dict +[PASS] hashql-hir::lower::inference::dict-multi-value +[PASS] hashql-mir::reify::ctor-cached-closure +[PASS] hashql-ast::lower::expander::import-resolver::generic-constraints-type [PASS] hashql-hir::lower::ctor::null -[FAIL] hashql-ast::lower::expander::pre-expansion-name-resolver::let-4-alias +[PASS] hashql-ast::lower::expander::import-resolver::module-not-found +[PASS] hashql-mir::pass::dse::live-in-branch +[PASS] hashql-ast::lower::name-mangler::fn-types-of-args +[PASS] hashql-ast::lower::expander::import-resolver::local-binding-recursive-type +[PASS] hashql-ast::lower::expander::special-form-expander::use-literal +[PASS] hashql-ast::lower::expander::special-form-expander::unknown-special-form-typo [PASS] hashql-ast::lower::expander::import-resolver::complex-path-resolution -[PASS] hashql-hir::lower::alias-replacement::replace-alias -[FAIL] hashql-ast::lower::expander::special-form-expander::fn-params-duplicates +[PASS] hashql-hir::lower::inference::call +[PASS] hashql-mir::pass::dse::simple-dead-local +[FAIL] hashql-hir::lower::inference::bind-arguments +[FAIL] hashql-ast::lower::name-mangler::path [PASS] hashql-hir::lower::ctor::absolute -[FAIL] hashql-ast::lower::expander::pre-expansion-name-resolver::resolve-generics +[PASS] hashql-hir::lower::normalization::if-then +[PASS] hashql-ast::lower::expander::import-resolver::basic-glob-import +[PASS] hashql-ast::lower::expander::special-form-expander::type-expr-call-arbitrary [PASS] hashql-ast::lower::expander::import-resolver::closure-param-not-resolved -[PASS] hashql-ast::lower::expander::special-form-expander::newtype-constraints -[PASS] hashql-hir::lower::alias-replacement::immediate-usage -[FAIL] hashql-ast::lower::expander::pre-expansion-name-resolver::invalid-let-expr -[FAIL] hashql-hir::lower::ctor::too-many-arguments +[PASS] hashql-mir::reify::closure +[PASS] hashql-ast::lower::name-mangler::simple +[PASS] hashql-hir::lower::inference::struct +[PASS] hashql-mir::pass::cfg_simplify::diamond-cfg-no-merge +[PASS] hashql-hir::lower::ctor::too-many-arguments +[PASS] hashql-ast::lower::expander::special-form-expander::not-enough-segments +[PASS] hashql-hir::lower::checking::qualified-variable +[PASS] hashql-ast::lower::expander::special-form-expander::fn-generics-tuple-literal +[PASS] hashql-hir::lower::normalization::binary-operation [FAIL] hashql-ast::lower::expander::special-form-expander::access-2 -[PASS] hashql-ast::lower::expander::special-form-expander::fn-3 -[FAIL] hashql-ast::lower::expander::pre-expansion-name-resolver::let-3 -[FAIL] hashql-hir::lower::alias-replacement::generic-reassignment -[PASS] hashql-ast::lower::expander::special-form-expander::as-1 -[FAIL] hashql-ast::lower::expander::pre-expansion-name-resolver::re-assign-prelude-diverging +[PASS] hashql-hir::lower::inference::closure-unconstrained +[PASS] hashql-ast::lower::name-mangler::fn-types-of-ret +[PASS] hashql-hir::lower::inference::list-empty +[PASS] hashql-mir::reify::extermal-module-export +[PASS] hashql-mir::pass::cfg_simplify::const-if-false +[PASS] hashql-ast::lower::expander::special-form-expander::generics [PASS] hashql-hir::lower::ctor::imported-item-not-a-constructor -[PASS] hashql-hir::lower::specialization::cmp -[PASS] hashql-hir::lower::alias-replacement::complex-mixed -[FAIL] hashql-ast::lower::expander::pre-expansion-name-resolver::let-4 -[FAIL] hashql-ast::lower::expander::special-form-expander::fn-params-type -[PASS] hashql-hir::lower::checking::qualified-variable +[PASS] hashql-ast::lower::name-mangler::let +[PASS] hashql-ast::lower::expander::special-form-expander::type-expr-struct +[PASS] hashql-ast::lower::expander::special-form-expander::as-1 +[PASS] hashql-hir::lower::normalization::binding-value +[PASS] hashql-hir::lower::inference::dict-key-var +[PASS] hashql-mir::reify::tuple-index +[PASS] hashql-hir::lower::inference::qualified-variable +[PASS] hashql-ast::lower::expander::special-form-expander::type-generic-constraint +[PASS] hashql-ast::lower::expander::special-form-expander::use-2 +[PASS] hashql-mir::pass::cfg_simplify::cascade-switch-then-goto +[PASS] hashql-ast::lower::expander::special-form-expander::fn-params-type +[PASS] hashql-ast::lower::name-mangler::fn-types +[PASS] hashql-hir::lower::normalization::index-access [PASS] hashql-hir::lower::ctor::not-enough-arguments +[PASS] hashql-hir::lower::inference::dict-empty +[PASS] hashql-ast::lower::expander::special-form-expander::use-tuple-literal +[PASS] hashql-ast::lower::expander::special-form-expander::let-2 +[PASS] hashql-ast::lower::name-mangler::type-generics +[PASS] hashql-ast::lower::expander::special-form-expander::use-struct-type +[PASS] hashql-hir::lower::inference::bind-arguments-explicit +[PASS] hashql-hir::lower::normalization::list +[PASS] hashql-mir::pass::cfg_simplify::let-in-branch +[PASS] hashql-hir::lower::inference::index-access +[PASS] hashql-ast::lower::expander::special-form-expander::input-1 +[PASS] hashql-hir::lower::alias-replacement::immediate-usage +[PASS] hashql-ast::lower::expander::special-form-expander::access-field-index-out-of-bounds +[PASS] hashql-ast::lower::expander::special-form-expander::type-generic +[PASS] hashql-mir::pass::cfg_simplify::const-nested-if +[PASS] hashql-hir::lower::normalization::input +[PASS] hashql-ast::lower::expander::special-form-expander::fn-generics-tuple-path +[PASS] hashql-hir::lower::inference::unsatisfiable-upper-constraint +[PASS] hashql-hir::lower::alias-replacement::generic-reassignment +[PASS] hashql-ast::lower::expander::special-form-expander::if-2 +[PASS] hashql-hir::lower::inference::closure-integer +[PASS] hashql-ast::lower::expander::special-form-expander::type-generic-absolute-path +[PASS] hashql-ast::lower::expander::special-form-expander::newtype-2 +[PASS] hashql-hir::lower::normalization::type-assertion-erase +[PASS] hashql-hir::lower::alias-replacement::complex-mixed +[PASS] hashql-ast::lower::expander::special-form-expander::fn-generics-tuple-type +[PASS] hashql-hir::lower::inference::if +[PASS] hashql-ast::lower::expander::special-form-expander::fn-generics-struct-type +[PASS] hashql-ast::lower::expander::special-form-expander::type-expr-invalid +[PASS] hashql-hir::lower::inference::closure-call-unconstrained +[PASS] hashql-hir::lower::normalization::binding-body +[PASS] hashql-ast::lower::expander::special-form-expander::fn-generics-struct [PASS] hashql-hir::lower::alias-replacement::preserve-non-alias -[FAIL] hashql-ast::lower::expander::pre-expansion-name-resolver::restoration-bindings -[FAIL] hashql-hir::lower::inference::bind-arguments-explicit +[PASS] hashql-hir::lower::inference::closure-constrained +[PASS] hashql-ast::lower::expander::special-form-expander::fn-params-tuple +[PASS] hashql-hir::lower::inference::list-single +[PASS] hashql-hir::lower::normalization::call +[PASS] hashql-ast::lower::expander::special-form-expander::labeled-argument +[PASS] hashql-hir::lower::inference::ctor [PASS] hashql-hir::lower::alias-replacement::unused-alias -[FAIL] hashql-ast::lower::expander::special-form-expander::use-struct-type -[FAIL] hashql-ast::lower::expander::pre-expansion-name-resolver::let-ident-generic -[PASS] hashql-hir::lower::alias-replacement::nested-aliases [PASS] hashql-hir::lower::checking::minimal-graph -[PASS] hashql-hir::lower::inference::unsatisfiable-upper-constraint -[PASS] hashql-ast::lower::expander::special-form-expander::type-generic -[PASS] hashql-ast::lower::expander::pre-expansion-name-resolver::type-3 +[PASS] hashql-ast::lower::expander::special-form-expander::use-tuple-type +[PASS] hashql-hir::lower::normalization::binary-operation-right +[PASS] hashql-hir::lower::normalization::if-else +[PASS] hashql-hir::lower::inference::input +[PASS] hashql-ast::lower::expander::special-form-expander::type-3 +[PASS] hashql-hir::lower::inference::field-access +[PASS] hashql-ast::lower::expander::special-form-expander::too-many-segments [PASS] hashql-hir::lower::checking::let -[PASS] hashql-hir::lower::alias-replacement::multiple-aliases -[PASS] hashql-hir::lower::inference::if -[PASS] hashql-ast::lower::expander::special-form-expander::type-generic-absolute-path -[PASS] hashql-ast::lower::node-renumberer::nested -[PASS] hashql-hir::lower::alias-replacement::qualified-variable-alias +[PASS] hashql-hir::lower::inference::let +[PASS] hashql-hir::lower::alias-replacement::nested-aliases +[PASS] hashql-hir::lower::normalization::struct +[PASS] hashql-ast::lower::expander::pre-expansion-name-resolver::re-assign-prelude +[PASS] hashql-ast::lower::expander::special-form-expander::fn-generics-struct-underscore +[FAIL] hashql-hir::lower::inference::infer-argument +[PASS] hashql-hir::lower::inference::input-default-invalid [PASS] hashql-hir::lower::checking::type-assertion -[PASS] hashql-ast::lower::node-renumberer::diverging -[FAIL] hashql-hir::lower::alias-replacement::generics +[PASS] hashql-hir::lower::inference::list-multi +[PASS] hashql-hir::lower::alias-replacement::multiple-aliases +[FAIL] hashql-ast::lower::expander::pre-expansion-name-resolver::newtype-4 +[PASS] hashql-hir::lower::alias-replacement::replace-alias +[PASS] hashql-ast::lower::expander::special-form-expander::type-infer +[PASS] hashql-hir::lower::inference::local-variable +[PASS] hashql-hir::lower::inference::as [PASS] hashql-hir::lower::checking::input-multiple -[PASS] hashql-hir::lower::inference::closure-constrained -[PASS] hashql-ast::lower::node-renumberer::basic -[PASS] hashql-hir::lower::inference::ctor +[PASS] hashql-hir::lower::inference::intrinsics::assignment +[PASS] hashql-hir::lower::alias-replacement::qualified-variable-alias +[FAIL] hashql-ast::lower::expander::pre-expansion-name-resolver::re-assign +[PASS] hashql-ast::lower::expander::special-form-expander::as-2 +[PASS] hashql-ast::lower::expander::special-form-expander::fn-generics-struct-literal +[PASS] hashql-hir::lower::inference::input-default [PASS] hashql-hir::lower::checking::ctor-bounded -[PASS] hashql-ast::lower::type-extractor::local-type-resolution -[PASS] hashql-hir::lower::specialization::filter-graph -[PASS] hashql-hir::lower::inference::field-access -[PASS] hashql-ast::lower::type-extractor::complex-types +[PASS] hashql-hir::lower::inference::intrinsics::re-assignment +[PASS] hashql-ast::lower::expander::pre-expansion-name-resolver::let-absolute +[FAIL] hashql-hir::lower::alias-replacement::generics +[PASS] hashql-hir::lower::inference::dict-multi-key +[PASS] hashql-hir::lower::normalization::graph-read-head +[PASS] hashql-ast::lower::expander::special-form-expander::access-field-literal-type-annotation +[PASS] hashql-ast::lower::expander::special-form-expander::index-1 +[PASS] hashql-hir::reify::local-variable +[PASS] hashql-ast::lower::expander::pre-expansion-name-resolver::nested-let +[PASS] hashql-hir::lower::inference::intrinsics::simple [PASS] hashql-hir::lower::checking::field-access-tuple -[FAIL] hashql-ast::lower::expander::special-form-expander::type-expr-invalid +[PASS] hashql-hir::lower::inference::dict-single +[PASS] hashql-ast::lower::expander::special-form-expander::newtype-3 +[PASS] hashql-mir::pass::post_inline::dead-code-from-inline +[PASS] hashql-hir::lower::normalization::tuple +[PASS] hashql-ast::lower::expander::special-form-expander::access-1 +[FAIL] hashql-hir::reify::variable-generics +[PASS] hashql-ast::lower::expander::pre-expansion-name-resolver::absolute-path [PASS] hashql-hir::lower::checking::literal +[PASS] hashql-ast::lower::expander::special-form-expander::type-tuple-has-type +[FAIL] hashql-hir::lower::checking::closure-call-unconstrained-direct +[PASS] hashql-ast::lower::expander::special-form-expander::fn-generics-duplicates +[PASS] hashql-mir::pass::post_inline::constant-propagation-after-inline +[PASS] hashql-hir::lower::normalization::if-test +[PASS] hashql-mir::pass::cfg_simplify::mixed-const-runtime-if +[PASS] hashql-hir::reify::binding-type-assertion +[PASS] hashql-ast::lower::expander::pre-expansion-name-resolver::alias-absolute-path +[PASS] hashql-ast::lower::expander::special-form-expander::use-glob-not-star +[PASS] hashql-hir::lower::checking::tuple +[PASS] hashql-ast::lower::expander::special-form-expander::access-3 +[PASS] hashql-hir::lower::checking::call +[PASS] hashql-mir::pass::cfg_simplify::const-if-true +[PASS] hashql-hir::lower::normalization::nested-and-or +[PASS] hashql-hir::lower::checking::ctor-bounded-invalid +[PASS] hashql-hir::reify::field +[PASS] hashql-ast::lower::expander::special-form-expander::let-argument-not-path +[PASS] hashql-hir::reify::qualified-variable +[FAIL] hashql-ast::lower::expander::pre-expansion-name-resolver::newtype-3-alias +[PASS] hashql-ast::lower::expander::special-form-expander::input-4 +[PASS] hashql-hir::reify::let-type-annotation +[PASS] hashql-hir::lower::checking::struct +[FAIL] hashql-ast::lower::expander::special-form-expander::use-struct +[PASS] hashql-ast::lower::expander::special-form-expander::input-2 +[PASS] hashql-hir::reify::call-multiple-arguments +[PASS] hashql-hir::reify::closure-multiple-inputs +[PASS] hashql-ast::lower::expander::pre-expansion-name-resolver::type-3-alias +[PASS] hashql-hir::lower::checking::argument-count-mismatch +[PASS] hashql-ast::lower::expander::special-form-expander::newtype-collect-all-errors +[PASS] hashql-hir::reify::input-default +[PASS] hashql-ast::lower::expander::special-form-expander::type-unknown +[PASS] hashql-hir::lower::checking::list-empty +[PASS] hashql-ast::lower::expander::special-form-expander::if-1 +[FAIL] hashql-ast::lower::expander::pre-expansion-name-resolver::multi-segment-resolution +[PASS] hashql-hir::reify::list +[PASS] hashql-hir::reify::underscore +[PASS] hashql-ast::lower::expander::special-form-expander::type-generic-struct +[PASS] hashql-hir::reify::if-partial +[PASS] hashql-ast::lower::expander::special-form-expander::fn-params-duplicates +[PASS] hashql-hir::reify::input +[PASS] hashql-ast::lower::expander::special-form-expander::type-2 +[PASS] hashql-ast::lower::expander::special-form-expander::access-field-literal-string +[PASS] hashql-ast::lower::expander::pre-expansion-name-resolver::let-3-alias +[PASS] hashql-hir::lower::checking::closure-call-constrained +[PASS] hashql-ast::lower::expander::special-form-expander::newtype-constraints +[PASS] hashql-hir::reify::let +[PASS] hashql-ast::lower::expander::special-form-expander::fn-5 +[PASS] hashql-hir::reify::as +[PASS] hashql-ast::lower::expander::special-form-expander::use-struct-literal +[PASS] hashql-ast::lower::expander::special-form-expander::if-3 +[PASS] hashql-ast::lower::expander::pre-expansion-name-resolver::newtype-3 +[PASS] hashql-ast::lower::expander::special-form-expander::fn-3 +[PASS] hashql-hir::reify::nested-expressions +[FAIL] hashql-ast::lower::expander::special-form-expander::use-3 +[PASS] hashql-ast::lower::expander::special-form-expander::use-4 +[PASS] hashql-ast::lower::expander::special-form-expander::index-3 +[PASS] hashql-ast::lower::expander::special-form-expander::type-generic-generic-ident +[PASS] hashql-hir::lower::specialization::complex +[PASS] hashql-ast::lower::expander::pre-expansion-name-resolver::resolve-symbol +[PASS] hashql-ast::lower::expander::special-form-expander::let-3 +[PASS] hashql-ast::lower::type-extractor::definition::contractive-union +[FAIL] hashql-ast::lower::expander::pre-expansion-name-resolver::type-4 +[PASS] hashql-ast::lower::expander::special-form-expander::type-generic-relative-path +[PASS] hashql-hir::reify::literal +[PASS] hashql-ast::lower::expander::special-form-expander::use-tuple-path +[PASS] hashql-ast::lower::expander::special-form-expander::use-struct-path +[PASS] hashql-hir::lower::specialization::unary +[PASS] hashql-mir::reify::binary +[PASS] hashql-ast::lower::type-extractor::definition::translation-intersection +[PASS] hashql-hir::reify::tuple +[PASS] hashql-ast::lower::expander::special-form-expander::type-generic-duplicate +[PASS] hashql-ast::lower::expander::pre-expansion-name-resolver::alias-symbol +[PASS] hashql-ast::lower::expander::special-form-expander::if-4 +[PASS] hashql-ast::lower::expander::special-form-expander::type-4 +[PASS] hashql-mir::reify::input-default +[PASS] hashql-hir::reify::call +[PASS] hashql-ast::lower::type-extractor::definition::translation-tuple +[PASS] hashql-ast::lower::expander::special-form-expander::type-never +[PASS] hashql-ast::lower::expander::special-form-expander::fn-generics-literal +[FAIL] hashql-ast::lower::expander::pre-expansion-name-resolver::let-4-alias +[PASS] hashql-mir::reify::nested-tuple-index +[PASS] hashql-hir::reify::struct +[PASS] hashql-ast::lower::expander::special-form-expander::does-not-touch-non-kernel [PASS] hashql-ast::lower::type-extractor::closure -[PASS] hashql-hir::lower::inference::input-default-invalid +[FAIL] hashql-ast::lower::expander::pre-expansion-name-resolver::resolve-generics +[PASS] hashql-ast::lower::type-extractor::definition::result +[FAIL] hashql-ast::lower::expander::special-form-expander::type-expr-call-not-path +[PASS] hashql-mir::reify::ctor-empty +[FAIL] hashql-ast::lower::expander::pre-expansion-name-resolver::invalid-let-expr [PASS] hashql-hir::lower::checking::field-access -[PASS] hashql-hir::lower::checking::tuple -[PASS] hashql-hir::lower::checking::ctor -[PASS] hashql-hir::lower::inference::local-variable [PASS] hashql-ast::lower::type-extractor::generic-type-resolution -[PASS] hashql-hir::lower::checking::dict -[PASS] hashql-hir::lower::checking::ctor-bounded-invalid -[PASS] hashql-hir::lower::checking::if-non-boolean +[PASS] hashql-ast::lower::expander::special-form-expander::unknown-special-form +[PASS] hashql-ast::lower::type-extractor::definition::unused-generic-parameter +[PASS] hashql-ast::lower::expander::pre-expansion-name-resolver::let-3 [PASS] hashql-ast::lower::type-extractor::closure-unused-generic -[PASS] hashql-hir::lower::checking::input-default-invalid -[PASS] hashql-hir::lower::inference::dict-multi-key +[PASS] hashql-hir::lower::checking::dict +[PASS] hashql-ast::lower::type-extractor::definition::generics-with-params +[PASS] hashql-ast::lower::expander::special-form-expander::let-5 +[PASS] hashql-mir::reify::external-module [PASS] hashql-ast::lower::type-extractor::global-type-resolution -[PASS] hashql-hir::lower::checking::local-variable -[PASS] hashql-hir::lower::inference::dict-single -[PASS] hashql-hir::lower::checking::argument-count-mismatch +[PASS] hashql-hir::lower::checking::if-non-boolean +[FAIL] hashql-ast::lower::expander::pre-expansion-name-resolver::re-assign-prelude-diverging +[FAIL] hashql-ast::lower::expander::special-form-expander::type-expr-call-intersection +[PASS] hashql-mir::pass::inline::filter-aggressive +[PASS] hashql-ast::lower::type-extractor::definition::non-contractive-type [PASS] hashql-ast::lower::type-extractor::nested-type-nodes -[PASS] hashql-hir::lower::checking::call-invalid -[FAIL] hashql-hir::lower::inference::bind-arguments -[PASS] hashql-mir::reify::graph-read -[FAIL] hashql-hir::lower::checking::closure-call-unconstrained-direct +[PASS] hashql-ast::lower::expander::pre-expansion-name-resolver::let-4 +[PASS] hashql-ast::lower::node-renumberer::nested +[PASS] hashql-hir::lower::checking::input-default-invalid [PASS] hashql-ast::lower::type-extractor::definition::translation-infer -[FAIL] hashql-hir::lower::checking::bind-arguments -[PASS] hashql-hir::lower::checking::call +[PASS] hashql-ast::lower::expander::pre-expansion-name-resolver::restoration-bindings +[PASS] hashql-ast::lower::node-renumberer::diverging +[PASS] hashql-hir::lower::checking::local-variable +[PASS] hashql-ast::lower::type-extractor::definition::dict-parameter-count-mismatch-too-many +[FAIL] hashql-ast::lower::expander::pre-expansion-name-resolver::let-ident-generic +[PASS] hashql-ast::lower::node-renumberer::basic +[PASS] hashql-ast::lower::type-extractor::definition::locals-generic-params [PASS] hashql-ast::lower::type-extractor::definition::non-contractive-self -[PASS] hashql-mir::pass::post_inline::dead-code-from-inline -[PASS] hashql-hir::lower::inference::closure-unconstrained -[PASS] hashql-hir::lower::checking::struct -[PASS] hashql-hir::lower::checking::closure-unconstrained -[PASS] hashql-eval::postgres::input-parameter-exists +[PASS] hashql-hir::lower::checking::call-invalid +[PASS] hashql-ast::lower::type-extractor::definition::path-global-resolution +[PASS] hashql-ast::lower::expander::pre-expansion-name-resolver::type-3 [PASS] hashql-ast::lower::type-extractor::definition::identity-nominal -[PASS] hashql-hir::lower::checking::list-empty -[PASS] hashql-hir::lower::checking::closure-invalid-return-type +[PASS] hashql-ast::lower::type-extractor::local-type-resolution +[FAIL] hashql-hir::lower::checking::bind-arguments [PASS] hashql-ast::lower::type-extractor::definition::intrinsic-dict-translation -[PASS] hashql-mir::pass::post_inline::constant-propagation-after-inline -[PASS] hashql-hir::lower::inference::dict-key-var -[PASS] hashql-hir::lower::checking::dict-empty -[PASS] hashql-hir::lower::checking::filter-graph +[PASS] hashql-ast::lower::type-extractor::complex-types +[PASS] hashql-mir::reify::input-required +[PASS] hashql-ast::lower::type-extractor::definition::list-parameter-count-mismatch-too-many +[PASS] hashql-hir::lower::checking::closure-unconstrained [PASS] hashql-ast::lower::type-extractor::definition::constraints-parsing -[PASS] hashql-mir::pass::pre_inline::nested-if-constant -[PASS] hashql-hir::lower::inference::dict-empty -[PASS] hashql-hir::lower::checking::closure-call-constrained +[PASS] hashql-mir::reify::if-else +[PASS] hashql-mir::reify::struct-index +[PASS] hashql-ast::lower::type-extractor::definition::env-type-interning [PASS] hashql-ast::lower::type-extractor::definition::locals-generic-params-struct -[PASS] hashql-hir::lower::checking::index-access -[PASS] hashql-mir::pass::pre_inline::inst-simplify-with-propagation -[PASS] hashql-hir::lower::inference::index-access -[PASS] hashql-hir::lower::checking::closure-constrained +[PASS] hashql-hir::lower::checking::closure-invalid-return-type +[PASS] hashql-mir::reify::literal +[PASS] hashql-ast::lower::type-extractor::definition::path-local-resolution +[PASS] hashql-mir::reify::top-level-external-module +[PASS] hashql-mir::pass::inline::excessive-depth +[PASS] hashql-ast::lower::type-extractor::definition::translation-struct [PASS] hashql-ast::lower::type-extractor::definition::infer-with-arguments -[PASS] hashql-mir::pass::pre_inline::dead-code-after-propagation -[PASS] hashql-hir::lower::checking::list -[PASS] hashql-mir::pass::inline::heuristic-inline -[PASS] hashql-hir::lower::inference::closure-integer +[PASS] hashql-mir::reify::empty-tuple +[PASS] hashql-hir::lower::checking::dict-empty +[PASS] hashql-hir::lower::specialization::minimal-graph +[PASS] hashql-mir::reify::null-value-in-binary +[PASS] hashql-ast::lower::type-extractor::definition::global-generic-constraint-not-enough +[PASS] hashql-hir::reify::literal-type-annotation [PASS] hashql-ast::lower::type-extractor::definition::intrinsic-list-translation -[PASS] hashql-mir::pass::inline::nested-ctor -[PASS] hashql-hir::lower::checking::type-assertion-smaller -[PASS] hashql-mir::pass::pre_inline::closure-with-dead-branch -[PASS] hashql-hir::lower::inference::closure-call-unconstrained +[PASS] hashql-ast::lower::type-extractor::definition::global-generic-constraint-too-many +[PASS] hashql-hir::lower::specialization::bool +[PASS] hashql-hir::lower::checking::index-access +[PASS] hashql-mir::reify::list-index +[PASS] hashql-hir::reify::if +[PASS] hashql-ast::lower::type-extractor::definition::constraints-invalid-location +[PASS] hashql-ast::lower::type-extractor::definition::duplicate-fields [PASS] hashql-ast::lower::type-extractor::definition::translation-union -[PASS] hashql-hir::lower::inference::list-single -[PASS] hashql-mir::pass::data-dependency::deeply-nested-tuple -[PASS] hashql-mir::pass::data-dependency::input-no-deps -[PASS] hashql-hir::lower::checking::closure-call-unconstrained +[PASS] hashql-hir::lower::specialization::bits +[PASS] hashql-hir::reify::index +[PASS] hashql-hir::lower::checking::list [PASS] hashql-ast::lower::type-extractor::definition::list-parameter-count-mismatch -[PASS] hashql-hir::lower::inference::input -[PASS] hashql-hir::lower::checking::input -[PASS] hashql-mir::pass::inline::excessive-depth +[PASS] hashql-ast::lower::type-extractor::definition::dict-parameter-count-mismatch +[PASS] hashql-hir::lower::thunking::return-local [PASS] hashql-ast::lower::type-extractor::definition::identity-structural -[FAIL] hashql-hir::lower::inference::infer-argument -[PASS] hashql-hir::lower::checking::if-simplify +[PASS] hashql-hir::lower::checking::type-assertion-smaller +[PASS] hashql-hir::reify::closure +[PASS] hashql-ast::lower::type-extractor::definition::generics-apply-params +[PASS] hashql-hir::lower::thunking::closure [PASS] hashql-ast::lower::type-extractor::definition::contractive-guarded -[PASS] hashql-mir::pass::data-dependency::binary-operation -[PASS] hashql-mir::pass::data-dependency::function-apply +[PASS] hashql-hir::reify::dict +[PASS] hashql-ast::lower::type-extractor::definition::locals-type-extraction +[PASS] hashql-hir::lower::checking::closure-call-unconstrained +[PASS] hashql-hir::lower::thunking::dependent-call +[PASS] hashql-hir::lower::thunking::tuple-index +[PASS] hashql-mir::pass::data-dependency::input-no-deps +[PASS] hashql-ast::lower::type-extractor::definition::generics-param-count-mismatch +[PASS] hashql-hir::lower::checking::input +[PASS] hashql-hir::lower::specialization::math +[PASS] hashql-hir::lower::checking::ctor +[PASS] hashql-ast::lower::type-extractor::graph-pipeline-inferred-closure +[PASS] hashql-hir::lower::checking::if-simplify +[PASS] hashql-ast::lower::type-extractor::let-binding-type +[FAIL] hashql-mir::reify::monomorphized-closure [PASS] hashql-hir::lower::checking::type-assertion-unrelated -[PASS] hashql-hir::lower::inference::as +[PASS] hashql-mir::pass::inst_simplify::identity-and-true +[PASS] hashql-ast::lower::type-extractor::union-type +[PASS] hashql-ast::lower::type-extractor::closure-generics +[PASS] hashql-mir::pass::inst_simplify::identical-operand-eq +[PASS] hashql-mir::reify::null-value +[PASS] hashql-mir::pass::inst_simplify::const-propagation-locals +[PASS] hashql-mir::pass::inst_simplify::annihilator-and-false +[PASS] hashql-hir::lower::checking::filter-graph +[PASS] hashql-mir::pass::inst_simplify::annihilator-or-true +[PASS] hashql-mir::pass::administrative_reduction::thunk-aggregate +[PASS] hashql-hir::lower::checking::closure-constrained +[PASS] hashql-mir::pass::inst_simplify::const-fold-lt +[PASS] hashql-mir::pass::inst_simplify::identical-operand-ne +[FAIL] hashql-hir::lower::specialization::collect-custom-collect +[PASS] hashql-mir::pass::administrative_reduction::closure-chain +[PASS] hashql-mir::pass::inst_simplify::identical-operand-gt +[PASS] hashql-mir::pass::administrative_reduction::forwarding-closure +[PASS] hashql-mir::pass::inline::heuristic-inline +[PASS] hashql-mir::pass::administrative_reduction::non-reducible-computation +[PASS] hashql-mir::pass::inline::nested-ctor +[PASS] hashql-mir::pass::administrative_reduction::thunk-simple +[PASS] hashql-mir::pass::administrative_reduction::multiple-thunks +[PASS] hashql-mir::pass::inst_simplify::const-fold-ne +[PASS] hashql-mir::pass::inst_simplify::chained-const-fold +[PASS] hashql-mir::pass::post_inline::cascading-simplification +[PASS] hashql-mir::pass::inst_simplify::const-fold-gt +[PASS] hashql-mir::pass::post_inline::nested-branch-elimination +[PASS] hashql-mir::pass::forward_substitution::param-const-agree +[PASS] hashql-mir::pass::forward_substitution::chained-projection +[PASS] hashql-mir::pass::inst_simplify::const-fold-lte +[PASS] hashql-mir::pass::inst_simplify::identical-operand-lt +[PASS] hashql-mir::pass::inst_simplify::identical-operand-lte +[PASS] hashql-hir::lower::specialization::filter-graph +[PASS] hashql-eval::postgres::input-parameter-exists +[PASS] hashql-mir::pass::inst_simplify::identity-or-false +[PASS] hashql-mir::reify::reassign +[PASS] hashql-mir::pass::inst_simplify::identical-operand-gte +[PASS] hashql-mir::reify::dict-computed-key +[PASS] hashql-mir::pass::inst_simplify::const-fold-gte +[PASS] hashql-mir::pass::inst_simplify::const-fold-eq +[PASS] hashql-mir::pass::data-dependency::graph-read-filter +[PASS] hashql-mir::pass::data-dependency::block-params +[PASS] hashql-mir::pass::data-dependency::mixed-projection-chain +[PASS] hashql-mir::pass::data-dependency::function-apply +[PASS] hashql-mir::pass::data-dependency::comparison-operators [PASS] hashql-mir::pass::data-dependency::multiple-uses +[PASS] hashql-mir::pass::data-dependency::tuple-projection +[PASS] hashql-mir::pass::data-dependency::deeply-nested-tuple +[PASS] hashql-mir::reify::graph-read +[PASS] hashql-mir::pass::data-dependency::binary-operation [PASS] hashql-mir::pass::data-dependency::nested-tuple-projection -[PASS] hashql-mir::pass::data-dependency::comparison-operators -[PASS] hashql-mir::pass::inline::filter-aggressive [PASS] hashql-mir::pass::data-dependency::struct-projection -[PASS] hashql-hir::lower::inference::input-default -[PASS] hashql-mir::pass::data-dependency::tuple-projection -[PASS] hashql-hir::lower::inference::let -[PASS] hashql-mir::pass::dse::simple-dead-local [PASS] hashql-mir::pass::data-dependency::list-construction -[PASS] hashql-hir::lower::inference::intrinsics::assignment -[PASS] hashql-hir::lower::inference::list-multi -[PASS] hashql-hir::lower::inference::intrinsics::re-assignment -[PASS] hashql-mir::pass::cfg_simplify::diamond-cfg-no-merge -[PASS] hashql-hir::lower::inference::intrinsics::simple -[PASS] hashql-mir::pass::cfg_simplify::const-if-false -[PASS] hashql-mir::pass::cfg_simplify::cascade-switch-then-goto -[PASS] hashql-mir::pass::cfg_simplify::let-in-branch -[PASS] hashql-mir::pass::cfg_simplify::const-nested-if +[PASS] hashql-hir::lower::specialization::collect-filter-graph +[PASS] hashql-hir::lower::specialization::cmp [PASS] hashql-mir::pass::data-dependency::graph-read-head [PASS] hashql-mir::pass::data-dependency::function-multiple-args [PASS] hashql-mir::pass::data-dependency::struct-construction +[PASS] hashql-mir::pass::inline::filter-with-ctor [PASS] hashql-mir::interpret::access-struct-through-opaque -[PASS] hashql-mir::pass::data-dependency::graph-read-filter -[PASS] hashql-hir::lower::specialization::collect-filter-graph -[PASS] hashql-mir::pass::data-dependency::block-params -[PASS] hashql-mir::pass::data-dependency::mixed-projection-chain [PASS] hashql-hir::lower::checking::collect-filter-graph -[PASS] hashql-eval::postgres::tuple-construction -[PASS] hashql-mir::pass::inline::filter-with-ctor -[PASS] hashql-eval::postgres::logical-and-inputs -[PASS] hashql-eval::postgres::constant-true-filter -[PASS] hashql-mir::pass::cfg_simplify::mixed-const-runtime-if -[PASS] hashql-eval::postgres::entity-draft-id-equality -[PASS] hashql-mir::pass::cfg_simplify::const-if-true [PASS] hashql-eval::postgres::opaque-passthrough [PASS] hashql-eval::postgres::dict-construction -[PASS] hashql-eval::postgres::list-construction -[PASS] hashql-eval::postgres::entity-uuid-equality -[PASS] hashql-eval::postgres::struct-construction -[PASS] hashql-eval::postgres::if-input-branches +[PASS] hashql-eval::postgres::entity-draft-id-equality +[PASS] hashql-eval::postgres::tuple-construction +[PASS] hashql-hir::lower::graph-hoisting::no-hoist-closure-inside-read +[PASS] hashql-hir::lower::graph-hoisting::double-hoist-deny +[PASS] hashql-eval::postgres::minimal-select-no-extra-joins +[PASS] hashql-eval::postgres::logical-and-inputs +[PASS] hashql-eval::postgres::entity-web-id-equality [PASS] hashql-mir::pass::data-dependency::closure-construction [PASS] hashql-mir::pass::data-dependency::tuple-construction -[PASS] hashql-hir::lower::graph-hoisting::double-hoist-deny -[PASS] hashql-eval::postgres::let-binding-propagation -[PASS] hashql-eval::postgres::entity-archived-check -[PASS] hashql-hir::lower::graph-hoisting::no-hoist-closure -[PASS] hashql-hir::lower::graph-hoisting::no-hoist-closure-inside-read [PASS] hashql-eval::postgres::mixed-sources-filter [FAIL] hashql-ast::lower::name-mangler::onion [PASS] hashql-ast::lower::name-mangler::type-generics-recursive [FAIL] hashql-ast::lower::name-mangler::absolute-path [FAIL] hashql-ast::lower::name-mangler::type-generics-constraints +[PASS] hashql-hir::lower::graph-hoisting::nested-boolean-expression [PASS] hashql-ast::lower::name-mangler::scopes-no-include -[PASS] hashql-eval::postgres::entity-web-id-equality -[PASS] hashql-hir::lower::graph-hoisting::hoist -[PASS] hashql-eval::postgres::comparison-no-cast +[PASS] hashql-hir::lower::graph-hoisting::nested-boolean-expression-outer-let +[PASS] hashql-eval::postgres::list-construction +[PASS] hashql-eval::postgres::entity-uuid-equality +[PASS] hashql-eval::postgres::input-parameter-load +[PASS] hashql-eval::postgres::entity-archived-check +[PASS] hashql-hir::lower::graph-hoisting::no-hoist-closure +[PASS] hashql-eval::postgres::constant-true-filter [FAIL] hashql-ast::lower::name-mangler::path-arguments [PASS] hashql-eval::postgres::nested-if-input-branches -[PASS] hashql-eval::postgres::input-parameter-load -[PASS] hashql-eval::postgres::minimal-select-no-extra-joins -[PASS] hashql-hir::lower::graph-hoisting::nested-boolean-expression +[PASS] hashql-eval::postgres::let-binding-propagation +[PASS] hashql-eval::postgres::comparison-no-cast [PASS] hashql-hir::lower::graph-hoisting::hoist-inside-boundary -[PASS] hashql-hir::lower::graph-hoisting::nested-boolean-expression-outer-let +[PASS] hashql-hir::lower::graph-hoisting::hoist [PASS] hashql-hir::lower::graph-hoisting::sequential-filter +[PASS] hashql-eval::postgres::if-input-branches +[PASS] hashql-eval::postgres::struct-construction [PASS] hashql-hir::lower::graph-hoisting::double-hoist [PASS] hashql-eval::postgres::entity-type-ids-lateral [PASS] hashql-hir::lower::graph-hoisting::partial [PASS] hashql-eval::postgres::multiple-filters [PASS] hashql-eval::postgres::env-captured-variable -[PASS] hashql-mir::pass::inst_simplify::showcase [PASS] hashql-mir::pass::dse::showcase [PASS] hashql-mir::pass::cfg_simplify::dead-block-elimination +[PASS] hashql-mir::pass::inst_simplify::showcase [PASS] hashql-mir::reify::nested-if [PASS] hashql-mir::pass::forward_substitution::closure-env-capture [PASS] hashql-mir::pass::forward_substitution::nested @@ -3559,42 +1777,39 @@ Differences (-Expected|+Received): ═════════════════════════════ Test Results Summary ═════════════════════════════ Results: - ✓ Passed: 416 - ✗ Failed: 118 + ✓ Passed: 497 + ✗ Failed: 37 Total: 534 Timing: - Elapsed: 5.30s - Throughput: 100.8 tests/sec - Avg/test: 25.85ms + Elapsed: 5.55s + Throughput: 96.2 tests/sec + Avg/test: 27.90ms Phase Breakdown: - Run: 25.39ms avg ( 98.2%) - Parse: 93.88µs avg ( 0.4%) - Read: 33.45µs avg ( 0.1%) - Verify: 35.46µs avg ( 0.1%) - Assert: 177.17µs avg ( 0.7%) - Render: 55.87µs avg ( 0.2%) + Run: 27.59ms avg ( 98.9%) + Parse: 92.45µs avg ( 0.3%) + Read: 41.02µs avg ( 0.1%) + Verify: 8.54µs avg ( 0.0%) + Assert: 58.40µs avg ( 0.2%) + Render: 39.74µs avg ( 0.1%) I/O Statistics: - Files read: 1037 (1.2 MiB total) + Files read: 1069 (1.2 MiB total) Files written: 0 (0 B total) Slowest Tests: - 5.28s hashql-mir::pass::post_inline::showcase - 1.10s hashql-mir::pass::forward_substitution::closure-env-capture - 983.20ms hashql-mir::reify::nested-if - 785.26ms hashql-mir::pass::inst_simplify::showcase - 766.58ms hashql-mir::pass::dse::showcase + 5.53s hashql-mir::pass::post_inline::showcase + 1.20s hashql-mir::pass::forward_substitution::closure-env-capture + 1.03s hashql-mir::reify::nested-if + 826.64ms hashql-mir::pass::dse::showcase + 818.42ms hashql-mir::pass::cfg_simplify::dead-block-elimination Failed Tests: ✗ hashql-mir::reify::monomorphized-closure ✗ hashql-hir::reify::variable-generics ✗ hashql-hir::lower::specialization::collect-custom-collect - ✗ hashql-hir::lower::alias-replacement::generic-reassignment ✗ hashql-hir::lower::alias-replacement::generics - ✗ hashql-hir::lower::ctor::too-many-arguments - ✗ hashql-hir::lower::inference::bind-arguments-explicit ✗ hashql-hir::lower::inference::bind-arguments ✗ hashql-hir::lower::inference::infer-argument ✗ hashql-hir::lower::inference::closure-call-unconstrained-direct @@ -3604,108 +1819,30 @@ Failed Tests: ✗ hashql-ast::lower::name-mangler::onion ✗ hashql-ast::lower::name-mangler::absolute-path ✗ hashql-ast::lower::name-mangler::type-generics-constraints - ✗ hashql-ast::lower::name-mangler::type ✗ hashql-ast::lower::name-mangler::newtype - ✗ hashql-ast::lower::name-mangler::diverging ✗ hashql-ast::lower::name-mangler::newtype-generics - ✗ hashql-ast::lower::name-mangler::fn-args ✗ hashql-ast::lower::name-mangler::path - ✗ hashql-ast::lower::name-mangler::fn-types - ✗ hashql-ast::lower::sanitizer::special-form-value - ✗ hashql-ast::lower::sanitizer::special-form-type-position ✗ hashql-ast::lower::sanitizer::constraint - ✗ hashql-ast::lower::expander::import-resolver::generic-argument-absolute-path ✗ hashql-ast::lower::expander::import-resolver::generic-argument-use-path ✗ hashql-ast::lower::expander::import-resolver::generic-arguments-in-final-segment - ✗ hashql-ast::lower::expander::import-resolver::unresolver-variable - ✗ hashql-ast::lower::expander::import-resolver::rollback - ✗ hashql-ast::lower::expander::import-resolver::continue::unresolved-type - ✗ hashql-ast::lower::expander::import-resolver::continue::unresolved-value - ✗ hashql-ast::lower::expander::import-resolver::continue::use-not-found - ✗ hashql-ast::lower::expander::import-resolver::continue::unresolved-nested - ✗ hashql-ast::lower::expander::import-resolver::item-not-found ✗ hashql-ast::lower::expander::special-form-expander::access-2 - ✗ hashql-ast::lower::expander::special-form-expander::fn-params-type - ✗ hashql-ast::lower::expander::special-form-expander::use-struct-type - ✗ hashql-ast::lower::expander::special-form-expander::type-expr-invalid - ✗ hashql-ast::lower::expander::special-form-expander::fn-generics-tuple - ✗ hashql-ast::lower::expander::special-form-expander::use-glob-not-ident ✗ hashql-ast::lower::expander::special-form-expander::type-expr-call-union - ✗ hashql-ast::lower::expander::special-form-expander::input-3 ✗ hashql-ast::lower::expander::special-form-expander::index-2 - ✗ hashql-ast::lower::expander::special-form-expander::fn-4 - ✗ hashql-ast::lower::expander::special-form-expander::use-glob - ✗ hashql-ast::lower::expander::special-form-expander::fn-generics-tuple-literal - ✗ hashql-ast::lower::expander::special-form-expander::type-expr-struct - ✗ hashql-ast::lower::expander::special-form-expander::type-generic-constraint - ✗ hashql-ast::lower::expander::special-form-expander::use-tuple-literal - ✗ hashql-ast::lower::expander::special-form-expander::fn-generics-tuple-path - ✗ hashql-ast::lower::expander::special-form-expander::fn-generics-struct-type - ✗ hashql-ast::lower::expander::special-form-expander::fn-params-tuple - ✗ hashql-ast::lower::expander::special-form-expander::use-tuple-type - ✗ hashql-ast::lower::expander::special-form-expander::too-many-segments - ✗ hashql-ast::lower::expander::special-form-expander::fn-generics-struct-underscore - ✗ hashql-ast::lower::expander::special-form-expander::type-infer - ✗ hashql-ast::lower::expander::special-form-expander::as-2 - ✗ hashql-ast::lower::expander::special-form-expander::access-field-literal-type-annotation - ✗ hashql-ast::lower::expander::special-form-expander::fn-generics-duplicates - ✗ hashql-ast::lower::expander::special-form-expander::newtype-collect-all-errors - ✗ hashql-ast::lower::expander::special-form-expander::fn-params-duplicates - ✗ hashql-ast::lower::expander::special-form-expander::fn-generics-struct-literal - ✗ hashql-ast::lower::expander::special-form-expander::type-tuple-has-type - ✗ hashql-ast::lower::expander::special-form-expander::input-2 - ✗ hashql-ast::lower::expander::special-form-expander::type-unknown - ✗ hashql-ast::lower::expander::special-form-expander::type-generic-struct - ✗ hashql-ast::lower::expander::special-form-expander::use-tuple-path ✗ hashql-ast::lower::expander::special-form-expander::type-expr-call-not-path - ✗ hashql-ast::lower::expander::special-form-expander::unknown-special-form ✗ hashql-ast::lower::expander::special-form-expander::type-expr-call-intersection ✗ hashql-ast::lower::expander::special-form-expander::use-struct - ✗ hashql-ast::lower::expander::special-form-expander::use-struct-literal ✗ hashql-ast::lower::expander::special-form-expander::use-3 - ✗ hashql-ast::lower::expander::special-form-expander::type-generic-relative-path - ✗ hashql-ast::lower::expander::special-form-expander::type-generic-duplicate - ✗ hashql-ast::lower::expander::special-form-expander::fn-generics-literal - ✗ hashql-ast::lower::expander::special-form-expander::type-generic-generic-ident - ✗ hashql-ast::lower::expander::special-form-expander::use-struct-path - ✗ hashql-ast::lower::expander::special-form-expander::type-never - ✗ hashql-ast::lower::expander::special-form-expander::type-expr-tuple - ✗ hashql-ast::lower::expander::special-form-expander::use-tuple - ✗ hashql-ast::lower::expander::special-form-expander::let-argument-not-ident - ✗ hashql-ast::lower::expander::special-form-expander::type-struct-has-type - ✗ hashql-ast::lower::expander::special-form-expander::let-collect-all-errors - ✗ hashql-ast::lower::expander::special-form-expander::type-collect-all-errors ✗ hashql-ast::lower::expander::special-form-expander::access-field-literal-valid - ✗ hashql-ast::lower::expander::special-form-expander::unknown-special-form-typo - ✗ hashql-ast::lower::expander::special-form-expander::type-expr-call-arbitrary - ✗ hashql-ast::lower::expander::special-form-expander::not-enough-segments - ✗ hashql-ast::lower::expander::special-form-expander::generics - ✗ hashql-ast::lower::expander::special-form-expander::fn-generics-tuple-type - ✗ hashql-ast::lower::expander::special-form-expander::fn-generics-struct - ✗ hashql-ast::lower::expander::special-form-expander::type-3 - ✗ hashql-ast::lower::expander::pre-expansion-name-resolver::re-assign-prelude ✗ hashql-ast::lower::expander::pre-expansion-name-resolver::newtype-4 ✗ hashql-ast::lower::expander::pre-expansion-name-resolver::re-assign - ✗ hashql-ast::lower::expander::pre-expansion-name-resolver::let-absolute - ✗ hashql-ast::lower::expander::pre-expansion-name-resolver::nested-let - ✗ hashql-ast::lower::expander::pre-expansion-name-resolver::absolute-path ✗ hashql-ast::lower::expander::pre-expansion-name-resolver::newtype-3-alias - ✗ hashql-ast::lower::expander::pre-expansion-name-resolver::type-3-alias ✗ hashql-ast::lower::expander::pre-expansion-name-resolver::multi-segment-resolution - ✗ hashql-ast::lower::expander::pre-expansion-name-resolver::let-3-alias - ✗ hashql-ast::lower::expander::pre-expansion-name-resolver::newtype-3 - ✗ hashql-ast::lower::expander::pre-expansion-name-resolver::resolve-symbol ✗ hashql-ast::lower::expander::pre-expansion-name-resolver::type-4 - ✗ hashql-ast::lower::expander::pre-expansion-name-resolver::alias-symbol ✗ hashql-ast::lower::expander::pre-expansion-name-resolver::let-4-alias ✗ hashql-ast::lower::expander::pre-expansion-name-resolver::resolve-generics ✗ hashql-ast::lower::expander::pre-expansion-name-resolver::invalid-let-expr - ✗ hashql-ast::lower::expander::pre-expansion-name-resolver::let-3 ✗ hashql-ast::lower::expander::pre-expansion-name-resolver::re-assign-prelude-diverging - ✗ hashql-ast::lower::expander::pre-expansion-name-resolver::let-4 - ✗ hashql-ast::lower::expander::pre-expansion-name-resolver::restoration-bindings ✗ hashql-ast::lower::expander::pre-expansion-name-resolver::let-ident-generic - ✗ hashql-ast::lower::type-extractor::definition::global-generic-constraint-too-many -118 of 534 tests failed. +37 of 534 tests failed. diff --git a/libs/@local/hashql/hir/tests/ui/lower/alias-replacement/generics.jsonc b/libs/@local/hashql/hir/tests/ui/lower/alias-replacement/generics.jsonc index 65ae8d27030..d865309f45a 100644 --- a/libs/@local/hashql/hir/tests/ui/lower/alias-replacement/generics.jsonc +++ b/libs/@local/hashql/hir/tests/ui/lower/alias-replacement/generics.jsonc @@ -1,3 +1,3 @@ //@ run: pass //@ description: Alias replacement with generics should work -["let", "foo", "core::math::add", ["let", "bar", "foo", "bar"]] +["let", "foo", "::core::math::add", ["let", "bar", "foo", "bar"]] diff --git a/libs/@local/hashql/hir/tests/ui/lower/checking/bind-arguments.jsonc b/libs/@local/hashql/hir/tests/ui/lower/checking/bind-arguments.jsonc index 749fee216f2..0ec04681e8a 100644 --- a/libs/@local/hashql/hir/tests/ui/lower/checking/bind-arguments.jsonc +++ b/libs/@local/hashql/hir/tests/ui/lower/checking/bind-arguments.jsonc @@ -1,3 +1,3 @@ //@ run: pass //@ description: Verifies type checking for binding specific types (Number, Integer) to a generic function call. -["`+`", { "#literal": 42.12 }, { "#literal": 42 }] +["::core::math::add", { "#literal": 42.12 }, { "#literal": 42 }] diff --git a/libs/@local/hashql/hir/tests/ui/lower/inference/bind-arguments.jsonc b/libs/@local/hashql/hir/tests/ui/lower/inference/bind-arguments.jsonc index a3e09ac8a7a..6344fb59bb6 100644 --- a/libs/@local/hashql/hir/tests/ui/lower/inference/bind-arguments.jsonc +++ b/libs/@local/hashql/hir/tests/ui/lower/inference/bind-arguments.jsonc @@ -1,3 +1,3 @@ //@ run: pass //@ description: Verifies type inference for explicitly binding generic arguments (Number, Integer) in a function call. -["`+`", { "#literal": 42.12 }, { "#literal": 42 }] +["::core::math::add", { "#literal": 42.12 }, { "#literal": 42 }] diff --git a/libs/@local/hashql/hir/tests/ui/lower/inference/infer-argument.jsonc b/libs/@local/hashql/hir/tests/ui/lower/inference/infer-argument.jsonc index 6700778b7d3..9cc8dc537f9 100644 --- a/libs/@local/hashql/hir/tests/ui/lower/inference/infer-argument.jsonc +++ b/libs/@local/hashql/hir/tests/ui/lower/inference/infer-argument.jsonc @@ -1,13 +1,15 @@ //@ run: pass //@ description: Test that inference in argument position works correctly -[ +["use", "::core::math", "*", [ - "fn", - { "#tuple": [] }, - { "#struct": { "lhs": "_", "rhs": "_" } }, - "_", - ["+", "lhs", "rhs"] - ], - { "#literal": 2 }, - { "#literal": 3 } + [ + "fn", + { "#tuple": [] }, + { "#struct": { "lhs": "_", "rhs": "_" } }, + "_", + ["+", "lhs", "rhs"] + ], + { "#literal": 2 }, + { "#literal": 3 } + ] ] diff --git a/libs/@local/hashql/hir/tests/ui/lower/specialization/collect-custom-collect.stderr b/libs/@local/hashql/hir/tests/ui/lower/specialization/collect-custom-collect.stderr index 64131abc98b..2c595489972 100644 --- a/libs/@local/hashql/hir/tests/ui/lower/specialization/collect-custom-collect.stderr +++ b/libs/@local/hashql/hir/tests/ui/lower/specialization/collect-custom-collect.stderr @@ -1,7 +1,34 @@ -error[lowering::expander::unresolved-variable]: Unresolved variable +error[type-check::bound-constraint-violation]: Type bound constraint violation ╭▸ -6 │ ["fn", { "#tuple": [] }, { "#struct": { "graph": "_" } }, "_", "graph"], - │ ━━━━━ cannot find `graph` in this scope +1 │ //@ run: fail + │ ─ Upper bound `::graph::Graph('marker: ?30)` is not a supertype of the lower bound + ‡ +6 │ ["fn", { "#tuple": [] }, { "#struct": { "graph": "_" } }, "_", {"#literal": 0}], + │ ┯ ─ Lower bound `Integer` must be a subtype of the upper bound + │ │ + │ Type variable has incompatible upper and lower bounds │ - ├ help: check the spelling, or import the name with a `use` statement - ╰ note: this could be a typo, a name used outside its scope, or a missing declaration; if it is a function or type from another module, you may need to import it first \ No newline at end of file + ├ help: These type bounds create an impossible constraint. To fix this: + │ 1. Modify `Integer` to be a proper subtype of `::graph::Graph('marker: ?30)` + │ 2. Or adjust `::graph::Graph('marker: ?30)` to be a supertype of `Integer` + │ 3. Or check your code for contradictory type assertions + ╰ note: During type inference, when a variable has both upper and lower bounds, the relationship 'lower <: upper' must hold. This ensures a valid solution exists in the type system. When this relationship is violated, it means your code is requiring contradictory types for the same variable. + +error[type-check::bound-constraint-violation]: Type bound constraint violation + ╭▸ +1 │ //@ run: fail + │ ─ Upper bound `::graph::Graph('marker: ?30)` is not a supertype of the lower bound + ‡ +5 │ ┏ [ +6 │ ┃ ["fn", { "#tuple": [] }, { "#struct": { "graph": "_" } }, "_", {"#literal": 0}], + │ ┃ ─ Lower bound `Integer` must be a subtype of the upper bound +7 │ ┃ //~^ ERROR This is not a graph intrinsic operation +8 │ ┃ ["::graph::head::entities", ["::graph::tmp::decision_time_now"]] +9 │ ┃ ] + │ ┗━━━┛ Type variable has incompatible upper and lower bounds + │ + ├ help: These type bounds create an impossible constraint. To fix this: + │ 1. Modify `Integer` to be a proper subtype of `::graph::Graph('marker: ?30)` + │ 2. Or adjust `::graph::Graph('marker: ?30)` to be a supertype of `Integer` + │ 3. Or check your code for contradictory type assertions + ╰ note: During type inference, when a variable has both upper and lower bounds, the relationship 'lower <: upper' must hold. This ensures a valid solution exists in the type system. When this relationship is violated, it means your code is requiring contradictory types for the same variable. \ No newline at end of file diff --git a/libs/@local/hashql/hir/tests/ui/reify/variable-generics.jsonc b/libs/@local/hashql/hir/tests/ui/reify/variable-generics.jsonc index e3be56b374d..12e9cf7103e 100644 --- a/libs/@local/hashql/hir/tests/ui/reify/variable-generics.jsonc +++ b/libs/@local/hashql/hir/tests/ui/reify/variable-generics.jsonc @@ -1,3 +1,3 @@ //@ run: pass //@ description: Tests reification of variables with generic type parameters. -"`+`" +"::core::math::add" From d850096f5e2395ecdcc69695f698d4cb773eda0d Mon Sep 17 00:00:00 2001 From: Bilal Mahmoud <7252775+indietyp@users.noreply.github.com> Date: Mon, 15 Jun 2026 16:22:38 +0200 Subject: [PATCH 37/55] feat: checkpoint --- libs/@local/hashql/hir/tests/ui/reify/variable-generics.jsonc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/libs/@local/hashql/hir/tests/ui/reify/variable-generics.jsonc b/libs/@local/hashql/hir/tests/ui/reify/variable-generics.jsonc index 12e9cf7103e..e3be56b374d 100644 --- a/libs/@local/hashql/hir/tests/ui/reify/variable-generics.jsonc +++ b/libs/@local/hashql/hir/tests/ui/reify/variable-generics.jsonc @@ -1,3 +1,3 @@ //@ run: pass //@ description: Tests reification of variables with generic type parameters. -"::core::math::add" +"`+`" From ad6d4eb3fea1bd76cbbf2656e0598b4bcebf2080 Mon Sep 17 00:00:00 2001 From: Bilal Mahmoud <7252775+indietyp@users.noreply.github.com> Date: Mon, 15 Jun 2026 17:07:43 +0200 Subject: [PATCH 38/55] fix: more tests --- .../generic-argument-use-path.jsonc | 4 +- .../generic-argument-use-path.stderr | 25 +--- .../invalid-let-expr.jsonc | 10 +- .../invalid-let-expr.stderr | 7 + .../invalid-let-expr.stdout | 39 ------ .../let-ident-generic.jsonc | 5 +- .../let-ident-generic.stderr | 7 + .../let-ident-generic.stdout | 45 ------ .../re-assign-prelude-diverging.jsonc | 9 +- .../re-assign-prelude-diverging.stdout | 129 ++++++------------ .../resolve-generics.jsonc | 4 +- .../resolve-generics.stderr | 6 + .../resolve-generics.stdout | 17 --- .../ui/lower/name-mangler/absolute-path.jsonc | 2 +- .../lower/name-mangler/absolute-path.stdout | 29 +++- .../lower/name-mangler/path-arguments.stdout | 6 +- .../tests/ui/lower/name-mangler/path.jsonc | 2 +- .../tests/ui/lower/name-mangler/path.stdout | 18 +-- .../type-generics-constraints.jsonc | 2 +- .../type-generics-constraints.stdout | 10 +- .../tests/ui/lower/sanitizer/constraint.jsonc | 2 +- libs/@local/hashql/core/src/symbol/sym.rs | 8 +- libs/@local/hashql/core/src/sync/lock.rs | 1 + .../collect-custom-collect.stderr | 37 +---- 24 files changed, 133 insertions(+), 291 deletions(-) create mode 100644 libs/@local/hashql/ast/tests/ui/lower/expander/pre-expansion-name-resolver/invalid-let-expr.stderr delete mode 100644 libs/@local/hashql/ast/tests/ui/lower/expander/pre-expansion-name-resolver/invalid-let-expr.stdout create mode 100644 libs/@local/hashql/ast/tests/ui/lower/expander/pre-expansion-name-resolver/let-ident-generic.stderr delete mode 100644 libs/@local/hashql/ast/tests/ui/lower/expander/pre-expansion-name-resolver/let-ident-generic.stdout create mode 100644 libs/@local/hashql/ast/tests/ui/lower/expander/pre-expansion-name-resolver/resolve-generics.stderr delete mode 100644 libs/@local/hashql/ast/tests/ui/lower/expander/pre-expansion-name-resolver/resolve-generics.stdout diff --git a/libs/@local/hashql/ast/tests/ui/lower/expander/import-resolver/generic-argument-use-path.jsonc b/libs/@local/hashql/ast/tests/ui/lower/expander/import-resolver/generic-argument-use-path.jsonc index 7994f3a5442..5220c72d56f 100644 --- a/libs/@local/hashql/ast/tests/ui/lower/expander/import-resolver/generic-argument-use-path.jsonc +++ b/libs/@local/hashql/ast/tests/ui/lower/expander/import-resolver/generic-argument-use-path.jsonc @@ -1,4 +1,4 @@ //@ run: fail //@ description: Tests that generic arguments in 'use' statements are rejected with appropriate error -["use", "kernel::type", { "#tuple": ["T"] }, "_"] -//~^ ERROR cannot find `T` in module `kernel::type` +["use", "kernel::type", { "#tuple": ["Union"] }, "_"] +//~^ ERROR generic arguments are not allowed in `use` paths diff --git a/libs/@local/hashql/ast/tests/ui/lower/expander/import-resolver/generic-argument-use-path.stderr b/libs/@local/hashql/ast/tests/ui/lower/expander/import-resolver/generic-argument-use-path.stderr index d6ad5d7c7e1..c7bbe43a8b0 100644 --- a/libs/@local/hashql/ast/tests/ui/lower/expander/import-resolver/generic-argument-use-path.stderr +++ b/libs/@local/hashql/ast/tests/ui/lower/expander/import-resolver/generic-argument-use-path.stderr @@ -1,29 +1,6 @@ -error[expander::item-not-found]: Item not found - ╭▸ -3 │ ["use", "kernel::type", { "#tuple": ["T"] }, "_"] - │ ──── looked in this module ━ cannot find `T` in module `kernel::type` - ╰╴ -help: a similar item exists in this module - ╭╴ -3 - ["use", "kernel::type", { "#tuple": ["T"] }, "_"] -3 + ["use", "kernel::type", { "#tuple": ["Number"] }, "_"] - ├╴ -3 - ["use", "kernel::type", { "#tuple": ["T"] }, "_"] -3 + ["use", "kernel::type", { "#tuple": ["String"] }, "_"] - ├╴ -3 - ["use", "kernel::type", { "#tuple": ["T"] }, "_"] -3 + ["use", "kernel::type", { "#tuple": ["Union"] }, "_"] - ├╴ -3 - ["use", "kernel::type", { "#tuple": ["T"] }, "_"] -3 + ["use", "kernel::type", { "#tuple": ["Unknown"] }, "_"] - ├╴ -3 - ["use", "kernel::type", { "#tuple": ["T"] }, "_"] -3 + ["use", "kernel::type", { "#tuple": ["|"] }, "_"] - ╰╴ - error[expander::use-path-generic-arguments]: Generic arguments in use path ╭▸ -3 │ ["use", "kernel::type", { "#tuple": ["T"] }, "_"] +3 │ ["use", "kernel::type", { "#tuple": ["Union"] }, "_"] │ ━━━━━━━━━━━━━━━━━━━━━ generic arguments are not allowed in `use` paths │ ╰ help: remove the generic arguments; `use` imports modules and items, which do not take type parameters at the import site \ No newline at end of file diff --git a/libs/@local/hashql/ast/tests/ui/lower/expander/pre-expansion-name-resolver/invalid-let-expr.jsonc b/libs/@local/hashql/ast/tests/ui/lower/expander/pre-expansion-name-resolver/invalid-let-expr.jsonc index 60e8bcca587..1e6124681c8 100644 --- a/libs/@local/hashql/ast/tests/ui/lower/expander/pre-expansion-name-resolver/invalid-let-expr.jsonc +++ b/libs/@local/hashql/ast/tests/ui/lower/expander/pre-expansion-name-resolver/invalid-let-expr.jsonc @@ -1,3 +1,9 @@ -//@ run: pass +//@ run: fail //@ description: Test let expression with non-path target is not treated specially -["let", ["+", {"#literal": 1}, {"#literal": 2}], {"#literal": 3}, {"#literal": 4}] +[ + "let", + ["+", { "#literal": 1 }, { "#literal": 2 }], + //~^ ERROR expected a simple identifier for the `let` binding name + { "#literal": 3 }, + { "#literal": 4 } +] diff --git a/libs/@local/hashql/ast/tests/ui/lower/expander/pre-expansion-name-resolver/invalid-let-expr.stderr b/libs/@local/hashql/ast/tests/ui/lower/expander/pre-expansion-name-resolver/invalid-let-expr.stderr new file mode 100644 index 00000000000..91bcf496a96 --- /dev/null +++ b/libs/@local/hashql/ast/tests/ui/lower/expander/pre-expansion-name-resolver/invalid-let-expr.stderr @@ -0,0 +1,7 @@ +error[expander::invalid-binding-name]: Invalid binding name + ╭▸ +5 │ ["+", { "#literal": 1 }, { "#literal": 2 }], + │ ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ expected a simple identifier for the `let` binding name + │ + ├ help: write `(let name value body)` with a plain name such as `x` + ╰ note: the first argument to `let` introduces a new local binding and must be a plain identifier without path qualification or generic arguments \ No newline at end of file diff --git a/libs/@local/hashql/ast/tests/ui/lower/expander/pre-expansion-name-resolver/invalid-let-expr.stdout b/libs/@local/hashql/ast/tests/ui/lower/expander/pre-expansion-name-resolver/invalid-let-expr.stdout deleted file mode 100644 index b733d7ff4d9..00000000000 --- a/libs/@local/hashql/ast/tests/ui/lower/expander/pre-expansion-name-resolver/invalid-let-expr.stdout +++ /dev/null @@ -1,39 +0,0 @@ -Expr#4294967040@25 - ExprKind (Call) - CallExpr#4294967040@25 - Expr#4294967040@3 - ExprKind (Path) - Path#4294967040@3 (rooted: true) - PathSegment#4294967040@2 (name: kernel) - PathSegment#4294967040@2 (name: special_form) - PathSegment#4294967040@2 (name: let) - Argument#4294967040@16 - Expr#4294967040@16 - ExprKind (Call) - CallExpr#4294967040@16 - Expr#4294967040@7 - ExprKind (Path) - Path#4294967040@7 (rooted: true) - PathSegment#4294967040@6 (name: core) - PathSegment#4294967040@6 (name: math) - PathSegment#4294967040@6 (name: add) - Argument#4294967040@11 - Expr#4294967040@11 - ExprKind (Path) - Path#4294967040@11 (rooted: false) - PathSegment#4294967040@10 (name: a) - Argument#4294967040@15 - Expr#4294967040@15 - ExprKind (Path) - Path#4294967040@15 (rooted: false) - PathSegment#4294967040@14 (name: b) - Argument#4294967040@20 - Expr#4294967040@20 - ExprKind (Path) - Path#4294967040@20 (rooted: false) - PathSegment#4294967040@19 (name: c) - Argument#4294967040@24 - Expr#4294967040@24 - ExprKind (Path) - Path#4294967040@24 (rooted: false) - PathSegment#4294967040@23 (name: body) diff --git a/libs/@local/hashql/ast/tests/ui/lower/expander/pre-expansion-name-resolver/let-ident-generic.jsonc b/libs/@local/hashql/ast/tests/ui/lower/expander/pre-expansion-name-resolver/let-ident-generic.jsonc index fb10655f6df..0a0cb4b74c9 100644 --- a/libs/@local/hashql/ast/tests/ui/lower/expander/pre-expansion-name-resolver/let-ident-generic.jsonc +++ b/libs/@local/hashql/ast/tests/ui/lower/expander/pre-expansion-name-resolver/let-ident-generic.jsonc @@ -1,3 +1,4 @@ -//@ run: pass +//@ run: fail //@ description: if the first argument cannot be interpreted as an ident, do nothing -["let", "a", {"#literal": 0}, {"#literal": 0}] +["let", "a", { "#literal": 0 }, { "#literal": 0 }] +//~^ ERROR expected a simple identifier for the `let` binding name diff --git a/libs/@local/hashql/ast/tests/ui/lower/expander/pre-expansion-name-resolver/let-ident-generic.stderr b/libs/@local/hashql/ast/tests/ui/lower/expander/pre-expansion-name-resolver/let-ident-generic.stderr new file mode 100644 index 00000000000..02029e90c7d --- /dev/null +++ b/libs/@local/hashql/ast/tests/ui/lower/expander/pre-expansion-name-resolver/let-ident-generic.stderr @@ -0,0 +1,7 @@ +error[expander::invalid-binding-name]: Invalid binding name + ╭▸ +3 │ ["let", "a", { "#literal": 0 }, { "#literal": 0 }] + │ ━━━━ expected a simple identifier for the `let` binding name + │ + ├ help: write `(let name value body)` with a plain name such as `x` + ╰ note: the first argument to `let` introduces a new local binding and must be a plain identifier without path qualification or generic arguments \ No newline at end of file diff --git a/libs/@local/hashql/ast/tests/ui/lower/expander/pre-expansion-name-resolver/let-ident-generic.stdout b/libs/@local/hashql/ast/tests/ui/lower/expander/pre-expansion-name-resolver/let-ident-generic.stdout deleted file mode 100644 index 03e08b2113a..00000000000 --- a/libs/@local/hashql/ast/tests/ui/lower/expander/pre-expansion-name-resolver/let-ident-generic.stdout +++ /dev/null @@ -1,45 +0,0 @@ -Expr#4294967040@30 - ExprKind (Call) - CallExpr#4294967040@30 - Expr#4294967040@3 - ExprKind (Path) - Path#4294967040@3 (rooted: true) - PathSegment#4294967040@2 (name: kernel) - PathSegment#4294967040@2 (name: special_form) - PathSegment#4294967040@2 (name: let) - Argument#4294967040@12 - Expr#4294967040@12 - ExprKind (Path) - Path#4294967040@12 (rooted: false) - PathSegment#4294967040@11 (name: a) - PathSegmentArgument (GenericArgument) - GenericArgument#4294967040@10 - Type#4294967040@9 - TypeKind (Path) - Path#4294967040@9 (rooted: false) - PathSegment#4294967040@8 (name: T) - Argument#4294967040@16 - Expr#4294967040@16 - ExprKind (Path) - Path#4294967040@16 (rooted: false) - PathSegment#4294967040@15 (name: b) - Argument#4294967040@29 - Expr#4294967040@29 - ExprKind (Call) - CallExpr#4294967040@29 - Expr#4294967040@20 - ExprKind (Path) - Path#4294967040@20 (rooted: true) - PathSegment#4294967040@19 (name: core) - PathSegment#4294967040@19 (name: math) - PathSegment#4294967040@19 (name: add) - Argument#4294967040@24 - Expr#4294967040@24 - ExprKind (Path) - Path#4294967040@24 (rooted: false) - PathSegment#4294967040@23 (name: a) - Argument#4294967040@28 - Expr#4294967040@28 - ExprKind (Path) - Path#4294967040@28 (rooted: false) - PathSegment#4294967040@27 (name: c) diff --git a/libs/@local/hashql/ast/tests/ui/lower/expander/pre-expansion-name-resolver/re-assign-prelude-diverging.jsonc b/libs/@local/hashql/ast/tests/ui/lower/expander/pre-expansion-name-resolver/re-assign-prelude-diverging.jsonc index 0fa918d61d5..adb937582f1 100644 --- a/libs/@local/hashql/ast/tests/ui/lower/expander/pre-expansion-name-resolver/re-assign-prelude-diverging.jsonc +++ b/libs/@local/hashql/ast/tests/ui/lower/expander/pre-expansion-name-resolver/re-assign-prelude-diverging.jsonc @@ -3,11 +3,6 @@ [ "if", { "#literal": true }, - [ - "let", - "let", - ["+", { "#literal": 1 }, { "#literal": 2 }], - ["let", "a", "b"] - ], - ["let", "a", "b"] + ["let", "let", "+", ["let", { "#literal": 1 }, { "#literal": 2 }]], + ["let", "a", { "#literal": 0 }, "a"] ] diff --git a/libs/@local/hashql/ast/tests/ui/lower/expander/pre-expansion-name-resolver/re-assign-prelude-diverging.stdout b/libs/@local/hashql/ast/tests/ui/lower/expander/pre-expansion-name-resolver/re-assign-prelude-diverging.stdout index 49681abda92..3241f66d218 100644 --- a/libs/@local/hashql/ast/tests/ui/lower/expander/pre-expansion-name-resolver/re-assign-prelude-diverging.stdout +++ b/libs/@local/hashql/ast/tests/ui/lower/expander/pre-expansion-name-resolver/re-assign-prelude-diverging.stdout @@ -1,89 +1,40 @@ -Expr#4294967040@50 - ExprKind (Call) - CallExpr#4294967040@50 - Expr#4294967040@3 - ExprKind (Path) - Path#4294967040@3 (rooted: true) - PathSegment#4294967040@2 (name: kernel) - PathSegment#4294967040@2 (name: special_form) - PathSegment#4294967040@2 (name: if) - Argument#4294967040@5 - Expr#4294967040@5 - ExprKind (Literal) - LiteralExpr#4294967040@4 - Primitive (True) - Argument#4294967040@36 - Expr#4294967040@36 - ExprKind (Call) - CallExpr#4294967040@36 - Expr#4294967040@9 - ExprKind (Path) - Path#4294967040@9 (rooted: true) - PathSegment#4294967040@8 (name: kernel) - PathSegment#4294967040@8 (name: special_form) - PathSegment#4294967040@8 (name: let) - Argument#4294967040@13 - Expr#4294967040@13 - ExprKind (Path) - Path#4294967040@13 (rooted: false) - PathSegment#4294967040@12 (name: let) - Argument#4294967040@22 - Expr#4294967040@22 - ExprKind (Call) - CallExpr#4294967040@22 - Expr#4294967040@17 - ExprKind (Path) - Path#4294967040@17 (rooted: true) - PathSegment#4294967040@16 (name: core) - PathSegment#4294967040@16 (name: math) - PathSegment#4294967040@16 (name: add) - Argument#4294967040@19 - Expr#4294967040@19 - ExprKind (Literal) - LiteralExpr#4294967040@18 - Primitive (Integer) - Integer (1) - Argument#4294967040@21 - Expr#4294967040@21 - ExprKind (Literal) - LiteralExpr#4294967040@20 - Primitive (Integer) - Integer (2) - Argument#4294967040@35 - Expr#4294967040@35 - ExprKind (Call) - CallExpr#4294967040@35 - Expr#4294967040@26 - ExprKind (Path) - Path#4294967040@26 (rooted: false) - PathSegment#4294967040@25 (name: let) - Argument#4294967040@30 - Expr#4294967040@30 - ExprKind (Path) - Path#4294967040@30 (rooted: false) - PathSegment#4294967040@29 (name: a) - Argument#4294967040@34 - Expr#4294967040@34 - ExprKind (Path) - Path#4294967040@34 (rooted: false) - PathSegment#4294967040@33 (name: b) - Argument#4294967040@49 - Expr#4294967040@49 - ExprKind (Call) - CallExpr#4294967040@49 - Expr#4294967040@40 - ExprKind (Path) - Path#4294967040@40 (rooted: true) - PathSegment#4294967040@39 (name: kernel) - PathSegment#4294967040@39 (name: special_form) - PathSegment#4294967040@39 (name: let) - Argument#4294967040@44 - Expr#4294967040@44 - ExprKind (Path) - Path#4294967040@44 (rooted: false) - PathSegment#4294967040@43 (name: a) - Argument#4294967040@48 - Expr#4294967040@48 - ExprKind (Path) - Path#4294967040@48 (rooted: false) - PathSegment#4294967040@47 (name: b) +Expr#4294967040@43 + ExprKind (If) + IfExpr#4294967040@43 + Expr#4294967040@5 + ExprKind (Literal) + LiteralExpr#4294967040@4 + Primitive (True) + Expr#4294967040@26 + ExprKind (Call) + CallExpr#4294967040@26 + Expr#4294967040@21 + ExprKind (Path) + Path#4294967040@21 (rooted: true) + PathSegment#4294967040@20 (name: core) + PathSegment#4294967040@20 (name: math) + PathSegment#4294967040@20 (name: add) + Argument#4294967040@23 + Expr#4294967040@23 + ExprKind (Literal) + LiteralExpr#4294967040@22 + Primitive (Integer) + Integer (1) + Argument#4294967040@25 + Expr#4294967040@25 + ExprKind (Literal) + LiteralExpr#4294967040@24 + Primitive (Integer) + Integer (2) + Expr#4294967040@42 + ExprKind (Let) + LetExpr#4294967040@42 (name: a) + Expr#4294967040@37 + ExprKind (Literal) + LiteralExpr#4294967040@36 + Primitive (Integer) + Integer (0) + Expr#4294967040@41 + ExprKind (Path) + Path#4294967040@41 (rooted: false) + PathSegment#4294967040@40 (name: a) diff --git a/libs/@local/hashql/ast/tests/ui/lower/expander/pre-expansion-name-resolver/resolve-generics.jsonc b/libs/@local/hashql/ast/tests/ui/lower/expander/pre-expansion-name-resolver/resolve-generics.jsonc index 93791049032..582e530c74a 100644 --- a/libs/@local/hashql/ast/tests/ui/lower/expander/pre-expansion-name-resolver/resolve-generics.jsonc +++ b/libs/@local/hashql/ast/tests/ui/lower/expander/pre-expansion-name-resolver/resolve-generics.jsonc @@ -1,3 +1,3 @@ -//@ run: pass +//@ run: fail //@ description: Test that generic arguments are resolved correctly -["`+`<`-`>"] +["`+`"] diff --git a/libs/@local/hashql/ast/tests/ui/lower/expander/pre-expansion-name-resolver/resolve-generics.stderr b/libs/@local/hashql/ast/tests/ui/lower/expander/pre-expansion-name-resolver/resolve-generics.stderr new file mode 100644 index 00000000000..24a8c972417 --- /dev/null +++ b/libs/@local/hashql/ast/tests/ui/lower/expander/pre-expansion-name-resolver/resolve-generics.stderr @@ -0,0 +1,6 @@ +error[expander::intrinsic-generic-arguments]: Generic arguments on intrinsic + ╭▸ +3 │ ["`+`"] + │ ━━━━━━━━━━━━ `+` does not accept generic arguments + │ + ╰ help: remove the generic arguments from `+` \ No newline at end of file diff --git a/libs/@local/hashql/ast/tests/ui/lower/expander/pre-expansion-name-resolver/resolve-generics.stdout b/libs/@local/hashql/ast/tests/ui/lower/expander/pre-expansion-name-resolver/resolve-generics.stdout deleted file mode 100644 index cce3d843ef4..00000000000 --- a/libs/@local/hashql/ast/tests/ui/lower/expander/pre-expansion-name-resolver/resolve-generics.stdout +++ /dev/null @@ -1,17 +0,0 @@ -Expr#4294967040@9 - ExprKind (Call) - CallExpr#4294967040@9 - Expr#4294967040@8 - ExprKind (Path) - Path#4294967040@8 (rooted: true) - PathSegment#4294967040@7 (name: core) - PathSegment#4294967040@7 (name: math) - PathSegment#4294967040@7 (name: add) - PathSegmentArgument (GenericArgument) - GenericArgument#4294967040@6 - Type#4294967040@5 - TypeKind (Path) - Path#4294967040@5 (rooted: true) - PathSegment#4294967040@4 (name: core) - PathSegment#4294967040@4 (name: math) - PathSegment#4294967040@4 (name: sub) diff --git a/libs/@local/hashql/ast/tests/ui/lower/name-mangler/absolute-path.jsonc b/libs/@local/hashql/ast/tests/ui/lower/name-mangler/absolute-path.jsonc index 7566ff7708d..6765a6a9f09 100644 --- a/libs/@local/hashql/ast/tests/ui/lower/name-mangler/absolute-path.jsonc +++ b/libs/@local/hashql/ast/tests/ui/lower/name-mangler/absolute-path.jsonc @@ -1,3 +1,3 @@ //@ run: pass //@ description: Absolute paths should stay unchanged. -["let", "a", { "#literal": 2 }, "::a"] +["let", "add", { "#literal": 2 }, ["::core::math::add", { "#literal": 1 }, { "#literal": 3 }]] diff --git a/libs/@local/hashql/ast/tests/ui/lower/name-mangler/absolute-path.stdout b/libs/@local/hashql/ast/tests/ui/lower/name-mangler/absolute-path.stdout index 73484e71eed..b45530ab13d 100644 --- a/libs/@local/hashql/ast/tests/ui/lower/name-mangler/absolute-path.stdout +++ b/libs/@local/hashql/ast/tests/ui/lower/name-mangler/absolute-path.stdout @@ -1,12 +1,29 @@ -Expr#4294967040@14 +Expr#4294967040@23 ExprKind (Let) - LetExpr#4294967040@14 (name: a:0) + LetExpr#4294967040@23 (name: add:0) Expr#4294967040@9 ExprKind (Literal) LiteralExpr#4294967040@8 Primitive (Integer) Integer (2) - Expr#4294967040@13 - ExprKind (Path) - Path#4294967040@13 (rooted: true) - PathSegment#4294967040@12 (name: a) + Expr#4294967040@22 + ExprKind (Call) + CallExpr#4294967040@22 + Expr#4294967040@17 + ExprKind (Path) + Path#4294967040@17 (rooted: true) + PathSegment#4294967040@12 (name: core) + PathSegment#4294967040@14 (name: math) + PathSegment#4294967040@16 (name: add) + Argument#4294967040@19 + Expr#4294967040@19 + ExprKind (Literal) + LiteralExpr#4294967040@18 + Primitive (Integer) + Integer (1) + Argument#4294967040@21 + Expr#4294967040@21 + ExprKind (Literal) + LiteralExpr#4294967040@20 + Primitive (Integer) + Integer (3) diff --git a/libs/@local/hashql/ast/tests/ui/lower/name-mangler/path-arguments.stdout b/libs/@local/hashql/ast/tests/ui/lower/name-mangler/path-arguments.stdout index f60fbbedd2a..5ac40c2846b 100644 --- a/libs/@local/hashql/ast/tests/ui/lower/name-mangler/path-arguments.stdout +++ b/libs/@local/hashql/ast/tests/ui/lower/name-mangler/path-arguments.stdout @@ -14,5 +14,7 @@ Expr#4294967040@19 GenericArgument#4294967040@16 Type#4294967040@15 TypeKind (Path) - Path#4294967040@15 (rooted: false) - PathSegment#4294967040@14 (name: T) + Path#4294967040@15 (rooted: true) + PathSegment#4294967040@14 (name: kernel) + PathSegment#4294967040@14 (name: type) + PathSegment#4294967040@14 (name: Integer) diff --git a/libs/@local/hashql/ast/tests/ui/lower/name-mangler/path.jsonc b/libs/@local/hashql/ast/tests/ui/lower/name-mangler/path.jsonc index 0ec919e367a..459f3223322 100644 --- a/libs/@local/hashql/ast/tests/ui/lower/name-mangler/path.jsonc +++ b/libs/@local/hashql/ast/tests/ui/lower/name-mangler/path.jsonc @@ -1,3 +1,3 @@ //@ run: pass //@ description: non-rooted paths should change. -["let", "a", { "#literal": 2 }, "core::math"] +["use", "core::math", "*", { "#literal": 0 }] diff --git a/libs/@local/hashql/ast/tests/ui/lower/name-mangler/path.stdout b/libs/@local/hashql/ast/tests/ui/lower/name-mangler/path.stdout index 9b063d178cd..566a6798742 100644 --- a/libs/@local/hashql/ast/tests/ui/lower/name-mangler/path.stdout +++ b/libs/@local/hashql/ast/tests/ui/lower/name-mangler/path.stdout @@ -1,13 +1,5 @@ -Expr#4294967040@16 - ExprKind (Let) - LetExpr#4294967040@16 (name: a:0) - Expr#4294967040@9 - ExprKind (Literal) - LiteralExpr#4294967040@8 - Primitive (Integer) - Integer (2) - Expr#4294967040@15 - ExprKind (Path) - Path#4294967040@15 (rooted: false) - PathSegment#4294967040@12 (name: a:0) - PathSegment#4294967040@14 (name: b) +Expr#4294967040@15 + ExprKind (Literal) + LiteralExpr#4294967040@14 + Primitive (Integer) + Integer (0) diff --git a/libs/@local/hashql/ast/tests/ui/lower/name-mangler/type-generics-constraints.jsonc b/libs/@local/hashql/ast/tests/ui/lower/name-mangler/type-generics-constraints.jsonc index 334703cf932..1e8e25ae447 100644 --- a/libs/@local/hashql/ast/tests/ui/lower/name-mangler/type-generics-constraints.jsonc +++ b/libs/@local/hashql/ast/tests/ui/lower/name-mangler/type-generics-constraints.jsonc @@ -1,3 +1,3 @@ //@ run: pass //@ description: mangle the name of the generics with constraints -["type", "Foo", { "#struct": { "foo": "Bar" } }, "_"] +["type", "Foo", { "#struct": { "foo": "Bar" } }, "_"] diff --git a/libs/@local/hashql/ast/tests/ui/lower/name-mangler/type-generics-constraints.stdout b/libs/@local/hashql/ast/tests/ui/lower/name-mangler/type-generics-constraints.stdout index 36a975f6701..49e553d4fb6 100644 --- a/libs/@local/hashql/ast/tests/ui/lower/name-mangler/type-generics-constraints.stdout +++ b/libs/@local/hashql/ast/tests/ui/lower/name-mangler/type-generics-constraints.stdout @@ -4,11 +4,13 @@ Expr#4294967040@24 GenericConstraint#4294967040@10 (name: Bar:0) Type#4294967040@9 TypeKind (Path) - Path#4294967040@9 (rooted: false) - PathSegment#4294967040@8 (name: Baz) - Type#4294967040@20 + Path#4294967040@9 (rooted: true) + PathSegment#4294967040@8 (name: kernel) + PathSegment#4294967040@8 (name: type) + PathSegment#4294967040@8 (name: Integer) + Type#4294967040@21 TypeKind (Struct) - StructType#4294967040@20 + StructType#4294967040@21 StructField#4294967040@19 (name: foo) Type#4294967040@18 TypeKind (Path) diff --git a/libs/@local/hashql/ast/tests/ui/lower/sanitizer/constraint.jsonc b/libs/@local/hashql/ast/tests/ui/lower/sanitizer/constraint.jsonc index 3f0f9c72590..e8440a7fb98 100644 --- a/libs/@local/hashql/ast/tests/ui/lower/sanitizer/constraint.jsonc +++ b/libs/@local/hashql/ast/tests/ui/lower/sanitizer/constraint.jsonc @@ -2,7 +2,7 @@ //@ description: Generic constraints with bounds should be sanitized and error out [ "`+`", - //~^ ERROR `add` does not accept generic arguments + //~^ ERROR `+` does not accept generic arguments { "#literal": 1 }, { "#literal": 2 } ] diff --git a/libs/@local/hashql/core/src/symbol/sym.rs b/libs/@local/hashql/core/src/symbol/sym.rs index d6cfadfcb59..965711af38f 100644 --- a/libs/@local/hashql/core/src/symbol/sym.rs +++ b/libs/@local/hashql/core/src/symbol/sym.rs @@ -1,4 +1,10 @@ -#![expect(non_upper_case_globals, non_snake_case, clippy::min_ident_chars)] +#![expect( + non_upper_case_globals, + non_snake_case, + clippy::min_ident_chars, + clippy::non_ascii_literal, + unused_imports +)] use super::Symbol; hashql_macros::define_symbols! { diff --git a/libs/@local/hashql/core/src/sync/lock.rs b/libs/@local/hashql/core/src/sync/lock.rs index 873634dfe54..56856249fb1 100644 --- a/libs/@local/hashql/core/src/sync/lock.rs +++ b/libs/@local/hashql/core/src/sync/lock.rs @@ -175,6 +175,7 @@ enum LockGuardInner<'lock, T, L: LockType> { /// /// assert_eq!(lock.lock().len(), 4); /// ``` +#[clippy::has_significant_drop] pub struct LockGuard<'lock, T, L: LockType> { inner: LockGuardInner<'lock, T, L>, } diff --git a/libs/@local/hashql/hir/tests/ui/lower/specialization/collect-custom-collect.stderr b/libs/@local/hashql/hir/tests/ui/lower/specialization/collect-custom-collect.stderr index 2c595489972..64131abc98b 100644 --- a/libs/@local/hashql/hir/tests/ui/lower/specialization/collect-custom-collect.stderr +++ b/libs/@local/hashql/hir/tests/ui/lower/specialization/collect-custom-collect.stderr @@ -1,34 +1,7 @@ -error[type-check::bound-constraint-violation]: Type bound constraint violation +error[lowering::expander::unresolved-variable]: Unresolved variable ╭▸ -1 │ //@ run: fail - │ ─ Upper bound `::graph::Graph('marker: ?30)` is not a supertype of the lower bound - ‡ -6 │ ["fn", { "#tuple": [] }, { "#struct": { "graph": "_" } }, "_", {"#literal": 0}], - │ ┯ ─ Lower bound `Integer` must be a subtype of the upper bound - │ │ - │ Type variable has incompatible upper and lower bounds +6 │ ["fn", { "#tuple": [] }, { "#struct": { "graph": "_" } }, "_", "graph"], + │ ━━━━━ cannot find `graph` in this scope │ - ├ help: These type bounds create an impossible constraint. To fix this: - │ 1. Modify `Integer` to be a proper subtype of `::graph::Graph('marker: ?30)` - │ 2. Or adjust `::graph::Graph('marker: ?30)` to be a supertype of `Integer` - │ 3. Or check your code for contradictory type assertions - ╰ note: During type inference, when a variable has both upper and lower bounds, the relationship 'lower <: upper' must hold. This ensures a valid solution exists in the type system. When this relationship is violated, it means your code is requiring contradictory types for the same variable. - -error[type-check::bound-constraint-violation]: Type bound constraint violation - ╭▸ -1 │ //@ run: fail - │ ─ Upper bound `::graph::Graph('marker: ?30)` is not a supertype of the lower bound - ‡ -5 │ ┏ [ -6 │ ┃ ["fn", { "#tuple": [] }, { "#struct": { "graph": "_" } }, "_", {"#literal": 0}], - │ ┃ ─ Lower bound `Integer` must be a subtype of the upper bound -7 │ ┃ //~^ ERROR This is not a graph intrinsic operation -8 │ ┃ ["::graph::head::entities", ["::graph::tmp::decision_time_now"]] -9 │ ┃ ] - │ ┗━━━┛ Type variable has incompatible upper and lower bounds - │ - ├ help: These type bounds create an impossible constraint. To fix this: - │ 1. Modify `Integer` to be a proper subtype of `::graph::Graph('marker: ?30)` - │ 2. Or adjust `::graph::Graph('marker: ?30)` to be a supertype of `Integer` - │ 3. Or check your code for contradictory type assertions - ╰ note: During type inference, when a variable has both upper and lower bounds, the relationship 'lower <: upper' must hold. This ensures a valid solution exists in the type system. When this relationship is violated, it means your code is requiring contradictory types for the same variable. \ No newline at end of file + ├ help: check the spelling, or import the name with a `use` statement + ╰ note: this could be a typo, a name used outside its scope, or a missing declaration; if it is a function or type from another module, you may need to import it first \ No newline at end of file From fa2ff89038b2f3dc05d1a59ec03e05e0dcaee9d3 Mon Sep 17 00:00:00 2001 From: Bilal Mahmoud <7252775+indietyp@users.noreply.github.com> Date: Mon, 15 Jun 2026 17:31:55 +0200 Subject: [PATCH 39/55] feat: checkpoint --- .../hashql/ast/src/lower/expander/mod.rs | 55 ++++++- .../ui/lower/sanitizer/constraint.stderr | 7 +- libs/@local/hashql/core/src/module/mod.rs | 2 +- .../lower/alias-replacement/generics.stdout | 7 +- .../inference/bind-arguments-explicit.jsonc | 2 +- .../inference/bind-arguments-explicit.stderr | 16 ++- .../ui/lower/inference/infer-argument.stdout | 12 +- .../collect-custom-collect.stderr | 136 +++++++++++++++++- 8 files changed, 210 insertions(+), 27 deletions(-) diff --git a/libs/@local/hashql/ast/src/lower/expander/mod.rs b/libs/@local/hashql/ast/src/lower/expander/mod.rs index fd41e8a0cb1..d0787e89f32 100644 --- a/libs/@local/hashql/ast/src/lower/expander/mod.rs +++ b/libs/@local/hashql/ast/src/lower/expander/mod.rs @@ -36,7 +36,7 @@ use self::{ newtype::lower_newtype, r#type::lower_type, r#use::lower_use, }; use crate::{ - node::{self, id::NodeId}, + node::{self, expr::CallExpr, id::NodeId}, visit::{self, Visitor}, }; @@ -98,10 +98,41 @@ pub struct Expander<'env, 'heap, S> { current_item: Option>, trampoline: Option>, + special_form_module: module::ModuleId, } impl<'env, 'heap, S> Expander<'env, 'heap, S> { - pub const fn new(namespace: ModuleNamespace<'env, 'heap>, scratch: S) -> Self { + /// Creates a new [`Expander`] with the given namespace and scratch space. + /// + /// # Panics + /// + /// Panics if the standard library does not contain the kernel module. + pub fn new(mut namespace: ModuleNamespace<'env, 'heap>, scratch: S) -> Self { + // First we need to find the special form module, this is used during resolution to forbid + // the use of generics attached to them. + let kernel_module = namespace + .registry() + .find_by_name(sym::kernel) + .unwrap_or_else(|| { + namespace.import_prelude(); + + namespace + .registry() + .find_by_name(sym::kernel) + .expect("prelude should have been loaded and include the kernel") + }); + + let Some(&Item { + kind: ItemKind::Module(special_form_module), + .. + }) = kernel_module + .items + .iter() + .find(|item| item.name == sym::special_form) + else { + panic!("kernel module does not contain the special form item"); + }; + Self { heap: namespace.registry().heap, namespace, @@ -110,6 +141,7 @@ impl<'env, 'heap, S> Expander<'env, 'heap, S> { diagnostics: ExpanderDiagnosticIssues::new(), current_item: None, trampoline: None, + special_form_module, } } @@ -296,7 +328,9 @@ where self.trampoline = Some(node::expr::Expr::dummy()); return; } - ItemKind::Intrinsic(IntrinsicItem::Value(_)) if !ident.arguments.is_empty() => { + ItemKind::Intrinsic(IntrinsicItem::Value(_)) + if !ident.arguments.is_empty() && item.module == self.special_form_module => + { self.diagnostics .push(error::intrinsic_generic_arguments(ident)); self.trampoline = Some(node::expr::Expr::dummy()); @@ -402,7 +436,20 @@ where // We haven't encountered a special-form, meaning that we can treat this as a regular call // expression - visit::walk_call_expr(self, expr); + let CallExpr { + id: _, + span: _, + function: _, // we already visited the function + arguments, + labeled_arguments, + } = expr; + + for argument in arguments { + self.visit_argument(argument); + } + for labeled_argument in labeled_arguments { + self.visit_labeled_argument(labeled_argument); + } } fn visit_expr(&mut self, expr: &mut node::expr::Expr<'heap>) { diff --git a/libs/@local/hashql/ast/tests/ui/lower/sanitizer/constraint.stderr b/libs/@local/hashql/ast/tests/ui/lower/sanitizer/constraint.stderr index b569ec9612d..5eafebf1e1d 100644 --- a/libs/@local/hashql/ast/tests/ui/lower/sanitizer/constraint.stderr +++ b/libs/@local/hashql/ast/tests/ui/lower/sanitizer/constraint.stderr @@ -1,6 +1,7 @@ -error[expander::intrinsic-generic-arguments]: Generic arguments on intrinsic +error[sanitizer::invalid-generic-constraint]: Invalid generic constraint ╭▸ 4 │ "`+`", - │ ━━━━━━━━━━━━━━ `+` does not accept generic arguments + │ ━━━━━━━━━ Remove this constraint from 'T' │ - ╰ help: remove the generic arguments from `+` \ No newline at end of file + ├ help: Generic constraints (like 'T: Bound') are not allowed in this context. Use just the parameter name without bounds: 'T'. For example, change 'T: Clone' to just 'T'. + ╰ note: Generic constraints with bounds can only be used in certain positions such as function declarations, type declarations and newtype declarations. In other contexts, like usage sites, only the parameter name should be specified. \ No newline at end of file diff --git a/libs/@local/hashql/core/src/module/mod.rs b/libs/@local/hashql/core/src/module/mod.rs index df0f0d52135..ad56ed14a94 100644 --- a/libs/@local/hashql/core/src/module/mod.rs +++ b/libs/@local/hashql/core/src/module/mod.rs @@ -140,7 +140,7 @@ impl<'heap> ModuleRegistry<'heap> { /// # Panics /// /// This function will panic if the internal `RwLock` is poisoned. - fn find_by_name(&self, name: Symbol<'heap>) -> Option> { + pub fn find_by_name(&self, name: Symbol<'heap>) -> Option> { let root = self.root.read().expect("lock should not be poisoned"); let id = root.get(&name).copied()?; diff --git a/libs/@local/hashql/hir/tests/ui/lower/alias-replacement/generics.stdout b/libs/@local/hashql/hir/tests/ui/lower/alias-replacement/generics.stdout index 7f30b009c46..f1200444f50 100644 --- a/libs/@local/hashql/hir/tests/ui/lower/alias-replacement/generics.stdout +++ b/libs/@local/hashql/hir/tests/ui/lower/alias-replacement/generics.stdout @@ -1,10 +1,7 @@ ════ Initial HIR ═══════════════════════════════════════════════════════════════ -let foo:0 = ::core::math::add, - bar:0 = foo:0 -in -bar:0 +::core::math::add ════ HIR after alias replacement ═══════════════════════════════════════════════ -::core::math::add +::core::math::add diff --git a/libs/@local/hashql/hir/tests/ui/lower/inference/bind-arguments-explicit.jsonc b/libs/@local/hashql/hir/tests/ui/lower/inference/bind-arguments-explicit.jsonc index 4466ba8d452..b134fe4deef 100644 --- a/libs/@local/hashql/hir/tests/ui/lower/inference/bind-arguments-explicit.jsonc +++ b/libs/@local/hashql/hir/tests/ui/lower/inference/bind-arguments-explicit.jsonc @@ -2,7 +2,7 @@ //@ description: Ensures type inference fails when explicitly bound generic arguments conflict with provided argument types. [ "`+`", - //~^ ERROR `+` does not accept generic arguments + //~^ ERROR Type bound constraint violation { "#literal": 42.12 }, { "#literal": "42" } ] diff --git a/libs/@local/hashql/hir/tests/ui/lower/inference/bind-arguments-explicit.stderr b/libs/@local/hashql/hir/tests/ui/lower/inference/bind-arguments-explicit.stderr index 33ddea0fe7b..a225dba7bd2 100644 --- a/libs/@local/hashql/hir/tests/ui/lower/inference/bind-arguments-explicit.stderr +++ b/libs/@local/hashql/hir/tests/ui/lower/inference/bind-arguments-explicit.stderr @@ -1,6 +1,16 @@ -error[lowering::expander::intrinsic-generic-arguments]: Generic arguments on intrinsic +error[type-check::bound-constraint-violation]: Type bound constraint violation ╭▸ +1 │ //@ run: fail + │ ─ Upper bound `Number` is not a supertype of the lower bound + ‡ 4 │ "`+`", - │ ━━━━━━━━━━━━━━━━━━━ `+` does not accept generic arguments + │ ━━━━━━━━━━━━━━━━━━━ Type variable has incompatible upper and lower bounds + ‡ +7 │ { "#literal": "42" } + │ ──── Lower bound `String` must be a subtype of the upper bound │ - ╰ help: remove the generic arguments from `+` \ No newline at end of file + ├ help: These type bounds create an impossible constraint. To fix this: + │ 1. Modify `String` to be a proper subtype of `Number` + │ 2. Or adjust `Number` to be a supertype of `String` + │ 3. Or check your code for contradictory type assertions + ╰ note: During type inference, when a variable has both upper and lower bounds, the relationship 'lower <: upper' must hold. This ensures a valid solution exists in the type system. When this relationship is violated, it means your code is requiring contradictory types for the same variable. \ No newline at end of file diff --git a/libs/@local/hashql/hir/tests/ui/lower/inference/infer-argument.stdout b/libs/@local/hashql/hir/tests/ui/lower/inference/infer-argument.stdout index 2f134281bbc..10324b06840 100644 --- a/libs/@local/hashql/hir/tests/ui/lower/inference/infer-argument.stdout +++ b/libs/@local/hashql/hir/tests/ui/lower/inference/infer-argument.stdout @@ -1,23 +1,23 @@ ════ Initial HIR ═══════════════════════════════════════════════════════════════ -(lhs:0: _0, rhs:0: _1): _2 -> ::core::math::add(lhs:0, rhs:0)(2, 3) +(lhs:0: _0, rhs:0: _1): _2 -> ::core::math::+(lhs:0, rhs:0)(2, 3) ════ HIR after type inference ══════════════════════════════════════════════════ -(lhs:0: _0, rhs:0: _1): _2 -> ::core::math::add(lhs:0, rhs:0)(2, 3) +(lhs:0: _0, rhs:0: _1): _2 -> ::core::math::+(lhs:0, rhs:0)(2, 3) ════ Types ═════════════════════════════════════════════════════════════════════ -┌─ (lhs:0: _0, rhs:0: _1): _2 -> ::core::math::add(lhs:0, rhs:0)(2, 3) +┌─ (lhs:0: _0, rhs:0: _1): _2 -> ::core::math::+(lhs:0, rhs:0)(2, 3) └→ _4«Integer» -┌─ (lhs:0: _0, rhs:0: _1): _2 -> ::core::math::add(lhs:0, rhs:0) +┌─ (lhs:0: _0, rhs:0: _1): _2 -> ::core::math::+(lhs:0, rhs:0) └→ (_0«Integer», _1«Integer») -> _2«Integer» -┌─ ::core::math::add(lhs:0, rhs:0) +┌─ ::core::math::+(lhs:0, rhs:0) └→ _3«Integer» -┌─ ::core::math::add +┌─ ::core::math::+ └→ (T?29«Integer», U?30«Integer») -> (T?29«Integer» | U?30«Integer») diff --git a/libs/@local/hashql/hir/tests/ui/lower/specialization/collect-custom-collect.stderr b/libs/@local/hashql/hir/tests/ui/lower/specialization/collect-custom-collect.stderr index 64131abc98b..600b230b77c 100644 --- a/libs/@local/hashql/hir/tests/ui/lower/specialization/collect-custom-collect.stderr +++ b/libs/@local/hashql/hir/tests/ui/lower/specialization/collect-custom-collect.stderr @@ -1,7 +1,135 @@ -error[lowering::expander::unresolved-variable]: Unresolved variable +error[lower::specialization::non-intrinsic-graph-operation]: Non-intrinsic function in graph operation ╭▸ 6 │ ["fn", { "#tuple": [] }, { "#struct": { "graph": "_" } }, "_", "graph"], - │ ━━━━━ cannot find `graph` in this scope + │ ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ This is not a graph intrinsic operation │ - ├ help: check the spelling, or import the name with a `use` statement - ╰ note: this could be a typo, a name used outside its scope, or a missing declaration; if it is a function or type from another module, you may need to import it first \ No newline at end of file + ├ help: ( + │ graph:0: ::graph::Graph( + │ 'marker: ::graph::types::knowledge::entity::Entity( + │ encodings: ::graph::types::knowledge::entity::EntityEncodings( + │ vectors: ? + │ ), + │ link_data: ::core::option::None(Null) + │ | ::core::option::Some(::graph::types::knowledge::entity::LinkData( + │ left_entity_confidence: ::core::option::None(Null) + │ | ::core::option::Some(::graph::types::knowledge::entity::Confidence(Number)), + │ left_entity_id: ::graph::types::knowledge::entity::EntityId( + │ draft_id: ::core::option::None(Null) + │ | ::core::option::Some(::graph::types::knowledge::entity::DraftId(::core::uuid::Uuid(String))), + │ entity_uuid: ::graph::types::knowledge::entity::EntityUuid(::core::uuid::Uuid(String)), + │ web_id: ::graph::types::principal::actor_group::web::WebId(::graph::types::principal::actor_group::ActorGroupEntityUuid(::core::uuid::Uuid(String))) + │ ), + │ left_entity_provenance: ::graph::types::knowledge::entity::PropertyProvenance(?), + │ right_entity_confidence: ::core::option::None(Null) + │ | ::core::option::Some(::graph::types::knowledge::entity::Confidence(Number)), + │ right_entity_id: ::graph::types::knowledge::entity::EntityId( + │ draft_id: ::core::option::None(Null) + │ | ::core::option::Some(::graph::types::knowledge::entity::DraftId(::core::uuid::Uuid(String))), + │ entity_uuid: ::graph::types::knowledge::entity::EntityUuid(::core::uuid::Uuid(String)), + │ web_id: ::graph::types::principal::actor_group::web::WebId(::graph::types::principal::actor_group::ActorGroupEntityUuid(::core::uuid::Uuid(String))) + │ ), + │ right_entity_provenance: ::graph::types::knowledge::entity::PropertyProvenance(?) + │ )), + │ metadata: ::graph::types::knowledge::entity::EntityMetadata( + │ archived: Boolean, + │ confidence: ::core::option::None(Null) + │ | ::core::option::Some(::graph::types::knowledge::entity::Confidence(Number)), + │ entity_type_ids: List<::graph::types::ontology::VersionedUrl( + │ base_url: ::graph::types::ontology::BaseUrl(::core::url::Url(String)), + │ version: ::graph::ontology::OntologyTypeVersion(String) + │ )>, + │ properties: ::graph::types::knowledge::entity::PropertyObjectMetadata(?), + │ provenance: ::graph::types::knowledge::entity::EntityProvenance( + │ edition: ::graph::types::knowledge::entity::EntityEditionProvenance(?), + │ inferred: ::graph::types::knowledge::entity::InferredEntityProvenance(?) + │ ), + │ record_id: ::graph::types::knowledge::entity::RecordId( + │ edition_id: ::graph::types::knowledge::entity::EntityEditionId(::core::uuid::Uuid(String)), + │ entity_id: ::graph::types::knowledge::entity::EntityId( + │ draft_id: ::core::option::None(Null) + │ | ::core::option::Some(::graph::types::knowledge::entity::DraftId(::core::uuid::Uuid(String))), + │ entity_uuid: ::graph::types::knowledge::entity::EntityUuid(::core::uuid::Uuid(String)), + │ web_id: ::graph::types::principal::actor_group::web::WebId(::graph::types::principal::actor_group::ActorGroupEntityUuid(::core::uuid::Uuid(String))) + │ ) + │ ), + │ temporal_versioning: ::graph::types::knowledge::entity::TemporalMetadata( + │ decision_time: ::graph::temporal::DecisionTime(::graph::temporal::Interval( + │ end: ::graph::temporal::UnboundedTemporalBound(Null) + │ | ::graph::temporal::ExclusiveTemporalBound(::graph::temporal::Timestamp(Integer)), + │ start: ::graph::temporal::InclusiveTemporalBound(::graph::temporal::Timestamp(Integer)) + │ )), + │ transaction_time: ::graph::temporal::TransactionTime(::graph::temporal::Interval( + │ end: ::graph::temporal::UnboundedTemporalBound(Null) + │ | ::graph::temporal::ExclusiveTemporalBound(::graph::temporal::Timestamp(Integer)), + │ start: ::graph::temporal::InclusiveTemporalBound(::graph::temporal::Timestamp(Integer)) + │ )) + │ ) + │ ), + │ properties: ? + │ ) + │ ) + │ ): ::graph::Graph( + │ 'marker: ::graph::types::knowledge::entity::Entity( + │ encodings: ::graph::types::knowledge::entity::EntityEncodings( + │ vectors: ? + │ ), + │ link_data: ::core::option::None(Null) + │ | ::core::option::Some(::graph::types::knowledge::entity::LinkData( + │ left_entity_confidence: ::core::option::None(Null) + │ | ::core::option::Some(::graph::types::knowledge::entity::Confidence(Number)), + │ left_entity_id: ::graph::types::knowledge::entity::EntityId( + │ draft_id: ::core::option::None(Null) + │ | ::core::option::Some(::graph::types::knowledge::entity::DraftId(::core::uuid::Uuid(String))), + │ entity_uuid: ::graph::types::knowledge::entity::EntityUuid(::core::uuid::Uuid(String)), + │ web_id: ::graph::types::principal::actor_group::web::WebId(::graph::types::principal::actor_group::ActorGroupEntityUuid(::core::uuid::Uuid(String))) + │ ), + │ left_entity_provenance: ::graph::types::knowledge::entity::PropertyProvenance(?), + │ right_entity_confidence: ::core::option::None(Null) + │ | ::core::option::Some(::graph::types::knowledge::entity::Confidence(Number)), + │ right_entity_id: ::graph::types::knowledge::entity::EntityId( + │ draft_id: ::core::option::None(Null) + │ | ::core::option::Some(::graph::types::knowledge::entity::DraftId(::core::uuid::Uuid(String))), + │ entity_uuid: ::graph::types::knowledge::entity::EntityUuid(::core::uuid::Uuid(String)), + │ web_id: ::graph::types::principal::actor_group::web::WebId(::graph::types::principal::actor_group::ActorGroupEntityUuid(::core::uuid::Uuid(String))) + │ ), + │ right_entity_provenance: ::graph::types::knowledge::entity::PropertyProvenance(?) + │ )), + │ metadata: ::graph::types::knowledge::entity::EntityMetadata( + │ archived: Boolean, + │ confidence: ::core::option::None(Null) + │ | ::core::option::Some(::graph::types::knowledge::entity::Confidence(Number)), + │ entity_type_ids: List<::graph::types::ontology::VersionedUrl( + │ base_url: ::graph::types::ontology::BaseUrl(::core::url::Url(String)), + │ version: ::graph::ontology::OntologyTypeVersion(String) + │ )>, + │ properties: ::graph::types::knowledge::entity::PropertyObjectMetadata(?), + │ provenance: ::graph::types::knowledge::entity::EntityProvenance( + │ edition: ::graph::types::knowledge::entity::EntityEditionProvenance(?), + │ inferred: ::graph::types::knowledge::entity::InferredEntityProvenance(?) + │ ), + │ record_id: ::graph::types::knowledge::entity::RecordId( + │ edition_id: ::graph::types::knowledge::entity::EntityEditionId(::core::uuid::Uuid(String)), + │ entity_id: ::graph::types::knowledge::entity::EntityId( + │ draft_id: ::core::option::None(Null) + │ | ::core::option::Some(::graph::types::knowledge::entity::DraftId(::core::uuid::Uuid(String))), + │ entity_uuid: ::graph::types::knowledge::entity::EntityUuid(::core::uuid::Uuid(String)), + │ web_id: ::graph::types::principal::actor_group::web::WebId(::graph::types::principal::actor_group::ActorGroupEntityUuid(::core::uuid::Uuid(String))) + │ ) + │ ), + │ temporal_versioning: ::graph::types::knowledge::entity::TemporalMetadata( + │ decision_time: ::graph::temporal::DecisionTime(::graph::temporal::Interval( + │ end: ::graph::temporal::UnboundedTemporalBound(Null) + │ | ::graph::temporal::ExclusiveTemporalBound(::graph::temporal::Timestamp(Integer)), + │ start: ::graph::temporal::InclusiveTemporalBound(::graph::temporal::Timestamp(Integer)) + │ )), + │ transaction_time: ::graph::temporal::TransactionTime(::graph::temporal::Interval( + │ end: ::graph::temporal::UnboundedTemporalBound(Null) + │ | ::graph::temporal::ExclusiveTemporalBound(::graph::temporal::Timestamp(Integer)), + │ start: ::graph::temporal::InclusiveTemporalBound(::graph::temporal::Timestamp(Integer)) + │ )) + │ ) + │ ), + │ properties: ? + │ ) + │ ) -> graph:0 is not a valid graph operation. Graph operation chains can only contain intrinsic functions that are part of the HashQL graph API. Higher-order functions (HOFs) and user-defined functions are not supported yet. To track support for user-defined functions see https://linear.app/hash/issue/H-4776/hashql-allow-user-defined-functions-in-graph-pipelines + ╰ note: Graph intrinsics are built-in operations like `::graph::head::entities`, `::graph::body::filter`, and `::graph::tail::collect` that can be optimized during compilation. Only these predefined operations can be used to build graph query chains. \ No newline at end of file From 44f36f9e8fdd7f6478221f915b3b30b6f5f1c0cd Mon Sep 17 00:00:00 2001 From: Bilal Mahmoud <7252775+indietyp@users.noreply.github.com> Date: Mon, 15 Jun 2026 17:36:23 +0200 Subject: [PATCH 40/55] feat: checkpoint --- .../let-4-alias.jsonc | 8 +- .../let-4-alias.stdout | 88 ++++++++++--------- .../multi-segment-resolution.jsonc | 2 +- .../multi-segment-resolution.stdout | 13 ++- .../newtype-3-alias.jsonc | 9 +- .../newtype-3-alias.stdout | 72 ++++++++------- .../re-assign.jsonc | 2 +- .../resolve-generics.jsonc | 2 +- .../resolve-generics.stderr | 6 -- .../resolve-generics.stdout | 17 ++++ .../pre-expansion-name-resolver/type-4.jsonc | 2 +- .../pre-expansion-name-resolver/type-4.stdout | 72 ++++++--------- 12 files changed, 151 insertions(+), 142 deletions(-) delete mode 100644 libs/@local/hashql/ast/tests/ui/lower/expander/pre-expansion-name-resolver/resolve-generics.stderr create mode 100644 libs/@local/hashql/ast/tests/ui/lower/expander/pre-expansion-name-resolver/resolve-generics.stdout diff --git a/libs/@local/hashql/ast/tests/ui/lower/expander/pre-expansion-name-resolver/let-4-alias.jsonc b/libs/@local/hashql/ast/tests/ui/lower/expander/pre-expansion-name-resolver/let-4-alias.jsonc index f5483a565b4..e122984c405 100644 --- a/libs/@local/hashql/ast/tests/ui/lower/expander/pre-expansion-name-resolver/let-4-alias.jsonc +++ b/libs/@local/hashql/ast/tests/ui/lower/expander/pre-expansion-name-resolver/let-4-alias.jsonc @@ -1,3 +1,9 @@ //@ run: pass //@ description: if given that `a = b`, then `a` should be replaced with `b` in the body -["let", "a", "Integer", "b", ["a", "x", "x"]] +[ + "let", + "b", + "Integer", + { "#literal": 2 }, + ["let", "a", "Integer", "b", ["+", "a", "a"]] +] diff --git a/libs/@local/hashql/ast/tests/ui/lower/expander/pre-expansion-name-resolver/let-4-alias.stdout b/libs/@local/hashql/ast/tests/ui/lower/expander/pre-expansion-name-resolver/let-4-alias.stdout index ebbc73cce13..5126c0a7645 100644 --- a/libs/@local/hashql/ast/tests/ui/lower/expander/pre-expansion-name-resolver/let-4-alias.stdout +++ b/libs/@local/hashql/ast/tests/ui/lower/expander/pre-expansion-name-resolver/let-4-alias.stdout @@ -1,42 +1,46 @@ -Expr#4294967040@29 - ExprKind (Call) - CallExpr#4294967040@29 - Expr#4294967040@3 - ExprKind (Path) - Path#4294967040@3 (rooted: true) - PathSegment#4294967040@2 (name: kernel) - PathSegment#4294967040@2 (name: special_form) - PathSegment#4294967040@2 (name: let) - Argument#4294967040@7 - Expr#4294967040@7 - ExprKind (Path) - Path#4294967040@7 (rooted: false) - PathSegment#4294967040@6 (name: a) - Argument#4294967040@11 - Expr#4294967040@11 - ExprKind (Path) - Path#4294967040@11 (rooted: false) - PathSegment#4294967040@10 (name: Int) - Argument#4294967040@15 - Expr#4294967040@15 - ExprKind (Path) - Path#4294967040@15 (rooted: false) - PathSegment#4294967040@14 (name: b) - Argument#4294967040@28 - Expr#4294967040@28 - ExprKind (Call) - CallExpr#4294967040@28 - Expr#4294967040@19 - ExprKind (Path) - Path#4294967040@19 (rooted: false) - PathSegment#4294967040@18 (name: b) - Argument#4294967040@23 - Expr#4294967040@23 - ExprKind (Path) - Path#4294967040@23 (rooted: false) - PathSegment#4294967040@22 (name: x) - Argument#4294967040@27 - Expr#4294967040@27 - ExprKind (Path) - Path#4294967040@27 (rooted: false) - PathSegment#4294967040@26 (name: x) +Expr#4294967040@44 + ExprKind (Let) + LetExpr#4294967040@44 (name: b) + Expr#4294967040@13 + ExprKind (Literal) + LiteralExpr#4294967040@12 + Primitive (Integer) + Integer (2) + Type#4294967040@11 + TypeKind (Path) + Path#4294967040@11 (rooted: true) + PathSegment#4294967040@10 (name: kernel) + PathSegment#4294967040@10 (name: type) + PathSegment#4294967040@10 (name: Integer) + Expr#4294967040@43 + ExprKind (Let) + LetExpr#4294967040@43 (name: a) + Expr#4294967040@29 + ExprKind (Path) + Path#4294967040@29 (rooted: false) + PathSegment#4294967040@28 (name: b) + Type#4294967040@25 + TypeKind (Path) + Path#4294967040@25 (rooted: true) + PathSegment#4294967040@24 (name: kernel) + PathSegment#4294967040@24 (name: type) + PathSegment#4294967040@24 (name: Integer) + Expr#4294967040@42 + ExprKind (Call) + CallExpr#4294967040@42 + Expr#4294967040@33 + ExprKind (Path) + Path#4294967040@33 (rooted: true) + PathSegment#4294967040@32 (name: core) + PathSegment#4294967040@32 (name: math) + PathSegment#4294967040@32 (name: add) + Argument#4294967040@37 + Expr#4294967040@37 + ExprKind (Path) + Path#4294967040@37 (rooted: false) + PathSegment#4294967040@36 (name: a) + Argument#4294967040@41 + Expr#4294967040@41 + ExprKind (Path) + Path#4294967040@41 (rooted: false) + PathSegment#4294967040@40 (name: a) diff --git a/libs/@local/hashql/ast/tests/ui/lower/expander/pre-expansion-name-resolver/multi-segment-resolution.jsonc b/libs/@local/hashql/ast/tests/ui/lower/expander/pre-expansion-name-resolver/multi-segment-resolution.jsonc index 9e0f982f6fe..0fe51807741 100644 --- a/libs/@local/hashql/ast/tests/ui/lower/expander/pre-expansion-name-resolver/multi-segment-resolution.jsonc +++ b/libs/@local/hashql/ast/tests/ui/lower/expander/pre-expansion-name-resolver/multi-segment-resolution.jsonc @@ -1,3 +1,3 @@ //@ run: pass //@ description: Test resolution of multi-segment paths -["+::total"] +["core::math::add"] diff --git a/libs/@local/hashql/ast/tests/ui/lower/expander/pre-expansion-name-resolver/multi-segment-resolution.stdout b/libs/@local/hashql/ast/tests/ui/lower/expander/pre-expansion-name-resolver/multi-segment-resolution.stdout index 6faf0ff783b..9c91c17718b 100644 --- a/libs/@local/hashql/ast/tests/ui/lower/expander/pre-expansion-name-resolver/multi-segment-resolution.stdout +++ b/libs/@local/hashql/ast/tests/ui/lower/expander/pre-expansion-name-resolver/multi-segment-resolution.stdout @@ -1,10 +1,9 @@ -Expr#4294967040@6 +Expr#4294967040@8 ExprKind (Call) - CallExpr#4294967040@6 - Expr#4294967040@5 + CallExpr#4294967040@8 + Expr#4294967040@7 ExprKind (Path) - Path#4294967040@5 (rooted: true) + Path#4294967040@7 (rooted: true) PathSegment#4294967040@2 (name: core) - PathSegment#4294967040@2 (name: math) - PathSegment#4294967040@2 (name: add) - PathSegment#4294967040@4 (name: total) + PathSegment#4294967040@4 (name: math) + PathSegment#4294967040@6 (name: add) diff --git a/libs/@local/hashql/ast/tests/ui/lower/expander/pre-expansion-name-resolver/newtype-3-alias.jsonc b/libs/@local/hashql/ast/tests/ui/lower/expander/pre-expansion-name-resolver/newtype-3-alias.jsonc index 94876c29029..8104fc8862b 100644 --- a/libs/@local/hashql/ast/tests/ui/lower/expander/pre-expansion-name-resolver/newtype-3-alias.jsonc +++ b/libs/@local/hashql/ast/tests/ui/lower/expander/pre-expansion-name-resolver/newtype-3-alias.jsonc @@ -1,3 +1,8 @@ //@ run: pass -//@ description: if given that `a = b`, then `a` should be replaced with `b` in the body -["newtype", "a", "b", ["a", "x", "x"]] +//@ description: if given that `a = b`, then `a` should NOT be replaced with `b` in the body +[ + "newtype", + "b", + "Integer", + ["newtype", "a", "b", ["a", { "#literal": 1 }, { "#literal": 2 }]] +] diff --git a/libs/@local/hashql/ast/tests/ui/lower/expander/pre-expansion-name-resolver/newtype-3-alias.stdout b/libs/@local/hashql/ast/tests/ui/lower/expander/pre-expansion-name-resolver/newtype-3-alias.stdout index 9e073091e15..ad312ab988e 100644 --- a/libs/@local/hashql/ast/tests/ui/lower/expander/pre-expansion-name-resolver/newtype-3-alias.stdout +++ b/libs/@local/hashql/ast/tests/ui/lower/expander/pre-expansion-name-resolver/newtype-3-alias.stdout @@ -1,37 +1,35 @@ -Expr#4294967040@25 - ExprKind (Call) - CallExpr#4294967040@25 - Expr#4294967040@3 - ExprKind (Path) - Path#4294967040@3 (rooted: true) - PathSegment#4294967040@2 (name: kernel) - PathSegment#4294967040@2 (name: special_form) - PathSegment#4294967040@2 (name: newtype) - Argument#4294967040@7 - Expr#4294967040@7 - ExprKind (Path) - Path#4294967040@7 (rooted: false) - PathSegment#4294967040@6 (name: a) - Argument#4294967040@11 - Expr#4294967040@11 - ExprKind (Path) - Path#4294967040@11 (rooted: false) - PathSegment#4294967040@10 (name: b) - Argument#4294967040@24 - Expr#4294967040@24 - ExprKind (Call) - CallExpr#4294967040@24 - Expr#4294967040@15 - ExprKind (Path) - Path#4294967040@15 (rooted: false) - PathSegment#4294967040@14 (name: a) - Argument#4294967040@19 - Expr#4294967040@19 - ExprKind (Path) - Path#4294967040@19 (rooted: false) - PathSegment#4294967040@18 (name: x) - Argument#4294967040@23 - Expr#4294967040@23 - ExprKind (Path) - Path#4294967040@23 (rooted: false) - PathSegment#4294967040@22 (name: x) +Expr#4294967040@34 + ExprKind (NewType) + NewTypeExpr#4294967040@34 (name: b) + Type#4294967040@11 + TypeKind (Path) + Path#4294967040@11 (rooted: true) + PathSegment#4294967040@10 (name: kernel) + PathSegment#4294967040@10 (name: type) + PathSegment#4294967040@10 (name: Integer) + Expr#4294967040@33 + ExprKind (NewType) + NewTypeExpr#4294967040@33 (name: a) + Type#4294967040@23 + TypeKind (Path) + Path#4294967040@23 (rooted: false) + PathSegment#4294967040@22 (name: b) + Expr#4294967040@32 + ExprKind (Call) + CallExpr#4294967040@32 + Expr#4294967040@27 + ExprKind (Path) + Path#4294967040@27 (rooted: false) + PathSegment#4294967040@26 (name: a) + Argument#4294967040@29 + Expr#4294967040@29 + ExprKind (Literal) + LiteralExpr#4294967040@28 + Primitive (Integer) + Integer (1) + Argument#4294967040@31 + Expr#4294967040@31 + ExprKind (Literal) + LiteralExpr#4294967040@30 + Primitive (Integer) + Integer (2) diff --git a/libs/@local/hashql/ast/tests/ui/lower/expander/pre-expansion-name-resolver/re-assign.jsonc b/libs/@local/hashql/ast/tests/ui/lower/expander/pre-expansion-name-resolver/re-assign.jsonc index f82614ebffd..0279d7084fd 100644 --- a/libs/@local/hashql/ast/tests/ui/lower/expander/pre-expansion-name-resolver/re-assign.jsonc +++ b/libs/@local/hashql/ast/tests/ui/lower/expander/pre-expansion-name-resolver/re-assign.jsonc @@ -1,7 +1,7 @@ //@ run: pass //@ description: Given b = c; a = b; `a` should be replaced as `d` // prettier-ignore -["let", "c", "d", +["let", "c", {"#literal": 1}, ["let", "b", "c", ["let", "a", "b", ["a", {"#literal": 1}, {"#literal": 3}] diff --git a/libs/@local/hashql/ast/tests/ui/lower/expander/pre-expansion-name-resolver/resolve-generics.jsonc b/libs/@local/hashql/ast/tests/ui/lower/expander/pre-expansion-name-resolver/resolve-generics.jsonc index 582e530c74a..f0e648d9a24 100644 --- a/libs/@local/hashql/ast/tests/ui/lower/expander/pre-expansion-name-resolver/resolve-generics.jsonc +++ b/libs/@local/hashql/ast/tests/ui/lower/expander/pre-expansion-name-resolver/resolve-generics.jsonc @@ -1,3 +1,3 @@ -//@ run: fail +//@ run: pass //@ description: Test that generic arguments are resolved correctly ["`+`"] diff --git a/libs/@local/hashql/ast/tests/ui/lower/expander/pre-expansion-name-resolver/resolve-generics.stderr b/libs/@local/hashql/ast/tests/ui/lower/expander/pre-expansion-name-resolver/resolve-generics.stderr deleted file mode 100644 index 24a8c972417..00000000000 --- a/libs/@local/hashql/ast/tests/ui/lower/expander/pre-expansion-name-resolver/resolve-generics.stderr +++ /dev/null @@ -1,6 +0,0 @@ -error[expander::intrinsic-generic-arguments]: Generic arguments on intrinsic - ╭▸ -3 │ ["`+`"] - │ ━━━━━━━━━━━━ `+` does not accept generic arguments - │ - ╰ help: remove the generic arguments from `+` \ No newline at end of file diff --git a/libs/@local/hashql/ast/tests/ui/lower/expander/pre-expansion-name-resolver/resolve-generics.stdout b/libs/@local/hashql/ast/tests/ui/lower/expander/pre-expansion-name-resolver/resolve-generics.stdout new file mode 100644 index 00000000000..7b5c4d0028c --- /dev/null +++ b/libs/@local/hashql/ast/tests/ui/lower/expander/pre-expansion-name-resolver/resolve-generics.stdout @@ -0,0 +1,17 @@ +Expr#4294967040@9 + ExprKind (Call) + CallExpr#4294967040@9 + Expr#4294967040@8 + ExprKind (Path) + Path#4294967040@8 (rooted: true) + PathSegment#4294967040@7 (name: core) + PathSegment#4294967040@7 (name: math) + PathSegment#4294967040@7 (name: add) + PathSegmentArgument (GenericArgument) + GenericArgument#4294967040@6 + Type#4294967040@5 + TypeKind (Path) + Path#4294967040@5 (rooted: true) + PathSegment#4294967040@4 (name: kernel) + PathSegment#4294967040@4 (name: type) + PathSegment#4294967040@4 (name: Integer) diff --git a/libs/@local/hashql/ast/tests/ui/lower/expander/pre-expansion-name-resolver/type-4.jsonc b/libs/@local/hashql/ast/tests/ui/lower/expander/pre-expansion-name-resolver/type-4.jsonc index 5587e1470b9..b74987f3b5b 100644 --- a/libs/@local/hashql/ast/tests/ui/lower/expander/pre-expansion-name-resolver/type-4.jsonc +++ b/libs/@local/hashql/ast/tests/ui/lower/expander/pre-expansion-name-resolver/type-4.jsonc @@ -1,3 +1,3 @@ //@ run: pass //@ description: Test that `type/4` is resolved to `::kernel::special_form::type`, but that no aliases are created. -["type", "a", "Integer", "b", ["+", "a", "c"]] +["type", "a", "Integer", ["+", { "#literal": 2 }, { "#literal": 3 }]] diff --git a/libs/@local/hashql/ast/tests/ui/lower/expander/pre-expansion-name-resolver/type-4.stdout b/libs/@local/hashql/ast/tests/ui/lower/expander/pre-expansion-name-resolver/type-4.stdout index 48a646afb31..6b27ddc6d62 100644 --- a/libs/@local/hashql/ast/tests/ui/lower/expander/pre-expansion-name-resolver/type-4.stdout +++ b/libs/@local/hashql/ast/tests/ui/lower/expander/pre-expansion-name-resolver/type-4.stdout @@ -1,44 +1,30 @@ -Expr#4294967040@29 - ExprKind (Call) - CallExpr#4294967040@29 - Expr#4294967040@3 - ExprKind (Path) - Path#4294967040@3 (rooted: true) - PathSegment#4294967040@2 (name: kernel) - PathSegment#4294967040@2 (name: special_form) - PathSegment#4294967040@2 (name: type) - Argument#4294967040@7 - Expr#4294967040@7 - ExprKind (Path) - Path#4294967040@7 (rooted: false) - PathSegment#4294967040@6 (name: a) - Argument#4294967040@11 - Expr#4294967040@11 - ExprKind (Path) - Path#4294967040@11 (rooted: false) - PathSegment#4294967040@10 (name: Int) - Argument#4294967040@15 - Expr#4294967040@15 - ExprKind (Path) - Path#4294967040@15 (rooted: false) - PathSegment#4294967040@14 (name: b) - Argument#4294967040@28 - Expr#4294967040@28 - ExprKind (Call) - CallExpr#4294967040@28 +Expr#4294967040@21 + ExprKind (Type) + TypeExpr#4294967040@21 (name: a) + Type#4294967040@11 + TypeKind (Path) + Path#4294967040@11 (rooted: true) + PathSegment#4294967040@10 (name: kernel) + PathSegment#4294967040@10 (name: type) + PathSegment#4294967040@10 (name: Integer) + Expr#4294967040@20 + ExprKind (Call) + CallExpr#4294967040@20 + Expr#4294967040@15 + ExprKind (Path) + Path#4294967040@15 (rooted: true) + PathSegment#4294967040@14 (name: core) + PathSegment#4294967040@14 (name: math) + PathSegment#4294967040@14 (name: add) + Argument#4294967040@17 + Expr#4294967040@17 + ExprKind (Literal) + LiteralExpr#4294967040@16 + Primitive (Integer) + Integer (2) + Argument#4294967040@19 Expr#4294967040@19 - ExprKind (Path) - Path#4294967040@19 (rooted: true) - PathSegment#4294967040@18 (name: core) - PathSegment#4294967040@18 (name: math) - PathSegment#4294967040@18 (name: add) - Argument#4294967040@23 - Expr#4294967040@23 - ExprKind (Path) - Path#4294967040@23 (rooted: false) - PathSegment#4294967040@22 (name: a) - Argument#4294967040@27 - Expr#4294967040@27 - ExprKind (Path) - Path#4294967040@27 (rooted: false) - PathSegment#4294967040@26 (name: c) + ExprKind (Literal) + LiteralExpr#4294967040@18 + Primitive (Integer) + Integer (3) From 0fe4e6a9ac2d914a1ceab2cda5e98dde2b29046e Mon Sep 17 00:00:00 2001 From: Bilal Mahmoud <7252775+indietyp@users.noreply.github.com> Date: Mon, 15 Jun 2026 18:15:51 +0200 Subject: [PATCH 41/55] feat: checkpoint --- .../hashql/ast/src/lower/expander/let.rs | 35 +++--- .../hashql/ast/src/lower/expander/mod.rs | 36 ++++-- .../hashql/ast/src/lower/expander/type.rs | 40 +++--- .../alias-absolute-path.stdout | 49 +++++--- .../alias-symbol.stdout | 45 ++++--- .../newtype-4.jsonc | 3 - .../newtype-4.stdout | 44 ------- .../re-assign-prelude-diverging.stdout | 49 +++++--- .../re-assign.jsonc | 2 +- .../re-assign.stdout | 117 ++++++------------ .../special-form-expander/access-2.jsonc | 2 +- .../special-form-expander/access-2.stdout | 13 +- .../access-field-literal-valid.jsonc | 4 +- .../access-field-literal-valid.stdout | 28 +++-- .../special-form-expander/index-2.jsonc | 2 +- .../special-form-expander/index-2.stdout | 20 +-- .../special-form-expander/newtype-4.jsonc | 2 +- .../special-form-expander/newtype-4.stderr | 2 +- .../type-expr-call-intersection.jsonc | 2 +- .../type-expr-call-intersection.stdout | 24 ++-- .../type-expr-call-not-path.jsonc | 3 +- .../type-expr-call-not-path.stderr | 7 +- .../type-expr-call-union.jsonc | 2 +- .../type-expr-call-union.stdout | 24 ++-- .../special-form-expander/use-3.jsonc | 2 +- .../special-form-expander/use-3.stdout | 16 +-- .../special-form-expander/use-struct.jsonc | 2 +- .../special-form-expander/use-struct.stdout | 17 +-- .../lower/name-mangler/newtype-generics.jsonc | 2 +- .../name-mangler/newtype-generics.stdout | 10 +- .../tests/ui/lower/name-mangler/newtype.jsonc | 2 +- .../ui/lower/name-mangler/newtype.stdout | 44 ++++--- .../tests/ui/lower/name-mangler/onion.jsonc | 2 +- .../tests/ui/lower/name-mangler/onion.stdout | 62 +++++----- .../tests/ui/lower/sanitizer/constraint.jsonc | 2 +- .../generic-reassignment.jsonc | 3 +- .../generic-reassignment.stderr | 19 ++- .../lower/alias-replacement/generics.stdout | 7 +- .../qualified-variable-alias.stdout | 3 + .../inference/intrinsics/assignment.stdout | 7 +- .../inference/intrinsics/re-assignment.stdout | 12 ++ 41 files changed, 395 insertions(+), 372 deletions(-) delete mode 100644 libs/@local/hashql/ast/tests/ui/lower/expander/pre-expansion-name-resolver/newtype-4.jsonc delete mode 100644 libs/@local/hashql/ast/tests/ui/lower/expander/pre-expansion-name-resolver/newtype-4.stdout diff --git a/libs/@local/hashql/ast/src/lower/expander/let.rs b/libs/@local/hashql/ast/src/lower/expander/let.rs index 29a1c1a1e20..f9f431c19ae 100644 --- a/libs/@local/hashql/ast/src/lower/expander/let.rs +++ b/libs/@local/hashql/ast/src/lower/expander/let.rs @@ -2,7 +2,7 @@ use core::mem; use hashql_core::{heap::BumpAllocator, module::item::Item, span::SpanId, symbol::Ident}; -use super::{BindingKind, Expander, r#type::lower_expr_to_type}; +use super::{BindingKind, CurrentItem, Expander, r#type::lower_expr_to_type}; use crate::{ lower::expander::error, node::{ @@ -41,26 +41,33 @@ where expander .diagnostics .push(error::invalid_let_binding_name(name)); + return Expr::dummy(); }; let item = expander.visit(&mut value.value); - expander.bind( - name.value, - item.map_or( - BindingKind::Local(hashql_core::module::Universe::Value), - Into::into, - ), - |expander| { - expander.visit(&mut body.value); - }, + tracing::info!("item: {:?}, item: {:?}", name.value, item); + let kind = item.filter(|item| !item.has_arguments).map_or( + BindingKind::Local(hashql_core::module::Universe::Value), + |item| BindingKind::Remote(item.item), ); - - if let Some(Item { - kind: hashql_core::module::item::ItemKind::Intrinsic(_), - .. + tracing::info!("kind: {:?}", kind); + + expander.bind(name.value, kind, |expander| { + expander.visit(&mut body.value); + }); + + if let Some(CurrentItem { + item: + current_module @ Item { + kind: hashql_core::module::item::ItemKind::Intrinsic(_), + .. + }, + // We cannot replace an alias with arguments, because we'd lose the arguments + has_arguments: false, }) = item + && current_module.module == expander.special_form_module { if let Some(r#type) = r#type { expander.diagnostics.push(error::intrinsic_type_annotation( diff --git a/libs/@local/hashql/ast/src/lower/expander/mod.rs b/libs/@local/hashql/ast/src/lower/expander/mod.rs index d0787e89f32..b01c57fabda 100644 --- a/libs/@local/hashql/ast/src/lower/expander/mod.rs +++ b/libs/@local/hashql/ast/src/lower/expander/mod.rs @@ -42,6 +42,7 @@ use crate::{ /// Whether a binding introduced during expansion is a local (opaque) or /// an alias for a resolved registry item. +#[derive(Debug)] enum BindingKind<'heap> { /// A binding with no identity beyond its name and universe /// (e.g., a `let` binding or function parameter). @@ -81,6 +82,12 @@ impl<'heap> Binder<'_, '_, 'heap> { } } +#[derive(Debug, Copy, Clone)] +struct CurrentItem<'heap> { + item: module::item::Item<'heap>, + has_arguments: bool, +} + /// Combined name resolution and special form expansion visitor. /// /// Resolves every path in the AST against the module namespace, rewrites @@ -96,7 +103,7 @@ pub struct Expander<'env, 'heap, S> { current_universe: Universe, diagnostics: ExpanderDiagnosticIssues, - current_item: Option>, + current_item: Option>, trampoline: Option>, special_form_module: module::ModuleId, } @@ -155,7 +162,7 @@ impl<'env, 'heap, S> Expander<'env, 'heap, S> { /// Returns `None` when the expression resolved to a local binding, /// was not a path, or resolution failed (in which case the expression /// is replaced with [`Expr::dummy`]). - fn visit(&mut self, expr: &mut node::expr::Expr<'heap>) -> Option> + fn visit(&mut self, expr: &mut node::expr::Expr<'heap>) -> Option> where S: BumpAllocator, { @@ -257,12 +264,13 @@ where S: BumpAllocator, { fn visit_path(&mut self, path: &mut node::path::Path<'heap>) { - self.current_item = None; visit::walk_path(self, path); + self.current_item = None; let [modules @ .., ident] = &*path.segments else { self.diagnostics.push(error::empty_path(path.span)); self.trampoline = Some(node::expr::Expr::dummy()); + return; }; @@ -270,6 +278,7 @@ where if let Some(diagnostic) = error::generic_arguments_in_module(modules) { self.diagnostics.push(diagnostic); self.trampoline = Some(node::expr::Expr::dummy()); + return; } @@ -295,6 +304,7 @@ where error, )); self.trampoline = Some(node::expr::Expr::dummy()); + return; } }; @@ -312,7 +322,10 @@ where Reference::Item(item) => item, }; - self.current_item = Some(item); + self.current_item = Some(CurrentItem { + item, + has_arguments: !ident.arguments.is_empty(), + }); match item.kind { ItemKind::Intrinsic(IntrinsicItem::Type(IntrinsicTypeItem { name })) @@ -326,6 +339,7 @@ where self.diagnostics .push(error::intrinsic_generic_arguments(ident)); self.trampoline = Some(node::expr::Expr::dummy()); + return; } ItemKind::Intrinsic(IntrinsicItem::Value(_)) @@ -334,6 +348,7 @@ where self.diagnostics .push(error::intrinsic_generic_arguments(ident)); self.trampoline = Some(node::expr::Expr::dummy()); + return; } ItemKind::Module(_) @@ -350,6 +365,7 @@ where absolute_path.len(), )); self.trampoline = Some(node::expr::Expr::dummy()); + return; } @@ -367,7 +383,7 @@ where value: sym::dummy, kind: hashql_core::symbol::IdentKind::Lexical, }, - arguments: heap::Vec::new_in(self.namespace.registry().heap), + arguments: heap::Vec::new_in(self.heap), }, padding, )); @@ -383,9 +399,13 @@ where fn visit_call_expr(&mut self, expr: &mut node::expr::CallExpr<'heap>) { let item = self.visit(&mut expr.function); - if let Some(Item { - kind: module::item::ItemKind::Intrinsic(IntrinsicItem::Value(value)), - .. + if let Some(CurrentItem { + item: + Item { + kind: module::item::ItemKind::Intrinsic(IntrinsicItem::Value(value)), + .. + }, + has_arguments: _, // We ignore it so that we can continue to lower here }) = item && let Some(constant) = value.name.as_constant() { diff --git a/libs/@local/hashql/ast/src/lower/expander/type.rs b/libs/@local/hashql/ast/src/lower/expander/type.rs index e54033ffe43..fb328096e42 100644 --- a/libs/@local/hashql/ast/src/lower/expander/type.rs +++ b/libs/@local/hashql/ast/src/lower/expander/type.rs @@ -11,7 +11,7 @@ use hashql_core::{ symbol::{Ident, sym}, }; -use super::{Expander, error::ExpanderDiagnosticIssues}; +use super::{CurrentItem, Expander, error::ExpanderDiagnosticIssues}; use crate::{ lower::expander::error, node::{ @@ -40,10 +40,15 @@ where return Type::dummy(); } - let Some(Item { - module: _, - name: _, - kind: hashql_core::module::item::ItemKind::Intrinsic(IntrinsicItem::Type(type_intrinsic)), + let Some(CurrentItem { + item: + Item { + module: _, + name: _, + kind: + hashql_core::module::item::ItemKind::Intrinsic(IntrinsicItem::Type(type_intrinsic)), + }, + has_arguments: _, // We don't care here, intrinsics never have arguments }) = expander.with_universe(hashql_core::module::Universe::Type, |expander| { expander.visit(&mut call.function) }) @@ -384,17 +389,20 @@ where expander.visit(&mut value) }); - if let Some( - item @ Item { - kind: - hashql_core::module::item::ItemKind::Intrinsic(IntrinsicItem::Type( - IntrinsicTypeItem { - name: intrinsic_name, - }, - )), - .. - }, - ) = item + if let Some(CurrentItem { + item: + item @ Item { + kind: + hashql_core::module::item::ItemKind::Intrinsic(IntrinsicItem::Type( + IntrinsicTypeItem { + name: intrinsic_name, + }, + )), + .. + }, + // We cannot replace an alias with arguments, because we'd lose the arguments + has_arguments: false, + }) = item && let Some(const_name) = intrinsic_name.as_constant() && matches!( const_name, diff --git a/libs/@local/hashql/ast/tests/ui/lower/expander/pre-expansion-name-resolver/alias-absolute-path.stdout b/libs/@local/hashql/ast/tests/ui/lower/expander/pre-expansion-name-resolver/alias-absolute-path.stdout index 29c004f34b0..dd8729ec5b1 100644 --- a/libs/@local/hashql/ast/tests/ui/lower/expander/pre-expansion-name-resolver/alias-absolute-path.stdout +++ b/libs/@local/hashql/ast/tests/ui/lower/expander/pre-expansion-name-resolver/alias-absolute-path.stdout @@ -1,21 +1,30 @@ -Expr#4294967040@24 - ExprKind (Call) - CallExpr#4294967040@24 - Expr#4294967040@19 +Expr#4294967040@25 + ExprKind (Let) + LetExpr#4294967040@25 (name: a) + Expr#4294967040@15 ExprKind (Path) - Path#4294967040@19 (rooted: true) - PathSegment#4294967040@18 (name: core) - PathSegment#4294967040@18 (name: math) - PathSegment#4294967040@18 (name: add) - Argument#4294967040@21 - Expr#4294967040@21 - ExprKind (Literal) - LiteralExpr#4294967040@20 - Primitive (Integer) - Integer (1) - Argument#4294967040@23 - Expr#4294967040@23 - ExprKind (Literal) - LiteralExpr#4294967040@22 - Primitive (Integer) - Integer (2) + Path#4294967040@15 (rooted: true) + PathSegment#4294967040@10 (name: core) + PathSegment#4294967040@12 (name: math) + PathSegment#4294967040@14 (name: add) + Expr#4294967040@24 + ExprKind (Call) + CallExpr#4294967040@24 + Expr#4294967040@19 + ExprKind (Path) + Path#4294967040@19 (rooted: true) + PathSegment#4294967040@18 (name: core) + PathSegment#4294967040@18 (name: math) + PathSegment#4294967040@18 (name: add) + Argument#4294967040@21 + Expr#4294967040@21 + ExprKind (Literal) + LiteralExpr#4294967040@20 + Primitive (Integer) + Integer (1) + Argument#4294967040@23 + Expr#4294967040@23 + ExprKind (Literal) + LiteralExpr#4294967040@22 + Primitive (Integer) + Integer (2) diff --git a/libs/@local/hashql/ast/tests/ui/lower/expander/pre-expansion-name-resolver/alias-symbol.stdout b/libs/@local/hashql/ast/tests/ui/lower/expander/pre-expansion-name-resolver/alias-symbol.stdout index 7eb35477b2c..ec21b0e3aec 100644 --- a/libs/@local/hashql/ast/tests/ui/lower/expander/pre-expansion-name-resolver/alias-symbol.stdout +++ b/libs/@local/hashql/ast/tests/ui/lower/expander/pre-expansion-name-resolver/alias-symbol.stdout @@ -1,19 +1,28 @@ -Expr#4294967040@20 - ExprKind (Call) - CallExpr#4294967040@20 - Expr#4294967040@15 +Expr#4294967040@21 + ExprKind (Let) + LetExpr#4294967040@21 (name: !&&) + Expr#4294967040@11 ExprKind (Path) - Path#4294967040@15 (rooted: true) - PathSegment#4294967040@14 (name: core) - PathSegment#4294967040@14 (name: bool) - PathSegment#4294967040@14 (name: and) - Argument#4294967040@17 - Expr#4294967040@17 - ExprKind (Literal) - LiteralExpr#4294967040@16 - Primitive (True) - Argument#4294967040@19 - Expr#4294967040@19 - ExprKind (Literal) - LiteralExpr#4294967040@18 - Primitive (False) + Path#4294967040@11 (rooted: true) + PathSegment#4294967040@10 (name: core) + PathSegment#4294967040@10 (name: bool) + PathSegment#4294967040@10 (name: and) + Expr#4294967040@20 + ExprKind (Call) + CallExpr#4294967040@20 + Expr#4294967040@15 + ExprKind (Path) + Path#4294967040@15 (rooted: true) + PathSegment#4294967040@14 (name: core) + PathSegment#4294967040@14 (name: bool) + PathSegment#4294967040@14 (name: and) + Argument#4294967040@17 + Expr#4294967040@17 + ExprKind (Literal) + LiteralExpr#4294967040@16 + Primitive (True) + Argument#4294967040@19 + Expr#4294967040@19 + ExprKind (Literal) + LiteralExpr#4294967040@18 + Primitive (False) diff --git a/libs/@local/hashql/ast/tests/ui/lower/expander/pre-expansion-name-resolver/newtype-4.jsonc b/libs/@local/hashql/ast/tests/ui/lower/expander/pre-expansion-name-resolver/newtype-4.jsonc deleted file mode 100644 index 2d63d131230..00000000000 --- a/libs/@local/hashql/ast/tests/ui/lower/expander/pre-expansion-name-resolver/newtype-4.jsonc +++ /dev/null @@ -1,3 +0,0 @@ -//@ run: pass -//@ description: Test that `newtype/4` is resolved to `::kernel::special_form::newtype`, but that no aliases are created. -["newtype", "a", "Int", "b", ["+", "a", "c"]] diff --git a/libs/@local/hashql/ast/tests/ui/lower/expander/pre-expansion-name-resolver/newtype-4.stdout b/libs/@local/hashql/ast/tests/ui/lower/expander/pre-expansion-name-resolver/newtype-4.stdout deleted file mode 100644 index 98d7f99057a..00000000000 --- a/libs/@local/hashql/ast/tests/ui/lower/expander/pre-expansion-name-resolver/newtype-4.stdout +++ /dev/null @@ -1,44 +0,0 @@ -Expr#4294967040@29 - ExprKind (Call) - CallExpr#4294967040@29 - Expr#4294967040@3 - ExprKind (Path) - Path#4294967040@3 (rooted: true) - PathSegment#4294967040@2 (name: kernel) - PathSegment#4294967040@2 (name: special_form) - PathSegment#4294967040@2 (name: newtype) - Argument#4294967040@7 - Expr#4294967040@7 - ExprKind (Path) - Path#4294967040@7 (rooted: false) - PathSegment#4294967040@6 (name: a) - Argument#4294967040@11 - Expr#4294967040@11 - ExprKind (Path) - Path#4294967040@11 (rooted: false) - PathSegment#4294967040@10 (name: Int) - Argument#4294967040@15 - Expr#4294967040@15 - ExprKind (Path) - Path#4294967040@15 (rooted: false) - PathSegment#4294967040@14 (name: b) - Argument#4294967040@28 - Expr#4294967040@28 - ExprKind (Call) - CallExpr#4294967040@28 - Expr#4294967040@19 - ExprKind (Path) - Path#4294967040@19 (rooted: true) - PathSegment#4294967040@18 (name: core) - PathSegment#4294967040@18 (name: math) - PathSegment#4294967040@18 (name: add) - Argument#4294967040@23 - Expr#4294967040@23 - ExprKind (Path) - Path#4294967040@23 (rooted: false) - PathSegment#4294967040@22 (name: a) - Argument#4294967040@27 - Expr#4294967040@27 - ExprKind (Path) - Path#4294967040@27 (rooted: false) - PathSegment#4294967040@26 (name: c) diff --git a/libs/@local/hashql/ast/tests/ui/lower/expander/pre-expansion-name-resolver/re-assign-prelude-diverging.stdout b/libs/@local/hashql/ast/tests/ui/lower/expander/pre-expansion-name-resolver/re-assign-prelude-diverging.stdout index 3241f66d218..529dd5cbb13 100644 --- a/libs/@local/hashql/ast/tests/ui/lower/expander/pre-expansion-name-resolver/re-assign-prelude-diverging.stdout +++ b/libs/@local/hashql/ast/tests/ui/lower/expander/pre-expansion-name-resolver/re-assign-prelude-diverging.stdout @@ -5,27 +5,36 @@ Expr#4294967040@43 ExprKind (Literal) LiteralExpr#4294967040@4 Primitive (True) - Expr#4294967040@26 - ExprKind (Call) - CallExpr#4294967040@26 - Expr#4294967040@21 + Expr#4294967040@27 + ExprKind (Let) + LetExpr#4294967040@27 (name: let) + Expr#4294967040@17 ExprKind (Path) - Path#4294967040@21 (rooted: true) - PathSegment#4294967040@20 (name: core) - PathSegment#4294967040@20 (name: math) - PathSegment#4294967040@20 (name: add) - Argument#4294967040@23 - Expr#4294967040@23 - ExprKind (Literal) - LiteralExpr#4294967040@22 - Primitive (Integer) - Integer (1) - Argument#4294967040@25 - Expr#4294967040@25 - ExprKind (Literal) - LiteralExpr#4294967040@24 - Primitive (Integer) - Integer (2) + Path#4294967040@17 (rooted: true) + PathSegment#4294967040@16 (name: core) + PathSegment#4294967040@16 (name: math) + PathSegment#4294967040@16 (name: add) + Expr#4294967040@26 + ExprKind (Call) + CallExpr#4294967040@26 + Expr#4294967040@21 + ExprKind (Path) + Path#4294967040@21 (rooted: true) + PathSegment#4294967040@20 (name: core) + PathSegment#4294967040@20 (name: math) + PathSegment#4294967040@20 (name: add) + Argument#4294967040@23 + Expr#4294967040@23 + ExprKind (Literal) + LiteralExpr#4294967040@22 + Primitive (Integer) + Integer (1) + Argument#4294967040@25 + Expr#4294967040@25 + ExprKind (Literal) + LiteralExpr#4294967040@24 + Primitive (Integer) + Integer (2) Expr#4294967040@42 ExprKind (Let) LetExpr#4294967040@42 (name: a) diff --git a/libs/@local/hashql/ast/tests/ui/lower/expander/pre-expansion-name-resolver/re-assign.jsonc b/libs/@local/hashql/ast/tests/ui/lower/expander/pre-expansion-name-resolver/re-assign.jsonc index 0279d7084fd..be00d4415ab 100644 --- a/libs/@local/hashql/ast/tests/ui/lower/expander/pre-expansion-name-resolver/re-assign.jsonc +++ b/libs/@local/hashql/ast/tests/ui/lower/expander/pre-expansion-name-resolver/re-assign.jsonc @@ -4,5 +4,5 @@ ["let", "c", {"#literal": 1}, ["let", "b", "c", ["let", "a", "b", - ["a", {"#literal": 1}, {"#literal": 3}] + ["+", "a", {"#literal": 3}] ]]] diff --git a/libs/@local/hashql/ast/tests/ui/lower/expander/pre-expansion-name-resolver/re-assign.stdout b/libs/@local/hashql/ast/tests/ui/lower/expander/pre-expansion-name-resolver/re-assign.stdout index c985d638d83..8af742d8902 100644 --- a/libs/@local/hashql/ast/tests/ui/lower/expander/pre-expansion-name-resolver/re-assign.stdout +++ b/libs/@local/hashql/ast/tests/ui/lower/expander/pre-expansion-name-resolver/re-assign.stdout @@ -1,79 +1,42 @@ Expr#4294967040@47 - ExprKind (Call) - CallExpr#4294967040@47 - Expr#4294967040@3 - ExprKind (Path) - Path#4294967040@3 (rooted: true) - PathSegment#4294967040@2 (name: kernel) - PathSegment#4294967040@2 (name: special_form) - PathSegment#4294967040@2 (name: let) - Argument#4294967040@7 - Expr#4294967040@7 - ExprKind (Path) - Path#4294967040@7 (rooted: false) - PathSegment#4294967040@6 (name: c) - Argument#4294967040@11 - Expr#4294967040@11 - ExprKind (Path) - Path#4294967040@11 (rooted: false) - PathSegment#4294967040@10 (name: d) - Argument#4294967040@46 - Expr#4294967040@46 - ExprKind (Call) - CallExpr#4294967040@46 - Expr#4294967040@15 - ExprKind (Path) - Path#4294967040@15 (rooted: true) - PathSegment#4294967040@14 (name: kernel) - PathSegment#4294967040@14 (name: special_form) - PathSegment#4294967040@14 (name: let) - Argument#4294967040@19 - Expr#4294967040@19 - ExprKind (Path) - Path#4294967040@19 (rooted: false) - PathSegment#4294967040@18 (name: b) - Argument#4294967040@23 - Expr#4294967040@23 - ExprKind (Path) - Path#4294967040@23 (rooted: false) - PathSegment#4294967040@22 (name: d) - Argument#4294967040@45 - Expr#4294967040@45 - ExprKind (Call) - CallExpr#4294967040@45 - Expr#4294967040@27 - ExprKind (Path) - Path#4294967040@27 (rooted: true) - PathSegment#4294967040@26 (name: kernel) - PathSegment#4294967040@26 (name: special_form) - PathSegment#4294967040@26 (name: let) - Argument#4294967040@31 - Expr#4294967040@31 + ExprKind (Let) + LetExpr#4294967040@47 (name: c) + Expr#4294967040@9 + ExprKind (Literal) + LiteralExpr#4294967040@8 + Primitive (Integer) + Integer (1) + Expr#4294967040@46 + ExprKind (Let) + LetExpr#4294967040@46 (name: b) + Expr#4294967040@21 + ExprKind (Path) + Path#4294967040@21 (rooted: false) + PathSegment#4294967040@20 (name: c) + Expr#4294967040@45 + ExprKind (Let) + LetExpr#4294967040@45 (name: a) + Expr#4294967040@33 + ExprKind (Path) + Path#4294967040@33 (rooted: false) + PathSegment#4294967040@32 (name: b) + Expr#4294967040@44 + ExprKind (Call) + CallExpr#4294967040@44 + Expr#4294967040@37 ExprKind (Path) - Path#4294967040@31 (rooted: false) - PathSegment#4294967040@30 (name: a) - Argument#4294967040@35 - Expr#4294967040@35 - ExprKind (Path) - Path#4294967040@35 (rooted: false) - PathSegment#4294967040@34 (name: d) - Argument#4294967040@44 - Expr#4294967040@44 - ExprKind (Call) - CallExpr#4294967040@44 - Expr#4294967040@39 - ExprKind (Path) - Path#4294967040@39 (rooted: false) - PathSegment#4294967040@38 (name: d) - Argument#4294967040@41 - Expr#4294967040@41 - ExprKind (Literal) - LiteralExpr#4294967040@40 - Primitive (Integer) - Integer (1) - Argument#4294967040@43 - Expr#4294967040@43 - ExprKind (Literal) - LiteralExpr#4294967040@42 - Primitive (Integer) - Integer (3) + Path#4294967040@37 (rooted: true) + PathSegment#4294967040@36 (name: core) + PathSegment#4294967040@36 (name: math) + PathSegment#4294967040@36 (name: add) + Argument#4294967040@41 + Expr#4294967040@41 + ExprKind (Path) + Path#4294967040@41 (rooted: false) + PathSegment#4294967040@40 (name: a) + Argument#4294967040@43 + Expr#4294967040@43 + ExprKind (Literal) + LiteralExpr#4294967040@42 + Primitive (Integer) + Integer (3) diff --git a/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/access-2.jsonc b/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/access-2.jsonc index d9b6a00257d..fd9e4454206 100644 --- a/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/access-2.jsonc +++ b/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/access-2.jsonc @@ -1,3 +1,3 @@ //@ run: pass //@ description: access/2 should compile -["::kernel::special_form::access", "x", "y"] +["::kernel::special_form::access", { "#literal": 1 }, { "#literal": 2 }] diff --git a/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/access-2.stdout b/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/access-2.stdout index bf7fa2f6400..ca3c7e99213 100644 --- a/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/access-2.stdout +++ b/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/access-2.stdout @@ -1,7 +1,8 @@ -Expr#4294967040@16 +Expr#4294967040@12 ExprKind (Field) - FieldExpr#4294967040@16 (field: y) - Expr#4294967040@11 - ExprKind (Path) - Path#4294967040@11 (rooted: false) - PathSegment#4294967040@10 (name: x) + FieldExpr#4294967040@12 (field: 2) + Expr#4294967040@9 + ExprKind (Literal) + LiteralExpr#4294967040@8 + Primitive (Integer) + Integer (1) diff --git a/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/access-field-literal-valid.jsonc b/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/access-field-literal-valid.jsonc index ffae760bbd9..15d1bddb055 100644 --- a/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/access-field-literal-valid.jsonc +++ b/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/access-field-literal-valid.jsonc @@ -2,8 +2,8 @@ //@ description: Field access with valid integer literal should compile [ "fn", - [], - [["x", { "#tuple": ["Integer"] }]], + { "#tuple": [] }, + { "#struct": { "x": "Integer" } }, "_", ["::kernel::special_form::access", "x", { "#literal": 0 }] ] diff --git a/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/access-field-literal-valid.stdout b/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/access-field-literal-valid.stdout index a0039b09389..ff38cad02e8 100644 --- a/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/access-field-literal-valid.stdout +++ b/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/access-field-literal-valid.stdout @@ -1,7 +1,21 @@ -Expr#4294967040@14 - ExprKind (Field) - FieldExpr#4294967040@14 (field: 0) - Expr#4294967040@11 - ExprKind (Path) - Path#4294967040@11 (rooted: false) - PathSegment#4294967040@10 (name: tuple) +Expr#4294967040@32 + ExprKind (Closure) + ClosureExpr#4294967040@32 + ClosureSignature#4294967040@32 + Generics#4294967040@4 + ClosureParam#4294967040@12 (name: x) + Type#4294967040@11 + TypeKind (Path) + Path#4294967040@11 (rooted: true) + PathSegment#4294967040@10 (name: kernel) + PathSegment#4294967040@10 (name: type) + PathSegment#4294967040@10 (name: Integer) + Type#4294967040@16 + TypeKind (Infer) + Expr#4294967040@31 + ExprKind (Field) + FieldExpr#4294967040@31 (field: 0) + Expr#4294967040@28 + ExprKind (Path) + Path#4294967040@28 (rooted: false) + PathSegment#4294967040@27 (name: x) diff --git a/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/index-2.jsonc b/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/index-2.jsonc index faf162f1964..3819b7f96c8 100644 --- a/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/index-2.jsonc +++ b/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/index-2.jsonc @@ -1,3 +1,3 @@ //@ run: pass //@ description: index/2 should compile -["::kernel::special_form::index", "x", "y"] +["::kernel::special_form::index", { "#literal": 1 }, { "#literal": 2 }] diff --git a/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/index-2.stdout b/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/index-2.stdout index a8743f1e0d9..f707028a711 100644 --- a/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/index-2.stdout +++ b/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/index-2.stdout @@ -1,11 +1,13 @@ -Expr#4294967040@16 +Expr#4294967040@12 ExprKind (Index) - IndexExpr#4294967040@16 + IndexExpr#4294967040@12 + Expr#4294967040@9 + ExprKind (Literal) + LiteralExpr#4294967040@8 + Primitive (Integer) + Integer (1) Expr#4294967040@11 - ExprKind (Path) - Path#4294967040@11 (rooted: false) - PathSegment#4294967040@10 (name: x) - Expr#4294967040@15 - ExprKind (Path) - Path#4294967040@15 (rooted: false) - PathSegment#4294967040@14 (name: y) + ExprKind (Literal) + LiteralExpr#4294967040@10 + Primitive (Integer) + Integer (2) diff --git a/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/newtype-4.jsonc b/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/newtype-4.jsonc index 87631dae4d6..990df03e74a 100644 --- a/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/newtype-4.jsonc +++ b/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/newtype-4.jsonc @@ -4,7 +4,7 @@ "::kernel::special_form::newtype", "x", "Boolean", - ["+", "x", "x"], + ["+", { "#literal": true }, { "#literal": false }], { "#literal": true } //~^ ERROR unexpected argument ] diff --git a/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/newtype-4.stderr b/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/newtype-4.stderr index c97b34524d5..61d0c37b285 100644 --- a/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/newtype-4.stderr +++ b/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/newtype-4.stderr @@ -4,7 +4,7 @@ error[expander::invalid-argument-count]: Invalid argument count 4 │ ┃ "::kernel::special_form::newtype", 5 │ ┃ "x", 6 │ ┃ "Boolean", - 7 │ ┃ ["+", "x", "x"], + 7 │ ┃ ["+", { "#literal": true }, { "#literal": false }], 8 │ ┃ { "#literal": true } │ ┃ ──────────────────── unexpected argument 9 │ ┃ //~^ ERROR unexpected argument diff --git a/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/type-expr-call-intersection.jsonc b/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/type-expr-call-intersection.jsonc index f3fc8ba492b..2d5e6546aaa 100644 --- a/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/type-expr-call-intersection.jsonc +++ b/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/type-expr-call-intersection.jsonc @@ -1,3 +1,3 @@ //@ run: pass //@ description: Invoking `::kernel::types::intersection` should convert into a intersection type expression -["::kernel::special_form::as", { "#literal": true }, ["&", "Integer", "Float"]] +["::kernel::special_form::as", { "#literal": true }, ["&", "Integer", "Number"]] diff --git a/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/type-expr-call-intersection.stdout b/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/type-expr-call-intersection.stdout index 8803f54ebc5..b21f91e6713 100644 --- a/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/type-expr-call-intersection.stdout +++ b/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/type-expr-call-intersection.stdout @@ -1,18 +1,22 @@ -Expr#4294967040@27 +Expr#4294967040@23 ExprKind (As) - AsExpr#4294967040@27 + AsExpr#4294967040@23 Expr#4294967040@9 ExprKind (Literal) LiteralExpr#4294967040@8 Primitive (True) - Type#4294967040@26 + Type#4294967040@22 TypeKind (Intersection) - IntersectionType#4294967040@26 - Type#4294967040@21 + IntersectionType#4294967040@22 + Type#4294967040@17 TypeKind (Path) - Path#4294967040@21 (rooted: false) - PathSegment#4294967040@20 (name: Int) - Type#4294967040@25 + Path#4294967040@17 (rooted: true) + PathSegment#4294967040@16 (name: kernel) + PathSegment#4294967040@16 (name: type) + PathSegment#4294967040@16 (name: Integer) + Type#4294967040@21 TypeKind (Path) - Path#4294967040@25 (rooted: false) - PathSegment#4294967040@24 (name: Float) + Path#4294967040@21 (rooted: true) + PathSegment#4294967040@20 (name: kernel) + PathSegment#4294967040@20 (name: type) + PathSegment#4294967040@20 (name: Number) diff --git a/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/type-expr-call-not-path.jsonc b/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/type-expr-call-not-path.jsonc index 80efaefff35..4ceb3422917 100644 --- a/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/type-expr-call-not-path.jsonc +++ b/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/type-expr-call-not-path.jsonc @@ -5,7 +5,8 @@ { "#literal": true }, [ ["+", { "#literal": 1 }, { "#literal": 2 }], - //~^ ERROR cannot use this as a type constructor + //~^ ERROR cannot find `+` in this scope + //~| ERROR cannot use this as a type constructor "Integer", "Number" ] diff --git a/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/type-expr-call-not-path.stderr b/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/type-expr-call-not-path.stderr index 549c26c45a8..bcf5e1965f3 100644 --- a/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/type-expr-call-not-path.stderr +++ b/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/type-expr-call-not-path.stderr @@ -3,10 +3,9 @@ error[expander::invalid-type-constructor-call]: Invalid type constructor call 6 │ ┌ [ 7 │ │ ["+", { "#literal": 1 }, { "#literal": 2 }], │ │ ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ cannot use this as a type constructor - 8 │ │ //~^ ERROR cannot use this as a type constructor - 9 │ │ "Integer", -10 │ │ "Number" -11 │ │ ] + ‡ │ +11 │ │ "Number" +12 │ │ ] │ └───┘ this call appears in a type position │ ├ help: use a type path directly, or use `(| ...)` / `(& ...)` for unions and intersections diff --git a/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/type-expr-call-union.jsonc b/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/type-expr-call-union.jsonc index 925aa586ce1..b5a9d96b9ea 100644 --- a/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/type-expr-call-union.jsonc +++ b/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/type-expr-call-union.jsonc @@ -1,3 +1,3 @@ //@ run: pass //@ description: Invoking `::kernel::types::union` should convert into a union type expression -["::kernel::special_form::as", { "#literal": true }, ["|", "Integer", "Float"]] +["::kernel::special_form::as", { "#literal": true }, ["|", "Integer", "Number"]] diff --git a/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/type-expr-call-union.stdout b/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/type-expr-call-union.stdout index 37f72288b1d..0e3e6107fe4 100644 --- a/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/type-expr-call-union.stdout +++ b/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/type-expr-call-union.stdout @@ -1,18 +1,22 @@ -Expr#4294967040@27 +Expr#4294967040@23 ExprKind (As) - AsExpr#4294967040@27 + AsExpr#4294967040@23 Expr#4294967040@9 ExprKind (Literal) LiteralExpr#4294967040@8 Primitive (True) - Type#4294967040@26 + Type#4294967040@22 TypeKind (Union) - UnionType#4294967040@26 - Type#4294967040@21 + UnionType#4294967040@22 + Type#4294967040@17 TypeKind (Path) - Path#4294967040@21 (rooted: false) - PathSegment#4294967040@20 (name: Int) - Type#4294967040@25 + Path#4294967040@17 (rooted: true) + PathSegment#4294967040@16 (name: kernel) + PathSegment#4294967040@16 (name: type) + PathSegment#4294967040@16 (name: Integer) + Type#4294967040@21 TypeKind (Path) - Path#4294967040@25 (rooted: false) - PathSegment#4294967040@24 (name: Float) + Path#4294967040@21 (rooted: true) + PathSegment#4294967040@20 (name: kernel) + PathSegment#4294967040@20 (name: type) + PathSegment#4294967040@20 (name: Number) diff --git a/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/use-3.jsonc b/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/use-3.jsonc index e81edc8043e..71e318826f6 100644 --- a/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/use-3.jsonc +++ b/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/use-3.jsonc @@ -3,6 +3,6 @@ [ "::kernel::special_form::use", "::core::math", - { "#tuple": ["pi"] }, + { "#tuple": ["sqrt"] }, { "#literal": 0 } ] diff --git a/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/use-3.stdout b/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/use-3.stdout index 02d9613cb16..2af30ba662d 100644 --- a/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/use-3.stdout +++ b/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/use-3.stdout @@ -1,11 +1,5 @@ -Expr#4294967040@22 - ExprKind (Use) - UseExpr#4294967040@22 - Path#4294967040@11 (rooted: true) - PathSegment#4294967040@10 (name: math) - UseKind (Named) - UseBinding#4294967040@15 (name: pi) - Expr#4294967040@21 - ExprKind (Path) - Path#4294967040@21 (rooted: false) - PathSegment#4294967040@20 (name: x) +Expr#4294967040@21 + ExprKind (Literal) + LiteralExpr#4294967040@20 + Primitive (Integer) + Integer (0) diff --git a/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/use-struct.jsonc b/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/use-struct.jsonc index 5f6707b3fe3..af2735df683 100644 --- a/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/use-struct.jsonc +++ b/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/use-struct.jsonc @@ -3,6 +3,6 @@ [ "::kernel::special_form::use", "::core::math", - { "#struct": { "x": "y", "z": "_" } }, + { "#struct": { "sqrt": "y", "cbrt": "_" } }, { "#literal": 0 } ] diff --git a/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/use-struct.stdout b/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/use-struct.stdout index 5ab2ccc759a..1f98ff9062f 100644 --- a/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/use-struct.stdout +++ b/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/use-struct.stdout @@ -1,12 +1,5 @@ -Expr#4294967040@30 - ExprKind (Use) - UseExpr#4294967040@30 - Path#4294967040@11 (rooted: true) - PathSegment#4294967040@10 (name: math) - UseKind (Named) - UseBinding#4294967040@18 (name: x, alias: y) - UseBinding#4294967040@23 (name: z) - Expr#4294967040@29 - ExprKind (Path) - Path#4294967040@29 (rooted: false) - PathSegment#4294967040@28 (name: x) +Expr#4294967040@29 + ExprKind (Literal) + LiteralExpr#4294967040@28 + Primitive (Integer) + Integer (0) diff --git a/libs/@local/hashql/ast/tests/ui/lower/name-mangler/newtype-generics.jsonc b/libs/@local/hashql/ast/tests/ui/lower/name-mangler/newtype-generics.jsonc index f4997dcbb4d..67c54f9f802 100644 --- a/libs/@local/hashql/ast/tests/ui/lower/name-mangler/newtype-generics.jsonc +++ b/libs/@local/hashql/ast/tests/ui/lower/name-mangler/newtype-generics.jsonc @@ -2,7 +2,7 @@ //@ description: mangle the name of the generics [ "newtype", - "Foo", + "Foo", { "#struct": { "foo": "T", "bar": "U", "baz": "V", "inner": "Foo" } }, diff --git a/libs/@local/hashql/ast/tests/ui/lower/name-mangler/newtype-generics.stdout b/libs/@local/hashql/ast/tests/ui/lower/name-mangler/newtype-generics.stdout index 8f80baff772..89a2500a7d9 100644 --- a/libs/@local/hashql/ast/tests/ui/lower/name-mangler/newtype-generics.stdout +++ b/libs/@local/hashql/ast/tests/ui/lower/name-mangler/newtype-generics.stdout @@ -4,17 +4,19 @@ Expr#4294967040@70 GenericConstraint#4294967040@10 (name: T:0) Type#4294967040@9 TypeKind (Path) - Path#4294967040@9 (rooted: false) - PathSegment#4294967040@8 (name: Bar) + Path#4294967040@9 (rooted: true) + PathSegment#4294967040@8 (name: kernel) + PathSegment#4294967040@8 (name: type) + PathSegment#4294967040@8 (name: Number) GenericConstraint#4294967040@15 (name: U:0) Type#4294967040@14 TypeKind (Path) Path#4294967040@14 (rooted: false) PathSegment#4294967040@13 (name: V:0) GenericConstraint#4294967040@20 (name: V:0) - Type#4294967040@66 + Type#4294967040@67 TypeKind (Struct) - StructType#4294967040@66 + StructType#4294967040@67 StructField#4294967040@29 (name: foo) Type#4294967040@28 TypeKind (Path) diff --git a/libs/@local/hashql/ast/tests/ui/lower/name-mangler/newtype.jsonc b/libs/@local/hashql/ast/tests/ui/lower/name-mangler/newtype.jsonc index 0d423afd218..e4116437210 100644 --- a/libs/@local/hashql/ast/tests/ui/lower/name-mangler/newtype.jsonc +++ b/libs/@local/hashql/ast/tests/ui/lower/name-mangler/newtype.jsonc @@ -1,3 +1,3 @@ //@ run: pass //@ description: mangle the name of a simple type expression -["newtype", "T", "X", ["as", "T", "T"]] +["let", "T", { "#literal": 1 }, ["newtype", "T", "Number", ["as", "T", "T"]]] diff --git a/libs/@local/hashql/ast/tests/ui/lower/name-mangler/newtype.stdout b/libs/@local/hashql/ast/tests/ui/lower/name-mangler/newtype.stdout index 72966aec918..1ca18f90635 100644 --- a/libs/@local/hashql/ast/tests/ui/lower/name-mangler/newtype.stdout +++ b/libs/@local/hashql/ast/tests/ui/lower/name-mangler/newtype.stdout @@ -1,18 +1,28 @@ -Expr#4294967040@25 - ExprKind (NewType) - NewTypeExpr#4294967040@25 (name: T:0) - Type#4294967040@11 - TypeKind (Path) - Path#4294967040@11 (rooted: false) - PathSegment#4294967040@10 (name: X) - Expr#4294967040@24 - ExprKind (As) - AsExpr#4294967040@24 - Expr#4294967040@19 - ExprKind (Path) - Path#4294967040@19 (rooted: false) - PathSegment#4294967040@18 (name: T:0) - Type#4294967040@23 +Expr#4294967040@36 + ExprKind (Let) + LetExpr#4294967040@36 (name: T:0) + Expr#4294967040@9 + ExprKind (Literal) + LiteralExpr#4294967040@8 + Primitive (Integer) + Integer (1) + Expr#4294967040@35 + ExprKind (NewType) + NewTypeExpr#4294967040@35 (name: T:1) + Type#4294967040@21 TypeKind (Path) - Path#4294967040@23 (rooted: false) - PathSegment#4294967040@22 (name: T:0) + Path#4294967040@21 (rooted: true) + PathSegment#4294967040@20 (name: kernel) + PathSegment#4294967040@20 (name: type) + PathSegment#4294967040@20 (name: Number) + Expr#4294967040@34 + ExprKind (As) + AsExpr#4294967040@34 + Expr#4294967040@29 + ExprKind (Path) + Path#4294967040@29 (rooted: false) + PathSegment#4294967040@28 (name: T:1) + Type#4294967040@33 + TypeKind (Path) + Path#4294967040@33 (rooted: false) + PathSegment#4294967040@32 (name: T:1) diff --git a/libs/@local/hashql/ast/tests/ui/lower/name-mangler/onion.jsonc b/libs/@local/hashql/ast/tests/ui/lower/name-mangler/onion.jsonc index e64d6f0a549..6300fc472a6 100644 --- a/libs/@local/hashql/ast/tests/ui/lower/name-mangler/onion.jsonc +++ b/libs/@local/hashql/ast/tests/ui/lower/name-mangler/onion.jsonc @@ -3,7 +3,7 @@ [ "type", "T", - "U", + "Number", [ "*", [ diff --git a/libs/@local/hashql/ast/tests/ui/lower/name-mangler/onion.stdout b/libs/@local/hashql/ast/tests/ui/lower/name-mangler/onion.stdout index ea1ce33f869..b4c5b0651ba 100644 --- a/libs/@local/hashql/ast/tests/ui/lower/name-mangler/onion.stdout +++ b/libs/@local/hashql/ast/tests/ui/lower/name-mangler/onion.stdout @@ -1,49 +1,53 @@ -Expr#4294967040@62 +Expr#4294967040@58 ExprKind (Type) - TypeExpr#4294967040@62 (name: T:0) + TypeExpr#4294967040@58 (name: T:0) Type#4294967040@11 TypeKind (Path) - Path#4294967040@11 (rooted: false) - PathSegment#4294967040@10 (name: U) - Expr#4294967040@61 + Path#4294967040@11 (rooted: true) + PathSegment#4294967040@10 (name: kernel) + PathSegment#4294967040@10 (name: type) + PathSegment#4294967040@10 (name: Number) + Expr#4294967040@57 ExprKind (Call) - CallExpr#4294967040@61 + CallExpr#4294967040@57 Expr#4294967040@15 ExprKind (Path) Path#4294967040@15 (rooted: true) PathSegment#4294967040@14 (name: core) PathSegment#4294967040@14 (name: math) PathSegment#4294967040@14 (name: mul) - Argument#4294967040@47 - Expr#4294967040@47 + Argument#4294967040@45 + Expr#4294967040@45 ExprKind (Closure) - ClosureExpr#4294967040@47 - ClosureSignature#4294967040@47 + ClosureExpr#4294967040@45 + ClosureSignature#4294967040@45 Generics#4294967040@28 GenericParam#4294967040@23 (name: T:1) GenericParam#4294967040@27 (name: U:0) Type#4294967040@33 TypeKind (Infer) - Expr#4294967040@46 + Expr#4294967040@44 ExprKind (As) - AsExpr#4294967040@46 - Expr#4294967040@41 - ExprKind (Path) - Path#4294967040@41 (rooted: false) - PathSegment#4294967040@40 (name: a) - Type#4294967040@45 + AsExpr#4294967040@44 + Expr#4294967040@39 + ExprKind (Literal) + LiteralExpr#4294967040@38 + Primitive (Integer) + Integer (0) + Type#4294967040@43 TypeKind (Path) - Path#4294967040@45 (rooted: false) - PathSegment#4294967040@44 (name: T:1) - Argument#4294967040@60 - Expr#4294967040@60 + Path#4294967040@43 (rooted: false) + PathSegment#4294967040@42 (name: T:1) + Argument#4294967040@56 + Expr#4294967040@56 ExprKind (As) - AsExpr#4294967040@60 - Expr#4294967040@55 - ExprKind (Path) - Path#4294967040@55 (rooted: false) - PathSegment#4294967040@54 (name: a) - Type#4294967040@59 + AsExpr#4294967040@56 + Expr#4294967040@51 + ExprKind (Literal) + LiteralExpr#4294967040@50 + Primitive (Integer) + Integer (0) + Type#4294967040@55 TypeKind (Path) - Path#4294967040@59 (rooted: false) - PathSegment#4294967040@58 (name: T:0) + Path#4294967040@55 (rooted: false) + PathSegment#4294967040@54 (name: T:0) diff --git a/libs/@local/hashql/ast/tests/ui/lower/sanitizer/constraint.jsonc b/libs/@local/hashql/ast/tests/ui/lower/sanitizer/constraint.jsonc index e8440a7fb98..226f69268f1 100644 --- a/libs/@local/hashql/ast/tests/ui/lower/sanitizer/constraint.jsonc +++ b/libs/@local/hashql/ast/tests/ui/lower/sanitizer/constraint.jsonc @@ -2,7 +2,7 @@ //@ description: Generic constraints with bounds should be sanitized and error out [ "`+`", - //~^ ERROR `+` does not accept generic arguments + //~^ ERROR Remove this constraint from 'T' { "#literal": 1 }, { "#literal": 2 } ] diff --git a/libs/@local/hashql/hir/tests/ui/lower/alias-replacement/generic-reassignment.jsonc b/libs/@local/hashql/hir/tests/ui/lower/alias-replacement/generic-reassignment.jsonc index 67f58b52d40..3b1c85d02f2 100644 --- a/libs/@local/hashql/hir/tests/ui/lower/alias-replacement/generic-reassignment.jsonc +++ b/libs/@local/hashql/hir/tests/ui/lower/alias-replacement/generic-reassignment.jsonc @@ -4,12 +4,11 @@ "let", "foo", "core::math::add", - //~^ ERROR does not accept generic arguments [ "let", "bar", "foo", - //~^ ERROR does not accept generic arguments + //~^ ERROR additional type arguments are provided here "bar" ] ] diff --git a/libs/@local/hashql/hir/tests/ui/lower/alias-replacement/generic-reassignment.stderr b/libs/@local/hashql/hir/tests/ui/lower/alias-replacement/generic-reassignment.stderr index ff0a6486000..2f027539ae3 100644 --- a/libs/@local/hashql/hir/tests/ui/lower/alias-replacement/generic-reassignment.stderr +++ b/libs/@local/hashql/hir/tests/ui/lower/alias-replacement/generic-reassignment.stderr @@ -1,13 +1,10 @@ -error[lowering::expander::intrinsic-generic-arguments]: Generic arguments on intrinsic +error[lower::argument-override]: Cannot apply type arguments to already-parameterized variable ╭▸ -11 │ "foo", - │ ━━━━━━━━━━━ `foo` does not accept generic arguments + 6 │ "core::math::add", + │ ━━━━━━━━━━━━━━━━━━━━━━━━ `foo:0` was defined with type arguments here + ‡ +10 │ "foo", + │ ────── ... but additional type arguments are provided here │ - ╰ help: remove the generic arguments from `foo` - -error[lowering::expander::intrinsic-generic-arguments]: Generic arguments on intrinsic - ╭▸ -6 │ "core::math::add", - │ ━━━━━━━━━━━━ `add` does not accept generic arguments - │ - ╰ help: remove the generic arguments from `add` \ No newline at end of file + ├ help: The variable `foo:0` already represents `::core::math::add` with type arguments applied. Use `foo:0` directly without additional type arguments, or create a new binding if you need different type parameters. + ╰ note: Variables that alias parameterized expressions cannot have additional type arguments applied to them, as this would create ambiguous type parameter bindings. \ No newline at end of file diff --git a/libs/@local/hashql/hir/tests/ui/lower/alias-replacement/generics.stdout b/libs/@local/hashql/hir/tests/ui/lower/alias-replacement/generics.stdout index f1200444f50..7f30b009c46 100644 --- a/libs/@local/hashql/hir/tests/ui/lower/alias-replacement/generics.stdout +++ b/libs/@local/hashql/hir/tests/ui/lower/alias-replacement/generics.stdout @@ -1,7 +1,10 @@ ════ Initial HIR ═══════════════════════════════════════════════════════════════ -::core::math::add +let foo:0 = ::core::math::add, + bar:0 = foo:0 +in +bar:0 ════ HIR after alias replacement ═══════════════════════════════════════════════ -::core::math::add +::core::math::add diff --git a/libs/@local/hashql/hir/tests/ui/lower/alias-replacement/qualified-variable-alias.stdout b/libs/@local/hashql/hir/tests/ui/lower/alias-replacement/qualified-variable-alias.stdout index 0384b3742dc..b47a924b1cc 100644 --- a/libs/@local/hashql/hir/tests/ui/lower/alias-replacement/qualified-variable-alias.stdout +++ b/libs/@local/hashql/hir/tests/ui/lower/alias-replacement/qualified-variable-alias.stdout @@ -1,5 +1,8 @@ ════ Initial HIR ═══════════════════════════════════════════════════════════════ +let x:0 = ::core::math::add, + y:0 = ::core::math::add +in ::core::math::mul(::core::math::add, 2) ════ HIR after alias replacement ═══════════════════════════════════════════════ diff --git a/libs/@local/hashql/hir/tests/ui/lower/inference/intrinsics/assignment.stdout b/libs/@local/hashql/hir/tests/ui/lower/inference/intrinsics/assignment.stdout index ec88f239ee9..72fc653a599 100644 --- a/libs/@local/hashql/hir/tests/ui/lower/inference/intrinsics/assignment.stdout +++ b/libs/@local/hashql/hir/tests/ui/lower/inference/intrinsics/assignment.stdout @@ -1,13 +1,16 @@ ════ Initial HIR ═══════════════════════════════════════════════════════════════ -::core::math::add +let add:0 = ::core::math::add in ::core::math::add ════ HIR after type inference ══════════════════════════════════════════════════ -::core::math::add +let add:0 = ::core::math::add in ::core::math::add ════ Intrinsics ════════════════════════════════════════════════════════════════ ┌─ ::core::math::add └→ ::core::math::add +┌─ ::core::math::add +└→ ::core::math::add + diff --git a/libs/@local/hashql/hir/tests/ui/lower/inference/intrinsics/re-assignment.stdout b/libs/@local/hashql/hir/tests/ui/lower/inference/intrinsics/re-assignment.stdout index ec88f239ee9..2d34868739b 100644 --- a/libs/@local/hashql/hir/tests/ui/lower/inference/intrinsics/re-assignment.stdout +++ b/libs/@local/hashql/hir/tests/ui/lower/inference/intrinsics/re-assignment.stdout @@ -1,9 +1,15 @@ ════ Initial HIR ═══════════════════════════════════════════════════════════════ +let foo:0 = ::core::math::add, + bar:0 = ::core::math::add +in ::core::math::add ════ HIR after type inference ══════════════════════════════════════════════════ +let foo:0 = ::core::math::add, + bar:0 = ::core::math::add +in ::core::math::add ════ Intrinsics ════════════════════════════════════════════════════════════════ @@ -11,3 +17,9 @@ ┌─ ::core::math::add └→ ::core::math::add +┌─ ::core::math::add +└→ ::core::math::add + +┌─ ::core::math::add +└→ ::core::math::add + From 0e0548bb883744895a7d9b1cc73ea60f0758cb0b Mon Sep 17 00:00:00 2001 From: Bilal Mahmoud <7252775+indietyp@users.noreply.github.com> Date: Mon, 15 Jun 2026 18:35:03 +0200 Subject: [PATCH 42/55] feat: update snapshots --- .../hashql/ast/src/lower/expander/error.rs | 121 +- .../hashql/ast/src/lower/expander/mod.rs | 5 + .../hashql/ast/src/lower/expander/newtype.rs | 1 - libs/@local/hashql/ast/src/node/path.rs | 29 - .../continue/unresolved-nested.jsonc | 2 +- .../continue/unresolved-nested.stderr | 2 +- .../continue/unresolved-type.jsonc | 2 +- .../continue/unresolved-type.stderr | 2 +- .../continue/unresolved-value.jsonc | 2 +- .../continue/unresolved-value.stderr | 2 +- .../continue/use-not-found.jsonc | 2 +- .../continue/use-not-found.stderr | 2 +- .../import-resolver/item-not-found.jsonc | 2 +- .../import-resolver/item-not-found.stderr | 2 +- .../expander/import-resolver/rollback.jsonc | 2 +- .../expander/import-resolver/rollback.stderr | 2 +- .../import-resolver/unresolver-variable.jsonc | 2 +- .../unresolver-variable.stderr | 2 +- .../let-collect-all-errors.jsonc | 2 +- .../let-collect-all-errors.stderr | 2 +- .../not-enough-segments.jsonc | 2 +- .../not-enough-segments.stderr | 4 +- .../type-expr-call-arbitrary.jsonc | 2 +- .../type-expr-call-arbitrary.stderr | 2 +- .../type-expr-call-not-path.jsonc | 2 +- .../type-expr-call-not-path.stderr | 3 +- .../type-expr-invalid.jsonc | 2 +- .../type-expr-invalid.stderr | 4 +- .../unknown-special-form-typo.jsonc | 2 +- .../unknown-special-form-typo.stderr | 2 +- .../unknown-special-form.jsonc | 2 +- .../unknown-special-form.stderr | 2 +- .../special-form-type-position.jsonc | 2 +- .../special-form-type-position.stderr | 4 +- .../@local/hashql/compiletest/test-report.txt | 1848 ----------------- libs/@local/hashql/core/src/module/error.rs | 138 +- .../@local/hashql/core/src/module/resolver.rs | 61 +- 37 files changed, 340 insertions(+), 1930 deletions(-) delete mode 100644 libs/@local/hashql/compiletest/test-report.txt diff --git a/libs/@local/hashql/ast/src/lower/expander/error.rs b/libs/@local/hashql/ast/src/lower/expander/error.rs index 8fa86758882..39dd09618d6 100644 --- a/libs/@local/hashql/ast/src/lower/expander/error.rs +++ b/libs/@local/hashql/ast/src/lower/expander/error.rs @@ -5,7 +5,7 @@ use hashql_core::{ algorithms::did_you_mean, module::{ ModuleId, ModuleRegistry, Universe, - error::{ResolutionError, ResolutionSuggestion}, + error::{KindSet, ResolutionError, ResolutionSuggestion}, import::Import, item::Item, namespace::ModuleNamespace, @@ -498,19 +498,23 @@ pub(crate) fn from_resolution_error<'heap>( ResolutionError::ImportNotFound { depth, name, + expected, + found, suggestions, } => { if depth == 0 && path.segments.len() == 1 { - unresolved_variable(path, name, namespace, universe, &suggestions) + unresolved_variable(path, name, namespace, universe, found, &suggestions) } else { - import_not_found(path, depth, name, &suggestions) + import_not_found(path, depth, name, expected, found, &suggestions) } } ResolutionError::ItemNotFound { depth, name, + expected, + found, suggestions, - } => item_not_found(path, depth, name, &suggestions), + } => item_not_found(path, depth, name, expected, found, &suggestions), ResolutionError::Ambiguous(reference) => ambiguous_name(path, reference.name()), ResolutionError::ModuleEmpty { depth } => empty_module(path, depth), } @@ -542,22 +546,37 @@ pub(crate) fn from_import_resolution_error<'heap>( ResolutionError::ImportNotFound { depth, name, + expected, + found, suggestions, - } => import_not_found(path, depth, name, &suggestions), + } => import_not_found(path, depth, name, expected, found, &suggestions), ResolutionError::ItemNotFound { depth, name, + expected, + found, suggestions, } => { // For named imports, the item (binding name) is beyond the path segments. // Use the binding's span if available, otherwise fall back to the path span. if depth >= path.segments.len() { binding_name.map_or_else( - || item_not_found(path, depth.min(path.segments.len() - 1), name, &suggestions), - |binding| item_not_found_at(binding.span, path, name, &suggestions), + || { + item_not_found( + path, + depth.min(path.segments.len() - 1), + name, + expected, + found, + &suggestions, + ) + }, + |binding| { + item_not_found_at(binding.span, path, name, expected, found, &suggestions) + }, ) } else { - item_not_found(path, depth, name, &suggestions) + item_not_found(path, depth, name, expected, found, &suggestions) } } ResolutionError::Ambiguous(reference) => ambiguous_name(path, reference.name()), @@ -709,17 +728,26 @@ fn import_not_found<'heap>( path: &Path<'heap>, depth: usize, name: Symbol<'heap>, + expected: Option, + found: KindSet, suggestions: &[ResolutionSuggestion<'heap, Import<'heap>>], ) -> ExpanderDiagnostic { let segment = &path.segments[depth]; + let kind_label = expected.map(universe_noun).unwrap_or("name"); + let mut diagnostic = Diagnostic::new(ExpanderDiagnosticCategory::ImportNotFound, Severity::Error).primary( - Label::new(segment.name.span, format!("`{name}` is not imported")), + Label::new( + segment.name.span, + format!("{kind_label} `{name}` is not imported"), + ), ); diagnostic.add_label(Label::new(path.span, "in this path")); + emit_cross_universe_hint(&mut diagnostic, name, expected, found); + let emitted = SpellingSuggestions { name: segment.name.symbol(), candidates: suggestions.iter().map(|suggestion| suggestion.name), @@ -728,7 +756,7 @@ fn import_not_found<'heap>( } .emit(&mut diagnostic); - if emitted.is_empty() { + if emitted.is_empty() && found.is_empty() { diagnostic.add_message(Message::help( "import the name with a `use` statement, or qualify it with a full path", )); @@ -737,14 +765,62 @@ fn import_not_found<'heap>( diagnostic } +/// Formats the universe as a noun for use in diagnostic messages. +fn universe_noun(universe: Universe) -> &'static str { + match universe { + Universe::Value => "value", + Universe::Type => "type", + } +} + +/// Appends a cross-universe hint when the name exists but as a different kind. +/// +/// For example: `help: `Url` exists as a type, not a value` +fn emit_cross_universe_hint( + diagnostic: &mut ExpanderDiagnostic, + name: Symbol<'_>, + expected: Option, + found: KindSet, +) { + if found.is_empty() { + return; + } + + // Remove the expected universe from the found set so we only report alternates. + let alternates = match expected { + Some(universe) => found.without_universe(universe), + None => found, + }; + + if alternates.is_empty() { + return; + } + + let message = match expected { + Some(expected) => { + format!( + "`{name}` exists as {alternates}, not {}", + universe_noun(expected) + ) + } + None => format!("`{name}` exists as {alternates}"), + }; + + diagnostic.add_message(Message::help(message)); +} + fn item_not_found<'heap>( path: &Path<'heap>, depth: usize, name: Symbol<'heap>, + expected: Option, + found: KindSet, suggestions: &[ResolutionSuggestion<'heap, Item<'heap>>], ) -> ExpanderDiagnostic { let segment = &path.segments[depth]; + let kind_label = expected.map(universe_noun).unwrap_or("item"); + let primary_message = if depth > 0 { let parent_path = FormatUserPath { rooted: path.rooted, @@ -752,9 +828,9 @@ fn item_not_found<'heap>( up_to: Some(depth - 1), }; - format!("cannot find `{name}` in module `{parent_path}`") + format!("cannot find {kind_label} `{name}` in module `{parent_path}`") } else { - format!("cannot find `{name}` in this scope") + format!("cannot find {kind_label} `{name}` in this scope") }; let mut diagnostic = Diagnostic::new(ExpanderDiagnosticCategory::ItemNotFound, Severity::Error) @@ -767,6 +843,8 @@ fn item_not_found<'heap>( )); } + emit_cross_universe_hint(&mut diagnostic, name, expected, found); + let emitted = SpellingSuggestions { name: segment.name.symbol(), candidates: suggestions.iter().map(|suggestion| suggestion.name), @@ -775,7 +853,7 @@ fn item_not_found<'heap>( } .emit(&mut diagnostic); - if emitted.is_empty() { + if emitted.is_empty() && found.is_empty() { diagnostic.add_message(Message::help( "check the spelling and ensure the item is exported", )); @@ -793,6 +871,8 @@ fn item_not_found_at<'heap>( span: SpanId, path: &Path<'heap>, name: Symbol<'heap>, + expected: Option, + found: KindSet, suggestions: &[ResolutionSuggestion<'heap, Item<'heap>>], ) -> ExpanderDiagnostic { let parent_path = FormatUserPath { @@ -801,16 +881,20 @@ fn item_not_found_at<'heap>( up_to: path.segments.len().checked_sub(1), }; + let kind_label = expected.map(universe_noun).unwrap_or("item"); + let mut diagnostic = Diagnostic::new(ExpanderDiagnosticCategory::ItemNotFound, Severity::Error) .primary(Label::new( span, - format!("cannot find `{name}` in module `{parent_path}`"), + format!("cannot find {kind_label} `{name}` in module `{parent_path}`"), )); if let Some(last) = path.segments.last() { diagnostic.add_label(Label::new(last.name.span, "looked in this module")); } + emit_cross_universe_hint(&mut diagnostic, name, expected, found); + let emitted = SpellingSuggestions { name: Spanned { span, value: name }, candidates: suggestions.iter().map(|suggestion| suggestion.name), @@ -819,7 +903,7 @@ fn item_not_found_at<'heap>( } .emit(&mut diagnostic); - if emitted.is_empty() { + if emitted.is_empty() && found.is_empty() { diagnostic.add_message(Message::help( "check the spelling and ensure the item is exported", )); @@ -843,21 +927,26 @@ fn unresolved_variable<'heap>( name: Symbol<'heap>, namespace: &ModuleNamespace<'_, 'heap>, universe: Universe, + found: KindSet, import_suggestions: &[ResolutionSuggestion<'heap, Import<'heap>>], ) -> ExpanderDiagnostic { let registry = namespace.registry(); let locals = namespace.locals(universe); let name_span = path.segments[0].name.span; + let kind_label = universe_noun(universe); + let mut diagnostic = Diagnostic::new( ExpanderDiagnosticCategory::UnresolvedVariable, Severity::Error, ) .primary(Label::new( name_span, - format!("cannot find `{name}` in this scope"), + format!("cannot find {kind_label} `{name}` in this scope"), )); + emit_cross_universe_hint(&mut diagnostic, name, Some(universe), found); + let mut has_suggestions = false; // Suggest similar local bindings. diff --git a/libs/@local/hashql/ast/src/lower/expander/mod.rs b/libs/@local/hashql/ast/src/lower/expander/mod.rs index b01c57fabda..990b6c3834d 100644 --- a/libs/@local/hashql/ast/src/lower/expander/mod.rs +++ b/libs/@local/hashql/ast/src/lower/expander/mod.rs @@ -263,6 +263,10 @@ impl<'heap, S> Visitor<'heap> for Expander<'_, 'heap, S> where S: BumpAllocator, { + #[expect( + clippy::too_many_lines, + reason = "actual algorithm is straightforward, error reporting is what balloons it" + )] fn visit_path(&mut self, path: &mut node::path::Path<'heap>) { visit::walk_path(self, path); self.current_item = None; @@ -327,6 +331,7 @@ where has_arguments: !ident.arguments.is_empty(), }); + // Make sure that the intrinsic special forms do not have arguments attached to them. match item.kind { ItemKind::Intrinsic(IntrinsicItem::Type(IntrinsicTypeItem { name })) if let Some(const_name) = name.as_constant() diff --git a/libs/@local/hashql/ast/src/lower/expander/newtype.rs b/libs/@local/hashql/ast/src/lower/expander/newtype.rs index e7e5b64780f..1b0b6704d73 100644 --- a/libs/@local/hashql/ast/src/lower/expander/newtype.rs +++ b/libs/@local/hashql/ast/src/lower/expander/newtype.rs @@ -12,7 +12,6 @@ use crate::{ expr::{CallExpr, Expr, ExprKind, NewTypeExpr, call::Argument}, id::NodeId, }, - visit::Visitor as _, }; fn lower_newtype_impl<'heap, S>( diff --git a/libs/@local/hashql/ast/src/node/path.rs b/libs/@local/hashql/ast/src/node/path.rs index e353bca4092..a02b8772f3c 100644 --- a/libs/@local/hashql/ast/src/node/path.rs +++ b/libs/@local/hashql/ast/src/node/path.rs @@ -199,35 +199,6 @@ impl<'heap> Path<'heap> { Ok((segment.name, segment.arguments)) } - /// Checks if this path is an absolute path that matches the provided sequence of identifiers. - /// - /// A path matches when: - /// - The path is absolute (rooted with `::`) - /// - It has the same number of segments as provided identifiers - /// - Each segment name matches the corresponding identifier - /// - None of the path segments have generic arguments - pub(crate) fn matches_absolute_path( - &self, - path: impl IntoIterator, - ) -> bool - where - T: AsRef, - { - if !self.rooted { - return false; - } - - let path = path.into_iter(); - - if self.segments.len() != path.len() { - return false; - } - - self.segments.iter().zip(path).all(|(segment, ident)| { - segment.name.value.as_str() == ident.as_ref() && segment.arguments.is_empty() - }) - } - pub(crate) fn starts_with_absolute_path( &self, path: impl IntoIterator, diff --git a/libs/@local/hashql/ast/tests/ui/lower/expander/import-resolver/continue/unresolved-nested.jsonc b/libs/@local/hashql/ast/tests/ui/lower/expander/import-resolver/continue/unresolved-nested.jsonc index 1747d378bbf..ac68325d636 100644 --- a/libs/@local/hashql/ast/tests/ui/lower/expander/import-resolver/continue/unresolved-nested.jsonc +++ b/libs/@local/hashql/ast/tests/ui/lower/expander/import-resolver/continue/unresolved-nested.jsonc @@ -4,7 +4,7 @@ [ "type", "Foo", - //~^ ERROR cannot find `Bar` in this scope + //~^ ERROR cannot find type `Bar` in this scope "Number", "_" ] diff --git a/libs/@local/hashql/ast/tests/ui/lower/expander/import-resolver/continue/unresolved-nested.stderr b/libs/@local/hashql/ast/tests/ui/lower/expander/import-resolver/continue/unresolved-nested.stderr index 18bb80302dd..7071baaaf35 100644 --- a/libs/@local/hashql/ast/tests/ui/lower/expander/import-resolver/continue/unresolved-nested.stderr +++ b/libs/@local/hashql/ast/tests/ui/lower/expander/import-resolver/continue/unresolved-nested.stderr @@ -1,7 +1,7 @@ error[expander::unresolved-variable]: Unresolved variable ╭▸ 6 │ "Foo", - │ ━━━ cannot find `Bar` in this scope + │ ━━━ cannot find type `Bar` in this scope │ ├ help: check the spelling, or import the name with a `use` statement ╰ note: this could be a typo, a name used outside its scope, or a missing declaration; if it is a function or type from another module, you may need to import it first \ No newline at end of file diff --git a/libs/@local/hashql/ast/tests/ui/lower/expander/import-resolver/continue/unresolved-type.jsonc b/libs/@local/hashql/ast/tests/ui/lower/expander/import-resolver/continue/unresolved-type.jsonc index 4575ece2cc0..e27ca90ac53 100644 --- a/libs/@local/hashql/ast/tests/ui/lower/expander/import-resolver/continue/unresolved-type.jsonc +++ b/libs/@local/hashql/ast/tests/ui/lower/expander/import-resolver/continue/unresolved-type.jsonc @@ -5,6 +5,6 @@ "type", "Foo", "T", - //~^ ERROR cannot find `T` in this scope + //~^ ERROR cannot find type `T` in this scope "_" ] diff --git a/libs/@local/hashql/ast/tests/ui/lower/expander/import-resolver/continue/unresolved-type.stderr b/libs/@local/hashql/ast/tests/ui/lower/expander/import-resolver/continue/unresolved-type.stderr index 3373129c383..319d1b1ea43 100644 --- a/libs/@local/hashql/ast/tests/ui/lower/expander/import-resolver/continue/unresolved-type.stderr +++ b/libs/@local/hashql/ast/tests/ui/lower/expander/import-resolver/continue/unresolved-type.stderr @@ -1,7 +1,7 @@ error[expander::unresolved-variable]: Unresolved variable ╭▸ 7 │ "T", - │ ━ cannot find `T` in this scope + │ ━ cannot find type `T` in this scope │ ╰ note: this could be a typo, a name used outside its scope, or a missing declaration; if it is a function or type from another module, you may need to import it first help: a similar local binding exists diff --git a/libs/@local/hashql/ast/tests/ui/lower/expander/import-resolver/continue/unresolved-value.jsonc b/libs/@local/hashql/ast/tests/ui/lower/expander/import-resolver/continue/unresolved-value.jsonc index f889207c319..649f970dae6 100644 --- a/libs/@local/hashql/ast/tests/ui/lower/expander/import-resolver/continue/unresolved-value.jsonc +++ b/libs/@local/hashql/ast/tests/ui/lower/expander/import-resolver/continue/unresolved-value.jsonc @@ -3,7 +3,7 @@ //@ suite#continue: true [ "shl", - //~^ ERROR cannot find `shl` in this scope + //~^ ERROR cannot find value `shl` in this scope { "#literal": 1 }, { "#literal": 4 } ] diff --git a/libs/@local/hashql/ast/tests/ui/lower/expander/import-resolver/continue/unresolved-value.stderr b/libs/@local/hashql/ast/tests/ui/lower/expander/import-resolver/continue/unresolved-value.stderr index 2090c6c7cfe..00628f476fa 100644 --- a/libs/@local/hashql/ast/tests/ui/lower/expander/import-resolver/continue/unresolved-value.stderr +++ b/libs/@local/hashql/ast/tests/ui/lower/expander/import-resolver/continue/unresolved-value.stderr @@ -1,7 +1,7 @@ error[expander::unresolved-variable]: Unresolved variable ╭▸ 5 │ "shl", - │ ━━━ cannot find `shl` in this scope + │ ━━━ cannot find value `shl` in this scope │ ├ help: bring it into scope: `use ::core::bits::shl in` ╰ note: this could be a typo, a name used outside its scope, or a missing declaration; if it is a function or type from another module, you may need to import it first diff --git a/libs/@local/hashql/ast/tests/ui/lower/expander/import-resolver/continue/use-not-found.jsonc b/libs/@local/hashql/ast/tests/ui/lower/expander/import-resolver/continue/use-not-found.jsonc index 135829e19dc..50a218777b3 100644 --- a/libs/@local/hashql/ast/tests/ui/lower/expander/import-resolver/continue/use-not-found.jsonc +++ b/libs/@local/hashql/ast/tests/ui/lower/expander/import-resolver/continue/use-not-found.jsonc @@ -7,5 +7,5 @@ //~^ ERROR cannot find module `foo` "*", ["add", { "#literal": 1 }, { "#literal": 2 }] - //~^ ERROR cannot find `add` in this scope + //~^ ERROR cannot find value `add` in this scope ] diff --git a/libs/@local/hashql/ast/tests/ui/lower/expander/import-resolver/continue/use-not-found.stderr b/libs/@local/hashql/ast/tests/ui/lower/expander/import-resolver/continue/use-not-found.stderr index baddf10c51c..6cd6c329709 100644 --- a/libs/@local/hashql/ast/tests/ui/lower/expander/import-resolver/continue/use-not-found.stderr +++ b/libs/@local/hashql/ast/tests/ui/lower/expander/import-resolver/continue/use-not-found.stderr @@ -1,7 +1,7 @@ error[expander::unresolved-variable]: Unresolved variable ╭▸ 9 │ ["add", { "#literal": 1 }, { "#literal": 2 }] - │ ━━━ cannot find `add` in this scope + │ ━━━ cannot find value `add` in this scope │ ├ help: bring it into scope: `use ::core::math::add in` ╰ note: this could be a typo, a name used outside its scope, or a missing declaration; if it is a function or type from another module, you may need to import it first diff --git a/libs/@local/hashql/ast/tests/ui/lower/expander/import-resolver/item-not-found.jsonc b/libs/@local/hashql/ast/tests/ui/lower/expander/import-resolver/item-not-found.jsonc index a66eb23676f..9167b0981b1 100644 --- a/libs/@local/hashql/ast/tests/ui/lower/expander/import-resolver/item-not-found.jsonc +++ b/libs/@local/hashql/ast/tests/ui/lower/expander/import-resolver/item-not-found.jsonc @@ -1,4 +1,4 @@ //@ run: fail //@ description: Tests that importing a non-existent item produces an appropriate error with suggestions ["use", "core::bits", { "#tuple": ["lshift"] }, "_"] -//~^ ERROR cannot find `lshift` in module `core::bits` +//~^ ERROR cannot find item `lshift` in module `core::bits` diff --git a/libs/@local/hashql/ast/tests/ui/lower/expander/import-resolver/item-not-found.stderr b/libs/@local/hashql/ast/tests/ui/lower/expander/import-resolver/item-not-found.stderr index 4d0dc7bb262..632a003cef3 100644 --- a/libs/@local/hashql/ast/tests/ui/lower/expander/import-resolver/item-not-found.stderr +++ b/libs/@local/hashql/ast/tests/ui/lower/expander/import-resolver/item-not-found.stderr @@ -1,7 +1,7 @@ error[expander::item-not-found]: Item not found ╭▸ 3 │ ["use", "core::bits", { "#tuple": ["lshift"] }, "_"] - │ ┬─── ━━━━━━ cannot find `lshift` in module `core::bits` + │ ┬─── ━━━━━━ cannot find item `lshift` in module `core::bits` │ │ │ looked in this module │ diff --git a/libs/@local/hashql/ast/tests/ui/lower/expander/import-resolver/rollback.jsonc b/libs/@local/hashql/ast/tests/ui/lower/expander/import-resolver/rollback.jsonc index 12713bb6fe6..090bf0fba61 100644 --- a/libs/@local/hashql/ast/tests/ui/lower/expander/import-resolver/rollback.jsonc +++ b/libs/@local/hashql/ast/tests/ui/lower/expander/import-resolver/rollback.jsonc @@ -5,5 +5,5 @@ { "#literal": true }, ["use", "core::bits", { "#tuple": ["shl"] }, "shl"], "shl" - //~^ ERROR cannot find `shl` in this scope + //~^ ERROR cannot find value `shl` in this scope ] diff --git a/libs/@local/hashql/ast/tests/ui/lower/expander/import-resolver/rollback.stderr b/libs/@local/hashql/ast/tests/ui/lower/expander/import-resolver/rollback.stderr index 51808c1fe9e..bf0d7297992 100644 --- a/libs/@local/hashql/ast/tests/ui/lower/expander/import-resolver/rollback.stderr +++ b/libs/@local/hashql/ast/tests/ui/lower/expander/import-resolver/rollback.stderr @@ -1,7 +1,7 @@ error[expander::unresolved-variable]: Unresolved variable ╭▸ 7 │ "shl" - │ ━━━ cannot find `shl` in this scope + │ ━━━ cannot find value `shl` in this scope │ ├ help: bring it into scope: `use ::core::bits::shl in` ╰ note: this could be a typo, a name used outside its scope, or a missing declaration; if it is a function or type from another module, you may need to import it first diff --git a/libs/@local/hashql/ast/tests/ui/lower/expander/import-resolver/unresolver-variable.jsonc b/libs/@local/hashql/ast/tests/ui/lower/expander/import-resolver/unresolver-variable.jsonc index 0b9be66e8f4..21758d075c5 100644 --- a/libs/@local/hashql/ast/tests/ui/lower/expander/import-resolver/unresolver-variable.jsonc +++ b/libs/@local/hashql/ast/tests/ui/lower/expander/import-resolver/unresolver-variable.jsonc @@ -9,6 +9,6 @@ "foo", { "#literal": 42 }, "föo" - //~^ ERROR cannot find `föo` in this scope + //~^ ERROR cannot find value `föo` in this scope ] ] diff --git a/libs/@local/hashql/ast/tests/ui/lower/expander/import-resolver/unresolver-variable.stderr b/libs/@local/hashql/ast/tests/ui/lower/expander/import-resolver/unresolver-variable.stderr index 1b458591446..a746ea4e5f0 100644 --- a/libs/@local/hashql/ast/tests/ui/lower/expander/import-resolver/unresolver-variable.stderr +++ b/libs/@local/hashql/ast/tests/ui/lower/expander/import-resolver/unresolver-variable.stderr @@ -1,7 +1,7 @@ error[expander::unresolved-variable]: Unresolved variable ╭▸ 11 │ "föo" - │ ━━━ cannot find `föo` in this scope + │ ━━━ cannot find value `föo` in this scope │ ╰ note: this could be a typo, a name used outside its scope, or a missing declaration; if it is a function or type from another module, you may need to import it first help: a similar local binding exists diff --git a/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/let-collect-all-errors.jsonc b/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/let-collect-all-errors.jsonc index a325c060b1f..b3ed9ed4a36 100644 --- a/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/let-collect-all-errors.jsonc +++ b/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/let-collect-all-errors.jsonc @@ -6,6 +6,6 @@ { "#literal": 1 }, //~^ ERROR cannot use a literal value as a type "y", - //~^ ERROR cannot find `y` in this scope + //~^ ERROR cannot find value `y` in this scope "x" ] diff --git a/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/let-collect-all-errors.stderr b/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/let-collect-all-errors.stderr index aad3c2db096..4c8048f7cf5 100644 --- a/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/let-collect-all-errors.stderr +++ b/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/let-collect-all-errors.stderr @@ -9,7 +9,7 @@ error[expander::invalid-expression-in-type-position]: Invalid expression in type error[expander::unresolved-variable]: Unresolved variable ╭▸ 8 │ "y", - │ ━ cannot find `y` in this scope + │ ━ cannot find value `y` in this scope │ ╰ note: this could be a typo, a name used outside its scope, or a missing declaration; if it is a function or type from another module, you may need to import it first help: a similar imported name exists diff --git a/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/not-enough-segments.jsonc b/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/not-enough-segments.jsonc index dceb769fada..e3be5a5e22f 100644 --- a/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/not-enough-segments.jsonc +++ b/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/not-enough-segments.jsonc @@ -2,7 +2,7 @@ //@ description: check if we error out if the path has not enough segments [ "::kernel::special_form", - //~^ ERROR cannot find `special_form` in module `::kernel` + //~^ ERROR cannot find value `special_form` in module `::kernel` { "#literal": true }, { "#literal": 1 }, { "#literal": 2 } diff --git a/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/not-enough-segments.stderr b/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/not-enough-segments.stderr index c131e4ba921..af945c4f771 100644 --- a/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/not-enough-segments.stderr +++ b/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/not-enough-segments.stderr @@ -1,8 +1,8 @@ error[expander::item-not-found]: Item not found ╭▸ 4 │ "::kernel::special_form", - │ ┬───── ━━━━━━━━━━━━ cannot find `special_form` in module `::kernel` + │ ┬───── ━━━━━━━━━━━━ cannot find value `special_form` in module `::kernel` │ │ │ looked in this module │ - ╰ help: check the spelling and ensure the item is exported \ No newline at end of file + ╰ help: `special_form` exists as a module, not value \ No newline at end of file diff --git a/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/type-expr-call-arbitrary.jsonc b/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/type-expr-call-arbitrary.jsonc index 34dd6206d6a..aeb24c32c0f 100644 --- a/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/type-expr-call-arbitrary.jsonc +++ b/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/type-expr-call-arbitrary.jsonc @@ -4,5 +4,5 @@ "::kernel::special_form::as", { "#literal": true }, ["::core::math::headpat", "Integer", "Number"] - //~^ ERROR cannot find `headpat` in module `::core::math` + //~^ ERROR cannot find type `headpat` in module `::core::math` ] diff --git a/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/type-expr-call-arbitrary.stderr b/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/type-expr-call-arbitrary.stderr index 4047657e4ff..24306636266 100644 --- a/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/type-expr-call-arbitrary.stderr +++ b/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/type-expr-call-arbitrary.stderr @@ -1,7 +1,7 @@ error[expander::item-not-found]: Item not found ╭▸ 6 │ ["::core::math::headpat", "Integer", "Number"] - │ ┬─── ━━━━━━━ cannot find `headpat` in module `::core::math` + │ ┬─── ━━━━━━━ cannot find type `headpat` in module `::core::math` │ │ │ looked in this module │ diff --git a/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/type-expr-call-not-path.jsonc b/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/type-expr-call-not-path.jsonc index 4ceb3422917..0a2af164532 100644 --- a/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/type-expr-call-not-path.jsonc +++ b/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/type-expr-call-not-path.jsonc @@ -5,7 +5,7 @@ { "#literal": true }, [ ["+", { "#literal": 1 }, { "#literal": 2 }], - //~^ ERROR cannot find `+` in this scope + //~^ ERROR cannot find type `+` in this scope //~| ERROR cannot use this as a type constructor "Integer", "Number" diff --git a/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/type-expr-call-not-path.stderr b/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/type-expr-call-not-path.stderr index bcf5e1965f3..cd59c90e367 100644 --- a/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/type-expr-call-not-path.stderr +++ b/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/type-expr-call-not-path.stderr @@ -14,8 +14,9 @@ error[expander::invalid-type-constructor-call]: Invalid type constructor call error[expander::unresolved-variable]: Unresolved variable ╭▸ 7 │ ["+", { "#literal": 1 }, { "#literal": 2 }], - │ ━ cannot find `+` in this scope + │ ━ cannot find type `+` in this scope │ + ├ help: `+` exists as a value, not type ╰ note: this could be a typo, a name used outside its scope, or a missing declaration; if it is a function or type from another module, you may need to import it first help: a similar imported name exists ╭╴ diff --git a/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/type-expr-invalid.jsonc b/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/type-expr-invalid.jsonc index a47174fa77b..b9b15329e3b 100644 --- a/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/type-expr-invalid.jsonc +++ b/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/type-expr-invalid.jsonc @@ -11,7 +11,7 @@ { "#literal": 1 }, // ensure that we properly resolve nested is expressions as errors ["::kernel::special_form::as", { "#literal": 1 }, "Integer"] - //~^ ERROR cannot find `as` in module `::kernel::special_form` + //~^ ERROR cannot find type `as` in module `::kernel::special_form` ], { "#literal": 1 } //~^ ERROR cannot use a literal value as a type diff --git a/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/type-expr-invalid.stderr b/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/type-expr-invalid.stderr index 8218bcd3010..8e356b740d8 100644 --- a/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/type-expr-invalid.stderr +++ b/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/type-expr-invalid.stderr @@ -25,8 +25,8 @@ error[expander::invalid-expression-in-type-position]: Invalid expression in type error[expander::item-not-found]: Item not found ╭▸ 13 │ ["::kernel::special_form::as", { "#literal": 1 }, "Integer"] - │ ┬─────────── ━━ cannot find `as` in module `::kernel::special_form` + │ ┬─────────── ━━ cannot find type `as` in module `::kernel::special_form` │ │ │ looked in this module │ - ╰ help: check the spelling and ensure the item is exported \ No newline at end of file + ╰ help: `as` exists as a value, not type \ No newline at end of file diff --git a/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/unknown-special-form-typo.jsonc b/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/unknown-special-form-typo.jsonc index 6506ddb2019..5304308905a 100644 --- a/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/unknown-special-form-typo.jsonc +++ b/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/unknown-special-form-typo.jsonc @@ -1,4 +1,4 @@ //@ run: fail //@ description: Given a unknown special form, suggest a correct one ["::kernel::special_form::nuwtype"] -//~^ ERROR cannot find `nuwtype` in module `::kernel::special_form` +//~^ ERROR cannot find value `nuwtype` in module `::kernel::special_form` diff --git a/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/unknown-special-form-typo.stderr b/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/unknown-special-form-typo.stderr index 4a7c21706ea..51388251772 100644 --- a/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/unknown-special-form-typo.stderr +++ b/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/unknown-special-form-typo.stderr @@ -1,7 +1,7 @@ error[expander::item-not-found]: Item not found ╭▸ 3 │ ["::kernel::special_form::nuwtype"] - │ ┬─────────── ━━━━━━━ cannot find `nuwtype` in module `::kernel::special_form` + │ ┬─────────── ━━━━━━━ cannot find value `nuwtype` in module `::kernel::special_form` │ │ │ looked in this module ╰╴ diff --git a/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/unknown-special-form.jsonc b/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/unknown-special-form.jsonc index b3ebefbb42a..11021316943 100644 --- a/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/unknown-special-form.jsonc +++ b/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/unknown-special-form.jsonc @@ -1,4 +1,4 @@ //@ run: fail //@ description: Check if we error out if the special form is unknown ["::kernel::special_form::headpat"] -//~^ ERROR cannot find `headpat` in module `::kernel::special_form` +//~^ ERROR cannot find value `headpat` in module `::kernel::special_form` diff --git a/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/unknown-special-form.stderr b/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/unknown-special-form.stderr index 0a781ad5eef..cad1f12adaa 100644 --- a/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/unknown-special-form.stderr +++ b/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/unknown-special-form.stderr @@ -1,7 +1,7 @@ error[expander::item-not-found]: Item not found ╭▸ 3 │ ["::kernel::special_form::headpat"] - │ ┬─────────── ━━━━━━━ cannot find `headpat` in module `::kernel::special_form` + │ ┬─────────── ━━━━━━━ cannot find value `headpat` in module `::kernel::special_form` │ │ │ looked in this module │ diff --git a/libs/@local/hashql/ast/tests/ui/lower/sanitizer/special-form-type-position.jsonc b/libs/@local/hashql/ast/tests/ui/lower/sanitizer/special-form-type-position.jsonc index 74c47210634..230501b1eaa 100644 --- a/libs/@local/hashql/ast/tests/ui/lower/sanitizer/special-form-type-position.jsonc +++ b/libs/@local/hashql/ast/tests/ui/lower/sanitizer/special-form-type-position.jsonc @@ -4,6 +4,6 @@ "type", "A", "::kernel::special_form::let", - //~^ ERROR cannot find `let` in module `::kernel::special_form` + //~^ ERROR cannot find type `let` in module `::kernel::special_form` "_" ] diff --git a/libs/@local/hashql/ast/tests/ui/lower/sanitizer/special-form-type-position.stderr b/libs/@local/hashql/ast/tests/ui/lower/sanitizer/special-form-type-position.stderr index a7acfc1b761..764bad4cb13 100644 --- a/libs/@local/hashql/ast/tests/ui/lower/sanitizer/special-form-type-position.stderr +++ b/libs/@local/hashql/ast/tests/ui/lower/sanitizer/special-form-type-position.stderr @@ -1,8 +1,8 @@ error[expander::item-not-found]: Item not found ╭▸ 6 │ "::kernel::special_form::let", - │ ┬─────────── ━━━ cannot find `let` in module `::kernel::special_form` + │ ┬─────────── ━━━ cannot find type `let` in module `::kernel::special_form` │ │ │ looked in this module │ - ╰ help: check the spelling and ensure the item is exported \ No newline at end of file + ╰ help: `let` exists as a value, not type \ No newline at end of file diff --git a/libs/@local/hashql/compiletest/test-report.txt b/libs/@local/hashql/compiletest/test-report.txt deleted file mode 100644 index e7f740d1588..00000000000 --- a/libs/@local/hashql/compiletest/test-report.txt +++ /dev/null @@ -1,1848 +0,0 @@ -2026-06-15T14:19:06.003974Z  INFO hashql_compiletest::harness::test::discover: adding entry point path=/Users/bmahmoud/projects/hash/hash/libs/@local/hashql/hir tests=/Users/bmahmoud/projects/hash/hash/libs/@local/hashql/hir/tests/ui -2026-06-15T14:19:06.004183Z  INFO hashql_compiletest::harness::test::discover: adding entry point path=/Users/bmahmoud/projects/hash/hash/libs/@local/hashql/ast tests=/Users/bmahmoud/projects/hash/hash/libs/@local/hashql/ast/tests/ui -2026-06-15T14:19:06.004200Z  INFO hashql_compiletest::harness::test::discover: adding entry point path=/Users/bmahmoud/projects/hash/hash/libs/@local/hashql/eval tests=/Users/bmahmoud/projects/hash/hash/libs/@local/hashql/eval/tests/ui -2026-06-15T14:19:06.004212Z  INFO hashql_compiletest::harness::test::discover: adding entry point path=/Users/bmahmoud/projects/hash/hash/libs/@local/hashql/mir tests=/Users/bmahmoud/projects/hash/hash/libs/@local/hashql/mir/tests/ui -2026-06-15T14:19:06.006750Z  INFO hashql_compiletest::runner: found 4 test groups with 544 test cases, in 3.016583ms groups=4 cases=544 elapsed=3.036416ms -2026-06-15T14:19:06.013166Z  INFO hashql_compiletest::runner: converted 4 (544) test groups into 4 (544) trial groups, in 6.358084ms groups=4 cases=544 elapsed=6.358375ms -2026-06-15T14:19:06.013657Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-mir" trial=["pass", "forward_substitution"] -2026-06-15T14:19:06.013658Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "inference", "intrinsics"] -2026-06-15T14:19:06.013675Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-mir" trial=["pass", "pre_inline"] -2026-06-15T14:19:06.013667Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] -2026-06-15T14:19:06.013667Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-mir" trial=["pass", "post_inline"] -2026-06-15T14:19:06.013674Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "name-mangler"] -2026-06-15T14:19:06.013667Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "thunking"] -2026-06-15T14:19:06.013667Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "import-resolver"] -2026-06-15T14:19:06.013670Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "import-resolver"] -2026-06-15T14:19:06.013677Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "sanitizer"] -2026-06-15T14:19:06.013677Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-mir" trial=["pass", "pre_inline"] -2026-06-15T14:19:06.013689Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "checking"] -2026-06-15T14:19:06.013676Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "import-resolver"] -2026-06-15T14:19:06.013670Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-mir" trial=["pass", "inline"] -2026-06-15T14:19:06.013667Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-mir" trial=["pass", "cfg_simplify"] -2026-06-15T14:19:06.013667Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] -2026-06-15T14:19:06.013659Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "import-resolver", "continue"] -2026-06-15T14:19:06.013670Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-mir" trial=["pass", "inline"] -2026-06-15T14:19:06.018658Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "name-mangler"] result=Ok(()) -2026-06-15T14:19:06.018703Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] result=Ok(()) -2026-06-15T14:19:06.018658Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] result=Ok(()) -2026-06-15T14:19:06.018843Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] -2026-06-15T14:19:06.018796Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "name-mangler"] -2026-06-15T14:19:06.018737Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "import-resolver"] result=Ok(()) -2026-06-15T14:19:06.018730Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "import-resolver"] result=Ok(()) -2026-06-15T14:19:06.018820Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] -2026-06-15T14:19:06.018932Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "import-resolver"] -2026-06-15T14:19:06.018882Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "import-resolver"] -2026-06-15T14:19:06.018659Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "import-resolver"] result=Ok(()) -2026-06-15T14:19:06.019022Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "import-resolver"] -2026-06-15T14:19:06.019285Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "sanitizer"] result=Ok(()) -2026-06-15T14:19:06.019302Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "sanitizer"] -2026-06-15T14:19:06.019482Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "inference", "intrinsics"] result=Ok(()) -2026-06-15T14:19:06.019497Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "inference"] -2026-06-15T14:19:06.019598Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "thunking"] result=Ok(()) -2026-06-15T14:19:06.019623Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "thunking"] -2026-06-15T14:19:06.019689Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "checking"] result=Ok(()) -2026-06-15T14:19:06.019705Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "checking"] -2026-06-15T14:19:06.019940Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "import-resolver", "continue"] result=Ok(()) -2026-06-15T14:19:06.019952Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "import-resolver", "continue"] -2026-06-15T14:19:06.020197Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "name-mangler"] result=Ok(()) -2026-06-15T14:19:06.020215Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "name-mangler"] -2026-06-15T14:19:06.020300Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "import-resolver"] result=Ok(()) -2026-06-15T14:19:06.020330Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "import-resolver"] -2026-06-15T14:19:06.020342Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] result=Ok(()) -2026-06-15T14:19:06.020356Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] -2026-06-15T14:19:06.020447Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] result=Ok(()) -2026-06-15T14:19:06.020477Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] -2026-06-15T14:19:06.020525Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-mir" trial=["pass", "cfg_simplify"] result=Ok(()) -2026-06-15T14:19:06.020540Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-mir" trial=["reify"] -2026-06-15T14:19:06.020565Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-mir" trial=["pass", "pre_inline"] result=Ok(()) -2026-06-15T14:19:06.020587Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-mir" trial=["pass", "pre_inline"] -2026-06-15T14:19:06.020609Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-mir" trial=["pass", "pre_inline"] result=Ok(()) -2026-06-15T14:19:06.020624Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-mir" trial=["pass", "pre_inline"] -2026-06-15T14:19:06.020197Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "import-resolver"] result=Ok(()) -2026-06-15T14:19:06.020724Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "import-resolver"] -2026-06-15T14:19:06.020747Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "sanitizer"] result=Ok(()) -2026-06-15T14:19:06.020762Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "sanitizer"] -2026-06-15T14:19:06.020763Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "inference"] result=Ok(()) -2026-06-15T14:19:06.020781Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "inference"] -2026-06-15T14:19:06.020861Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-mir" trial=["pass", "post_inline"] result=Ok(()) -2026-06-15T14:19:06.020874Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-mir" trial=["pass", "post_inline"] -2026-06-15T14:19:06.020568Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "import-resolver"] result=Ok(()) -2026-06-15T14:19:06.020987Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "thunking"] result=Ok(()) -2026-06-15T14:19:06.020995Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "import-resolver"] -2026-06-15T14:19:06.021003Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "normalization"] -2026-06-15T14:19:06.021154Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "checking"] result=Ok(()) -2026-06-15T14:19:06.021180Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "checking"] -2026-06-15T14:19:06.021368Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "import-resolver", "continue"] result=Ok(()) -2026-06-15T14:19:06.021381Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "import-resolver", "continue"] -2026-06-15T14:19:06.021444Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "name-mangler"] result=Ok(()) -2026-06-15T14:19:06.021458Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "name-mangler"] -2026-06-15T14:19:06.021611Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "import-resolver"] result=Ok(()) -2026-06-15T14:19:06.021621Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "import-resolver"] -2026-06-15T14:19:06.021630Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] result=Ok(()) -2026-06-15T14:19:06.021641Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] -2026-06-15T14:19:06.021796Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] result=Ok(()) -2026-06-15T14:19:06.021811Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] -2026-06-15T14:19:06.021995Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "import-resolver"] result=Ok(()) -2026-06-15T14:19:06.022009Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "import-resolver"] -2026-06-15T14:19:06.022009Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "sanitizer"] result=Err(Failed to verify annotation -├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:321:29 -├╴1 additional opaque attachment -│ -╰┬▶ unfulfilled annotation: DiagnosticAnnotation { category: None, severity: Error, message: "`add` does not accept generic arguments", line: Some(4) } did not match any emitted diagnostics - │ ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:151:25 - │ - ╰▶ unexpected diagnostic: - error[expander::intrinsic-generic-arguments]: Generic arguments on intrinsic - ╭▸ - 4 │ "`+`", - │ ━━━━━━━━━━━━━━ `+` does not accept generic arguments - │ - ╰ help: remove the generic arguments from `+` - ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:171:21) -2026-06-15T14:19:06.022117Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "import-resolver"] -2026-06-15T14:19:06.022175Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-mir" trial=["pass", "pre_inline"] result=Ok(()) -2026-06-15T14:19:06.022188Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-mir" trial=["pass", "pre_inline"] -2026-06-15T14:19:06.022223Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "inference"] result=Ok(()) -2026-06-15T14:19:06.022238Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "inference"] -2026-06-15T14:19:06.022262Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-mir" trial=["pass", "pre_inline"] result=Ok(()) -2026-06-15T14:19:06.022276Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-mir" trial=["pass", "pre_inline"] -2026-06-15T14:19:06.022312Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "import-resolver"] result=Ok(()) -2026-06-15T14:19:06.022332Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "import-resolver"] -2026-06-15T14:19:06.022484Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "normalization"] result=Ok(()) -2026-06-15T14:19:06.022495Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "normalization"] -2026-06-15T14:19:06.022548Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-mir" trial=["pass", "inline"] result=Ok(()) -2026-06-15T14:19:06.022561Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-mir" trial=["pass", "inline"] -2026-06-15T14:19:06.022674Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "name-mangler"] result=Ok(()) -2026-06-15T14:19:06.022688Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "name-mangler"] -2026-06-15T14:19:06.022794Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-mir" trial=["reify"] result=Ok(()) -2026-06-15T14:19:06.022808Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-mir" trial=["reify"] -2026-06-15T14:19:06.022832Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "import-resolver"] result=Ok(()) -2026-06-15T14:19:06.022843Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "import-resolver"] -2026-06-15T14:19:06.022884Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "import-resolver", "continue"] result=Ok(()) -2026-06-15T14:19:06.022897Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "import-resolver", "continue"] -2026-06-15T14:19:06.022967Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] result=Ok(()) -2026-06-15T14:19:06.022983Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] -2026-06-15T14:19:06.023163Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "import-resolver"] result=Err(Expected trial to pass, but it failed -├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:390:24 -╰╴1 additional opaque attachment) -2026-06-15T14:19:06.023204Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "import-resolver"] -2026-06-15T14:19:06.023213Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] result=Ok(()) -2026-06-15T14:19:06.023228Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] -2026-06-15T14:19:06.023504Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-mir" trial=["pass", "pre_inline"] result=Ok(()) -2026-06-15T14:19:06.023514Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-mir" trial=["pass", "pre_inline"] -2026-06-15T14:19:06.023644Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "import-resolver"] result=Ok(()) -2026-06-15T14:19:06.023669Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "import-resolver"] -2026-06-15T14:19:06.023218Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "import-resolver"] result=Ok(()) -2026-06-15T14:19:06.023780Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "import-resolver"] -2026-06-15T14:19:06.023916Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "name-mangler"] result=Err(Expected trial to pass, but it failed -├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:390:24 -╰╴1 additional opaque attachment) -2026-06-15T14:19:06.023949Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "name-mangler"] -2026-06-15T14:19:06.023960Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "inference"] result=Ok(()) -2026-06-15T14:19:06.023973Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "inference"] -2026-06-15T14:19:06.024049Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "import-resolver"] result=Ok(()) -2026-06-15T14:19:06.024060Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "import-resolver"] -2026-06-15T14:19:06.024074Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-mir" trial=["pass", "pre_inline"] result=Ok(()) -2026-06-15T14:19:06.024093Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-mir" trial=["pass", "pre_inline"] -2026-06-15T14:19:06.024177Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-mir" trial=["pass", "inline"] result=Ok(()) -2026-06-15T14:19:06.024188Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-mir" trial=["pass", "inline"] -2026-06-15T14:19:06.024235Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] result=Err(Expected trial to pass, but it failed -├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:390:24 -╰╴1 additional opaque attachment) -2026-06-15T14:19:06.024268Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] -2026-06-15T14:19:06.024467Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-mir" trial=["reify"] result=Ok(()) -2026-06-15T14:19:06.024478Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-mir" trial=["reify"] -2026-06-15T14:19:06.024505Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "normalization"] result=Ok(()) -2026-06-15T14:19:06.024536Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "normalization"] -2026-06-15T14:19:06.024609Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] result=Ok(()) -2026-06-15T14:19:06.024621Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] -2026-06-15T14:19:06.024661Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "import-resolver", "continue"] result=Ok(()) -2026-06-15T14:19:06.024691Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "import-resolver"] -2026-06-15T14:19:06.024769Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "import-resolver"] result=Ok(()) -2026-06-15T14:19:06.024783Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "import-resolver"] -2026-06-15T14:19:06.024858Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "import-resolver"] result=Ok(()) -2026-06-15T14:19:06.024870Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "import-resolver"] -2026-06-15T14:19:06.025184Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "name-mangler"] result=Ok(()) -2026-06-15T14:19:06.025197Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "name-mangler"] -2026-06-15T14:19:06.025302Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "import-resolver"] result=Ok(()) -2026-06-15T14:19:06.025314Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "import-resolver"] -2026-06-15T14:19:06.025364Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "inference"] result=Ok(()) -2026-06-15T14:19:06.025376Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "inference"] -2026-06-15T14:19:06.025413Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-mir" trial=["pass", "pre_inline"] result=Ok(()) -2026-06-15T14:19:06.025431Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-mir" trial=["pass", "dse"] -2026-06-15T14:19:06.025446Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] result=Ok(()) -2026-06-15T14:19:06.025460Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] -2026-06-15T14:19:06.025722Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-mir" trial=["pass", "pre_inline"] result=Ok(()) -2026-06-15T14:19:06.025759Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "ctor"] -2026-06-15T14:19:06.025891Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-mir" trial=["reify"] result=Ok(()) -2026-06-15T14:19:06.025907Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-mir" trial=["reify"] -2026-06-15T14:19:06.026049Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] result=Ok(()) -2026-06-15T14:19:06.026065Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] -2026-06-15T14:19:06.026081Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "import-resolver"] result=Ok(()) -2026-06-15T14:19:06.026083Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "import-resolver"] result=Ok(()) -2026-06-15T14:19:06.026102Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "import-resolver"] -2026-06-15T14:19:06.026119Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "import-resolver"] -2026-06-15T14:19:06.026054Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-mir" trial=["pass", "inline"] result=Ok(()) -2026-06-15T14:19:06.026238Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-mir" trial=["pass", "inline"] -2026-06-15T14:19:06.026494Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "name-mangler"] result=Err(Expected trial to pass, but it failed -├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:390:24 -╰╴1 additional opaque attachment) -2026-06-15T14:19:06.026530Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "name-mangler"] -2026-06-15T14:19:06.026514Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "normalization"] result=Ok(()) -2026-06-15T14:19:06.026759Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "normalization"] -2026-06-15T14:19:06.026811Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] result=Err(Expected trial to pass, but it failed -├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:390:24 -╰╴1 additional opaque attachment) -2026-06-15T14:19:06.026840Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] -2026-06-15T14:19:06.026530Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "import-resolver"] result=Ok(()) -2026-06-15T14:19:06.026897Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "import-resolver"] -2026-06-15T14:19:06.026909Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "inference"] result=Ok(()) -2026-06-15T14:19:06.026927Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "inference"] -2026-06-15T14:19:06.026982Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-mir" trial=["pass", "dse"] result=Ok(()) -2026-06-15T14:19:06.026994Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-mir" trial=["pass", "dse"] -2026-06-15T14:19:06.027308Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "ctor"] result=Ok(()) -2026-06-15T14:19:06.027321Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "ctor"] -2026-06-15T14:19:06.027442Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "import-resolver"] result=Ok(()) -2026-06-15T14:19:06.027466Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "import-resolver"] -2026-06-15T14:19:06.027474Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "import-resolver"] result=Ok(()) -2026-06-15T14:19:06.027489Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "import-resolver"] -2026-06-15T14:19:06.027499Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "import-resolver"] result=Ok(()) -2026-06-15T14:19:06.027513Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "import-resolver"] -2026-06-15T14:19:06.027519Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "import-resolver"] result=Ok(()) -2026-06-15T14:19:06.027536Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "import-resolver"] -2026-06-15T14:19:06.027615Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] result=Ok(()) -2026-06-15T14:19:06.027628Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] -2026-06-15T14:19:06.027761Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "name-mangler"] result=Ok(()) -2026-06-15T14:19:06.027777Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "name-mangler"] -2026-06-15T14:19:06.027617Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-mir" trial=["reify"] result=Ok(()) -2026-06-15T14:19:06.027849Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-mir" trial=["reify"] -2026-06-15T14:19:06.028058Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] result=Ok(()) -2026-06-15T14:19:06.028073Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] -2026-06-15T14:19:06.028257Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "normalization"] result=Ok(()) -2026-06-15T14:19:06.028269Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "normalization"] -2026-06-15T14:19:06.028343Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "import-resolver"] result=Ok(()) -2026-06-15T14:19:06.028378Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "import-resolver"] -2026-06-15T14:19:06.028437Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "ctor"] result=Ok(()) -2026-06-15T14:19:06.028423Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "inference"] result=Err(Expected trial to pass, but it failed -├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:390:24 -╰╴1 additional opaque attachment) -2026-06-15T14:19:06.028464Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "inference"] -2026-06-15T14:19:06.028562Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "import-resolver"] result=Ok(()) -2026-06-15T14:19:06.028574Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "import-resolver"] -2026-06-15T14:19:06.028693Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-mir" trial=["pass", "dse"] result=Ok(()) -2026-06-15T14:19:06.028708Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "import-resolver"] result=Ok(()) -2026-06-15T14:19:06.028450Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "ctor"] -2026-06-15T14:19:06.028726Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "import-resolver"] -2026-06-15T14:19:06.028710Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-mir" trial=["pass", "dse"] -2026-06-15T14:19:06.028793Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] result=Ok(()) -2026-06-15T14:19:06.028805Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] -2026-06-15T14:19:06.028777Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "import-resolver"] result=Ok(()) -2026-06-15T14:19:06.028899Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] result=Err(source parsing: invalid syntax in test code -├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:98:10 -├╴1 additional opaque attachment -│ -╰─▶ [Error] J-Expr syntax / Parser / Array / Empty array not allowed - ╰╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:98:10) -2026-06-15T14:19:06.028936Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "import-resolver"] -2026-06-15T14:19:06.028980Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "name-mangler"] result=Ok(()) -2026-06-15T14:19:06.028993Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "name-mangler"] -2026-06-15T14:19:06.028944Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] -2026-06-15T14:19:06.029218Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] result=Ok(()) -2026-06-15T14:19:06.029231Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] -2026-06-15T14:19:06.029650Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "import-resolver"] result=Ok(()) -2026-06-15T14:19:06.029663Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "import-resolver"] -2026-06-15T14:19:06.029667Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "import-resolver"] result=Err(Failed to verify annotation -├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:321:29 -├╴1 additional opaque attachment -│ -╰─▶ unexpected diagnostic: - error[expander::use-path-generic-arguments]: Generic arguments in use path - ╭▸ - 3 │ ["use", "kernel::type", { "#tuple": ["T"] }, "_"] - │ ━━━━━━━━━━━━━━━━━━━━━ generic arguments are not allowed in `use` paths - │ - ╰ help: remove the generic arguments; `use` imports modules and items, which do not take type parameters at the import site - ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:171:21) -2026-06-15T14:19:06.029750Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-mir" trial=["pass", "dse"] -2026-06-15T14:19:06.029834Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "inference"] result=Ok(()) -2026-06-15T14:19:06.029849Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "inference"] -2026-06-15T14:19:06.029965Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-mir" trial=["reify"] result=Ok(()) -2026-06-15T14:19:06.029976Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-mir" trial=["reify"] -2026-06-15T14:19:06.029994Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "import-resolver"] result=Ok(()) -2026-06-15T14:19:06.030016Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "normalization"] -2026-06-15T14:19:06.030019Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "ctor"] result=Ok(()) -2026-06-15T14:19:06.030039Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "ctor"] -2026-06-15T14:19:06.030048Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "import-resolver"] result=Ok(()) -2026-06-15T14:19:06.030067Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "inference"] -2026-06-15T14:19:06.030147Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-mir" trial=["pass", "dse"] result=Ok(()) -2026-06-15T14:19:06.030159Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-mir" trial=["pass", "dse"] -2026-06-15T14:19:06.030197Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "name-mangler"] result=Ok(()) -2026-06-15T14:19:06.030210Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "name-mangler"] -2026-06-15T14:19:06.029711Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "normalization"] result=Ok(()) -2026-06-15T14:19:06.030335Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "normalization"] -2026-06-15T14:19:06.030339Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "import-resolver"] result=Ok(()) -2026-06-15T14:19:06.030354Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "import-resolver"] -2026-06-15T14:19:06.030514Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] result=Ok(()) -2026-06-15T14:19:06.030526Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] -2026-06-15T14:19:06.030590Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] result=Ok(()) -2026-06-15T14:19:06.030606Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] -2026-06-15T14:19:06.030731Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "import-resolver"] result=Ok(()) -2026-06-15T14:19:06.030742Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "import-resolver"] -2026-06-15T14:19:06.031073Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "inference"] result=Ok(()) -2026-06-15T14:19:06.031082Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "inference"] -2026-06-15T14:19:06.031159Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-mir" trial=["pass", "dse"] result=Ok(()) -2026-06-15T14:19:06.031169Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-mir" trial=["pass", "cfg_simplify"] -2026-06-15T14:19:06.031235Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "inference"] result=Err(Expected trial to pass, but it failed -├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:390:24 -╰╴1 additional opaque attachment) -2026-06-15T14:19:06.031282Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "inference"] -2026-06-15T14:19:06.031302Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "name-mangler"] result=Err(Expected trial to pass, but it failed -├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:390:24 -╰╴1 additional opaque attachment) -2026-06-15T14:19:06.031349Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "name-mangler"] -2026-06-15T14:19:06.031390Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "ctor"] result=Ok(()) -2026-06-15T14:19:06.031401Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "ctor"] -2026-06-15T14:19:06.031770Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "normalization"] result=Ok(()) -2026-06-15T14:19:06.031803Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "normalization"] -2026-06-15T14:19:06.031806Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "import-resolver"] result=Ok(()) -2026-06-15T14:19:06.031827Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "checking"] -2026-06-15T14:19:06.031943Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] result=Ok(()) -2026-06-15T14:19:06.031952Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] -2026-06-15T14:19:06.031988Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "import-resolver"] result=Ok(()) -2026-06-15T14:19:06.032022Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] -2026-06-15T14:19:06.032054Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-mir" trial=["reify"] result=Ok(()) -2026-06-15T14:19:06.032069Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-mir" trial=["reify"] -2026-06-15T14:19:06.032388Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "name-mangler"] result=Ok(()) -2026-06-15T14:19:06.032398Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "name-mangler"] -2026-06-15T14:19:06.032509Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "inference"] result=Ok(()) -2026-06-15T14:19:06.032519Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "inference"] -2026-06-15T14:19:06.032704Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-mir" trial=["pass", "cfg_simplify"] result=Ok(()) -2026-06-15T14:19:06.032714Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-mir" trial=["pass", "cfg_simplify"] -2026-06-15T14:19:06.033174Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "ctor"] result=Ok(()) -2026-06-15T14:19:06.033199Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "ctor"] -2026-06-15T14:19:06.033216Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] result=Ok(()) -2026-06-15T14:19:06.033244Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "checking"] result=Ok(()) -2026-06-15T14:19:06.033247Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] -2026-06-15T14:19:06.033256Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "graph-hoisting"] -2026-06-15T14:19:06.033270Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] result=Ok(()) -2026-06-15T14:19:06.033284Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] -2026-06-15T14:19:06.033343Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "normalization"] result=Ok(()) -2026-06-15T14:19:06.033355Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "normalization"] -2026-06-15T14:19:06.033391Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "inference"] result=Ok(()) -2026-06-15T14:19:06.033404Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "inference"] -2026-06-15T14:19:06.033382Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] result=Err(Expected trial to pass, but it failed -├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:390:24 -╰╴1 additional opaque attachment) -2026-06-15T14:19:06.033423Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] -2026-06-15T14:19:06.033453Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "name-mangler"] result=Ok(()) -2026-06-15T14:19:06.033463Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "name-mangler"] -2026-06-15T14:19:06.033722Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "inference"] result=Ok(()) -2026-06-15T14:19:06.033821Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "inference"] -2026-06-15T14:19:06.033868Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-mir" trial=["reify"] result=Ok(()) -2026-06-15T14:19:06.033883Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-mir" trial=["reify"] -2026-06-15T14:19:06.034176Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-mir" trial=["pass", "cfg_simplify"] result=Ok(()) -2026-06-15T14:19:06.034207Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-mir" trial=["pass", "cfg_simplify"] -2026-06-15T14:19:06.034572Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] result=Ok(()) -2026-06-15T14:19:06.034584Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] -2026-06-15T14:19:06.034587Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "ctor"] result=Ok(()) -2026-06-15T14:19:06.034606Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "ctor"] -2026-06-15T14:19:06.034618Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "name-mangler"] result=Ok(()) -2026-06-15T14:19:06.034626Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] result=Ok(()) -2026-06-15T14:19:06.034630Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "name-mangler"] -2026-06-15T14:19:06.034641Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] -2026-06-15T14:19:06.034660Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] result=Ok(()) -2026-06-15T14:19:06.034679Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] -2026-06-15T14:19:06.034839Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "normalization"] result=Ok(()) -2026-06-15T14:19:06.034854Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "normalization"] -2026-06-15T14:19:06.035011Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "inference"] result=Ok(()) -2026-06-15T14:19:06.035023Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "inference"] -2026-06-15T14:19:06.035335Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-mir" trial=["reify"] result=Ok(()) -2026-06-15T14:19:06.035347Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-mir" trial=["reify"] -2026-06-15T14:19:06.035409Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "inference"] result=Ok(()) -2026-06-15T14:19:06.035440Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "checking"] -2026-06-15T14:19:06.035770Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] result=Ok(()) -2026-06-15T14:19:06.035781Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] -2026-06-15T14:19:06.035920Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] result=Ok(()) -2026-06-15T14:19:06.035934Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] -2026-06-15T14:19:06.035977Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-mir" trial=["pass", "cfg_simplify"] result=Ok(()) -2026-06-15T14:19:06.035990Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-mir" trial=["pass", "cfg_simplify"] -2026-06-15T14:19:06.035992Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] result=Ok(()) -2026-06-15T14:19:06.035998Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "name-mangler"] result=Ok(()) -2026-06-15T14:19:06.036026Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "name-mangler"] -2026-06-15T14:19:06.036015Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] -2026-06-15T14:19:06.036230Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "normalization"] result=Ok(()) -2026-06-15T14:19:06.036242Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "normalization"] -2026-06-15T14:19:06.036345Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "ctor"] result=Ok(()) -2026-06-15T14:19:06.036359Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "inference"] -2026-06-15T14:19:06.036604Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "inference"] result=Ok(()) -2026-06-15T14:19:06.036619Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "inference"] -2026-06-15T14:19:06.036971Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] result=Ok(()) -2026-06-15T14:19:06.036986Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] -2026-06-15T14:19:06.037236Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] result=Ok(()) -2026-06-15T14:19:06.037249Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] -2026-06-15T14:19:06.037259Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "name-mangler"] result=Ok(()) -2026-06-15T14:19:06.037277Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "alias-replacement"] -2026-06-15T14:19:06.037458Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] result=Ok(()) -2026-06-15T14:19:06.037481Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] -2026-06-15T14:19:06.037641Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "inference"] result=Ok(()) -2026-06-15T14:19:06.037652Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "normalization"] result=Ok(()) -2026-06-15T14:19:06.037674Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "normalization"] -2026-06-15T14:19:06.037705Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-mir" trial=["pass", "cfg_simplify"] result=Ok(()) -2026-06-15T14:19:06.037716Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-mir" trial=["pass", "cfg_simplify"] -2026-06-15T14:19:06.037655Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "inference"] -2026-06-15T14:19:06.038017Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "inference"] result=Ok(()) -2026-06-15T14:19:06.038030Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "inference"] -2026-06-15T14:19:06.038134Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] result=Ok(()) -2026-06-15T14:19:06.038145Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] -2026-06-15T14:19:06.038355Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "alias-replacement"] result=Ok(()) -2026-06-15T14:19:06.038362Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "alias-replacement"] -2026-06-15T14:19:06.038541Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] result=Ok(()) -2026-06-15T14:19:06.038556Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] -2026-06-15T14:19:06.038774Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] result=Ok(()) -2026-06-15T14:19:06.038792Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] -2026-06-15T14:19:06.038996Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-mir" trial=["pass", "cfg_simplify"] result=Ok(()) -2026-06-15T14:19:06.039007Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-mir" trial=["pass", "cfg_simplify"] -2026-06-15T14:19:06.039151Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "normalization"] result=Ok(()) -2026-06-15T14:19:06.039166Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "normalization"] -2026-06-15T14:19:06.039275Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] result=Ok(()) -2026-06-15T14:19:06.039287Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] -2026-06-15T14:19:06.039414Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "inference"] result=Ok(()) -2026-06-15T14:19:06.039437Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "inference"] -2026-06-15T14:19:06.039574Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "alias-replacement"] result=Ok(()) -2026-06-15T14:19:06.039585Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "alias-replacement"] -2026-06-15T14:19:06.039714Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] result=Ok(()) -2026-06-15T14:19:06.039728Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] -2026-06-15T14:19:06.039714Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "inference"] result=Ok(()) -2026-06-15T14:19:06.039866Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "inference"] -2026-06-15T14:19:06.040051Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] result=Ok(()) -2026-06-15T14:19:06.040061Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] -2026-06-15T14:19:06.040434Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] result=Ok(()) -2026-06-15T14:19:06.040443Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] -2026-06-15T14:19:06.040451Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "normalization"] result=Ok(()) -2026-06-15T14:19:06.040470Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "normalization"] -2026-06-15T14:19:06.040993Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "alias-replacement"] result=Ok(()) -2026-06-15T14:19:06.041004Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "alias-replacement"] -2026-06-15T14:19:06.041062Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] result=Ok(()) -2026-06-15T14:19:06.041077Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] -2026-06-15T14:19:06.041127Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "inference"] result=Ok(()) -2026-06-15T14:19:06.041139Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "inference"] -2026-06-15T14:19:06.041596Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] result=Ok(()) -2026-06-15T14:19:06.041606Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] -2026-06-15T14:19:06.041725Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] result=Ok(()) -2026-06-15T14:19:06.041740Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "normalization"] -2026-06-15T14:19:06.041924Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "inference"] result=Ok(()) -2026-06-15T14:19:06.041944Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "inference"] -2026-06-15T14:19:06.042238Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "normalization"] result=Ok(()) -2026-06-15T14:19:06.042263Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "normalization"] -2026-06-15T14:19:06.042282Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] result=Ok(()) -2026-06-15T14:19:06.042294Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] -2026-06-15T14:19:06.042359Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "alias-replacement"] result=Ok(()) -2026-06-15T14:19:06.042381Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "alias-replacement"] -2026-06-15T14:19:06.042630Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "inference"] result=Ok(()) -2026-06-15T14:19:06.042640Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "inference"] -2026-06-15T14:19:06.042713Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] result=Ok(()) -2026-06-15T14:19:06.042723Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] -2026-06-15T14:19:06.043254Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "inference"] result=Ok(()) -2026-06-15T14:19:06.043270Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "normalization"] result=Ok(()) -2026-06-15T14:19:06.043285Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "normalization"] -2026-06-15T14:19:06.043271Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "inference"] -2026-06-15T14:19:06.043582Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] result=Ok(()) -2026-06-15T14:19:06.043593Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] -2026-06-15T14:19:06.043801Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "inference"] result=Ok(()) -2026-06-15T14:19:06.043814Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "inference"] -2026-06-15T14:19:06.043815Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "alias-replacement"] result=Ok(()) -2026-06-15T14:19:06.043839Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "alias-replacement"] -2026-06-15T14:19:06.043963Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "checking"] result=Ok(()) -2026-06-15T14:19:06.043971Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] result=Ok(()) -2026-06-15T14:19:06.043979Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "checking"] -2026-06-15T14:19:06.043989Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] -2026-06-15T14:19:06.044035Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "normalization"] result=Ok(()) -2026-06-15T14:19:06.044057Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "inference"] -2026-06-15T14:19:06.044482Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "normalization"] result=Ok(()) -2026-06-15T14:19:06.044493Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "normalization"] -2026-06-15T14:19:06.044723Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "inference"] result=Ok(()) -2026-06-15T14:19:06.044740Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "inference"] -2026-06-15T14:19:06.044756Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] result=Ok(()) -2026-06-15T14:19:06.044765Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "pre-expansion-name-resolver"] -2026-06-15T14:19:06.045000Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "inference"] result=Ok(()) -2026-06-15T14:19:06.045011Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "inference"] -2026-06-15T14:19:06.045171Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] result=Ok(()) -2026-06-15T14:19:06.045180Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] -2026-06-15T14:19:06.045334Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "checking"] result=Ok(()) -2026-06-15T14:19:06.045351Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "checking"] -2026-06-15T14:19:06.045353Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "inference"] result=Ok(()) -2026-06-15T14:19:06.045377Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "inference"] -2026-06-15T14:19:06.045353Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "alias-replacement"] result=Ok(()) -2026-06-15T14:19:06.045400Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "alias-replacement"] -2026-06-15T14:19:06.045781Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "normalization"] result=Ok(()) -2026-06-15T14:19:06.045813Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "alias-replacement"] -2026-06-15T14:19:06.045936Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "pre-expansion-name-resolver"] result=Ok(()) -2026-06-15T14:19:06.045948Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "pre-expansion-name-resolver"] -2026-06-15T14:19:06.046323Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] result=Ok(()) -2026-06-15T14:19:06.046335Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] -2026-06-15T14:19:06.046382Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "inference"] result=Ok(()) -2026-06-15T14:19:06.046391Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "inference"] -2026-06-15T14:19:06.046370Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "inference"] result=Err(Expected trial to pass, but it failed -├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:390:24 -╰╴1 additional opaque attachment) -2026-06-15T14:19:06.046416Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "inference"] -2026-06-15T14:19:06.046589Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "checking"] result=Ok(()) -2026-06-15T14:19:06.046600Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "checking"] -2026-06-15T14:19:06.046711Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "inference"] result=Ok(()) -2026-06-15T14:19:06.046723Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "inference", "intrinsics"] -2026-06-15T14:19:06.046964Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "alias-replacement"] result=Ok(()) -2026-06-15T14:19:06.046987Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "alias-replacement"] -2026-06-15T14:19:06.047073Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "pre-expansion-name-resolver"] result=Err(Expected trial to pass, but it failed -├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:390:24 -╰╴1 additional opaque attachment) -2026-06-15T14:19:06.047120Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "pre-expansion-name-resolver"] -2026-06-15T14:19:06.047167Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "alias-replacement"] result=Ok(()) -2026-06-15T14:19:06.047184Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] -2026-06-15T14:19:06.047428Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] result=Ok(()) -2026-06-15T14:19:06.047436Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] -2026-06-15T14:19:06.047680Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "inference"] result=Ok(()) -2026-06-15T14:19:06.047703Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "inference"] -2026-06-15T14:19:06.047719Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "inference"] result=Ok(()) -2026-06-15T14:19:06.047734Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "inference"] -2026-06-15T14:19:06.047934Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "checking"] result=Ok(()) -2026-06-15T14:19:06.047946Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "checking"] -2026-06-15T14:19:06.048020Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "inference", "intrinsics"] result=Ok(()) -2026-06-15T14:19:06.048036Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "inference", "intrinsics"] -2026-06-15T14:19:06.048243Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "alias-replacement"] result=Ok(()) -2026-06-15T14:19:06.048253Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "alias-replacement"] -2026-06-15T14:19:06.048329Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "pre-expansion-name-resolver"] result=Err(Expected trial to pass, but it failed -├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:390:24 -╰╴1 additional opaque attachment) -2026-06-15T14:19:06.048362Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "pre-expansion-name-resolver"] -2026-06-15T14:19:06.048449Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] result=Ok(()) -2026-06-15T14:19:06.048459Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] -2026-06-15T14:19:06.048545Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] result=Ok(()) -2026-06-15T14:19:06.048562Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] -2026-06-15T14:19:06.049067Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "inference"] result=Ok(()) -2026-06-15T14:19:06.049084Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-mir" trial=["pass", "post_inline"] -2026-06-15T14:19:06.049394Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "checking"] result=Ok(()) -2026-06-15T14:19:06.049405Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "checking"] -2026-06-15T14:19:06.049439Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "pre-expansion-name-resolver"] result=Ok(()) -2026-06-15T14:19:06.049437Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "inference", "intrinsics"] result=Ok(()) -2026-06-15T14:19:06.049444Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "alias-replacement"] result=Err(Expected trial to pass, but it failed -├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:390:24 -╰╴1 additional opaque attachment) -2026-06-15T14:19:06.049459Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "pre-expansion-name-resolver"] -2026-06-15T14:19:06.049474Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "inference", "intrinsics"] -2026-06-15T14:19:06.049491Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["reify"] -2026-06-15T14:19:06.049614Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "inference"] result=Ok(()) -2026-06-15T14:19:06.049626Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "inference"] -2026-06-15T14:19:06.049765Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "normalization"] result=Ok(()) -2026-06-15T14:19:06.049781Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "normalization"] -2026-06-15T14:19:06.049791Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] result=Ok(()) -2026-06-15T14:19:06.049807Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] -2026-06-15T14:19:06.049809Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] result=Ok(()) -2026-06-15T14:19:06.049825Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] -2026-06-15T14:19:06.050772Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["reify"] result=Ok(()) -2026-06-15T14:19:06.050791Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["reify"] -2026-06-15T14:19:06.050817Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "pre-expansion-name-resolver"] result=Ok(()) -2026-06-15T14:19:06.050828Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "pre-expansion-name-resolver"] -2026-06-15T14:19:06.050831Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "checking"] result=Ok(()) -2026-06-15T14:19:06.050830Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "inference", "intrinsics"] result=Ok(()) -2026-06-15T14:19:06.050857Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "inference"] result=Ok(()) -2026-06-15T14:19:06.050852Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "checking"] -2026-06-15T14:19:06.050882Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-mir" trial=["pass", "post_inline"] -2026-06-15T14:19:06.050876Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "checking"] -2026-06-15T14:19:06.050895Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] result=Ok(()) -2026-06-15T14:19:06.050924Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] -2026-06-15T14:19:06.051021Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-mir" trial=["pass", "post_inline"] result=Ok(()) -2026-06-15T14:19:06.051036Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-mir" trial=["pass", "cfg_simplify"] -2026-06-15T14:19:06.051200Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "normalization"] result=Ok(()) -2026-06-15T14:19:06.051203Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] result=Ok(()) -2026-06-15T14:19:06.051219Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "normalization"] -2026-06-15T14:19:06.051236Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] -2026-06-15T14:19:06.051952Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["reify"] result=Err(Expected trial to pass, but it failed -├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:390:24 -╰╴1 additional opaque attachment) -2026-06-15T14:19:06.051990Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["reify"] -2026-06-15T14:19:06.052031Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "pre-expansion-name-resolver"] result=Ok(()) -2026-06-15T14:19:06.052041Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "pre-expansion-name-resolver"] -2026-06-15T14:19:06.052104Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "checking"] result=Ok(()) -2026-06-15T14:19:06.052118Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "checking"] -2026-06-15T14:19:06.052160Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] result=Ok(()) -2026-06-15T14:19:06.052172Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] -2026-06-15T14:19:06.052443Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "checking"] result=Err(Expected trial to pass, but it failed -├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:390:24 -╰╴1 additional opaque attachment) -2026-06-15T14:19:06.052480Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "checking"] -2026-06-15T14:19:06.052580Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] result=Ok(()) -2026-06-15T14:19:06.052593Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] -2026-06-15T14:19:06.052627Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-mir" trial=["pass", "post_inline"] result=Ok(()) -2026-06-15T14:19:06.052634Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "normalization"] result=Ok(()) -2026-06-15T14:19:06.052645Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "checking"] -2026-06-15T14:19:06.052645Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-mir" trial=["pass", "cfg_simplify"] result=Ok(()) -2026-06-15T14:19:06.052650Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "normalization"] -2026-06-15T14:19:06.052674Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-mir" trial=["pass", "cfg_simplify"] -2026-06-15T14:19:06.053205Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["reify"] result=Ok(()) -2026-06-15T14:19:06.053215Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["reify"] -2026-06-15T14:19:06.053226Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "pre-expansion-name-resolver"] result=Ok(()) -2026-06-15T14:19:06.053237Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "pre-expansion-name-resolver"] -2026-06-15T14:19:06.053313Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] result=Ok(()) -2026-06-15T14:19:06.053324Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] -2026-06-15T14:19:06.053502Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "checking"] result=Ok(()) -2026-06-15T14:19:06.053520Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["reify"] -2026-06-15T14:19:06.053884Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] result=Ok(()) -2026-06-15T14:19:06.053897Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] -2026-06-15T14:19:06.053915Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "checking"] result=Ok(()) -2026-06-15T14:19:06.053930Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "checking"] -2026-06-15T14:19:06.054087Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-mir" trial=["pass", "cfg_simplify"] result=Ok(()) -2026-06-15T14:19:06.054106Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "normalization"] result=Ok(()) -2026-06-15T14:19:06.054113Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "checking"] -2026-06-15T14:19:06.054122Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] -2026-06-15T14:19:06.054131Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "checking"] result=Ok(()) -2026-06-15T14:19:06.054146Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["reify"] -2026-06-15T14:19:06.054438Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["reify"] result=Ok(()) -2026-06-15T14:19:06.054451Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["reify"] -2026-06-15T14:19:06.054497Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] result=Ok(()) -2026-06-15T14:19:06.054508Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] -2026-06-15T14:19:06.054656Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["reify"] result=Ok(()) -2026-06-15T14:19:06.054668Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["reify"] -2026-06-15T14:19:06.054700Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "pre-expansion-name-resolver"] result=Err(Expected trial to pass, but it failed -├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:390:24 -╰╴1 additional opaque attachment) -2026-06-15T14:19:06.054736Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "pre-expansion-name-resolver"] -2026-06-15T14:19:06.055079Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] result=Ok(()) -2026-06-15T14:19:06.055090Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] -2026-06-15T14:19:06.055257Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["reify"] result=Ok(()) -2026-06-15T14:19:06.055268Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["reify"] -2026-06-15T14:19:06.055382Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "checking"] result=Ok(()) -2026-06-15T14:19:06.055397Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "checking"] -2026-06-15T14:19:06.055411Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] result=Err(Expected trial to pass, but it failed -├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:390:24 -╰╴1 additional opaque attachment) -2026-06-15T14:19:06.055440Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] -2026-06-15T14:19:06.055566Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] result=Ok(()) -2026-06-15T14:19:06.055577Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] -2026-06-15T14:19:06.055899Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["reify"] result=Ok(()) -2026-06-15T14:19:06.055899Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["reify"] result=Ok(()) -2026-06-15T14:19:06.055927Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["reify"] -2026-06-15T14:19:06.055915Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["reify"] -2026-06-15T14:19:06.055985Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "pre-expansion-name-resolver"] result=Ok(()) -2026-06-15T14:19:06.055996Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "pre-expansion-name-resolver"] -2026-06-15T14:19:06.056193Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "checking"] result=Ok(()) -2026-06-15T14:19:06.056217Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] -2026-06-15T14:19:06.056302Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] result=Ok(()) -2026-06-15T14:19:06.056316Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] -2026-06-15T14:19:06.056384Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["reify"] result=Ok(()) -2026-06-15T14:19:06.056400Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["reify"] -2026-06-15T14:19:06.056686Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] result=Ok(()) -2026-06-15T14:19:06.056700Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["reify"] -2026-06-15T14:19:06.056721Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "checking"] result=Ok(()) -2026-06-15T14:19:06.056732Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] result=Ok(()) -2026-06-15T14:19:06.056734Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "checking"] -2026-06-15T14:19:06.056750Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] -2026-06-15T14:19:06.057170Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "pre-expansion-name-resolver"] result=Err(Expected trial to pass, but it failed -├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:390:24 -╰╴1 additional opaque attachment) -2026-06-15T14:19:06.057202Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "pre-expansion-name-resolver"] -2026-06-15T14:19:06.057208Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["reify"] result=Ok(()) -2026-06-15T14:19:06.057213Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["reify"] result=Ok(()) -2026-06-15T14:19:06.057223Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] -2026-06-15T14:19:06.057227Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "specialization"] -2026-06-15T14:19:06.057609Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] result=Ok(()) -2026-06-15T14:19:06.057628Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] -2026-06-15T14:19:06.057641Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["reify"] result=Ok(()) -2026-06-15T14:19:06.057649Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] result=Ok(()) -2026-06-15T14:19:06.057667Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] -2026-06-15T14:19:06.057657Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["reify"] -2026-06-15T14:19:06.057897Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["reify"] result=Ok(()) -2026-06-15T14:19:06.057909Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["reify"] -2026-06-15T14:19:06.057950Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] result=Ok(()) -2026-06-15T14:19:06.057962Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] -2026-06-15T14:19:06.058362Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] result=Ok(()) -2026-06-15T14:19:06.058371Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] -2026-06-15T14:19:06.058377Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "pre-expansion-name-resolver"] result=Ok(()) -2026-06-15T14:19:06.058392Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "pre-expansion-name-resolver"] -2026-06-15T14:19:06.058725Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "checking"] result=Ok(()) -2026-06-15T14:19:06.058747Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "specialization"] -2026-06-15T14:19:06.058858Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] result=Ok(()) -2026-06-15T14:19:06.058871Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] -2026-06-15T14:19:06.058899Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["reify"] result=Ok(()) -2026-06-15T14:19:06.058914Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["reify"] -2026-06-15T14:19:06.059069Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] result=Ok(()) -2026-06-15T14:19:06.059082Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] -2026-06-15T14:19:06.059108Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["reify"] result=Ok(()) -2026-06-15T14:19:06.059116Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] result=Ok(()) -2026-06-15T14:19:06.059124Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] -2026-06-15T14:19:06.059130Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] -2026-06-15T14:19:06.059417Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] result=Ok(()) -2026-06-15T14:19:06.059428Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] -2026-06-15T14:19:06.059707Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "pre-expansion-name-resolver"] result=Ok(()) -2026-06-15T14:19:06.059724Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "pre-expansion-name-resolver"] -2026-06-15T14:19:06.060303Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] result=Ok(()) -2026-06-15T14:19:06.060312Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["reify"] result=Ok(()) -2026-06-15T14:19:06.060329Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] -2026-06-15T14:19:06.060406Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] result=Err(Expected trial to pass, but it failed -├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:390:24 -╰╴1 additional opaque attachment) -2026-06-15T14:19:06.060445Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] -2026-06-15T14:19:06.060335Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["reify"] -2026-06-15T14:19:06.060520Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] result=Ok(()) -2026-06-15T14:19:06.060528Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] result=Ok(()) -2026-06-15T14:19:06.060533Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] -2026-06-15T14:19:06.060546Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] -2026-06-15T14:19:06.060602Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] result=Ok(()) -2026-06-15T14:19:06.060620Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "type-extractor", "definition"] -2026-06-15T14:19:06.060690Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "specialization"] result=Ok(()) -2026-06-15T14:19:06.060704Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "specialization"] -2026-06-15T14:19:06.060810Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "pre-expansion-name-resolver"] result=Ok(()) -2026-06-15T14:19:06.060822Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "pre-expansion-name-resolver"] -2026-06-15T14:19:06.061626Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] result=Ok(()) -2026-06-15T14:19:06.061641Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-mir" trial=["reify"] -2026-06-15T14:19:06.061736Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "type-extractor", "definition"] result=Ok(()) -2026-06-15T14:19:06.061745Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "type-extractor", "definition"] -2026-06-15T14:19:06.061843Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["reify"] result=Ok(()) -2026-06-15T14:19:06.061870Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["reify"] -2026-06-15T14:19:06.061843Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] result=Ok(()) -2026-06-15T14:19:06.061903Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] result=Ok(()) -2026-06-15T14:19:06.061909Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] -2026-06-15T14:19:06.061917Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] -2026-06-15T14:19:06.061828Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "pre-expansion-name-resolver"] result=Err(Expected trial to pass, but it failed -├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:390:24 -╰╴1 additional opaque attachment) -2026-06-15T14:19:06.061981Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "pre-expansion-name-resolver"] -2026-06-15T14:19:06.062306Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "specialization"] result=Ok(()) -2026-06-15T14:19:06.062326Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "specialization"] -2026-06-15T14:19:06.062878Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-mir" trial=["reify"] result=Ok(()) -2026-06-15T14:19:06.061874Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] result=Ok(()) -2026-06-15T14:19:06.062893Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-mir" trial=["reify"] -2026-06-15T14:19:06.062898Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] -2026-06-15T14:19:06.063131Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["reify"] result=Ok(()) -2026-06-15T14:19:06.063153Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["reify"] -2026-06-15T14:19:06.062883Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "type-extractor", "definition"] result=Ok(()) -2026-06-15T14:19:06.063216Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "type-extractor", "definition"] -2026-06-15T14:19:06.063252Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] result=Ok(()) -2026-06-15T14:19:06.063273Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] -2026-06-15T14:19:06.063314Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] result=Ok(()) -2026-06-15T14:19:06.063326Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] -2026-06-15T14:19:06.063259Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "pre-expansion-name-resolver"] result=Ok(()) -2026-06-15T14:19:06.063422Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "pre-expansion-name-resolver"] -2026-06-15T14:19:06.064114Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] result=Ok(()) -2026-06-15T14:19:06.064123Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] -2026-06-15T14:19:06.064124Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-mir" trial=["reify"] result=Ok(()) -2026-06-15T14:19:06.064135Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-mir" trial=["reify"] -2026-06-15T14:19:06.064429Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["reify"] result=Ok(()) -2026-06-15T14:19:06.064448Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["reify"] -2026-06-15T14:19:06.064488Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "type-extractor", "definition"] result=Ok(()) -2026-06-15T14:19:06.064498Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "type-extractor", "definition"] -2026-06-15T14:19:06.064519Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] result=Ok(()) -2026-06-15T14:19:06.064538Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] -2026-06-15T14:19:06.064593Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] result=Ok(()) -2026-06-15T14:19:06.064610Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "type-extractor"] -2026-06-15T14:19:06.064866Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "pre-expansion-name-resolver"] result=Err(Expected trial to pass, but it failed -├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:390:24 -╰╴1 additional opaque attachment) -2026-06-15T14:19:06.064912Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "pre-expansion-name-resolver"] -2026-06-15T14:19:06.065613Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-mir" trial=["reify"] result=Ok(()) -2026-06-15T14:19:06.065624Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-mir" trial=["reify"] -2026-06-15T14:19:06.065665Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["reify"] result=Ok(()) -2026-06-15T14:19:06.065693Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "checking"] -2026-06-15T14:19:06.065746Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] result=Ok(()) -2026-06-15T14:19:06.065772Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-eval" trial=["postgres"] -2026-06-15T14:19:06.065892Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "type-extractor"] result=Ok(()) -2026-06-15T14:19:06.065904Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "type-extractor"] -2026-06-15T14:19:06.066077Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "pre-expansion-name-resolver"] result=Err(Expected trial to pass, but it failed -├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:390:24 -╰╴1 additional opaque attachment) -2026-06-15T14:19:06.066105Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "pre-expansion-name-resolver"] -2026-06-15T14:19:06.066149Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "type-extractor", "definition"] result=Ok(()) -2026-06-15T14:19:06.066171Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "type-extractor", "definition"] -2026-06-15T14:19:06.066151Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] result=Err(Failed to verify annotation -├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:321:29 -├╴1 additional opaque attachment -│ -╰─▶ unexpected diagnostic: - error[expander::unresolved-variable]: Unresolved variable - ╭▸ - 7 │ ["+", { "#literal": 1 }, { "#literal": 2 }], - │ ━ cannot find `+` in this scope - │ - ╰ note: this could be a typo, a name used outside its scope, or a missing declaration; if it is a function or type from another module, you may need to import it first - help: a similar imported name exists - ╭╴ - 7 - ["+", { "#literal": 1 }, { "#literal": 2 }], - 7 + ["String", { "#literal": 1 }, { "#literal": 2 }], - ├╴ - 7 - ["+", { "#literal": 1 }, { "#literal": 2 }], - 7 + ["Union", { "#literal": 1 }, { "#literal": 2 }], - ├╴ - 7 - ["+", { "#literal": 1 }, { "#literal": 2 }], - 7 + ["Unknown", { "#literal": 1 }, { "#literal": 2 }], - ├╴ - 7 - ["+", { "#literal": 1 }, { "#literal": 2 }], - 7 + ["Url", { "#literal": 1 }, { "#literal": 2 }], - ├╴ - 7 - ["+", { "#literal": 1 }, { "#literal": 2 }], - 7 + ["|", { "#literal": 1 }, { "#literal": 2 }], - ╰╴ - ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:171:21) -2026-06-15T14:19:06.066212Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] -2026-06-15T14:19:06.066841Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-mir" trial=["reify"] result=Ok(()) -2026-06-15T14:19:06.066854Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-mir" trial=["reify"] -2026-06-15T14:19:06.067217Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "checking"] result=Ok(()) -2026-06-15T14:19:06.067243Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "type-extractor"] result=Ok(()) -2026-06-15T14:19:06.067259Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "type-extractor"] -2026-06-15T14:19:06.067212Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "pre-expansion-name-resolver"] result=Err(Expected trial to pass, but it failed -├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:390:24 -╰╴1 additional opaque attachment) -2026-06-15T14:19:06.067244Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "checking"] -2026-06-15T14:19:06.067299Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "pre-expansion-name-resolver"] -2026-06-15T14:19:06.067690Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "type-extractor", "definition"] result=Ok(()) -2026-06-15T14:19:06.067704Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "type-extractor", "definition"] -2026-06-15T14:19:06.067688Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] result=Ok(()) -2026-06-15T14:19:06.067768Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] -2026-06-15T14:19:06.068695Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "pre-expansion-name-resolver"] result=Ok(()) -2026-06-15T14:19:06.068707Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "pre-expansion-name-resolver"] -2026-06-15T14:19:06.068752Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "type-extractor"] result=Ok(()) -2026-06-15T14:19:06.068767Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "type-extractor"] -2026-06-15T14:19:06.068815Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "checking"] result=Ok(()) -2026-06-15T14:19:06.068829Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "checking"] -2026-06-15T14:19:06.068990Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "type-extractor", "definition"] result=Ok(()) -2026-06-15T14:19:06.069003Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "type-extractor", "definition"] -2026-06-15T14:19:06.069187Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] result=Ok(()) -2026-06-15T14:19:06.069197Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] -2026-06-15T14:19:06.069775Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-mir" trial=["reify"] result=Ok(()) -2026-06-15T14:19:06.069798Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-mir" trial=["reify"] -2026-06-15T14:19:06.070024Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "type-extractor"] result=Ok(()) -2026-06-15T14:19:06.070037Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "type-extractor"] -2026-06-15T14:19:06.070174Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "checking"] result=Ok(()) -2026-06-15T14:19:06.070184Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "checking"] -2026-06-15T14:19:06.070245Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "pre-expansion-name-resolver"] result=Err(Expected trial to pass, but it failed -├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:390:24 -╰╴1 additional opaque attachment) -2026-06-15T14:19:06.070286Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "pre-expansion-name-resolver"] -2026-06-15T14:19:06.070370Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "special-form-expander"] result=Err(Expected trial to pass, but it failed -├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:390:24 -╰╴1 additional opaque attachment) -2026-06-15T14:19:06.070411Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "node-renumberer"] -2026-06-15T14:19:06.070512Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-mir" trial=["pass", "inline"] result=Ok(()) -2026-06-15T14:19:06.070532Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-mir" trial=["pass", "inline"] -2026-06-15T14:19:06.071348Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "type-extractor"] result=Ok(()) -2026-06-15T14:19:06.071360Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "type-extractor", "definition"] -2026-06-15T14:19:06.071515Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "pre-expansion-name-resolver"] result=Ok(()) -2026-06-15T14:19:06.071531Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "pre-expansion-name-resolver"] -2026-06-15T14:19:06.071565Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "node-renumberer"] result=Ok(()) -2026-06-15T14:19:06.071579Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "node-renumberer"] -2026-06-15T14:19:06.071625Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "checking"] result=Ok(()) -2026-06-15T14:19:06.071640Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "checking"] -2026-06-15T14:19:06.070515Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "type-extractor", "definition"] result=Ok(()) -2026-06-15T14:19:06.071754Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "type-extractor", "definition"] -2026-06-15T14:19:06.072519Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "type-extractor", "definition"] result=Ok(()) -2026-06-15T14:19:06.072530Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "type-extractor", "definition"] -2026-06-15T14:19:06.072778Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "pre-expansion-name-resolver"] result=Ok(()) -2026-06-15T14:19:06.072794Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "pre-expansion-name-resolver"] -2026-06-15T14:19:06.072864Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "node-renumberer"] result=Ok(()) -2026-06-15T14:19:06.072878Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "node-renumberer"] -2026-06-15T14:19:06.072901Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "checking"] result=Ok(()) -2026-06-15T14:19:06.072914Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "checking"] -2026-06-15T14:19:06.073084Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "type-extractor", "definition"] result=Ok(()) -2026-06-15T14:19:06.073099Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "type-extractor", "definition"] -2026-06-15T14:19:06.073991Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "pre-expansion-name-resolver"] result=Err(Expected trial to pass, but it failed -├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:390:24 -╰╴1 additional opaque attachment) -2026-06-15T14:19:06.074048Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "expander", "pre-expansion-name-resolver"] -2026-06-15T14:19:06.074179Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "type-extractor", "definition"] result=Ok(()) -2026-06-15T14:19:06.074191Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "type-extractor", "definition"] -2026-06-15T14:19:06.074033Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "node-renumberer"] result=Ok(()) -2026-06-15T14:19:06.074330Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "type-extractor", "definition"] result=Ok(()) -2026-06-15T14:19:06.074333Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "type-extractor"] -2026-06-15T14:19:06.074340Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "type-extractor", "definition"] -2026-06-15T14:19:06.074571Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "checking"] result=Ok(()) -2026-06-15T14:19:06.074581Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "checking"] -2026-06-15T14:19:06.075403Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "type-extractor", "definition"] result=Ok(()) -2026-06-15T14:19:06.075430Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "expander", "pre-expansion-name-resolver"] result=Ok(()) -2026-06-15T14:19:06.075438Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "type-extractor", "definition"] result=Ok(()) -2026-06-15T14:19:06.075451Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-mir" trial=["reify"] -2026-06-15T14:19:06.075455Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "type-extractor", "definition"] -2026-06-15T14:19:06.075611Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "type-extractor"] result=Ok(()) -2026-06-15T14:19:06.075623Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "type-extractor"] -2026-06-15T14:19:06.075689Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "checking"] result=Err(Expected trial to pass, but it failed -├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:390:24 -╰╴1 additional opaque attachment) -2026-06-15T14:19:06.075731Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "checking"] -2026-06-15T14:19:06.075433Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "type-extractor", "definition"] -2026-06-15T14:19:06.076813Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "type-extractor", "definition"] result=Ok(()) -2026-06-15T14:19:06.076821Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "type-extractor"] result=Ok(()) -2026-06-15T14:19:06.076843Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-mir" trial=["reify"] -2026-06-15T14:19:06.076884Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-mir" trial=["reify"] result=Ok(()) -2026-06-15T14:19:06.076895Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-mir" trial=["reify"] -2026-06-15T14:19:06.076825Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "type-extractor", "definition"] -2026-06-15T14:19:06.077194Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "type-extractor", "definition"] result=Ok(()) -2026-06-15T14:19:06.077205Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "type-extractor", "definition"] -2026-06-15T14:19:06.078040Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "checking"] result=Ok(()) -2026-06-15T14:19:06.078076Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "checking"] -2026-06-15T14:19:06.078369Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "type-extractor", "definition"] result=Ok(()) -2026-06-15T14:19:06.078391Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "type-extractor", "definition"] -2026-06-15T14:19:06.078374Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-mir" trial=["reify"] result=Ok(()) -2026-06-15T14:19:06.078436Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-mir" trial=["reify"] -2026-06-15T14:19:06.078516Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-mir" trial=["reify"] result=Ok(()) -2026-06-15T14:19:06.078534Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-mir" trial=["reify"] -2026-06-15T14:19:06.078546Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "type-extractor", "definition"] result=Ok(()) -2026-06-15T14:19:06.078564Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "type-extractor", "definition"] -2026-06-15T14:19:06.079752Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "type-extractor", "definition"] result=Ok(()) -2026-06-15T14:19:06.079776Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "type-extractor", "definition"] -2026-06-15T14:19:06.079816Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-mir" trial=["reify"] result=Ok(()) -2026-06-15T14:19:06.079753Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "checking"] result=Ok(()) -2026-06-15T14:19:06.079828Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "type-extractor", "definition"] result=Ok(()) -2026-06-15T14:19:06.079851Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-mir" trial=["reify"] -2026-06-15T14:19:06.079873Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "type-extractor", "definition"] -2026-06-15T14:19:06.079861Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "checking"] -2026-06-15T14:19:06.080272Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-mir" trial=["reify"] result=Ok(()) -2026-06-15T14:19:06.080284Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-mir" trial=["reify"] -2026-06-15T14:19:06.080828Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-mir" trial=["pass", "inline"] result=Ok(()) -2026-06-15T14:19:06.080848Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "type-extractor", "definition"] -2026-06-15T14:19:06.081172Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "type-extractor", "definition"] result=Ok(()) -2026-06-15T14:19:06.081184Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "type-extractor", "definition"] -2026-06-15T14:19:06.081258Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "type-extractor", "definition"] result=Ok(()) -2026-06-15T14:19:06.081281Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "type-extractor", "definition"] -2026-06-15T14:19:06.081380Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-mir" trial=["reify"] result=Ok(()) -2026-06-15T14:19:06.081395Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["reify"] -2026-06-15T14:19:06.081431Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "checking"] result=Ok(()) -2026-06-15T14:19:06.081448Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "checking"] -2026-06-15T14:19:06.081681Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "specialization"] result=Ok(()) -2026-06-15T14:19:06.081694Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "specialization"] -2026-06-15T14:19:06.081817Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-mir" trial=["reify"] result=Ok(()) -2026-06-15T14:19:06.081832Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-mir" trial=["reify"] -2026-06-15T14:19:06.082250Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "type-extractor", "definition"] result=Ok(()) -2026-06-15T14:19:06.082262Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "type-extractor", "definition"] -2026-06-15T14:19:06.082481Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["reify"] result=Ok(()) -2026-06-15T14:19:06.082495Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["reify"] -2026-06-15T14:19:06.082607Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "type-extractor", "definition"] result=Ok(()) -2026-06-15T14:19:06.082619Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "type-extractor", "definition"] -2026-06-15T14:19:06.082628Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "type-extractor", "definition"] result=Ok(()) -2026-06-15T14:19:06.082643Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "type-extractor", "definition"] -2026-06-15T14:19:06.083191Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "specialization"] result=Ok(()) -2026-06-15T14:19:06.083204Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "specialization"] -2026-06-15T14:19:06.083290Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "checking"] result=Ok(()) -2026-06-15T14:19:06.083315Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "checking"] -2026-06-15T14:19:06.083518Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-mir" trial=["reify"] result=Ok(()) -2026-06-15T14:19:06.083538Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-mir" trial=["reify"] -2026-06-15T14:19:06.083552Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["reify"] result=Ok(()) -2026-06-15T14:19:06.083566Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["reify"] -2026-06-15T14:19:06.083952Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "type-extractor", "definition"] result=Ok(()) -2026-06-15T14:19:06.083973Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "type-extractor", "definition"] -2026-06-15T14:19:06.083955Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "type-extractor", "definition"] result=Ok(()) -2026-06-15T14:19:06.084193Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "type-extractor", "definition"] -2026-06-15T14:19:06.084209Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "type-extractor", "definition"] result=Ok(()) -2026-06-15T14:19:06.084225Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-mir" trial=["pass", "inst_simplify"] -2026-06-15T14:19:06.084768Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "specialization"] result=Ok(()) -2026-06-15T14:19:06.084786Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "thunking"] -2026-06-15T14:19:06.084924Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["reify"] result=Ok(()) -2026-06-15T14:19:06.084953Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["reify"] -2026-06-15T14:19:06.085020Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "checking"] result=Ok(()) -2026-06-15T14:19:06.085033Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "checking"] -2026-06-15T14:19:06.085259Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "type-extractor", "definition"] result=Ok(()) -2026-06-15T14:19:06.085273Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "type-extractor", "definition"] -2026-06-15T14:19:06.085513Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "type-extractor", "definition"] result=Ok(()) -2026-06-15T14:19:06.085525Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "type-extractor", "definition"] -2026-06-15T14:19:06.086094Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "thunking"] result=Ok(()) -2026-06-15T14:19:06.086113Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "thunking"] -2026-06-15T14:19:06.086463Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "type-extractor", "definition"] result=Ok(()) -2026-06-15T14:19:06.086476Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "type-extractor", "definition"] -2026-06-15T14:19:06.086495Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "checking"] result=Ok(()) -2026-06-15T14:19:06.086508Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "checking"] -2026-06-15T14:19:06.086522Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["reify"] result=Ok(()) -2026-06-15T14:19:06.086554Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["reify"] -2026-06-15T14:19:06.086882Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "type-extractor", "definition"] result=Ok(()) -2026-06-15T14:19:06.086901Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "type-extractor", "definition"] -2026-06-15T14:19:06.087371Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "thunking"] result=Ok(()) -2026-06-15T14:19:06.087385Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "thunking"] -2026-06-15T14:19:06.087756Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "type-extractor", "definition"] result=Ok(()) -2026-06-15T14:19:06.087777Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "thunking"] -2026-06-15T14:19:06.087880Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["reify"] result=Ok(()) -2026-06-15T14:19:06.087911Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "checking"] -2026-06-15T14:19:06.088112Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "type-extractor", "definition"] result=Ok(()) -2026-06-15T14:19:06.088125Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "type-extractor", "definition"] -2026-06-15T14:19:06.088341Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "checking"] result=Ok(()) -2026-06-15T14:19:06.088360Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-mir" trial=["pass", "data-dependency"] -2026-06-15T14:19:06.088659Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "thunking"] result=Ok(()) -2026-06-15T14:19:06.088671Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "specialization"] -2026-06-15T14:19:06.089220Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "thunking"] result=Ok(()) -2026-06-15T14:19:06.089235Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "checking"] -2026-06-15T14:19:06.089502Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-mir" trial=["pass", "data-dependency"] result=Ok(()) -2026-06-15T14:19:06.089514Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-mir" trial=["pass", "data-dependency"] -2026-06-15T14:19:06.089573Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "type-extractor", "definition"] result=Ok(()) -2026-06-15T14:19:06.089587Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "type-extractor"] -2026-06-15T14:19:06.089882Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "checking"] result=Ok(()) -2026-06-15T14:19:06.089893Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "checking"] -2026-06-15T14:19:06.090354Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "specialization"] result=Ok(()) -2026-06-15T14:19:06.090386Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "specialization"] -2026-06-15T14:19:06.090566Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "checking"] result=Ok(()) -2026-06-15T14:19:06.090578Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "checking"] -2026-06-15T14:19:06.090998Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "type-extractor"] result=Ok(()) -2026-06-15T14:19:06.091008Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "type-extractor"] -2026-06-15T14:19:06.091606Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "checking"] result=Ok(()) -2026-06-15T14:19:06.091620Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "checking"] -2026-06-15T14:19:06.092178Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "type-extractor"] result=Ok(()) -2026-06-15T14:19:06.092191Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "type-extractor"] -2026-06-15T14:19:06.092476Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-mir" trial=["reify"] result=Err(Expected trial to pass, but it failed -├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:390:24 -╰╴1 additional opaque attachment) -2026-06-15T14:19:06.092529Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-mir" trial=["reify"] -2026-06-15T14:19:06.093049Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "checking"] result=Ok(()) -2026-06-15T14:19:06.093071Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "specialization"] -2026-06-15T14:19:06.093120Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-mir" trial=["pass", "inst_simplify"] result=Ok(()) -2026-06-15T14:19:06.093132Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-mir" trial=["pass", "inst_simplify"] -2026-06-15T14:19:06.093396Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "type-extractor"] result=Ok(()) -2026-06-15T14:19:06.093407Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "type-extractor"] -2026-06-15T14:19:06.094668Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "type-extractor"] result=Ok(()) -2026-06-15T14:19:06.094680Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-eval" trial=["postgres"] -2026-06-15T14:19:06.094687Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-mir" trial=["pass", "inst_simplify"] result=Ok(()) -2026-06-15T14:19:06.094699Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-mir" trial=["pass", "inst_simplify"] -2026-06-15T14:19:06.094926Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-mir" trial=["reify"] result=Ok(()) -2026-06-15T14:19:06.094954Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-mir" trial=["pass", "inst_simplify"] -2026-06-15T14:19:06.096264Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-mir" trial=["pass", "inst_simplify"] result=Ok(()) -2026-06-15T14:19:06.096280Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-mir" trial=["pass", "inst_simplify"] -2026-06-15T14:19:06.096489Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-mir" trial=["pass", "inst_simplify"] result=Ok(()) -2026-06-15T14:19:06.096502Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-mir" trial=["pass", "administrative_reduction"] -2026-06-15T14:19:06.097313Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "checking"] result=Ok(()) -2026-06-15T14:19:06.097325Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "checking"] -2026-06-15T14:19:06.097904Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-mir" trial=["pass", "inst_simplify"] result=Ok(()) -2026-06-15T14:19:06.097919Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-mir" trial=["pass", "inst_simplify"] -2026-06-15T14:19:06.098346Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-mir" trial=["pass", "administrative_reduction"] result=Ok(()) -2026-06-15T14:19:06.098376Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-mir" trial=["pass", "administrative_reduction"] -2026-06-15T14:19:06.099033Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "checking"] result=Ok(()) -2026-06-15T14:19:06.099048Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-mir" trial=["pass", "inst_simplify"] -2026-06-15T14:19:06.100692Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-mir" trial=["pass", "inst_simplify"] result=Ok(()) -2026-06-15T14:19:06.100710Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-mir" trial=["pass", "inst_simplify"] -2026-06-15T14:19:06.102235Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-mir" trial=["pass", "inst_simplify"] result=Ok(()) -2026-06-15T14:19:06.102258Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-mir" trial=["pass", "inline"] -2026-06-15T14:19:06.104375Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "specialization"] result=Err(Failed to verify annotation -├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:321:29 -├╴1 additional opaque attachment -│ -╰┬▶ unfulfilled annotation: DiagnosticAnnotation { category: None, severity: Error, message: "This is not a graph intrinsic operation", line: Some(6) } did not match any emitted diagnostics - │ ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:151:25 - │ - ├▶ unexpected diagnostic: - │ error[type-check::bound-constraint-violation]: Type bound constraint violation - │ ╭▸ - │ 1 │ //@ run: fail - │ │ ─ Upper bound `::graph::Graph('marker: ?30)` is not a supertype of the lower bound - │ ‡ - │ 6 │ ["fn", { "#tuple": [] }, { "#struct": { "graph": "_" } }, "_", {"#literal": 0}], - │ │ ┯ ─ Lower bound `Integer` must be a subtype of the upper bound - │ │ │ - │ │ Type variable has incompatible upper and lower bounds - │ │ - │ ├ help: These type bounds create an impossible constraint. To fix this: - │ │ 1. Modify `Integer` to be a proper subtype of `::graph::Graph('marker: ?30)` - │ │ 2. Or adjust `::graph::Graph('marker: ?30)` to be a supertype of `Integer` - │ │ 3. Or check your code for contradictory type assertions - │ ╰ note: During type inference, when a variable has both upper and lower bounds, the relationship 'lower <: upper' must hold. This ensures a valid solution exists in the type system. When this relationship is violated, it means your code is requiring contradictory types for the same variable. - │ ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:171:21 - │ - ╰▶ unexpected diagnostic: - error[type-check::bound-constraint-violation]: Type bound constraint violation - ╭▸ - 1 │ //@ run: fail - │ ─ Upper bound `::graph::Graph('marker: ?30)` is not a supertype of the lower bound - ‡ - 5 │ ┏ [ - 6 │ ┃ ["fn", { "#tuple": [] }, { "#struct": { "graph": "_" } }, "_", {"#literal": 0}], - │ ┃ ─ Lower bound `Integer` must be a subtype of the upper bound - 7 │ ┃ //~^ ERROR This is not a graph intrinsic operation - 8 │ ┃ ["::graph::head::entities", ["::graph::tmp::decision_time_now"]] - 9 │ ┃ ] - │ ┗━━━┛ Type variable has incompatible upper and lower bounds - │ - ├ help: These type bounds create an impossible constraint. To fix this: - │ 1. Modify `Integer` to be a proper subtype of `::graph::Graph('marker: ?30)` - │ 2. Or adjust `::graph::Graph('marker: ?30)` to be a supertype of `Integer` - │ 3. Or check your code for contradictory type assertions - ╰ note: During type inference, when a variable has both upper and lower bounds, the relationship 'lower <: upper' must hold. This ensures a valid solution exists in the type system. When this relationship is violated, it means your code is requiring contradictory types for the same variable. - ╰╴at libs/@local/hashql/compiletest/src/annotation/verify.rs:171:21) -2026-06-15T14:19:06.104478Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-mir" trial=["pass", "inst_simplify"] -2026-06-15T14:19:06.105157Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-mir" trial=["pass", "administrative_reduction"] result=Ok(()) -2026-06-15T14:19:06.105169Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-mir" trial=["pass", "administrative_reduction"] -2026-06-15T14:19:06.105864Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-mir" trial=["pass", "inst_simplify"] result=Ok(()) -2026-06-15T14:19:06.105879Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-eval" trial=["postgres"] -2026-06-15T14:19:06.106880Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-mir" trial=["pass", "administrative_reduction"] result=Ok(()) -2026-06-15T14:19:06.106892Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-mir" trial=["pass", "administrative_reduction"] -2026-06-15T14:19:06.108954Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-mir" trial=["pass", "inline"] result=Ok(()) -2026-06-15T14:19:06.108984Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-mir" trial=["pass", "inline"] -2026-06-15T14:19:06.109418Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-mir" trial=["pass", "administrative_reduction"] result=Ok(()) -2026-06-15T14:19:06.109692Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-mir" trial=["pass", "administrative_reduction"] -2026-06-15T14:19:06.111306Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-mir" trial=["pass", "inline"] result=Ok(()) -2026-06-15T14:19:06.111414Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-mir" trial=["pass", "inst_simplify"] -2026-06-15T14:19:06.111842Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-mir" trial=["pass", "administrative_reduction"] result=Ok(()) -2026-06-15T14:19:06.111856Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-mir" trial=["pass", "administrative_reduction"] -2026-06-15T14:19:06.113535Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-mir" trial=["pass", "administrative_reduction"] result=Ok(()) -2026-06-15T14:19:06.113547Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-mir" trial=["pass", "post_inline"] -2026-06-15T14:19:06.113633Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-mir" trial=["pass", "inst_simplify"] result=Ok(()) -2026-06-15T14:19:06.113664Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-mir" trial=["pass", "inst_simplify"] -2026-06-15T14:19:06.118074Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-mir" trial=["pass", "inst_simplify"] result=Ok(()) -2026-06-15T14:19:06.118099Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-mir" trial=["pass", "inst_simplify"] -2026-06-15T14:19:06.118705Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-mir" trial=["pass", "post_inline"] result=Ok(()) -2026-06-15T14:19:06.118718Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-mir" trial=["pass", "post_inline"] -2026-06-15T14:19:06.119417Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-mir" trial=["pass", "inst_simplify"] result=Ok(()) -2026-06-15T14:19:06.119428Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-mir" trial=["pass", "inst_simplify"] -2026-06-15T14:19:06.121178Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-mir" trial=["pass", "post_inline"] result=Ok(()) -2026-06-15T14:19:06.121202Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-mir" trial=["pass", "forward_substitution"] -2026-06-15T14:19:06.124973Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-mir" trial=["pass", "forward_substitution"] result=Ok(()) -2026-06-15T14:19:06.125046Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-mir" trial=["pass", "forward_substitution"] -2026-06-15T14:19:06.126783Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-mir" trial=["pass", "forward_substitution"] result=Ok(()) -2026-06-15T14:19:06.126805Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-mir" trial=["pass", "inst_simplify"] -2026-06-15T14:19:06.129131Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-mir" trial=["pass", "inst_simplify"] result=Ok(()) -2026-06-15T14:19:06.129147Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-mir" trial=["pass", "inst_simplify"] -2026-06-15T14:19:06.130457Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-mir" trial=["pass", "inst_simplify"] result=Ok(()) -2026-06-15T14:19:06.130476Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-eval" trial=["postgres"] -2026-06-15T14:19:06.133345Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-mir" trial=["pass", "inst_simplify"] result=Ok(()) -2026-06-15T14:19:06.133377Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-mir" trial=["pass", "inst_simplify"] -2026-06-15T14:19:06.135359Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "specialization"] result=Ok(()) -2026-06-15T14:19:06.135384Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-mir" trial=["reify"] -2026-06-15T14:19:06.135889Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-eval" trial=["postgres"] result=Ok(()) -2026-06-15T14:19:06.135915Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-eval" trial=["postgres"] -2026-06-15T14:19:06.136959Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-mir" trial=["pass", "inst_simplify"] result=Ok(()) -2026-06-15T14:19:06.136989Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-mir" trial=["pass", "inst_simplify"] -2026-06-15T14:19:06.138099Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-mir" trial=["reify"] result=Ok(()) -2026-06-15T14:19:06.138118Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-mir" trial=["reify"] -2026-06-15T14:19:06.138771Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-mir" trial=["pass", "inst_simplify"] result=Ok(()) -2026-06-15T14:19:06.138797Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-mir" trial=["pass", "inst_simplify"] -2026-06-15T14:19:06.142044Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-mir" trial=["reify"] result=Ok(()) -2026-06-15T14:19:06.142081Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-eval" trial=["postgres"] -2026-06-15T14:19:06.142421Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-mir" trial=["pass", "inst_simplify"] result=Ok(()) -2026-06-15T14:19:06.142441Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-mir" trial=["pass", "inst_simplify"] -2026-06-15T14:19:06.143752Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-mir" trial=["pass", "inst_simplify"] result=Ok(()) -2026-06-15T14:19:06.143771Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-eval" trial=["postgres"] -2026-06-15T14:19:06.147258Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-mir" trial=["pass", "data-dependency"] result=Ok(()) -2026-06-15T14:19:06.147282Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-mir" trial=["pass", "data-dependency"] -2026-06-15T14:19:06.148951Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-mir" trial=["pass", "data-dependency"] result=Ok(()) -2026-06-15T14:19:06.148973Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-mir" trial=["pass", "data-dependency"] -2026-06-15T14:19:06.150765Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-mir" trial=["pass", "data-dependency"] result=Ok(()) -2026-06-15T14:19:06.150791Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-mir" trial=["pass", "data-dependency"] -2026-06-15T14:19:06.152844Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-mir" trial=["pass", "data-dependency"] result=Ok(()) -2026-06-15T14:19:06.152866Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-mir" trial=["pass", "data-dependency"] -2026-06-15T14:19:06.154415Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-mir" trial=["pass", "data-dependency"] result=Ok(()) -2026-06-15T14:19:06.154433Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-mir" trial=["pass", "data-dependency"] -2026-06-15T14:19:06.155910Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-mir" trial=["pass", "data-dependency"] result=Ok(()) -2026-06-15T14:19:06.155925Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-mir" trial=["pass", "data-dependency"] -2026-06-15T14:19:06.157542Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-mir" trial=["pass", "data-dependency"] result=Ok(()) -2026-06-15T14:19:06.157567Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-mir" trial=["pass", "data-dependency"] -2026-06-15T14:19:06.159385Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-mir" trial=["pass", "data-dependency"] result=Ok(()) -2026-06-15T14:19:06.159407Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-mir" trial=["pass", "data-dependency"] -2026-06-15T14:19:06.160127Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-mir" trial=["reify"] result=Ok(()) -2026-06-15T14:19:06.160160Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-eval" trial=["postgres"] -2026-06-15T14:19:06.161009Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-mir" trial=["pass", "data-dependency"] result=Ok(()) -2026-06-15T14:19:06.161032Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-mir" trial=["pass", "data-dependency"] -2026-06-15T14:19:06.162708Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-mir" trial=["pass", "data-dependency"] result=Ok(()) -2026-06-15T14:19:06.162728Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-mir" trial=["pass", "data-dependency"] -2026-06-15T14:19:06.164270Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-mir" trial=["pass", "data-dependency"] result=Ok(()) -2026-06-15T14:19:06.164283Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-mir" trial=["pass", "data-dependency"] -2026-06-15T14:19:06.165753Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-mir" trial=["pass", "data-dependency"] result=Ok(()) -2026-06-15T14:19:06.165764Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-mir" trial=["pass", "data-dependency"] -2026-06-15T14:19:06.186193Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "specialization"] result=Ok(()) -2026-06-15T14:19:06.186234Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "specialization"] -2026-06-15T14:19:06.188602Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "specialization"] result=Ok(()) -2026-06-15T14:19:06.188642Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "graph-hoisting"] -2026-06-15T14:19:06.189223Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-mir" trial=["pass", "data-dependency"] result=Ok(()) -2026-06-15T14:19:06.189238Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-mir" trial=["pass", "data-dependency"] -2026-06-15T14:19:06.191409Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-mir" trial=["pass", "data-dependency"] result=Ok(()) -2026-06-15T14:19:06.191436Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-mir" trial=["pass", "data-dependency"] -2026-06-15T14:19:06.193354Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-mir" trial=["pass", "data-dependency"] result=Ok(()) -2026-06-15T14:19:06.193382Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-mir" trial=["interpret"] -2026-06-15T14:19:06.196721Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-mir" trial=["pass", "inline"] result=Ok(()) -2026-06-15T14:19:06.196766Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-eval" trial=["postgres"] -2026-06-15T14:19:06.204255Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-mir" trial=["interpret"] result=Ok(()) -2026-06-15T14:19:06.204318Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-eval" trial=["postgres"] -2026-06-15T14:19:06.219589Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "checking"] result=Ok(()) -2026-06-15T14:19:06.219645Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-eval" trial=["postgres"] -2026-06-15T14:19:06.220030Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-eval" trial=["postgres"] result=Ok(()) -2026-06-15T14:19:06.220048Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-eval" trial=["postgres"] -2026-06-15T14:19:06.222931Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-eval" trial=["postgres"] result=Ok(()) -2026-06-15T14:19:06.222962Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-eval" trial=["postgres"] -2026-06-15T14:19:06.227280Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-eval" trial=["postgres"] result=Ok(()) -2026-06-15T14:19:06.227320Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-eval" trial=["postgres"] -2026-06-15T14:19:06.242937Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-eval" trial=["postgres"] result=Ok(()) -2026-06-15T14:19:06.242982Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-eval" trial=["postgres"] -2026-06-15T14:19:06.259368Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "graph-hoisting"] result=Ok(()) -2026-06-15T14:19:06.259405Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "graph-hoisting"] -2026-06-15T14:19:06.263577Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "graph-hoisting"] result=Ok(()) -2026-06-15T14:19:06.263611Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "graph-hoisting"] -2026-06-15T14:19:06.272367Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-eval" trial=["postgres"] result=Ok(()) -2026-06-15T14:19:06.272401Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-eval" trial=["postgres"] -2026-06-15T14:19:06.276073Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-eval" trial=["postgres"] result=Ok(()) -2026-06-15T14:19:06.276102Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-eval" trial=["postgres"] -2026-06-15T14:19:06.286515Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-eval" trial=["postgres"] result=Ok(()) -2026-06-15T14:19:06.286536Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-mir" trial=["pass", "data-dependency"] -2026-06-15T14:19:06.288145Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-mir" trial=["pass", "data-dependency"] result=Ok(()) -2026-06-15T14:19:06.288157Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-mir" trial=["pass", "data-dependency"] -2026-06-15T14:19:06.289606Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-mir" trial=["pass", "data-dependency"] result=Ok(()) -2026-06-15T14:19:06.289624Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-eval" trial=["postgres"] -2026-06-15T14:19:06.295939Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-eval" trial=["postgres"] result=Ok(()) -2026-06-15T14:19:06.295961Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "name-mangler"] -2026-06-15T14:19:06.297321Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "name-mangler"] result=Err(Expected trial to pass, but it failed -├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:390:24 -╰╴1 additional opaque attachment) -2026-06-15T14:19:06.297365Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "name-mangler"] -2026-06-15T14:19:06.298529Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "name-mangler"] result=Ok(()) -2026-06-15T14:19:06.298540Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "name-mangler"] -2026-06-15T14:19:06.299644Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "name-mangler"] result=Err(Expected trial to pass, but it failed -├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:390:24 -╰╴1 additional opaque attachment) -2026-06-15T14:19:06.299667Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "name-mangler"] -2026-06-15T14:19:06.300880Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "name-mangler"] result=Err(Expected trial to pass, but it failed -├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:390:24 -╰╴1 additional opaque attachment) -2026-06-15T14:19:06.300901Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "name-mangler"] -2026-06-15T14:19:06.301634Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "graph-hoisting"] result=Ok(()) -2026-06-15T14:19:06.301647Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "graph-hoisting"] -2026-06-15T14:19:06.302094Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "name-mangler"] result=Ok(()) -2026-06-15T14:19:06.302108Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-eval" trial=["postgres"] -2026-06-15T14:19:06.302890Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "graph-hoisting"] result=Ok(()) -2026-06-15T14:19:06.302906Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "graph-hoisting"] -2026-06-15T14:19:06.311964Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-eval" trial=["postgres"] result=Ok(()) -2026-06-15T14:19:06.311988Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "graph-hoisting"] -2026-06-15T14:19:06.318313Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-eval" trial=["postgres"] result=Ok(()) -2026-06-15T14:19:06.318337Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-eval" trial=["postgres"] -2026-06-15T14:19:06.319622Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-eval" trial=["postgres"] result=Ok(()) -2026-06-15T14:19:06.319643Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "graph-hoisting"] -2026-06-15T14:19:06.328907Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-eval" trial=["postgres"] result=Ok(()) -2026-06-15T14:19:06.328944Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "graph-hoisting"] -2026-06-15T14:19:06.330720Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "graph-hoisting"] result=Ok(()) -2026-06-15T14:19:06.330741Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-hir" trial=["lower", "graph-hoisting"] -2026-06-15T14:19:06.336390Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-eval" trial=["postgres"] result=Ok(()) -2026-06-15T14:19:06.336428Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-ast" trial=["lower", "name-mangler"] -2026-06-15T14:19:06.341859Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-ast" trial=["lower", "name-mangler"] result=Err(Expected trial to pass, but it failed -├╴at libs/@local/hashql/compiletest/src/harness/trial/mod.rs:390:24 -╰╴1 additional opaque attachment) -2026-06-15T14:19:06.341998Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-eval" trial=["postgres"] -2026-06-15T14:19:06.349695Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-eval" trial=["postgres"] result=Ok(()) -2026-06-15T14:19:06.349742Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-eval" trial=["postgres"] -2026-06-15T14:19:06.352232Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-eval" trial=["postgres"] result=Ok(()) -2026-06-15T14:19:06.358359Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-eval" trial=["postgres"] result=Ok(()) -2026-06-15T14:19:06.362218Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "graph-hoisting"] result=Ok(()) -2026-06-15T14:19:06.370826Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "graph-hoisting"] result=Ok(()) -2026-06-15T14:19:06.372470Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "graph-hoisting"] result=Ok(()) -2026-06-15T14:19:06.376724Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-eval" trial=["postgres"] result=Ok(()) -2026-06-15T14:19:06.399809Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-eval" trial=["postgres"] result=Ok(()) -2026-06-15T14:19:06.412255Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "graph-hoisting"] result=Ok(()) -2026-06-15T14:19:06.415224Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-eval" trial=["postgres"] result=Ok(()) -2026-06-15T14:19:06.415433Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-hir" trial=["lower", "graph-hoisting"] result=Ok(()) -2026-06-15T14:19:06.460582Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-eval" trial=["postgres"] result=Ok(()) -2026-06-15T14:19:06.469175Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-eval" trial=["postgres"] result=Ok(()) -2026-06-15T14:19:06.856829Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-mir" trial=["pass", "dse"] result=Ok(()) -2026-06-15T14:19:06.857441Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-mir" trial=["pass", "cfg_simplify"] result=Ok(()) -2026-06-15T14:19:06.869671Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-mir" trial=["pass", "inst_simplify"] result=Ok(()) -2026-06-15T14:19:07.068736Z  INFO run{namespace="reify" name="nested-if"}: hashql_compiletest::suite::mir_reify: time taken to generate diagram: 1.031430583s -2026-06-15T14:19:07.068937Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-mir" trial=["reify"] result=Ok(()) -2026-06-15T14:19:07.209031Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-mir" trial=["pass", "forward_substitution"] result=Ok(()) -2026-06-15T14:19:07.209065Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-mir" trial=["pass", "forward_substitution"] -2026-06-15T14:19:07.210959Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-mir" trial=["pass", "forward_substitution"] result=Ok(()) -2026-06-15T14:19:07.210971Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-mir" trial=["pass", "forward_substitution"] -2026-06-15T14:19:07.212533Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-mir" trial=["pass", "forward_substitution"] result=Ok(()) -2026-06-15T14:19:07.212553Z DEBUG hashql_compiletest::runner::ui::human: running trial group="hashql-mir" trial=["pass", "forward_substitution"] -2026-06-15T14:19:07.214127Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-mir" trial=["pass", "forward_substitution"] result=Ok(()) -2026-06-15T14:19:11.555054Z DEBUG hashql_compiletest::runner::ui::human: finished trial group="hashql-mir" trial=["pass", "post_inline"] result=Ok(()) -[PASS] hashql-ast::lower::expander::special-form-expander::fn-generics-tuple -[PASS] hashql-ast::lower::name-mangler::type-generics-nested -[PASS] hashql-ast::lower::expander::import-resolver::path-normalization -[PASS] hashql-ast::lower::expander::special-form-expander::let-4 -[PASS] hashql-ast::lower::expander::import-resolver::universe-ambiguity-resolution -[PASS] hashql-ast::lower::expander::import-resolver::closure-generic-not-resolved -[PASS] hashql-ast::lower::sanitizer::special-form-value -[PASS] hashql-hir::lower::inference::intrinsics::unrelated -[PASS] hashql-hir::lower::thunking::nested-call -[PASS] hashql-hir::lower::checking::closure-not-generic -[PASS] hashql-ast::lower::expander::import-resolver::continue::unresolved-type -[PASS] hashql-ast::lower::name-mangler::overwrite -[PASS] hashql-ast::lower::expander::import-resolver::nested-resolution -[PASS] hashql-ast::lower::expander::import-resolver::shadowed-imports -[PASS] hashql-ast::lower::expander::special-form-expander::newtype-4 -[PASS] hashql-ast::lower::expander::special-form-expander::type-expr-tuple -[PASS] hashql-mir::pass::cfg_simplify::closure-with-const-branch -[PASS] hashql-mir::pass::pre_inline::nested-if-constant -[PASS] hashql-ast::lower::expander::import-resolver::rollback -[PASS] hashql-mir::pass::pre_inline::thunk-with-dead-code -[PASS] hashql-ast::lower::sanitizer::special-form-type-position -[PASS] hashql-hir::lower::inference::literal -[PASS] hashql-mir::pass::post_inline::closure-env-cleanup -[PASS] hashql-hir::lower::thunking::return-primitive -[PASS] hashql-hir::lower::checking::input-default -[PASS] hashql-ast::lower::expander::import-resolver::continue::unresolved-value -[PASS] hashql-ast::lower::name-mangler::type -[PASS] hashql-ast::lower::expander::import-resolver::shadowed-prelude -[PASS] hashql-ast::lower::expander::special-form-expander::use-glob-not-ident -[PASS] hashql-ast::lower::expander::special-form-expander::use-tuple -[PASS] hashql-ast::lower::expander::import-resolver::closure-mixed-resolution -[FAIL] hashql-ast::lower::sanitizer::constraint -[PASS] hashql-mir::pass::pre_inline::inst-simplify-with-propagation -[PASS] hashql-hir::lower::inference::tuple -[PASS] hashql-mir::pass::pre_inline::nested-let-cleanup -[PASS] hashql-ast::lower::expander::import-resolver::use-shadowing-let -[PASS] hashql-hir::lower::normalization::binary-operation-left -[PASS] hashql-mir::pass::inline::closure-inline -[PASS] hashql-ast::lower::name-mangler::overwrite-body -[PASS] hashql-mir::reify::closure-captured-var -[PASS] hashql-ast::lower::expander::import-resolver::closure-complex-return-type -[PASS] hashql-ast::lower::expander::import-resolver::continue::use-not-found -[PASS] hashql-ast::lower::expander::special-form-expander::as-3 -[FAIL] hashql-ast::lower::expander::import-resolver::generic-arguments-in-final-segment -[PASS] hashql-ast::lower::expander::special-form-expander::let-argument-not-ident -[PASS] hashql-ast::lower::expander::import-resolver::generic-constraints.newtype -[PASS] hashql-mir::pass::pre_inline::dead-code-after-propagation -[PASS] hashql-ast::lower::expander::import-resolver::use-shadowing-use -[FAIL] hashql-ast::lower::name-mangler::newtype -[PASS] hashql-hir::lower::inference::ctor-bounded-invalid -[PASS] hashql-ast::lower::expander::import-resolver::basic-absolute-imports -[PASS] hashql-mir::pass::pre_inline::chain-simplification -[PASS] hashql-mir::pass::inline::simple-ctor -[FAIL] hashql-ast::lower::expander::special-form-expander::type-expr-call-union -[PASS] hashql-mir::reify::dict-index -[PASS] hashql-hir::lower::normalization::let-nested -[PASS] hashql-ast::lower::expander::special-form-expander::type-struct-has-type -[PASS] hashql-ast::lower::expander::import-resolver::continue::unresolved-nested -[PASS] hashql-ast::lower::expander::import-resolver::unresolver-variable -[PASS] hashql-ast::lower::expander::import-resolver::local-binding-type -[PASS] hashql-ast::lower::name-mangler::diverging -[PASS] hashql-ast::lower::expander::import-resolver::complex-nested-type-parameters -[PASS] hashql-hir::lower::inference::if-test -[PASS] hashql-mir::pass::pre_inline::basic-constant-folding -[PASS] hashql-ast::lower::expander::special-form-expander::input-3 -[PASS] hashql-mir::pass::pre_inline::closure-with-dead-branch -[PASS] hashql-mir::reify::ctor -[PASS] hashql-ast::lower::expander::special-form-expander::access-field-literal-boolean -[PASS] hashql-mir::pass::inline::too-large-to-inline -[PASS] hashql-ast::lower::expander::import-resolver::multiple-named-imports -[PASS] hashql-ast::lower::expander::import-resolver::item-not-found -[FAIL] hashql-ast::lower::name-mangler::newtype-generics -[PASS] hashql-hir::lower::normalization::closure -[PASS] hashql-ast::lower::expander::import-resolver::prelude -[FAIL] hashql-ast::lower::expander::special-form-expander::index-2 -[PASS] hashql-hir::lower::inference::collect-variable -[PASS] hashql-mir::pass::dse::used-local-preserved -[PASS] hashql-hir::lower::ctor::local -[PASS] hashql-ast::lower::expander::import-resolver::local-binding-recursive-value -[PASS] hashql-ast::lower::expander::import-resolver::glob-not-found -[PASS] hashql-ast::lower::expander::import-resolver::newtype-scope -[PASS] hashql-ast::lower::expander::import-resolver::generic-argument-absolute-path -[PASS] hashql-ast::lower::expander::special-form-expander::let-collect-all-errors -[PASS] hashql-mir::reify::nested-let -[PASS] hashql-ast::lower::name-mangler::fn-args -[PASS] hashql-ast::lower::expander::special-form-expander::fn-4 -[PASS] hashql-hir::lower::normalization::field-access -[PASS] hashql-ast::lower::expander::import-resolver::regression-generic-arguments-identifier -[FAIL] hashql-hir::lower::inference::closure-call-unconstrained-direct -[PASS] hashql-hir::lower::ctor::explicit-type -[PASS] hashql-ast::lower::expander::import-resolver::basic-relative-import -[PASS] hashql-mir::pass::dse::nested-tuple-projection -[PASS] hashql-ast::lower::expander::import-resolver::substitution -[PASS] hashql-ast::lower::expander::import-resolver::local-binding-value -[PASS] hashql-ast::lower::expander::special-form-expander::type-collect-all-errors -[FAIL] hashql-ast::lower::expander::special-form-expander::access-field-literal-valid -[PASS] hashql-ast::lower::name-mangler::type-generics-interdependent-generics -[PASS] hashql-ast::lower::expander::special-form-expander::use-glob -[PASS] hashql-ast::lower::expander::import-resolver::basic-renamed-import -[FAIL] hashql-ast::lower::expander::import-resolver::generic-argument-use-path -[PASS] hashql-hir::lower::normalization::dict -[PASS] hashql-hir::lower::inference::dict-multi-value -[PASS] hashql-mir::reify::ctor-cached-closure -[PASS] hashql-ast::lower::expander::import-resolver::generic-constraints-type -[PASS] hashql-hir::lower::ctor::null -[PASS] hashql-ast::lower::expander::import-resolver::module-not-found -[PASS] hashql-mir::pass::dse::live-in-branch -[PASS] hashql-ast::lower::name-mangler::fn-types-of-args -[PASS] hashql-ast::lower::expander::import-resolver::local-binding-recursive-type -[PASS] hashql-ast::lower::expander::special-form-expander::use-literal -[PASS] hashql-ast::lower::expander::special-form-expander::unknown-special-form-typo -[PASS] hashql-ast::lower::expander::import-resolver::complex-path-resolution -[PASS] hashql-hir::lower::inference::call -[PASS] hashql-mir::pass::dse::simple-dead-local -[FAIL] hashql-hir::lower::inference::bind-arguments -[FAIL] hashql-ast::lower::name-mangler::path -[PASS] hashql-hir::lower::ctor::absolute -[PASS] hashql-hir::lower::normalization::if-then -[PASS] hashql-ast::lower::expander::import-resolver::basic-glob-import -[PASS] hashql-ast::lower::expander::special-form-expander::type-expr-call-arbitrary -[PASS] hashql-ast::lower::expander::import-resolver::closure-param-not-resolved -[PASS] hashql-mir::reify::closure -[PASS] hashql-ast::lower::name-mangler::simple -[PASS] hashql-hir::lower::inference::struct -[PASS] hashql-mir::pass::cfg_simplify::diamond-cfg-no-merge -[PASS] hashql-hir::lower::ctor::too-many-arguments -[PASS] hashql-ast::lower::expander::special-form-expander::not-enough-segments -[PASS] hashql-hir::lower::checking::qualified-variable -[PASS] hashql-ast::lower::expander::special-form-expander::fn-generics-tuple-literal -[PASS] hashql-hir::lower::normalization::binary-operation -[FAIL] hashql-ast::lower::expander::special-form-expander::access-2 -[PASS] hashql-hir::lower::inference::closure-unconstrained -[PASS] hashql-ast::lower::name-mangler::fn-types-of-ret -[PASS] hashql-hir::lower::inference::list-empty -[PASS] hashql-mir::reify::extermal-module-export -[PASS] hashql-mir::pass::cfg_simplify::const-if-false -[PASS] hashql-ast::lower::expander::special-form-expander::generics -[PASS] hashql-hir::lower::ctor::imported-item-not-a-constructor -[PASS] hashql-ast::lower::name-mangler::let -[PASS] hashql-ast::lower::expander::special-form-expander::type-expr-struct -[PASS] hashql-ast::lower::expander::special-form-expander::as-1 -[PASS] hashql-hir::lower::normalization::binding-value -[PASS] hashql-hir::lower::inference::dict-key-var -[PASS] hashql-mir::reify::tuple-index -[PASS] hashql-hir::lower::inference::qualified-variable -[PASS] hashql-ast::lower::expander::special-form-expander::type-generic-constraint -[PASS] hashql-ast::lower::expander::special-form-expander::use-2 -[PASS] hashql-mir::pass::cfg_simplify::cascade-switch-then-goto -[PASS] hashql-ast::lower::expander::special-form-expander::fn-params-type -[PASS] hashql-ast::lower::name-mangler::fn-types -[PASS] hashql-hir::lower::normalization::index-access -[PASS] hashql-hir::lower::ctor::not-enough-arguments -[PASS] hashql-hir::lower::inference::dict-empty -[PASS] hashql-ast::lower::expander::special-form-expander::use-tuple-literal -[PASS] hashql-ast::lower::expander::special-form-expander::let-2 -[PASS] hashql-ast::lower::name-mangler::type-generics -[PASS] hashql-ast::lower::expander::special-form-expander::use-struct-type -[PASS] hashql-hir::lower::inference::bind-arguments-explicit -[PASS] hashql-hir::lower::normalization::list -[PASS] hashql-mir::pass::cfg_simplify::let-in-branch -[PASS] hashql-hir::lower::inference::index-access -[PASS] hashql-ast::lower::expander::special-form-expander::input-1 -[PASS] hashql-hir::lower::alias-replacement::immediate-usage -[PASS] hashql-ast::lower::expander::special-form-expander::access-field-index-out-of-bounds -[PASS] hashql-ast::lower::expander::special-form-expander::type-generic -[PASS] hashql-mir::pass::cfg_simplify::const-nested-if -[PASS] hashql-hir::lower::normalization::input -[PASS] hashql-ast::lower::expander::special-form-expander::fn-generics-tuple-path -[PASS] hashql-hir::lower::inference::unsatisfiable-upper-constraint -[PASS] hashql-hir::lower::alias-replacement::generic-reassignment -[PASS] hashql-ast::lower::expander::special-form-expander::if-2 -[PASS] hashql-hir::lower::inference::closure-integer -[PASS] hashql-ast::lower::expander::special-form-expander::type-generic-absolute-path -[PASS] hashql-ast::lower::expander::special-form-expander::newtype-2 -[PASS] hashql-hir::lower::normalization::type-assertion-erase -[PASS] hashql-hir::lower::alias-replacement::complex-mixed -[PASS] hashql-ast::lower::expander::special-form-expander::fn-generics-tuple-type -[PASS] hashql-hir::lower::inference::if -[PASS] hashql-ast::lower::expander::special-form-expander::fn-generics-struct-type -[PASS] hashql-ast::lower::expander::special-form-expander::type-expr-invalid -[PASS] hashql-hir::lower::inference::closure-call-unconstrained -[PASS] hashql-hir::lower::normalization::binding-body -[PASS] hashql-ast::lower::expander::special-form-expander::fn-generics-struct -[PASS] hashql-hir::lower::alias-replacement::preserve-non-alias -[PASS] hashql-hir::lower::inference::closure-constrained -[PASS] hashql-ast::lower::expander::special-form-expander::fn-params-tuple -[PASS] hashql-hir::lower::inference::list-single -[PASS] hashql-hir::lower::normalization::call -[PASS] hashql-ast::lower::expander::special-form-expander::labeled-argument -[PASS] hashql-hir::lower::inference::ctor -[PASS] hashql-hir::lower::alias-replacement::unused-alias -[PASS] hashql-hir::lower::checking::minimal-graph -[PASS] hashql-ast::lower::expander::special-form-expander::use-tuple-type -[PASS] hashql-hir::lower::normalization::binary-operation-right -[PASS] hashql-hir::lower::normalization::if-else -[PASS] hashql-hir::lower::inference::input -[PASS] hashql-ast::lower::expander::special-form-expander::type-3 -[PASS] hashql-hir::lower::inference::field-access -[PASS] hashql-ast::lower::expander::special-form-expander::too-many-segments -[PASS] hashql-hir::lower::checking::let -[PASS] hashql-hir::lower::inference::let -[PASS] hashql-hir::lower::alias-replacement::nested-aliases -[PASS] hashql-hir::lower::normalization::struct -[PASS] hashql-ast::lower::expander::pre-expansion-name-resolver::re-assign-prelude -[PASS] hashql-ast::lower::expander::special-form-expander::fn-generics-struct-underscore -[FAIL] hashql-hir::lower::inference::infer-argument -[PASS] hashql-hir::lower::inference::input-default-invalid -[PASS] hashql-hir::lower::checking::type-assertion -[PASS] hashql-hir::lower::inference::list-multi -[PASS] hashql-hir::lower::alias-replacement::multiple-aliases -[FAIL] hashql-ast::lower::expander::pre-expansion-name-resolver::newtype-4 -[PASS] hashql-hir::lower::alias-replacement::replace-alias -[PASS] hashql-ast::lower::expander::special-form-expander::type-infer -[PASS] hashql-hir::lower::inference::local-variable -[PASS] hashql-hir::lower::inference::as -[PASS] hashql-hir::lower::checking::input-multiple -[PASS] hashql-hir::lower::inference::intrinsics::assignment -[PASS] hashql-hir::lower::alias-replacement::qualified-variable-alias -[FAIL] hashql-ast::lower::expander::pre-expansion-name-resolver::re-assign -[PASS] hashql-ast::lower::expander::special-form-expander::as-2 -[PASS] hashql-ast::lower::expander::special-form-expander::fn-generics-struct-literal -[PASS] hashql-hir::lower::inference::input-default -[PASS] hashql-hir::lower::checking::ctor-bounded -[PASS] hashql-hir::lower::inference::intrinsics::re-assignment -[PASS] hashql-ast::lower::expander::pre-expansion-name-resolver::let-absolute -[FAIL] hashql-hir::lower::alias-replacement::generics -[PASS] hashql-hir::lower::inference::dict-multi-key -[PASS] hashql-hir::lower::normalization::graph-read-head -[PASS] hashql-ast::lower::expander::special-form-expander::access-field-literal-type-annotation -[PASS] hashql-ast::lower::expander::special-form-expander::index-1 -[PASS] hashql-hir::reify::local-variable -[PASS] hashql-ast::lower::expander::pre-expansion-name-resolver::nested-let -[PASS] hashql-hir::lower::inference::intrinsics::simple -[PASS] hashql-hir::lower::checking::field-access-tuple -[PASS] hashql-hir::lower::inference::dict-single -[PASS] hashql-ast::lower::expander::special-form-expander::newtype-3 -[PASS] hashql-mir::pass::post_inline::dead-code-from-inline -[PASS] hashql-hir::lower::normalization::tuple -[PASS] hashql-ast::lower::expander::special-form-expander::access-1 -[FAIL] hashql-hir::reify::variable-generics -[PASS] hashql-ast::lower::expander::pre-expansion-name-resolver::absolute-path -[PASS] hashql-hir::lower::checking::literal -[PASS] hashql-ast::lower::expander::special-form-expander::type-tuple-has-type -[FAIL] hashql-hir::lower::checking::closure-call-unconstrained-direct -[PASS] hashql-ast::lower::expander::special-form-expander::fn-generics-duplicates -[PASS] hashql-mir::pass::post_inline::constant-propagation-after-inline -[PASS] hashql-hir::lower::normalization::if-test -[PASS] hashql-mir::pass::cfg_simplify::mixed-const-runtime-if -[PASS] hashql-hir::reify::binding-type-assertion -[PASS] hashql-ast::lower::expander::pre-expansion-name-resolver::alias-absolute-path -[PASS] hashql-ast::lower::expander::special-form-expander::use-glob-not-star -[PASS] hashql-hir::lower::checking::tuple -[PASS] hashql-ast::lower::expander::special-form-expander::access-3 -[PASS] hashql-hir::lower::checking::call -[PASS] hashql-mir::pass::cfg_simplify::const-if-true -[PASS] hashql-hir::lower::normalization::nested-and-or -[PASS] hashql-hir::lower::checking::ctor-bounded-invalid -[PASS] hashql-hir::reify::field -[PASS] hashql-ast::lower::expander::special-form-expander::let-argument-not-path -[PASS] hashql-hir::reify::qualified-variable -[FAIL] hashql-ast::lower::expander::pre-expansion-name-resolver::newtype-3-alias -[PASS] hashql-ast::lower::expander::special-form-expander::input-4 -[PASS] hashql-hir::reify::let-type-annotation -[PASS] hashql-hir::lower::checking::struct -[FAIL] hashql-ast::lower::expander::special-form-expander::use-struct -[PASS] hashql-ast::lower::expander::special-form-expander::input-2 -[PASS] hashql-hir::reify::call-multiple-arguments -[PASS] hashql-hir::reify::closure-multiple-inputs -[PASS] hashql-ast::lower::expander::pre-expansion-name-resolver::type-3-alias -[PASS] hashql-hir::lower::checking::argument-count-mismatch -[PASS] hashql-ast::lower::expander::special-form-expander::newtype-collect-all-errors -[PASS] hashql-hir::reify::input-default -[PASS] hashql-ast::lower::expander::special-form-expander::type-unknown -[PASS] hashql-hir::lower::checking::list-empty -[PASS] hashql-ast::lower::expander::special-form-expander::if-1 -[FAIL] hashql-ast::lower::expander::pre-expansion-name-resolver::multi-segment-resolution -[PASS] hashql-hir::reify::list -[PASS] hashql-hir::reify::underscore -[PASS] hashql-ast::lower::expander::special-form-expander::type-generic-struct -[PASS] hashql-hir::reify::if-partial -[PASS] hashql-ast::lower::expander::special-form-expander::fn-params-duplicates -[PASS] hashql-hir::reify::input -[PASS] hashql-ast::lower::expander::special-form-expander::type-2 -[PASS] hashql-ast::lower::expander::special-form-expander::access-field-literal-string -[PASS] hashql-ast::lower::expander::pre-expansion-name-resolver::let-3-alias -[PASS] hashql-hir::lower::checking::closure-call-constrained -[PASS] hashql-ast::lower::expander::special-form-expander::newtype-constraints -[PASS] hashql-hir::reify::let -[PASS] hashql-ast::lower::expander::special-form-expander::fn-5 -[PASS] hashql-hir::reify::as -[PASS] hashql-ast::lower::expander::special-form-expander::use-struct-literal -[PASS] hashql-ast::lower::expander::special-form-expander::if-3 -[PASS] hashql-ast::lower::expander::pre-expansion-name-resolver::newtype-3 -[PASS] hashql-ast::lower::expander::special-form-expander::fn-3 -[PASS] hashql-hir::reify::nested-expressions -[FAIL] hashql-ast::lower::expander::special-form-expander::use-3 -[PASS] hashql-ast::lower::expander::special-form-expander::use-4 -[PASS] hashql-ast::lower::expander::special-form-expander::index-3 -[PASS] hashql-ast::lower::expander::special-form-expander::type-generic-generic-ident -[PASS] hashql-hir::lower::specialization::complex -[PASS] hashql-ast::lower::expander::pre-expansion-name-resolver::resolve-symbol -[PASS] hashql-ast::lower::expander::special-form-expander::let-3 -[PASS] hashql-ast::lower::type-extractor::definition::contractive-union -[FAIL] hashql-ast::lower::expander::pre-expansion-name-resolver::type-4 -[PASS] hashql-ast::lower::expander::special-form-expander::type-generic-relative-path -[PASS] hashql-hir::reify::literal -[PASS] hashql-ast::lower::expander::special-form-expander::use-tuple-path -[PASS] hashql-ast::lower::expander::special-form-expander::use-struct-path -[PASS] hashql-hir::lower::specialization::unary -[PASS] hashql-mir::reify::binary -[PASS] hashql-ast::lower::type-extractor::definition::translation-intersection -[PASS] hashql-hir::reify::tuple -[PASS] hashql-ast::lower::expander::special-form-expander::type-generic-duplicate -[PASS] hashql-ast::lower::expander::pre-expansion-name-resolver::alias-symbol -[PASS] hashql-ast::lower::expander::special-form-expander::if-4 -[PASS] hashql-ast::lower::expander::special-form-expander::type-4 -[PASS] hashql-mir::reify::input-default -[PASS] hashql-hir::reify::call -[PASS] hashql-ast::lower::type-extractor::definition::translation-tuple -[PASS] hashql-ast::lower::expander::special-form-expander::type-never -[PASS] hashql-ast::lower::expander::special-form-expander::fn-generics-literal -[FAIL] hashql-ast::lower::expander::pre-expansion-name-resolver::let-4-alias -[PASS] hashql-mir::reify::nested-tuple-index -[PASS] hashql-hir::reify::struct -[PASS] hashql-ast::lower::expander::special-form-expander::does-not-touch-non-kernel -[PASS] hashql-ast::lower::type-extractor::closure -[FAIL] hashql-ast::lower::expander::pre-expansion-name-resolver::resolve-generics -[PASS] hashql-ast::lower::type-extractor::definition::result -[FAIL] hashql-ast::lower::expander::special-form-expander::type-expr-call-not-path -[PASS] hashql-mir::reify::ctor-empty -[FAIL] hashql-ast::lower::expander::pre-expansion-name-resolver::invalid-let-expr -[PASS] hashql-hir::lower::checking::field-access -[PASS] hashql-ast::lower::type-extractor::generic-type-resolution -[PASS] hashql-ast::lower::expander::special-form-expander::unknown-special-form -[PASS] hashql-ast::lower::type-extractor::definition::unused-generic-parameter -[PASS] hashql-ast::lower::expander::pre-expansion-name-resolver::let-3 -[PASS] hashql-ast::lower::type-extractor::closure-unused-generic -[PASS] hashql-hir::lower::checking::dict -[PASS] hashql-ast::lower::type-extractor::definition::generics-with-params -[PASS] hashql-ast::lower::expander::special-form-expander::let-5 -[PASS] hashql-mir::reify::external-module -[PASS] hashql-ast::lower::type-extractor::global-type-resolution -[PASS] hashql-hir::lower::checking::if-non-boolean -[FAIL] hashql-ast::lower::expander::pre-expansion-name-resolver::re-assign-prelude-diverging -[FAIL] hashql-ast::lower::expander::special-form-expander::type-expr-call-intersection -[PASS] hashql-mir::pass::inline::filter-aggressive -[PASS] hashql-ast::lower::type-extractor::definition::non-contractive-type -[PASS] hashql-ast::lower::type-extractor::nested-type-nodes -[PASS] hashql-ast::lower::expander::pre-expansion-name-resolver::let-4 -[PASS] hashql-ast::lower::node-renumberer::nested -[PASS] hashql-hir::lower::checking::input-default-invalid -[PASS] hashql-ast::lower::type-extractor::definition::translation-infer -[PASS] hashql-ast::lower::expander::pre-expansion-name-resolver::restoration-bindings -[PASS] hashql-ast::lower::node-renumberer::diverging -[PASS] hashql-hir::lower::checking::local-variable -[PASS] hashql-ast::lower::type-extractor::definition::dict-parameter-count-mismatch-too-many -[FAIL] hashql-ast::lower::expander::pre-expansion-name-resolver::let-ident-generic -[PASS] hashql-ast::lower::node-renumberer::basic -[PASS] hashql-ast::lower::type-extractor::definition::locals-generic-params -[PASS] hashql-ast::lower::type-extractor::definition::non-contractive-self -[PASS] hashql-hir::lower::checking::call-invalid -[PASS] hashql-ast::lower::type-extractor::definition::path-global-resolution -[PASS] hashql-ast::lower::expander::pre-expansion-name-resolver::type-3 -[PASS] hashql-ast::lower::type-extractor::definition::identity-nominal -[PASS] hashql-ast::lower::type-extractor::local-type-resolution -[FAIL] hashql-hir::lower::checking::bind-arguments -[PASS] hashql-ast::lower::type-extractor::definition::intrinsic-dict-translation -[PASS] hashql-ast::lower::type-extractor::complex-types -[PASS] hashql-mir::reify::input-required -[PASS] hashql-ast::lower::type-extractor::definition::list-parameter-count-mismatch-too-many -[PASS] hashql-hir::lower::checking::closure-unconstrained -[PASS] hashql-ast::lower::type-extractor::definition::constraints-parsing -[PASS] hashql-mir::reify::if-else -[PASS] hashql-mir::reify::struct-index -[PASS] hashql-ast::lower::type-extractor::definition::env-type-interning -[PASS] hashql-ast::lower::type-extractor::definition::locals-generic-params-struct -[PASS] hashql-hir::lower::checking::closure-invalid-return-type -[PASS] hashql-mir::reify::literal -[PASS] hashql-ast::lower::type-extractor::definition::path-local-resolution -[PASS] hashql-mir::reify::top-level-external-module -[PASS] hashql-mir::pass::inline::excessive-depth -[PASS] hashql-ast::lower::type-extractor::definition::translation-struct -[PASS] hashql-ast::lower::type-extractor::definition::infer-with-arguments -[PASS] hashql-mir::reify::empty-tuple -[PASS] hashql-hir::lower::checking::dict-empty -[PASS] hashql-hir::lower::specialization::minimal-graph -[PASS] hashql-mir::reify::null-value-in-binary -[PASS] hashql-ast::lower::type-extractor::definition::global-generic-constraint-not-enough -[PASS] hashql-hir::reify::literal-type-annotation -[PASS] hashql-ast::lower::type-extractor::definition::intrinsic-list-translation -[PASS] hashql-ast::lower::type-extractor::definition::global-generic-constraint-too-many -[PASS] hashql-hir::lower::specialization::bool -[PASS] hashql-hir::lower::checking::index-access -[PASS] hashql-mir::reify::list-index -[PASS] hashql-hir::reify::if -[PASS] hashql-ast::lower::type-extractor::definition::constraints-invalid-location -[PASS] hashql-ast::lower::type-extractor::definition::duplicate-fields -[PASS] hashql-ast::lower::type-extractor::definition::translation-union -[PASS] hashql-hir::lower::specialization::bits -[PASS] hashql-hir::reify::index -[PASS] hashql-hir::lower::checking::list -[PASS] hashql-ast::lower::type-extractor::definition::list-parameter-count-mismatch -[PASS] hashql-ast::lower::type-extractor::definition::dict-parameter-count-mismatch -[PASS] hashql-hir::lower::thunking::return-local -[PASS] hashql-ast::lower::type-extractor::definition::identity-structural -[PASS] hashql-hir::lower::checking::type-assertion-smaller -[PASS] hashql-hir::reify::closure -[PASS] hashql-ast::lower::type-extractor::definition::generics-apply-params -[PASS] hashql-hir::lower::thunking::closure -[PASS] hashql-ast::lower::type-extractor::definition::contractive-guarded -[PASS] hashql-hir::reify::dict -[PASS] hashql-ast::lower::type-extractor::definition::locals-type-extraction -[PASS] hashql-hir::lower::checking::closure-call-unconstrained -[PASS] hashql-hir::lower::thunking::dependent-call -[PASS] hashql-hir::lower::thunking::tuple-index -[PASS] hashql-mir::pass::data-dependency::input-no-deps -[PASS] hashql-ast::lower::type-extractor::definition::generics-param-count-mismatch -[PASS] hashql-hir::lower::checking::input -[PASS] hashql-hir::lower::specialization::math -[PASS] hashql-hir::lower::checking::ctor -[PASS] hashql-ast::lower::type-extractor::graph-pipeline-inferred-closure -[PASS] hashql-hir::lower::checking::if-simplify -[PASS] hashql-ast::lower::type-extractor::let-binding-type -[FAIL] hashql-mir::reify::monomorphized-closure -[PASS] hashql-hir::lower::checking::type-assertion-unrelated -[PASS] hashql-mir::pass::inst_simplify::identity-and-true -[PASS] hashql-ast::lower::type-extractor::union-type -[PASS] hashql-ast::lower::type-extractor::closure-generics -[PASS] hashql-mir::pass::inst_simplify::identical-operand-eq -[PASS] hashql-mir::reify::null-value -[PASS] hashql-mir::pass::inst_simplify::const-propagation-locals -[PASS] hashql-mir::pass::inst_simplify::annihilator-and-false -[PASS] hashql-hir::lower::checking::filter-graph -[PASS] hashql-mir::pass::inst_simplify::annihilator-or-true -[PASS] hashql-mir::pass::administrative_reduction::thunk-aggregate -[PASS] hashql-hir::lower::checking::closure-constrained -[PASS] hashql-mir::pass::inst_simplify::const-fold-lt -[PASS] hashql-mir::pass::inst_simplify::identical-operand-ne -[FAIL] hashql-hir::lower::specialization::collect-custom-collect -[PASS] hashql-mir::pass::administrative_reduction::closure-chain -[PASS] hashql-mir::pass::inst_simplify::identical-operand-gt -[PASS] hashql-mir::pass::administrative_reduction::forwarding-closure -[PASS] hashql-mir::pass::inline::heuristic-inline -[PASS] hashql-mir::pass::administrative_reduction::non-reducible-computation -[PASS] hashql-mir::pass::inline::nested-ctor -[PASS] hashql-mir::pass::administrative_reduction::thunk-simple -[PASS] hashql-mir::pass::administrative_reduction::multiple-thunks -[PASS] hashql-mir::pass::inst_simplify::const-fold-ne -[PASS] hashql-mir::pass::inst_simplify::chained-const-fold -[PASS] hashql-mir::pass::post_inline::cascading-simplification -[PASS] hashql-mir::pass::inst_simplify::const-fold-gt -[PASS] hashql-mir::pass::post_inline::nested-branch-elimination -[PASS] hashql-mir::pass::forward_substitution::param-const-agree -[PASS] hashql-mir::pass::forward_substitution::chained-projection -[PASS] hashql-mir::pass::inst_simplify::const-fold-lte -[PASS] hashql-mir::pass::inst_simplify::identical-operand-lt -[PASS] hashql-mir::pass::inst_simplify::identical-operand-lte -[PASS] hashql-hir::lower::specialization::filter-graph -[PASS] hashql-eval::postgres::input-parameter-exists -[PASS] hashql-mir::pass::inst_simplify::identity-or-false -[PASS] hashql-mir::reify::reassign -[PASS] hashql-mir::pass::inst_simplify::identical-operand-gte -[PASS] hashql-mir::reify::dict-computed-key -[PASS] hashql-mir::pass::inst_simplify::const-fold-gte -[PASS] hashql-mir::pass::inst_simplify::const-fold-eq -[PASS] hashql-mir::pass::data-dependency::graph-read-filter -[PASS] hashql-mir::pass::data-dependency::block-params -[PASS] hashql-mir::pass::data-dependency::mixed-projection-chain -[PASS] hashql-mir::pass::data-dependency::function-apply -[PASS] hashql-mir::pass::data-dependency::comparison-operators -[PASS] hashql-mir::pass::data-dependency::multiple-uses -[PASS] hashql-mir::pass::data-dependency::tuple-projection -[PASS] hashql-mir::pass::data-dependency::deeply-nested-tuple -[PASS] hashql-mir::reify::graph-read -[PASS] hashql-mir::pass::data-dependency::binary-operation -[PASS] hashql-mir::pass::data-dependency::nested-tuple-projection -[PASS] hashql-mir::pass::data-dependency::struct-projection -[PASS] hashql-mir::pass::data-dependency::list-construction -[PASS] hashql-hir::lower::specialization::collect-filter-graph -[PASS] hashql-hir::lower::specialization::cmp -[PASS] hashql-mir::pass::data-dependency::graph-read-head -[PASS] hashql-mir::pass::data-dependency::function-multiple-args -[PASS] hashql-mir::pass::data-dependency::struct-construction -[PASS] hashql-mir::pass::inline::filter-with-ctor -[PASS] hashql-mir::interpret::access-struct-through-opaque -[PASS] hashql-hir::lower::checking::collect-filter-graph -[PASS] hashql-eval::postgres::opaque-passthrough -[PASS] hashql-eval::postgres::dict-construction -[PASS] hashql-eval::postgres::entity-draft-id-equality -[PASS] hashql-eval::postgres::tuple-construction -[PASS] hashql-hir::lower::graph-hoisting::no-hoist-closure-inside-read -[PASS] hashql-hir::lower::graph-hoisting::double-hoist-deny -[PASS] hashql-eval::postgres::minimal-select-no-extra-joins -[PASS] hashql-eval::postgres::logical-and-inputs -[PASS] hashql-eval::postgres::entity-web-id-equality -[PASS] hashql-mir::pass::data-dependency::closure-construction -[PASS] hashql-mir::pass::data-dependency::tuple-construction -[PASS] hashql-eval::postgres::mixed-sources-filter -[FAIL] hashql-ast::lower::name-mangler::onion -[PASS] hashql-ast::lower::name-mangler::type-generics-recursive -[FAIL] hashql-ast::lower::name-mangler::absolute-path -[FAIL] hashql-ast::lower::name-mangler::type-generics-constraints -[PASS] hashql-hir::lower::graph-hoisting::nested-boolean-expression -[PASS] hashql-ast::lower::name-mangler::scopes-no-include -[PASS] hashql-hir::lower::graph-hoisting::nested-boolean-expression-outer-let -[PASS] hashql-eval::postgres::list-construction -[PASS] hashql-eval::postgres::entity-uuid-equality -[PASS] hashql-eval::postgres::input-parameter-load -[PASS] hashql-eval::postgres::entity-archived-check -[PASS] hashql-hir::lower::graph-hoisting::no-hoist-closure -[PASS] hashql-eval::postgres::constant-true-filter -[FAIL] hashql-ast::lower::name-mangler::path-arguments -[PASS] hashql-eval::postgres::nested-if-input-branches -[PASS] hashql-eval::postgres::let-binding-propagation -[PASS] hashql-eval::postgres::comparison-no-cast -[PASS] hashql-hir::lower::graph-hoisting::hoist-inside-boundary -[PASS] hashql-hir::lower::graph-hoisting::hoist -[PASS] hashql-hir::lower::graph-hoisting::sequential-filter -[PASS] hashql-eval::postgres::if-input-branches -[PASS] hashql-eval::postgres::struct-construction -[PASS] hashql-hir::lower::graph-hoisting::double-hoist -[PASS] hashql-eval::postgres::entity-type-ids-lateral -[PASS] hashql-hir::lower::graph-hoisting::partial -[PASS] hashql-eval::postgres::multiple-filters -[PASS] hashql-eval::postgres::env-captured-variable -[PASS] hashql-mir::pass::dse::showcase -[PASS] hashql-mir::pass::cfg_simplify::dead-block-elimination -[PASS] hashql-mir::pass::inst_simplify::showcase -[PASS] hashql-mir::reify::nested-if -[PASS] hashql-mir::pass::forward_substitution::closure-env-capture -[PASS] hashql-mir::pass::forward_substitution::nested -[PASS] hashql-mir::pass::forward_substitution::tuple-projection -[PASS] hashql-mir::pass::forward_substitution::param-const-diverge -[PASS] hashql-mir::pass::post_inline::showcase - -═════════════════════════════ Test Results Summary ═════════════════════════════ - -Results: - ✓ Passed: 497 - ✗ Failed: 37 - Total: 534 - -Timing: - Elapsed: 5.55s - Throughput: 96.2 tests/sec - Avg/test: 27.90ms - -Phase Breakdown: - Run: 27.59ms avg ( 98.9%) - Parse: 92.45µs avg ( 0.3%) - Read: 41.02µs avg ( 0.1%) - Verify: 8.54µs avg ( 0.0%) - Assert: 58.40µs avg ( 0.2%) - Render: 39.74µs avg ( 0.1%) - -I/O Statistics: - Files read: 1069 (1.2 MiB total) - Files written: 0 (0 B total) - -Slowest Tests: - 5.53s hashql-mir::pass::post_inline::showcase - 1.20s hashql-mir::pass::forward_substitution::closure-env-capture - 1.03s hashql-mir::reify::nested-if - 826.64ms hashql-mir::pass::dse::showcase - 818.42ms hashql-mir::pass::cfg_simplify::dead-block-elimination - -Failed Tests: - ✗ hashql-mir::reify::monomorphized-closure - ✗ hashql-hir::reify::variable-generics - ✗ hashql-hir::lower::specialization::collect-custom-collect - ✗ hashql-hir::lower::alias-replacement::generics - ✗ hashql-hir::lower::inference::bind-arguments - ✗ hashql-hir::lower::inference::infer-argument - ✗ hashql-hir::lower::inference::closure-call-unconstrained-direct - ✗ hashql-hir::lower::checking::bind-arguments - ✗ hashql-hir::lower::checking::closure-call-unconstrained-direct - ✗ hashql-ast::lower::name-mangler::path-arguments - ✗ hashql-ast::lower::name-mangler::onion - ✗ hashql-ast::lower::name-mangler::absolute-path - ✗ hashql-ast::lower::name-mangler::type-generics-constraints - ✗ hashql-ast::lower::name-mangler::newtype - ✗ hashql-ast::lower::name-mangler::newtype-generics - ✗ hashql-ast::lower::name-mangler::path - ✗ hashql-ast::lower::sanitizer::constraint - ✗ hashql-ast::lower::expander::import-resolver::generic-argument-use-path - ✗ hashql-ast::lower::expander::import-resolver::generic-arguments-in-final-segment - ✗ hashql-ast::lower::expander::special-form-expander::access-2 - ✗ hashql-ast::lower::expander::special-form-expander::type-expr-call-union - ✗ hashql-ast::lower::expander::special-form-expander::index-2 - ✗ hashql-ast::lower::expander::special-form-expander::type-expr-call-not-path - ✗ hashql-ast::lower::expander::special-form-expander::type-expr-call-intersection - ✗ hashql-ast::lower::expander::special-form-expander::use-struct - ✗ hashql-ast::lower::expander::special-form-expander::use-3 - ✗ hashql-ast::lower::expander::special-form-expander::access-field-literal-valid - ✗ hashql-ast::lower::expander::pre-expansion-name-resolver::newtype-4 - ✗ hashql-ast::lower::expander::pre-expansion-name-resolver::re-assign - ✗ hashql-ast::lower::expander::pre-expansion-name-resolver::newtype-3-alias - ✗ hashql-ast::lower::expander::pre-expansion-name-resolver::multi-segment-resolution - ✗ hashql-ast::lower::expander::pre-expansion-name-resolver::type-4 - ✗ hashql-ast::lower::expander::pre-expansion-name-resolver::let-4-alias - ✗ hashql-ast::lower::expander::pre-expansion-name-resolver::resolve-generics - ✗ hashql-ast::lower::expander::pre-expansion-name-resolver::invalid-let-expr - ✗ hashql-ast::lower::expander::pre-expansion-name-resolver::re-assign-prelude-diverging - ✗ hashql-ast::lower::expander::pre-expansion-name-resolver::let-ident-generic - -37 of 534 tests failed. - diff --git a/libs/@local/hashql/core/src/module/error.rs b/libs/@local/hashql/core/src/module/error.rs index 07a6b769d62..65460709c7e 100644 --- a/libs/@local/hashql/core/src/module/error.rs +++ b/libs/@local/hashql/core/src/module/error.rs @@ -1,6 +1,129 @@ -use super::{ModuleId, Universe, import::Import, item::Item, resolver::Reference}; +use core::fmt; + +use super::{ + ModuleId, Universe, + import::Import, + item::{Item, ItemKind}, + resolver::Reference, +}; use crate::symbol::Symbol; +/// A set of item kinds that a name was found to exist as. +/// +/// Used in resolution errors to report what a name actually resolves to +/// when the expected kind was not found. For example, when looking for a +/// value named `Url` that only exists as a type, the error can report +/// `expected: Value, found: KindSet::TYPE`. +#[derive(Copy, Clone, PartialEq, Eq, Hash, Default)] +pub struct KindSet(u8); + +impl KindSet { + pub const EMPTY: Self = Self(0); + pub const MODULE: Self = Self(0b100); + pub const TYPE: Self = Self(0b010); + pub const VALUE: Self = Self(0b001); + + #[must_use] + pub const fn contains(self, other: Self) -> bool { + self.0 & other.0 == other.0 && other.0 != 0 + } + + #[must_use] + pub const fn union(self, other: Self) -> Self { + Self(self.0 | other.0) + } + + #[must_use] + pub const fn is_empty(self) -> bool { + self.0 == 0 + } + + /// Removes the kind corresponding to `universe` from this set. + #[must_use] + pub const fn without_universe(self, universe: Universe) -> Self { + Self(self.0 & !Self::from_universe(universe).0) + } + + /// Returns the `KindSet` for a single universe. + #[must_use] + pub const fn from_universe(universe: Universe) -> Self { + match universe { + Universe::Value => Self::VALUE, + Universe::Type => Self::TYPE, + } + } + + /// Derives a `KindSet` from an [`ItemKind`]. + #[must_use] + pub const fn from_item_kind(kind: &ItemKind<'_>) -> Self { + match kind.universe() { + None => Self::MODULE, + Some(universe) => Self::from_universe(universe), + } + } +} + +impl fmt::Debug for KindSet { + fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result { + let mut first = true; + f.write_str("KindSet(")?; + for (flag, name) in [ + (Self::VALUE, "VALUE"), + (Self::TYPE, "TYPE"), + (Self::MODULE, "MODULE"), + ] { + if self.contains(flag) { + if !first { + f.write_str(" | ")?; + } + f.write_str(name)?; + first = false; + } + } + if first { + f.write_str("EMPTY")?; + } + f.write_str(")") + } +} + +impl fmt::Display for KindSet { + fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result { + let has_value = self.contains(Self::VALUE); + let has_type = self.contains(Self::TYPE); + let has_module = self.contains(Self::MODULE); + + let mut parts = Vec::new(); + if has_value { + parts.push("a value"); + } + if has_type { + parts.push("a type"); + } + if has_module { + parts.push("a module"); + } + + match parts.len() { + 0 => Ok(()), + 1 => f.write_str(parts[0]), + 2 => write!(f, "{} and {}", parts[0], parts[1]), + _ => { + for (index, part) in parts.iter().enumerate() { + if index > 0 { + f.write_str(", ")?; + } + if index == parts.len() - 1 { + f.write_str("and ")?; + } + f.write_str(part)?; + } + Ok(()) + } + } + } +} + #[derive(Debug, Copy, Clone, PartialEq, Eq)] pub struct ResolutionSuggestion<'heap, T> { pub item: T, @@ -25,6 +148,12 @@ pub enum ResolutionError<'heap> { ImportNotFound { depth: usize, name: Symbol<'heap>, + /// The universe that was searched, if resolution was single-universe. + /// `None` when all universes were searched (multi-mode). + expected: Option, + /// What kinds the name actually exists as (when it was not found in + /// the expected universe). + found: KindSet, suggestions: Vec>>, }, @@ -37,6 +166,13 @@ pub enum ResolutionError<'heap> { ItemNotFound { depth: usize, name: Symbol<'heap>, + /// The universe that was searched, if resolution was single-universe. + /// `None` when all universes were searched (multi-mode). + expected: Option, + /// What kinds the name actually exists as (when it was not found in + /// the expected universe). For example, looking for value `Url` in a + /// module that only exports it as a type yields `KindSet::TYPE`. + found: KindSet, suggestions: Vec>>, }, diff --git a/libs/@local/hashql/core/src/module/resolver.rs b/libs/@local/hashql/core/src/module/resolver.rs index f859f70d64b..1dd95181553 100644 --- a/libs/@local/hashql/core/src/module/resolver.rs +++ b/libs/@local/hashql/core/src/module/resolver.rs @@ -2,7 +2,7 @@ use core::{fmt::Debug, iter}; use super::{ Module, ModuleId, ModuleRegistry, Universe, - error::{ResolutionError, ResolutionSuggestion}, + error::{KindSet, ResolutionError, ResolutionSuggestion}, import::Import, item::{Item, ItemKind}, locals::LocalBinding, @@ -97,6 +97,14 @@ impl<'heap> Resolver<'_, 'heap> { } } + fn found_kinds(&self, call: impl FnOnce() -> KindSet) -> KindSet { + if self.options.suggestions { + call() + } else { + KindSet::EMPTY + } + } + fn resolve_single( &self, module: Module<'heap>, @@ -111,9 +119,22 @@ impl<'heap> Resolver<'_, 'heap> { .find(|item| item.name == name && item.kind.universe() == Some(universe)); let Some(item) = item else { + // Check what kinds the name actually exists as in this module. + let found = self.found_kinds(|| { + let mut found = KindSet::EMPTY; + for candidate in module.items { + if candidate.name == name { + found = found.union(KindSet::from_item_kind(&candidate.kind)); + } + } + found + }); + return Err(ResolutionError::ItemNotFound { depth, name, + expected: Some(universe), + found, suggestions: self .suggest(|| module.suggestions(|item| item.kind.universe() == Some(universe))), }); @@ -141,6 +162,8 @@ impl<'heap> Resolver<'_, 'heap> { return Err(ResolutionError::ItemNotFound { depth, name, + expected: None, + found: KindSet::EMPTY, suggestions: self.suggest(|| module.suggestions(|_| true)), }); } @@ -287,9 +310,29 @@ impl<'heap> Resolver<'_, 'heap> { .find(|import| import.name == name && import.item.universe() == Some(universe)); let Some(import) = import else { + // Check what kinds the name actually exists as in the imports. + let found = self.found_kinds(|| { + let mut found = KindSet::EMPTY; + for candidate in imports.iter().rev() { + if candidate.name == name { + match candidate.item.universe() { + Some(universe) => { + found = found.union(KindSet::from_universe(universe)); + } + None => { + found = found.union(KindSet::MODULE); + } + } + } + } + found + }); + return Err(ResolutionError::ImportNotFound { depth: 0, name, + expected: Some(universe), + found, suggestions: self.suggest(|| { imports .iter() @@ -342,6 +385,8 @@ impl<'heap> Resolver<'_, 'heap> { return Err(ResolutionError::ImportNotFound { depth: 0, name, + expected: None, + found: KindSet::EMPTY, suggestions: self.suggest(|| { imports .iter() @@ -426,6 +471,18 @@ impl<'heap> Resolver<'_, 'heap> { let module = Self::find_module_from_imports(name, imports); let Some(module) = module else { + // Check if the name exists as a non-module import. If so, + // produce ModuleRequired ("X is a value, not a module") + // instead of ModuleNotFound ("cannot find module X"). + let non_module = imports.iter().rev().find(|import| import.name == name); + + if let Some(non_module) = non_module { + return Err(ResolutionError::ModuleRequired { + depth: 0, + found: non_module.item.universe(), + }); + } + return Err(ResolutionError::ModuleNotFound { depth: 0, name, @@ -575,7 +632,7 @@ mod test { ]) .expect_err("Resolution should fail for non-existent item"); - assert_matches!(error, ResolutionError::ItemNotFound { depth: 2, name: _, suggestions } if suggestions.is_empty()); + assert_matches!(error, ResolutionError::ItemNotFound { depth: 2, name: _, expected: Some(Universe::Type), found: _, suggestions } if suggestions.is_empty()); } #[test] From cb65b0343c25e224ea15ac897e9a9684615db23c Mon Sep 17 00:00:00 2001 From: Bilal Mahmoud <7252775+indietyp@users.noreply.github.com> Date: Mon, 15 Jun 2026 18:36:16 +0200 Subject: [PATCH 43/55] fix: clippy --- libs/@local/hashql/core/src/module/std_lib/core/bits.rs | 1 - libs/@local/hashql/core/src/module/std_lib/core/bool.rs | 1 - libs/@local/hashql/core/src/module/std_lib/core/cmp.rs | 1 - libs/@local/hashql/core/src/module/std_lib/core/json.rs | 1 - libs/@local/hashql/core/src/module/std_lib/core/math.rs | 1 - libs/@local/hashql/core/src/module/std_lib/core/mod.rs | 1 - libs/@local/hashql/core/src/module/std_lib/core/option.rs | 1 - libs/@local/hashql/core/src/module/std_lib/core/url.rs | 1 - libs/@local/hashql/core/src/module/std_lib/core/uuid.rs | 1 - libs/@local/hashql/core/src/module/std_lib/graph/body.rs | 1 - libs/@local/hashql/core/src/module/std_lib/graph/entity.rs | 1 - libs/@local/hashql/core/src/module/std_lib/graph/head.rs | 1 - libs/@local/hashql/core/src/module/std_lib/graph/tail.rs | 1 - libs/@local/hashql/core/src/module/std_lib/graph/temporal.rs | 1 - .../core/src/module/std_lib/graph/types/knowledge/entity.rs | 1 - libs/@local/hashql/core/src/module/std_lib/graph/types/mod.rs | 1 - .../core/src/module/std_lib/graph/types/ontology/entity_type.rs | 1 - .../hashql/core/src/module/std_lib/graph/types/ontology/mod.rs | 1 - .../hashql/core/src/module/std_lib/graph/types/principal/mod.rs | 1 - 19 files changed, 19 deletions(-) diff --git a/libs/@local/hashql/core/src/module/std_lib/core/bits.rs b/libs/@local/hashql/core/src/module/std_lib/core/bits.rs index ce6428f5cde..4e8d7028f00 100644 --- a/libs/@local/hashql/core/src/module/std_lib/core/bits.rs +++ b/libs/@local/hashql/core/src/module/std_lib/core/bits.rs @@ -1,6 +1,5 @@ use super::func; use crate::{ - heap::Heap, module::{ locals::TypeDef, std_lib::{ModuleDef, StandardLibrary, StandardLibraryModule, decl}, diff --git a/libs/@local/hashql/core/src/module/std_lib/core/bool.rs b/libs/@local/hashql/core/src/module/std_lib/core/bool.rs index 851ee8c9103..063e24345d7 100644 --- a/libs/@local/hashql/core/src/module/std_lib/core/bool.rs +++ b/libs/@local/hashql/core/src/module/std_lib/core/bool.rs @@ -1,6 +1,5 @@ use super::func; use crate::{ - heap::Heap, module::{ locals::TypeDef, std_lib::{ModuleDef, StandardLibrary, StandardLibraryModule, decl}, diff --git a/libs/@local/hashql/core/src/module/std_lib/core/cmp.rs b/libs/@local/hashql/core/src/module/std_lib/core/cmp.rs index 58b4bed3741..23a2d5ab736 100644 --- a/libs/@local/hashql/core/src/module/std_lib/core/cmp.rs +++ b/libs/@local/hashql/core/src/module/std_lib/core/cmp.rs @@ -1,6 +1,5 @@ use super::func; use crate::{ - heap::Heap, module::{ locals::TypeDef, std_lib::{ModuleDef, StandardLibrary, StandardLibraryModule, decl}, diff --git a/libs/@local/hashql/core/src/module/std_lib/core/json.rs b/libs/@local/hashql/core/src/module/std_lib/core/json.rs index 0183c2173c8..17383585dcd 100644 --- a/libs/@local/hashql/core/src/module/std_lib/core/json.rs +++ b/libs/@local/hashql/core/src/module/std_lib/core/json.rs @@ -1,5 +1,4 @@ use crate::{ - heap::Heap, module::std_lib::{ItemDef, ModuleDef, StandardLibrary, StandardLibraryModule}, symbol::{Symbol, sym}, }; diff --git a/libs/@local/hashql/core/src/module/std_lib/core/math.rs b/libs/@local/hashql/core/src/module/std_lib/core/math.rs index 86ca1880ae8..2690ca0715b 100644 --- a/libs/@local/hashql/core/src/module/std_lib/core/math.rs +++ b/libs/@local/hashql/core/src/module/std_lib/core/math.rs @@ -1,6 +1,5 @@ use super::func; use crate::{ - heap::Heap, module::{ locals::TypeDef, std_lib::{ModuleDef, StandardLibrary, StandardLibraryModule, decl}, diff --git a/libs/@local/hashql/core/src/module/std_lib/core/mod.rs b/libs/@local/hashql/core/src/module/std_lib/core/mod.rs index 482115474cb..968dcda1593 100644 --- a/libs/@local/hashql/core/src/module/std_lib/core/mod.rs +++ b/libs/@local/hashql/core/src/module/std_lib/core/mod.rs @@ -1,6 +1,5 @@ use super::{ItemDef, ModuleDef, StandardLibrary, StandardLibraryModule}; use crate::{ - heap::Heap, module::{item::IntrinsicValueItem, locals::TypeDef}, symbol::{Symbol, sym}, }; diff --git a/libs/@local/hashql/core/src/module/std_lib/core/option.rs b/libs/@local/hashql/core/src/module/std_lib/core/option.rs index 88f306c7129..1075b8ae7e3 100644 --- a/libs/@local/hashql/core/src/module/std_lib/core/option.rs +++ b/libs/@local/hashql/core/src/module/std_lib/core/option.rs @@ -1,5 +1,4 @@ use crate::{ - heap::Heap, module::std_lib::{ItemDef, ModuleDef, StandardLibrary, StandardLibraryModule}, symbol::{Symbol, sym}, }; diff --git a/libs/@local/hashql/core/src/module/std_lib/core/url.rs b/libs/@local/hashql/core/src/module/std_lib/core/url.rs index f96dfb78632..2cfb8ff0f8e 100644 --- a/libs/@local/hashql/core/src/module/std_lib/core/url.rs +++ b/libs/@local/hashql/core/src/module/std_lib/core/url.rs @@ -1,5 +1,4 @@ use crate::{ - heap::Heap, module::std_lib::{ItemDef, ModuleDef, StandardLibrary, StandardLibraryModule}, symbol::{Symbol, sym}, }; diff --git a/libs/@local/hashql/core/src/module/std_lib/core/uuid.rs b/libs/@local/hashql/core/src/module/std_lib/core/uuid.rs index 4bab6eb757b..de7ae31ca65 100644 --- a/libs/@local/hashql/core/src/module/std_lib/core/uuid.rs +++ b/libs/@local/hashql/core/src/module/std_lib/core/uuid.rs @@ -1,5 +1,4 @@ use crate::{ - heap::Heap, module::std_lib::{ItemDef, ModuleDef, StandardLibrary, StandardLibraryModule}, symbol::{Symbol, sym}, }; diff --git a/libs/@local/hashql/core/src/module/std_lib/graph/body.rs b/libs/@local/hashql/core/src/module/std_lib/graph/body.rs index 5234a9633ed..d2db4de2838 100644 --- a/libs/@local/hashql/core/src/module/std_lib/graph/body.rs +++ b/libs/@local/hashql/core/src/module/std_lib/graph/body.rs @@ -1,5 +1,4 @@ use crate::{ - heap::Heap, module::{ StandardLibrary, locals::TypeDef, diff --git a/libs/@local/hashql/core/src/module/std_lib/graph/entity.rs b/libs/@local/hashql/core/src/module/std_lib/graph/entity.rs index 2bd8c83a211..5567dae0173 100644 --- a/libs/@local/hashql/core/src/module/std_lib/graph/entity.rs +++ b/libs/@local/hashql/core/src/module/std_lib/graph/entity.rs @@ -1,5 +1,4 @@ use crate::{ - heap::Heap, module::{ StandardLibrary, locals::TypeDef, diff --git a/libs/@local/hashql/core/src/module/std_lib/graph/head.rs b/libs/@local/hashql/core/src/module/std_lib/graph/head.rs index a7131ef1872..5489040d803 100644 --- a/libs/@local/hashql/core/src/module/std_lib/graph/head.rs +++ b/libs/@local/hashql/core/src/module/std_lib/graph/head.rs @@ -1,5 +1,4 @@ use crate::{ - heap::Heap, module::{ StandardLibrary, locals::TypeDef, diff --git a/libs/@local/hashql/core/src/module/std_lib/graph/tail.rs b/libs/@local/hashql/core/src/module/std_lib/graph/tail.rs index 8a077ac4549..daf05eb5d9d 100644 --- a/libs/@local/hashql/core/src/module/std_lib/graph/tail.rs +++ b/libs/@local/hashql/core/src/module/std_lib/graph/tail.rs @@ -1,5 +1,4 @@ use crate::{ - heap::Heap, module::{ StandardLibrary, locals::TypeDef, diff --git a/libs/@local/hashql/core/src/module/std_lib/graph/temporal.rs b/libs/@local/hashql/core/src/module/std_lib/graph/temporal.rs index f041972eaee..c5c1eb07f94 100644 --- a/libs/@local/hashql/core/src/module/std_lib/graph/temporal.rs +++ b/libs/@local/hashql/core/src/module/std_lib/graph/temporal.rs @@ -1,5 +1,4 @@ use crate::{ - heap::Heap, module::std_lib::{ItemDef, ModuleDef, StandardLibrary, StandardLibraryModule}, symbol::{Symbol, sym}, }; diff --git a/libs/@local/hashql/core/src/module/std_lib/graph/types/knowledge/entity.rs b/libs/@local/hashql/core/src/module/std_lib/graph/types/knowledge/entity.rs index a5e67d8a1da..c89d11c7ee5 100644 --- a/libs/@local/hashql/core/src/module/std_lib/graph/types/knowledge/entity.rs +++ b/libs/@local/hashql/core/src/module/std_lib/graph/types/knowledge/entity.rs @@ -1,5 +1,4 @@ use crate::{ - heap::Heap, module::{ StandardLibrary, std_lib::{self, ItemDef, ModuleDef, StandardLibraryModule}, diff --git a/libs/@local/hashql/core/src/module/std_lib/graph/types/mod.rs b/libs/@local/hashql/core/src/module/std_lib/graph/types/mod.rs index ced25373b91..3c6ae5eeabd 100644 --- a/libs/@local/hashql/core/src/module/std_lib/graph/types/mod.rs +++ b/libs/@local/hashql/core/src/module/std_lib/graph/types/mod.rs @@ -1,6 +1,5 @@ // This is in a separate module, to facilitate: https://linear.app/hash/issue/H-4735/hashql-convert-rust-types-into-hashql-types use crate::{ - heap::Heap, module::{ StandardLibrary, std_lib::{ModuleDef, StandardLibraryModule}, diff --git a/libs/@local/hashql/core/src/module/std_lib/graph/types/ontology/entity_type.rs b/libs/@local/hashql/core/src/module/std_lib/graph/types/ontology/entity_type.rs index c39a39af04a..d7187cd2ebc 100644 --- a/libs/@local/hashql/core/src/module/std_lib/graph/types/ontology/entity_type.rs +++ b/libs/@local/hashql/core/src/module/std_lib/graph/types/ontology/entity_type.rs @@ -1,5 +1,4 @@ use crate::{ - heap::Heap, module::{ StandardLibrary, std_lib::{self, ItemDef, ModuleDef, StandardLibraryModule, core::option::types::option}, diff --git a/libs/@local/hashql/core/src/module/std_lib/graph/types/ontology/mod.rs b/libs/@local/hashql/core/src/module/std_lib/graph/types/ontology/mod.rs index 202394bcadc..ed9b49b76a6 100644 --- a/libs/@local/hashql/core/src/module/std_lib/graph/types/ontology/mod.rs +++ b/libs/@local/hashql/core/src/module/std_lib/graph/types/ontology/mod.rs @@ -1,5 +1,4 @@ use crate::{ - heap::Heap, module::{ StandardLibrary, std_lib::{self, ItemDef, ModuleDef, StandardLibraryModule}, diff --git a/libs/@local/hashql/core/src/module/std_lib/graph/types/principal/mod.rs b/libs/@local/hashql/core/src/module/std_lib/graph/types/principal/mod.rs index d8b3241fd3e..82dbda1c525 100644 --- a/libs/@local/hashql/core/src/module/std_lib/graph/types/principal/mod.rs +++ b/libs/@local/hashql/core/src/module/std_lib/graph/types/principal/mod.rs @@ -1,7 +1,6 @@ pub mod actor_group; use crate::{ - heap::Heap, module::{ StandardLibrary, std_lib::{ModuleDef, StandardLibraryModule}, From 5dee02ef0382807f106d1560714711d3ba7cba8f Mon Sep 17 00:00:00 2001 From: Bilal Mahmoud <7252775+indietyp@users.noreply.github.com> Date: Mon, 15 Jun 2026 18:37:33 +0200 Subject: [PATCH 44/55] chore: remove old modules --- .../hashql/ast/src/lower/expander/error.rs | 25 +- .../ast/src/lower/import_resolver/error.rs | 712 -------- .../ast/src/lower/import_resolver/mod.rs | 481 ------ .../src/lower/pre_expansion_name_resolver.rs | 438 ----- .../src/lower/special_form_expander/error.rs | 1125 ------------- .../src/lower/special_form_expander/mod.rs | 1451 ----------------- 6 files changed, 11 insertions(+), 4221 deletions(-) delete mode 100644 libs/@local/hashql/ast/src/lower/import_resolver/error.rs delete mode 100644 libs/@local/hashql/ast/src/lower/import_resolver/mod.rs delete mode 100644 libs/@local/hashql/ast/src/lower/pre_expansion_name_resolver.rs delete mode 100644 libs/@local/hashql/ast/src/lower/special_form_expander/error.rs delete mode 100644 libs/@local/hashql/ast/src/lower/special_form_expander/mod.rs diff --git a/libs/@local/hashql/ast/src/lower/expander/error.rs b/libs/@local/hashql/ast/src/lower/expander/error.rs index 39dd09618d6..854c7525a66 100644 --- a/libs/@local/hashql/ast/src/lower/expander/error.rs +++ b/libs/@local/hashql/ast/src/lower/expander/error.rs @@ -734,7 +734,7 @@ fn import_not_found<'heap>( ) -> ExpanderDiagnostic { let segment = &path.segments[depth]; - let kind_label = expected.map(universe_noun).unwrap_or("name"); + let kind_label = expected.map_or("name", universe_noun); let mut diagnostic = Diagnostic::new(ExpanderDiagnosticCategory::ImportNotFound, Severity::Error).primary( @@ -766,7 +766,7 @@ fn import_not_found<'heap>( } /// Formats the universe as a noun for use in diagnostic messages. -fn universe_noun(universe: Universe) -> &'static str { +const fn universe_noun(universe: Universe) -> &'static str { match universe { Universe::Value => "value", Universe::Type => "type", @@ -775,7 +775,7 @@ fn universe_noun(universe: Universe) -> &'static str { /// Appends a cross-universe hint when the name exists but as a different kind. /// -/// For example: `help: `Url` exists as a type, not a value` +/// For example: `help: `Url` exists as a type, not a value`. fn emit_cross_universe_hint( diagnostic: &mut ExpanderDiagnostic, name: Symbol<'_>, @@ -787,24 +787,21 @@ fn emit_cross_universe_hint( } // Remove the expected universe from the found set so we only report alternates. - let alternates = match expected { - Some(universe) => found.without_universe(universe), - None => found, - }; + let alternates = expected.map_or(found, |universe| found.without_universe(universe)); if alternates.is_empty() { return; } - let message = match expected { - Some(expected) => { + let message = expected.map_or_else( + || format!("`{name}` exists as {alternates}"), + |expected| { format!( "`{name}` exists as {alternates}, not {}", universe_noun(expected) ) - } - None => format!("`{name}` exists as {alternates}"), - }; + }, + ); diagnostic.add_message(Message::help(message)); } @@ -819,7 +816,7 @@ fn item_not_found<'heap>( ) -> ExpanderDiagnostic { let segment = &path.segments[depth]; - let kind_label = expected.map(universe_noun).unwrap_or("item"); + let kind_label = expected.map_or("item", universe_noun); let primary_message = if depth > 0 { let parent_path = FormatUserPath { @@ -881,7 +878,7 @@ fn item_not_found_at<'heap>( up_to: path.segments.len().checked_sub(1), }; - let kind_label = expected.map(universe_noun).unwrap_or("item"); + let kind_label = expected.map_or("item", universe_noun); let mut diagnostic = Diagnostic::new(ExpanderDiagnosticCategory::ItemNotFound, Severity::Error) .primary(Label::new( diff --git a/libs/@local/hashql/ast/src/lower/import_resolver/error.rs b/libs/@local/hashql/ast/src/lower/import_resolver/error.rs deleted file mode 100644 index d377e55745f..00000000000 --- a/libs/@local/hashql/ast/src/lower/import_resolver/error.rs +++ /dev/null @@ -1,712 +0,0 @@ -use alloc::borrow::Cow; -use core::{ - fmt::{self, Display, Write as _}, - iter, -}; - -use hashql_core::{ - algorithms::did_you_mean, - collections::FastHashSet, - module::{ - ModuleRegistry, Universe, - error::{ResolutionError, ResolutionSuggestion}, - import::Import, - item::Item, - }, - span::SpanId, - symbol::{Ident, Symbol}, -}; -use hashql_diagnostics::{ - Diagnostic, DiagnosticIssues, Label, - category::{DiagnosticCategory, TerminalDiagnosticCategory}, - diagnostic::Message, - severity::Severity, -}; - -use crate::node::path::Path; - -pub(crate) type ImportResolverDiagnostic = Diagnostic; - -pub(crate) type ImportResolverDiagnosticIssues = - DiagnosticIssues; - -const GENERIC_ARGUMENTS_IN_USE_PATH: TerminalDiagnosticCategory = TerminalDiagnosticCategory { - id: "generic-arguments-in-use-path", - name: "Generic arguments not allowed in import paths", -}; - -const EMPTY_PATH: TerminalDiagnosticCategory = TerminalDiagnosticCategory { - id: "empty-path", - name: "Empty path in import statement", -}; - -const GENERIC_ARGUMENTS_IN_MODULE: TerminalDiagnosticCategory = TerminalDiagnosticCategory { - id: "generic-arguments-in-module", - name: "Generic arguments only allowed in final path segment", -}; - -const UNRESOLVED_IMPORT: TerminalDiagnosticCategory = TerminalDiagnosticCategory { - id: "unresolved-import", - name: "Unresolved import", -}; - -const UNRESOLVED_VARIABLE: TerminalDiagnosticCategory = TerminalDiagnosticCategory { - id: "unresolved-variable", - name: "Unresolved variable", -}; - -#[derive(Debug, Copy, Clone, PartialEq, Eq, Hash)] -pub enum ImportResolverDiagnosticCategory { - GenericArgumentsInUsePath, - EmptyPath, - GenericArgumentsInModule, - UnresolvedImport, - UnresolvedVariable, -} - -impl DiagnosticCategory for ImportResolverDiagnosticCategory { - fn id(&self) -> Cow<'_, str> { - Cow::Borrowed("import-resolver") - } - - fn name(&self) -> Cow<'_, str> { - Cow::Borrowed("Import Resolver") - } - - fn subcategory(&self) -> Option<&dyn DiagnosticCategory> { - match self { - Self::GenericArgumentsInUsePath => Some(&GENERIC_ARGUMENTS_IN_USE_PATH), - Self::EmptyPath => Some(&EMPTY_PATH), - Self::GenericArgumentsInModule => Some(&GENERIC_ARGUMENTS_IN_MODULE), - Self::UnresolvedImport => Some(&UNRESOLVED_IMPORT), - Self::UnresolvedVariable => Some(&UNRESOLVED_VARIABLE), - } - } -} - -/// Error when generic arguments are used in a use path segment. -pub(crate) fn generic_arguments_in_use_path( - span: SpanId, - use_span: SpanId, -) -> ImportResolverDiagnostic { - let mut diagnostic = Diagnostic::new( - ImportResolverDiagnosticCategory::GenericArgumentsInUsePath, - Severity::Bug, - ) - .primary(Label::new(span, "Remove these generic arguments")); - - diagnostic - .labels - .push(Label::new(use_span, "In this import statement")); - - diagnostic.add_message(Message::help( - "Use statements don't accept generic type parameters. Remove the angle brackets and type \ - parameters.\n\nExample: Use `module::Type` instead of `module::Type`.", - )); - - diagnostic.add_message(Message::note( - "This error is still valid, but should've been caught in an earlier stage of the compiler \ - pipeline.", - )); - - diagnostic -} - -/// Error when a path has no segments. -pub(crate) fn empty_path(span: SpanId) -> ImportResolverDiagnostic { - let mut diagnostic = - Diagnostic::new(ImportResolverDiagnosticCategory::EmptyPath, Severity::Bug) - .primary(Label::new(span, "Specify a path here")); - - diagnostic.add_message(Message::help( - "Add a valid path with at least one identifier, such as `module` or `module::item`.", - )); - - diagnostic.add_message(Message::note( - "Import statements require a non-empty path to identify what module or item you want to \ - bring into scope. This error is still valid, but should've been caught in an earlier \ - stage of the compiler pipeline.", - )); - - diagnostic -} - -/// Error when generic arguments are used in a module path segment. -pub(crate) fn generic_arguments_in_module( - spans: impl IntoIterator, -) -> ImportResolverDiagnostic { - let mut spans = spans.into_iter(); - let primary = spans.next().expect("spans should be non-empty"); - - let mut diagnostic = Diagnostic::new( - ImportResolverDiagnosticCategory::GenericArgumentsInModule, - Severity::Error, - ) - .primary(Label::new(primary, "Remove this generic argument")); - - for secondary in spans { - diagnostic - .labels - .push(Label::new(secondary, "... and this generic argument")); - } - - diagnostic.add_message(Message::help( - "Generic arguments can only appear on the final type in a path. Remove them from this \ - module segment or move them to the final type in the path.\n\nCorrect: \ - `module::submodule::Type`\nIncorrect: `module::submodule::Type`", - )); - - diagnostic.add_message(Message::note( - "Module paths don't accept generic parameters because modules themselves aren't generic. \ - Only the final type in a path can have generic parameters.\n\nThe path resolution \ - happens before any generic type checking, so generic arguments can only be applied after \ - the item is found.", - )); - - diagnostic -} - -fn format_suggestions<'heap, T>( - name: Symbol<'heap>, - suggestions: &[ResolutionSuggestion<'heap, T>], -) -> Option { - if suggestions.is_empty() { - return None; - } - - let max_suggestions = match suggestions.len() { - 0 => return None, - 1..=3 => suggestions.len(), - 4..=8 => 4, - _ => 5, - }; - - let good_suggestions = did_you_mean( - name, - suggestions - .iter() - .map(|ResolutionSuggestion { name, .. }| *name), - Some(max_suggestions), - None, - ); - - if good_suggestions.is_empty() { - return None; - } - - let mut result = String::from("\n\nDid you mean:"); - for suggestion in &good_suggestions { - write!(result, "\n - {suggestion}").unwrap_or_else(|_err| unreachable!()); - } - - let remaining_count = suggestions.len().saturating_sub(good_suggestions.len()); - match remaining_count { - 0 => {} - 1 => result.push_str("\n(1 more available)"), - n => write!(result, "\n({n} more available)").unwrap_or_else(|_err| unreachable!()), - } - - Some(result) -} - -struct FormatPath<'a, 'heap>(bool, &'a [(SpanId, Symbol<'heap>)], Option); - -impl Display for FormatPath<'_, '_> { - fn fmt(&self, fmt: &mut fmt::Formatter<'_>) -> fmt::Result { - let &Self(rooted, segments, depth) = self; - - if rooted { - fmt.write_str("::")?; - } - - let segments = depth.map_or(segments, |depth| &segments[..=depth]); - - for (index, (_, segment)) in segments.iter().enumerate() { - if index > 0 { - fmt.write_str("::")?; - } - - Display::fmt(segment, fmt)?; - } - - Ok(()) - } -} - -pub(crate) fn unresolved_variable<'heap>( - registry: &ModuleRegistry<'heap>, - universe: Universe, - ident: Ident<'heap>, - locals: &FastHashSet>, - mut suggestions: Vec>>, -) -> ImportResolverDiagnostic { - let mut diagnostic = Diagnostic::new( - ImportResolverDiagnosticCategory::UnresolvedVariable, - Severity::Error, - ) - .primary(Label::new( - ident.span, - format!("Cannot find variable '{}'", ident.value), - )); - - // Filter out suggestions that are already available locally - suggestions.retain(|suggestion| !locals.contains(&suggestion.name)); - - let help = build_unresolved_variable_help(registry, universe, ident, locals, &suggestions); - diagnostic.add_message(Message::help(help)); - - diagnostic.add_message(Message::note( - "Variables must be defined before they can be used. This could be a typo, a variable used \ - outside its scope, or a missing declaration. If it's a function or type from another \ - module, you might need to import it first.", - )); - - diagnostic -} - -fn build_unresolved_variable_help<'heap>( - registry: &ModuleRegistry<'heap>, - universe: Universe, - ident: Ident<'heap>, - locals: &FastHashSet>, - suggestions: &[ResolutionSuggestion>], -) -> String { - let mut help = format!("The name '{}' doesn't exist in this scope.", ident.value); - - let has_locals = add_local_suggestions(&mut help, ident.value, locals); - let has_imports = add_import_suggestions(&mut help, ident.value, suggestions, has_locals); - add_available_imports( - &mut help, - registry, - universe, - ident, - locals, - suggestions, - has_locals || has_imports, - ); - - help -} - -fn add_local_suggestions( - help: &mut String, - name: Symbol<'_>, - locals: &FastHashSet>, -) -> bool { - let local_suggestions = did_you_mean(name, locals, Some(5), None); - if local_suggestions.is_empty() { - return false; - } - - help.push_str("\n\nDid you mean one of these local variables:"); - for suggestion in &local_suggestions { - let _: fmt::Result = write!(help, "\n - {suggestion}"); - } - - let remaining = locals.len().saturating_sub(local_suggestions.len()); - if remaining > 0 { - let _: fmt::Result = write!(help, "\n ({remaining} more available)"); - } - - true -} - -fn add_import_suggestions( - help: &mut String, - name: Symbol<'_>, - suggestions: &[ResolutionSuggestion>], - has_local_suggestions: bool, -) -> bool { - if suggestions.is_empty() { - return false; - } - - let good_suggestions = did_you_mean( - name, - suggestions.iter().map(|suggestion| suggestion.name), - Some(5), - None, - ); - - if good_suggestions.is_empty() { - return false; - } - - if has_local_suggestions { - help.push_str("\n\nOr perhaps you meant one of these imported items:"); - } else { - help.push_str("\n\nDid you mean one of these imported items:"); - } - for suggestion in &good_suggestions { - let _: fmt::Result = write!(help, "\n - {suggestion}"); - } - - let remaining = suggestions.len().saturating_sub(good_suggestions.len()); - if remaining > 0 { - let _: fmt::Result = write!(help, "\n ({remaining} more available)"); - } - - true -} - -fn add_available_imports<'heap>( - help: &mut String, - registry: &ModuleRegistry<'heap>, - universe: Universe, - ident: Ident<'heap>, - locals: &FastHashSet>, - suggestions: &[ResolutionSuggestion>], - has_previous: bool, -) { - let imported_names: FastHashSet<_> = suggestions - .iter() - .map(|suggestion| suggestion.name) - .collect(); - - let importable: Vec<_> = registry - .search_by_name(ident.value, universe) - .into_iter() - .filter(|item| !locals.contains(&item.name) && !imported_names.contains(&item.name)) - .collect(); - - if importable.is_empty() { - return; - } - - if has_previous { - help.push_str("\n\nAdditionally, items with a similar name exist in other modules:"); - } else { - help.push_str("\n\nItems with a similar name exist in other modules:"); - } - - for item in importable.iter().take(5) { - let absolute_path = format_absolute_path(item, registry); - let _: fmt::Result = write!(help, "\n - {absolute_path}"); - } - - if importable.len() > 5 { - let remaining = importable.len() - 5; - let _: fmt::Result = write!(help, "\n ({remaining} more available)"); - } - - // Show usage example for the first item - if let Some(item) = importable.first() { - let absolute_path = format_absolute_path(item, registry); - help.push_str("\n\nTo use an item, you can either:"); - let _: fmt::Result = write!(help, "\n 1. Import it: use {absolute_path} in"); - let _: fmt::Result = write!(help, "\n 2. Use fully qualified path: {absolute_path}"); - } -} - -fn format_absolute_path<'heap>(item: &Item<'heap>, registry: &ModuleRegistry<'heap>) -> String { - iter::once("") - .chain(item.absolute_path(registry).into_iter().map(Symbol::unwrap)) - .intersperse("::") - .collect() -} - -#[expect(clippy::too_many_lines)] -pub(crate) fn from_resolution_error<'heap>( - use_span: Option, - path: &Path<'heap>, - name: Option<(SpanId, Symbol<'heap>)>, - error: ResolutionError<'heap>, -) -> ImportResolverDiagnostic { - let diagnostic = Diagnostic::new( - ImportResolverDiagnosticCategory::UnresolvedImport, - Severity::Error, - ); - - let segments: Vec<_> = path - .segments - .iter() - .map(|segment| (segment.span, segment.name.value)) - .chain(name) - .collect(); - - match error { - ResolutionError::InvalidQueryLength { expected } => { - let mut diagnostic = diagnostic.primary( - // Primary label highlighting the problematic path - Label::new(path.span, "Expected more path segments"), - ); - - if let Some(use_span) = use_span { - // Secondary label showing the context of the use statement - diagnostic - .labels - .push(Label::new(use_span, "In this import statement")); - } - - diagnostic.add_message(Message::help(format!( - "This import path needs at least {expected} segments to be valid. Add the missing \ - segments to complete the path." - ))); - - diagnostic.add_message(Message::note( - "Import paths must be complete to properly identify the item you want to import. \ - Incomplete paths cannot be resolved.", - )); - - diagnostic - } - - ResolutionError::ModuleRequired { depth, found } => { - let (path_segment_span, _) = segments[depth]; - - let mut diagnostic = diagnostic.primary(Label::new( - path_segment_span, - format!( - "'{}' cannot contain other items", - FormatPath(path.rooted, &segments, Some(depth)) - ), - )); - - diagnostic - .labels - .push(Label::new(path.span, "In this path")); - - let universe = match found { - Some(Universe::Value) => "a value", - Some(Universe::Type) => "a type", - None => "not a module", - }; - - diagnostic.add_message(Message::help(format!( - "'{}' is {universe}. Only modules can contain other items. Check your import path.", - FormatPath(path.rooted, &segments, Some(depth)) - ))); - - diagnostic.add_message(Message::note( - "The '::' syntax can only be used with modules to access their members. Values \ - and types cannot contain other items.", - )); - - diagnostic - } - - ResolutionError::PackageNotFound { - depth, - name, - suggestions, - } => { - let (package_span, package_name) = segments[depth]; - - let mut diagnostic = diagnostic.primary( - // Primary label highlighting the missing package - Label::new(package_span, format!("Missing package '{package_name}'")), - ); - - if let Some(use_span) = use_span { - diagnostic.labels.push( - // Secondary label showing the context - Label::new(use_span, "In this import statement"), - ); - } - - let mut help = "This package couldn't be found. Make sure it is spelled correctly and \ - installed." - .to_owned(); - - if let Some(suggestion) = format_suggestions(name, &suggestions) { - help.push_str(&suggestion); - } - - diagnostic.add_message(Message::help(help)); - - diagnostic.add_message(Message::note( - "Packages must be installed and properly configured in your project dependencies \ - before they can be imported.", - )); - - diagnostic - } - - ResolutionError::ImportNotFound { - depth, - name, - suggestions, - } => { - let (import_span, import_name) = segments[depth]; - - let mut diagnostic = diagnostic.primary(Label::new( - import_span, - format!("'{import_name}' needs to be imported first"), - )); - - if let Some(use_span) = use_span { - diagnostic.labels.push( - // Add a secondary label for context - Label::new(use_span, "In this import statement"), - ); - } - - let mut help = format!( - "Add an import statement for '{import_name}' before using it. Check if the name \ - is spelled correctly." - ); - - if let Some(suggestion) = format_suggestions(name, &suggestions) { - help.push_str(&suggestion); - } - - diagnostic.add_message(Message::help(help)); - - diagnostic.add_message(Message::note( - "Before using an item from another module, you must import it with a 'use' \ - statement or access it with a fully qualified path.", - )); - - diagnostic - } - - ResolutionError::ModuleNotFound { - depth, - name, - suggestions, - } => { - let (module_span, module_name) = segments[depth]; - - let mut diagnostic = diagnostic.primary(Label::new( - module_span, - format!("Module '{module_name}' not found"), - )); - - diagnostic - .labels - .push(Label::new(path.span, "In this path")); - - let mut help = format!( - "The module '{}' doesn't exist in this scope. Check the spelling and ensure the \ - module is available.", - FormatPath(path.rooted, &segments, Some(depth)) - ); - - if let Some(suggestion) = format_suggestions(name, &suggestions) { - help.push_str(&suggestion); - } - - diagnostic.add_message(Message::help(help)); - - diagnostic.add_message(Message::note( - "Modules must be properly defined and exported from their parent module to be \ - accessible.", - )); - - diagnostic - } - - ResolutionError::ItemNotFound { - depth, - name, - suggestions, - } => { - let (item_span, item_name) = segments[depth]; - - let label_text = if depth == 0 { - format!("'{item_name}' not found in current scope") - } else { - format!( - "'{item_name}' not found in module '{}'", - FormatPath(path.rooted, &segments, Some(depth - 1)) - ) - }; - - let mut diagnostic = diagnostic.primary(Label::new(item_span, label_text)); - - // Add a secondary label highlighting the module - if depth > 0 { - let module_span = segments[depth - 1].0; - diagnostic - .labels - .push(Label::new(module_span, "This module")); - } else if let Some(use_span) = use_span { - diagnostic - .labels - .push(Label::new(use_span, "In this import")); - } else { - // No secondary label needed - neither module nor import context available - } - - let mut help = "Check the spelling and ensure the item is exported and available in \ - this context." - .to_owned(); - - if let Some(suggestion) = format_suggestions(name, &suggestions) { - help.push_str(&suggestion); - } - - diagnostic.add_message(Message::help(help)); - - diagnostic.add_message(Message::note( - "Items must be defined and accessible from the importing location. Make sure the \ - item exists and is public.", - )); - - diagnostic - } - - ResolutionError::Ambiguous(item) => { - // Find the span for the ambiguous name in the path - let item_span = segments - .iter() - .find_map(|&(segment_span, segment_name)| { - (segment_name == item.name()).then_some(segment_span) - }) - .unwrap_or(path.span); - - let mut diagnostic = diagnostic.primary(Label::new( - item_span, - format!("'{}' is ambiguous", item.name()), - )); - - diagnostic - .labels - .push(Label::new(path.span, "In this path")); - - diagnostic.add_message(Message::help(format!( - "The name '{}' could refer to multiple different items in {}. Use a fully \ - qualified path to specify which one you want.", - item.name(), - FormatPath(path.rooted, &segments, None) - ))); - - diagnostic.add_message(Message::note( - "When multiple items with the same name are in scope, you must use a fully \ - qualified path to avoid ambiguity. Consider using explicit imports instead of \ - glob imports to prevent name conflicts.", - )); - - diagnostic - } - - ResolutionError::ModuleEmpty { depth } => { - let (module_span, _) = segments[depth]; - - let mut diagnostic = diagnostic.primary(Label::new( - module_span, - format!( - "Module '{}' has no exported members", - FormatPath(path.rooted, &segments, Some(depth)) - ), - )); - - diagnostic - .labels - .push(Label::new(path.span, "In this import path")); - - diagnostic.add_message(Message::help( - "This module exists but doesn't expose any items that can be imported. Check if \ - you're importing the correct module or if the module has any public exports.", - )); - - diagnostic.add_message(Message::note( - "To use items from a module, they must be marked as public/exported. If you're \ - using a glob import pattern like 'module::*', try using specific imports instead \ - to see what's available.", - )); - - diagnostic - } - } -} diff --git a/libs/@local/hashql/ast/src/lower/import_resolver/mod.rs b/libs/@local/hashql/ast/src/lower/import_resolver/mod.rs deleted file mode 100644 index ad23c71f7a3..00000000000 --- a/libs/@local/hashql/ast/src/lower/import_resolver/mod.rs +++ /dev/null @@ -1,481 +0,0 @@ -pub mod error; - -use core::{iter, mem}; - -use hashql_core::{ - heap::Heap, - module::{ - Reference, Universe, - error::ResolutionError, - namespace::{ImportOptions, ModuleNamespace, ResolutionMode, ResolveOptions}, - }, - symbol::{Ident, IdentKind, Symbol}, -}; -use hashql_diagnostics::DiagnosticIssues; - -use self::error::{ - ImportResolverDiagnosticIssues, empty_path, from_resolution_error, generic_arguments_in_module, - generic_arguments_in_use_path, unresolved_variable, -}; -use super::super::node::path::PathSegmentArgument; -use crate::{ - node::{ - expr::{ - ClosureExpr, Expr, ExprKind, LetExpr, NewTypeExpr, TypeExpr, UseExpr, - r#use::{UseBinding, UseKind}, - }, - id::NodeId, - path::{Path, PathSegment}, - r#type::{Type, TypeKind}, - }, - visit::{Visitor, walk_closure_expr, walk_expr, walk_path, walk_type}, -}; - -pub struct ImportResolver<'env, 'heap> { - heap: &'heap Heap, - namespace: ModuleNamespace<'env, 'heap>, - current_universe: Universe, - diagnostics: ImportResolverDiagnosticIssues, - handled_diagnostics: usize, -} - -impl<'env, 'heap> ImportResolver<'env, 'heap> { - pub const fn new(heap: &'heap Heap, namespace: ModuleNamespace<'env, 'heap>) -> Self { - Self { - heap, - namespace, - current_universe: Universe::Value, - diagnostics: DiagnosticIssues::new(), - handled_diagnostics: 0, - } - } - - pub fn take_diagnostics(&mut self) -> ImportResolverDiagnosticIssues { - mem::take(&mut self.diagnostics) - } - - const fn critical_diagnostics_count(&self) -> usize { - self.diagnostics.critical() - } - - fn enter( - &mut self, - universe: Universe, - symbol: Symbol<'heap>, - closure: impl FnOnce(&mut Self) -> T, - ) -> T { - let snapshot = self.namespace.snapshot(); - self.namespace.local(symbol, universe); - - let result = closure(self); - - self.namespace.rollback_to(snapshot); - - result - } - - fn enter_many( - &mut self, - universe: Universe, - symbols: impl IntoIterator>, - closure: impl FnOnce(&mut Self) -> T, - ) -> T { - let snapshot = self.namespace.snapshot(); - for symbol in symbols { - self.namespace.local(symbol, universe); - } - - let result = closure(self); - - self.namespace.rollback_to(snapshot); - - result - } -} - -impl<'heap> Visitor<'heap> for ImportResolver<'_, 'heap> { - fn visit_use_expr( - &mut self, - UseExpr { - id: _, - span, - path, - kind, - body, - }: &mut UseExpr<'heap>, - ) { - // We don't need to walk the path here, because the import resolution already does the - // normalization for us - let mut query = Vec::with_capacity(path.segments.len()); - - for segment in &path.segments { - if !segment.arguments.is_empty() { - self.diagnostics - .push(generic_arguments_in_use_path(segment.span, *span)); - } - - query.push(segment.name.value); - } - - let mode = if path.rooted { - ResolutionMode::Absolute - } else { - ResolutionMode::Relative - }; - - let snapshot = self.namespace.snapshot(); - - match kind { - UseKind::Named(use_bindings) => { - for UseBinding { - id: _, - span: _, - name, - alias, - } in use_bindings.drain(..) - { - let alias = alias.map_or(name.value, |alias| alias.value); - - let result = self.namespace.import( - alias, - query.iter().copied().chain(iter::once(name.value)), - ImportOptions { - glob: false, - mode, - suggestions: true, - }, - ); - - if let Err(error) = result { - self.diagnostics.push(from_resolution_error( - Some(*span), - path, - Some((name.span, name.value)), - error, - )); - - // We cannot continue here, so we replace the body with `Dummy`, this way we - // can still report the error and continue in the control flow - **body = Expr::dummy(); - } - } - } - UseKind::Glob(_) => { - let result = self.namespace.import( - self.heap.intern_symbol("*"), - query.iter().copied(), - ImportOptions { - glob: true, - mode, - suggestions: true, - }, - ); - - if let Err(error) = result { - self.diagnostics - .push(from_resolution_error(Some(*span), path, None, error)); - - // We cannot continue here, so we replace the body with `Dummy`, this way we - // can still report the error and continue in the control flow - **body = Expr::dummy(); - } - } - } - - self.visit_expr(body); - - self.namespace.rollback_to(snapshot); - } - - fn visit_path(&mut self, path: &mut Path<'heap>) { - let [modules @ .., ident] = &*path.segments else { - self.diagnostics.push(empty_path(path.span)); - return; - }; - - // We don't support generics except for the *last* segment - let mut should_continue = true; - for module in modules { - if !module.arguments.is_empty() { - self.diagnostics.push(generic_arguments_in_module( - module.arguments.iter().map(PathSegmentArgument::span), - )); - - should_continue = false; - } - } - - if !should_continue { - // While in theory we could continue processing here, the problem would be that any - // generic parameter would double emit errors, which adds additional visual noise. - return; - } - - let segments = path.segments.iter().map(|segment| segment.name.value); - - let mode = if path.rooted { - ResolutionMode::Absolute - } else { - ResolutionMode::Relative - }; - - let reference = match self.namespace.resolve( - segments, - ResolveOptions { - mode, - universe: self.current_universe, - }, - ) { - Ok(item) => item, - Err(ResolutionError::ImportNotFound { - depth: _, - name: _, - suggestions, - }) if modules.is_empty() => { - self.diagnostics.push(unresolved_variable( - self.namespace.registry(), - self.current_universe, - ident.name, - &self.namespace.locals(self.current_universe), - suggestions, - )); - - walk_path(self, path); - return; - } - Err(error) => { - self.diagnostics - .push(from_resolution_error(None, path, None, error)); - - walk_path(self, path); - return; - } - }; - - let item = match reference { - Reference::Binding(_) => { - walk_path(self, path); - return; - } - Reference::Item(item) => item, - }; - - let segments: Vec<_> = item - .absolute_path(self.namespace.registry()) - .into_iter() - .collect(); - - // The trailing segments might not be the same due to renames, reset the symbol to the - // canonical form (but retain the span) - debug_assert!(segments.len() >= path.segments.len()); - - // For the trailing segments, set the name to the canonical name (they might be renamed) - for (&lhs, rhs) in segments[segments.len() - path.segments.len()..] - .iter() - .zip(&mut path.segments) - { - rhs.name.value = lhs; - } - - let span = path.segments.first().unwrap_or_else(|| unreachable!()).span; - - path.rooted = true; - path.segments.splice( - 0..0, - segments[..segments.len() - path.segments.len()] - .iter() - .map(|&ident| PathSegment { - id: NodeId::PLACEHOLDER, - span, - name: Ident { - span, - value: ident, - kind: IdentKind::Lexical, - }, - arguments: Vec::new_in(self.heap), - }), - ); - - walk_path(self, path); - } - - fn visit_expr(&mut self, expr: &mut Expr<'heap>) { - // Process the node first - walk_expr(self, expr); - - match &mut expr.kind { - // Replace any use statement with it's body - ExprKind::Use(use_expr) => { - let inner = mem::replace(&mut *use_expr.body, Expr::dummy()); - *expr = inner; - } - // Replace any path, which has had diagnostics emitted with a dummy expression - kind @ ExprKind::Path(_) => { - let fatal = self.critical_diagnostics_count(); - if self.handled_diagnostics < fatal { - *kind = ExprKind::Dummy; - self.handled_diagnostics = fatal; - } - } - ExprKind::Call(_) - | ExprKind::Struct(_) - | ExprKind::Dict(_) - | ExprKind::Tuple(_) - | ExprKind::List(_) - | ExprKind::Literal(_) - | ExprKind::Let(_) - | ExprKind::Type(_) - | ExprKind::NewType(_) - | ExprKind::Input(_) - | ExprKind::Closure(_) - | ExprKind::If(_) - | ExprKind::Field(_) - | ExprKind::Index(_) - | ExprKind::As(_) - | ExprKind::Underscore - | ExprKind::Dummy => {} - } - } - - fn visit_type(&mut self, r#type: &mut Type<'heap>) { - let previous = self.current_universe; - - self.current_universe = Universe::Type; - walk_type(self, r#type); - self.current_universe = previous; - - // Replace any path, which has had diagnostics emitted with a dummy expression - if matches!(r#type.kind, TypeKind::Path(_)) { - let fatal = self.critical_diagnostics_count(); - if self.handled_diagnostics < fatal { - r#type.kind = TypeKind::Dummy; - self.handled_diagnostics = fatal; - } - } - } - - fn visit_let_expr( - &mut self, - LetExpr { - id, - span, - name, - value, - r#type, - body, - }: &mut LetExpr<'heap>, - ) { - self.visit_id(id); - self.visit_span(span); - self.visit_ident(name); - - // Important: The scope only effect in the body, not in the value, as that would allow the - // creation of recursive values - self.visit_expr(value); - - if let Some(r#type) = r#type { - self.visit_type(r#type); - } - - self.enter(Universe::Value, name.value, |this| { - this.visit_expr(body); - }); - } - - fn visit_type_expr( - &mut self, - TypeExpr { - id, - span, - name, - constraints, - value, - body, - }: &mut TypeExpr<'heap>, - ) { - self.visit_id(id); - self.visit_span(span); - self.visit_ident(name); - - self.enter(Universe::Type, name.value, |this| { - let constraint_symbols: Vec<_> = constraints - .iter() - .map(|constraint| constraint.name.value) - .collect(); - - // Constraints are mentioned in the type value, as well as the constraints themselves, - // while the type outlines the value and is bound in the body as well. - this.enter_many(Universe::Type, constraint_symbols, |this| { - for constraint in constraints { - this.visit_generic_constraint(constraint); - } - - this.visit_type(value); - }); - - this.visit_expr(body); - }); - } - - fn visit_newtype_expr( - &mut self, - NewTypeExpr { - id, - span, - name, - constraints, - value, - body, - }: &mut NewTypeExpr<'heap>, - ) { - self.visit_id(id); - self.visit_span(span); - self.visit_ident(name); - - self.enter(Universe::Type, name.value, |this| { - let constraint_symbols: Vec<_> = constraints - .iter() - .map(|constraint| constraint.name.value) - .collect(); - - // Constraints are mentioned in the type value, as well as the constraints themselves, - // while the type outlines the value and is bound in the body as well. - this.enter_many(Universe::Type, constraint_symbols, |this| { - for constraint in constraints { - this.visit_generic_constraint(constraint); - } - - this.visit_type(value); - }); - - // Unlike types, newtypes (opaque types) also bring into scope (only in the body) - // themselves as a constructor - this.enter(Universe::Value, name.value, |this| { - this.visit_expr(body); - }); - }); - } - - fn visit_closure_expr(&mut self, expr: &mut ClosureExpr<'heap>) { - let generic_symbols: Vec<_> = expr - .signature - .generics - .params - .iter() - .map(|param| param.name.value) - .collect(); - - let param_symbols: Vec<_> = expr - .signature - .inputs - .iter() - .map(|input| input.name.value) - .collect(); - - self.enter_many(Universe::Type, generic_symbols, |this| { - this.enter_many(Universe::Value, param_symbols, |this| { - walk_closure_expr(this, expr); - }); - }); - } -} diff --git a/libs/@local/hashql/ast/src/lower/pre_expansion_name_resolver.rs b/libs/@local/hashql/ast/src/lower/pre_expansion_name_resolver.rs deleted file mode 100644 index 06ce57e5f7d..00000000000 --- a/libs/@local/hashql/ast/src/lower/pre_expansion_name_resolver.rs +++ /dev/null @@ -1,438 +0,0 @@ -//! Name resolution for the HashQL Abstract Syntax Tree. -//! -//! This module provides functionality for resolving identifiers in the AST to their fully -//! qualified paths. It handles path resolution, scoping rules, and special form detection -//! for constructs like `let`, `type`, and `newtype`. -//! -//! # Overview -//! -//! Name resolution is a critical part of the HashQL compilation pipeline, converting: -//! -//! - Unqualified identifiers (`map`) to absolute paths (`::graph::body::map`) -//! - Operators (`+`) to their function equivalents (`::core::math::add`) -//! - Special forms to their kernel representations (`let` to `::kernel::special_form::let`) -//! -//! The resolver also manages scoping rules to ensure that bindings from `let`, `type`, and -//! `newtype` expressions only apply within their respective bodies. -//! -//! # Architecture -//! -//! The name resolver works as a visitor pattern implementation that traverses the AST and: -//! -//! 1. Maintains a mapping of identifiers to their absolute paths -//! 2. Applies transformations to convert relative paths to absolute ones -//! 3. Recognizes special forms and establishes proper scoping for bindings -//! 4. Preserves source location information during transformations -//! -//! # Examples -//! -//! Input AST: -//! ```json -//! ["let", "x", "10", ["+", "x", "5"]] -//! ``` -//! -//! After name resolution: -//! ```json -//! ["::kernel::special_form::let", "x", "10", ["::core::math::add", "10", "5"]] -//! ``` -//! -//! # Special Forms -//! -//! The resolver recognizes and properly processes several special forms: -//! -//! - **let**: Binds a value to a name within a scope -//! - `let/3`: `[let, name, value, body]` -//! - `let/4`: `[let, name, type, value, body]` -//! -//! - **type**: Defines a type alias within a scope -//! - `type/3`: `[type, name, underlying_type, body]` -//! -//! - **newtype**: Defines a new nominal type based on an existing type -//! - `newtype/3`: `[newtype, name, underlying_type, body]` -//! -//! # Path Resolution Behavior -//! -//! When processing paths, the resolver follows these rules: -//! -//! 1. Absolute paths (starting with `::`) remain unchanged -//! 2. Unrooted paths are checked against the current name mapping -//! 3. If the first segment matches an entry in the mapping, it's replaced with the absolute path -//! 4. Generic arguments are preserved during path resolution -//! 5. Source location information is maintained for error reporting -//! -//! # Selective Tree Resolution and Scope Separation -//! -//! The name resolver intentionally processes only specific parts of the AST: -//! -//! 1. We only resolve the function name. -//! 2. For `let` expressions, only the value of the binding is resolved. -//! -//! This selective approach is intentionally conservative and critical because: -//! -//! - It prepares the AST specifically for special form expansion, which only takes the function -//! name into account. -//! - It maintains a strict separation between value and type scopes, which don't share the same -//! identifier resolutions. -//! - The function called can only ever be a value, never a type, so we ensure consistent handling. -//! -//! By deliberately restricting name resolution to only the necessary parts of the tree, the -//! resolver prevents scope contamination and ensures correct expansion in subsequent compilation -//! phases. This conservative approach to resolution helps avoid unintended transformations that -//! could lead to subtle errors in later processing stages. -//! -//! # Scoping Rules -//! -//! The resolver enforces lexical scoping rules: -//! -//! 1. Bindings only apply within their defined scope (body of let/type/newtype expressions) -//! 2. Inner bindings shadow outer bindings with the same name -//! 3. Original bindings are restored when exiting a scope -//! 4. Built-in names can be shadowed by local bindings -use core::mem; - -use hashql_core::{ - collections::FastHashMap, - heap::{CollectIn as _, Heap}, - module::{ - ModuleRegistry, Reference, Universe, - item::{IntrinsicItem, IntrinsicValueItem, ItemKind}, - namespace::{ModuleNamespace, ResolutionMode, ResolveOptions}, - }, - span::SpanId, - symbol::{Ident, IdentKind, Symbol}, -}; - -use crate::{ - node::{ - expr::{CallExpr, ExprKind}, - id::NodeId, - path::{Path, PathSegment}, - }, - visit::{Visitor, walk_call_expr, walk_path}, -}; - -/// Resolves name aliases in the HashQL AST, converting identifiers to their absolute path -/// representation. -/// -/// The `NameResolver` performs several key functions during AST processing: -/// -/// 1. Path Resolution: Converts unrooted paths (like `map`) to their absolute forms (like -/// `::graph::body::map`) -/// 2. Special Form Handling: Recognizes and processes special forms like `let`, `type`, and -/// `newtype`, but does **not** transform them yet. -/// 3. Scope Management: Maintains proper lexical scoping of bindings within expressions -/// 4. Selective Value-Scope Resolution: Only resolves specific parts of the AST (binding values and -/// function identifiers) to maintain strict separation between value and type scopes -/// -/// # Example -/// -/// The name resolver converts expressions like: -/// ```json -/// ["let", "x", "10", ["+", "x", "5"]] -/// ``` -/// -/// Into their resolved forms: -/// ```json -/// [ -/// "::kernel::special_form::let", -/// "x", -/// "10", -/// ["::core::math::add", "10", "5"], -/// ] -/// ``` -/// -/// Note that the identifier `x` in the binding position (first argument) is preserved exactly as -/// written, while its use in the body expression is resolved according to the current scope. -pub struct PreExpansionNameResolver<'env, 'heap> { - alias: FastHashMap, Option>>, - - namespace: ModuleNamespace<'env, 'heap>, - namespace_cache: FastHashMap, Path<'heap>>, - - resolve: bool, - heap: &'heap Heap, -} - -impl<'env, 'heap> PreExpansionNameResolver<'env, 'heap> { - /// Creates a new `NameResolver` with an empty mapping. - pub fn new(registry: &'env ModuleRegistry<'heap>) -> Self { - let mut namespace = ModuleNamespace::new(registry); - namespace.import_prelude(); - - Self { - alias: FastHashMap::default(), - namespace, - namespace_cache: FastHashMap::default(), - resolve: false, - heap: registry.heap, - } - } - - fn walk_call( - &mut self, - expr: &mut CallExpr<'heap>, - to: Ident<'heap>, - mut from: Option>, - ) { - // We now need to call_expr, but it's important that we don't apply the mapping - // indiscriminately but instead we do so selectively on only on the last argument, as that - // is the body of the expression. - - let CallExpr { - id, - span, - // We don't need to visit the function, as we've already visited it - function: _, - arguments, - // We've checked beforehand that there are no labeled arguments, therefore it's - // pointless to visit them - labeled_arguments: _, - } = expr; - - self.visit_id(id); - self.visit_span(span); - - let len = arguments.len(); - - // While our call to `visit_argument` simply delegates to `visit_expr`, it's still important - // to call it, as to not break any contracts down the line. - for (index, argument) in arguments.iter_mut().enumerate() { - if index == 0 { - // The first argument is the identifier, which we shouldn't normalize - } else if index == len - 1 { - let old = if let Some(from) = from.take() { - self.alias.insert(to.value, Some(from)) - } else { - // Explicitly unset the alias - self.alias.insert(to.value, None) - }; - - self.visit_argument(argument); - - if let Some(old) = old { - self.alias.insert(to.value, old); - } else { - // The binding hasn't existed before, therefore restoration = deletion - self.alias.remove(&to.value); - } - } else { - self.visit_argument(argument); - } - } - } - - /// Looks up the absolute path for a given symbol name. - /// - /// It checks the local alias map first, then the namespace cache, and finally - /// the module namespace (for intrinsics) if necessary. Caches namespace lookups. - fn lookup(&mut self, name: Symbol<'heap>) -> Option> { - if let Some(replacement) = self.alias.get(&name) { - return replacement.clone(); - } - - // Check first if the cache has a version that's already been resolved - if let Some(path) = self.namespace_cache.get(&name) { - return Some(path.clone()); - } - - // This is very conservative, in *theory* we should take a look at the whole path and use - // that as import, but as we're only interested in special-forms, which are only imported as - // name, we can safely just use the name. - let reference = self - .namespace - .resolve( - [name], - ResolveOptions { - mode: ResolutionMode::Relative, - universe: Universe::Value, - }, - ) - .ok()?; - - let Reference::Item(import) = reference else { - return None; - }; - - // We're only interested in intrinsics - let ItemKind::Intrinsic(IntrinsicItem::Value(IntrinsicValueItem { - name: path, - r#type: _, - })) = import.kind - else { - return None; - }; - - // The name is a fully qualified path, that we need to convert into a path - let (rooted, path) = path - .as_str() - .strip_prefix("::") - .map_or((false, path.as_str()), |path| (true, path)); - - let segments = path - .split("::") - .map(|name| PathSegment { - id: NodeId::PLACEHOLDER, - span: SpanId::SYNTHETIC, - name: Ident { - span: SpanId::SYNTHETIC, - value: self.heap.intern_symbol(name), - kind: IdentKind::Lexical, - }, - arguments: Vec::new_in(self.heap), - }) - .collect_in(self.heap); - - let path = Path { - id: NodeId::PLACEHOLDER, - span: SpanId::SYNTHETIC, - rooted, - segments, - }; - - self.namespace_cache.insert(name, path.clone()); - - Some(path) - } -} - -impl<'heap> Visitor<'heap> for PreExpansionNameResolver<'_, 'heap> { - fn visit_path(&mut self, path: &mut Path<'heap>) { - if !self.resolve { - walk_path(self, path); - return; - } - - if path.rooted { - walk_path(self, path); - return; - } - - // Check if the first segment exists, and if said segment exists in our mapping - let Some(segment) = path.segments.first_mut() else { - walk_path(self, path); - return; - }; - - // The mapping can either exist in the registry, or our alias mapping - - let Some(replacement) = self.lookup(segment.name.value) else { - walk_path(self, path); - return; - }; - - let mut arguments = Some(mem::replace(&mut segment.arguments, Vec::new_in(self.heap))); - - let span = segment.span; - - path.rooted = replacement.rooted; - - let replacement_len = replacement.segments.len(); - - // Replace the segment with the aliased value - path.segments.splice( - 0..1, - replacement - .segments - .into_iter() - .enumerate() - .map(|(index, mut segment)| { - // Make sure that we inherit the span from the original segment - segment.span = span; - - // Take the arguments if we're at the last segment, as converting from - // `a` to `math::add` wouldn't be a valid transformation. - if index == replacement_len - 1 { - segment.arguments = arguments.take().unwrap_or_else(|| unreachable!()); - } - - segment - }), - ); - - walk_path(self, path); - } - - fn visit_call_expr(&mut self, expr: &mut CallExpr<'heap>) { - // Look for expressions that is pre-expansion and *looks* like a let expressions - - // Special forms don't support labeled arguments - if !expr.labeled_arguments.is_empty() { - walk_call_expr(self, expr); - return; - } - - // Check if the argument is a path that can be an ident - let ExprKind::Path(function) = &mut expr.function.kind else { - walk_call_expr(self, expr); - return; - }; - - // First resolve the path - // In theory as we're accessing the path here, we'd need to call `visit_id` and `visit_span` - // as well, but as we don't actually implement these methods, and they're no-op we're free - // to omit those calls. - self.resolve = true; - self.visit_path(function); - self.resolve = false; - - // `let` supports two forms: `let/3` and `let/4` (w/ or w/o type assertion) - if expr.arguments.len() != 3 && expr.arguments.len() != 4 { - walk_call_expr(self, expr); - return; - } - - // Check if said path is equivalent to the let special form - if !function.matches_absolute_path(["kernel", "special_form", "let"]) { - walk_call_expr(self, expr); - return; - } - - let arguments_length = expr.arguments.len(); - - // we know this is a let expression, now we just need to make sure that both the first and - // second-to-last argument are identifiers - // let to: = from in - let [to, from] = expr - .arguments - .get_disjoint_mut([0, arguments_length - 2]) - .expect("length has been verified beforehand"); - - let ExprKind::Path(to) = &mut to.value.kind else { - walk_call_expr(self, expr); - return; - }; - - // We do **not** resolve the `to` path, as it is supposed to be an identifier - let Some(to) = to.as_ident().copied() else { - walk_call_expr(self, expr); - return; - }; - - let ExprKind::Path(from) = &mut from.value.kind else { - // While it isn't a path and therefore not an alias, this is still a valid assignment, - // therefore we need to actually *remove* the mapping for the duration of the call. - - self.walk_call(expr, to, None); - return; - }; - - // Check that the path itself is not generic, if it is, there is no safe way to create an - // alias - if from - .segments - .iter() - .any(|segment| !segment.arguments.is_empty()) - { - walk_call_expr(self, expr); - return; - } - - // We have a new mapping from path to type - self.resolve = true; - self.visit_path(from); - self.resolve = false; - let from = Some(from.clone()); - - self.walk_call(expr, to, from); - } -} diff --git a/libs/@local/hashql/ast/src/lower/special_form_expander/error.rs b/libs/@local/hashql/ast/src/lower/special_form_expander/error.rs deleted file mode 100644 index 96bd274ca3d..00000000000 --- a/libs/@local/hashql/ast/src/lower/special_form_expander/error.rs +++ /dev/null @@ -1,1125 +0,0 @@ -use alloc::borrow::Cow; -use core::fmt::{self, Display}; - -use hashql_core::{algorithms::did_you_mean, span::SpanId}; -use hashql_diagnostics::{ - Diagnostic, DiagnosticIssues, Label, - category::{DiagnosticCategory, TerminalDiagnosticCategory}, - diagnostic::Message, - severity::Severity, -}; - -use super::SpecialFormKind; -use crate::node::{ - expr::call::{Argument, LabeledArgument}, - path::{Path, PathSegmentArgument}, -}; - -pub(crate) type SpecialFormExpanderDiagnostic = - Diagnostic; - -pub(crate) type SpecialFormExpanderDiagnosticIssues = - DiagnosticIssues; - -const UNKNOWN_SPECIAL_FORM: TerminalDiagnosticCategory = TerminalDiagnosticCategory { - id: "unknown-special-form", - name: "Unknown special form", -}; - -const SPECIAL_FORM_ARGUMENT_LENGTH: TerminalDiagnosticCategory = TerminalDiagnosticCategory { - id: "special-form-argument-length", - name: "Incorrect number of arguments for special form", -}; - -const LABELED_ARGUMENTS_NOT_SUPPORTED: TerminalDiagnosticCategory = TerminalDiagnosticCategory { - id: "labeled-arguments-not-supported", - name: "Labeled arguments not supported in special forms", -}; - -const INVALID_TYPE_EXPRESSION: TerminalDiagnosticCategory = TerminalDiagnosticCategory { - id: "invalid-type-expression", - name: "Invalid type expression", -}; - -const INVALID_TYPE_CALL: TerminalDiagnosticCategory = TerminalDiagnosticCategory { - id: "invalid-type-call", - name: "Invalid function call in type expression", -}; - -const UNSUPPORTED_TYPE_CONSTRUCTOR: TerminalDiagnosticCategory = TerminalDiagnosticCategory { - id: "unsupported-type-constructor", - name: "Unsupported type constructor", -}; - -const INVALID_BINDING_NAME: TerminalDiagnosticCategory = TerminalDiagnosticCategory { - id: "invalid-binding-name", - name: "Invalid binding name", -}; - -const QUALIFIED_BINDING_NAME: TerminalDiagnosticCategory = TerminalDiagnosticCategory { - id: "qualified-binding-name", - name: "Qualified path used as binding name", -}; - -const TYPE_WITH_EXISTING_ANNOTATION: TerminalDiagnosticCategory = TerminalDiagnosticCategory { - id: "type-with-existing-annotation", - name: "Type expression with redundant type annotation", -}; - -const INVALID_USE_IMPORT: TerminalDiagnosticCategory = TerminalDiagnosticCategory { - id: "invalid-use-import", - name: "Invalid use import expression", -}; - -const USE_PATH_WITH_GENERICS: TerminalDiagnosticCategory = TerminalDiagnosticCategory { - id: "use-path-with-generics", - name: "Use path with generic arguments", -}; - -const FN_GENERICS_WITH_TYPE_ANNOTATION: TerminalDiagnosticCategory = TerminalDiagnosticCategory { - id: "fn-generics-with-type-annotation", - name: "Function generics with type annotation", -}; - -const INVALID_FN_GENERICS_EXPRESSION: TerminalDiagnosticCategory = TerminalDiagnosticCategory { - id: "invalid-fn-generics-expression", - name: "Invalid expression in function generics", -}; - -const INVALID_FN_PARAMS_EXPRESSION: TerminalDiagnosticCategory = TerminalDiagnosticCategory { - id: "invalid-fn-params-expression", - name: "Invalid expression in function parameters", -}; - -const FN_PARAMS_WITH_TYPE_ANNOTATION: TerminalDiagnosticCategory = TerminalDiagnosticCategory { - id: "fn-params-with-type-annotation", - name: "Function parameters with type annotation", -}; - -const INVALID_FN_GENERIC_PARAM: TerminalDiagnosticCategory = TerminalDiagnosticCategory { - id: "invalid-fn-generic-param", - name: "Invalid generic parameter in function declaration", -}; - -const INVALID_GENERIC_ARGUMENT_PATH: TerminalDiagnosticCategory = TerminalDiagnosticCategory { - id: "invalid-generic-argument-path", - name: "Invalid path in generic argument", -}; - -const INVALID_GENERIC_ARGUMENT_TYPE: TerminalDiagnosticCategory = TerminalDiagnosticCategory { - id: "invalid-generic-argument-type", - name: "Invalid type in generic argument", -}; - -const DUPLICATE_GENERIC_CONSTRAINT: TerminalDiagnosticCategory = TerminalDiagnosticCategory { - id: "duplicate-generic-constraint", - name: "Duplicate generic parameter constraint", -}; - -const DUPLICATE_CLOSURE_PARAMETER: TerminalDiagnosticCategory = TerminalDiagnosticCategory { - id: "duplicate-closure-parameter", - name: "Duplicate closure parameter", -}; - -const FIELD_LITERAL_TYPE_ANNOTATION: TerminalDiagnosticCategory = TerminalDiagnosticCategory { - id: "field-literal-type-annotation", - name: "Field literal with type annotation", -}; - -const INVALID_FIELD_LITERAL_TYPE: TerminalDiagnosticCategory = TerminalDiagnosticCategory { - id: "invalid-field-literal-type", - name: "Invalid field literal type", -}; - -const FIELD_INDEX_OUT_OF_BOUNDS: TerminalDiagnosticCategory = TerminalDiagnosticCategory { - id: "field-index-out-of-bounds", - name: "Field index out of bounds", -}; - -#[derive(Debug, Copy, Clone, PartialEq, Eq, Hash)] -pub enum SpecialFormExpanderDiagnosticCategory { - UnknownSpecialForm, - SpecialFormArgumentLength, - LabeledArgumentsNotSupported, - InvalidTypeExpression, - InvalidTypeCall, - UnsupportedTypeConstructor, - InvalidBindingName, - QualifiedBindingName, - TypeWithExistingAnnotation, - InvalidUseImport, - UsePathWithGenerics, - FnGenericsWithTypeAnnotation, - InvalidFnGenericsExpression, - InvalidFnParamsExpression, - FnParamsWithTypeAnnotation, - InvalidFnGenericParam, - InvalidGenericArgumentPath, - InvalidGenericArgumentType, - DuplicateGenericConstraint, - DuplicateClosureParameter, - FieldLiteralTypeAnnotation, - InvalidFieldLiteralType, - FieldIndexOutOfBounds, -} - -impl DiagnosticCategory for SpecialFormExpanderDiagnosticCategory { - fn id(&self) -> Cow<'_, str> { - Cow::Borrowed("special-form-expander") - } - - fn name(&self) -> Cow<'_, str> { - Cow::Borrowed("Special Form Expander") - } - - fn subcategory(&self) -> Option<&dyn DiagnosticCategory> { - match self { - Self::UnknownSpecialForm => Some(&UNKNOWN_SPECIAL_FORM), - Self::SpecialFormArgumentLength => Some(&SPECIAL_FORM_ARGUMENT_LENGTH), - Self::LabeledArgumentsNotSupported => Some(&LABELED_ARGUMENTS_NOT_SUPPORTED), - Self::InvalidTypeExpression => Some(&INVALID_TYPE_EXPRESSION), - Self::InvalidTypeCall => Some(&INVALID_TYPE_CALL), - Self::UnsupportedTypeConstructor => Some(&UNSUPPORTED_TYPE_CONSTRUCTOR), - Self::InvalidBindingName => Some(&INVALID_BINDING_NAME), - Self::QualifiedBindingName => Some(&QUALIFIED_BINDING_NAME), - Self::TypeWithExistingAnnotation => Some(&TYPE_WITH_EXISTING_ANNOTATION), - Self::InvalidUseImport => Some(&INVALID_USE_IMPORT), - Self::UsePathWithGenerics => Some(&USE_PATH_WITH_GENERICS), - Self::FnGenericsWithTypeAnnotation => Some(&FN_GENERICS_WITH_TYPE_ANNOTATION), - Self::InvalidFnGenericsExpression => Some(&INVALID_FN_GENERICS_EXPRESSION), - Self::InvalidFnParamsExpression => Some(&INVALID_FN_PARAMS_EXPRESSION), - Self::FnParamsWithTypeAnnotation => Some(&FN_PARAMS_WITH_TYPE_ANNOTATION), - Self::InvalidFnGenericParam => Some(&INVALID_FN_GENERIC_PARAM), - Self::InvalidGenericArgumentPath => Some(&INVALID_GENERIC_ARGUMENT_PATH), - Self::InvalidGenericArgumentType => Some(&INVALID_GENERIC_ARGUMENT_TYPE), - Self::DuplicateGenericConstraint => Some(&DUPLICATE_GENERIC_CONSTRAINT), - Self::DuplicateClosureParameter => Some(&DUPLICATE_CLOSURE_PARAMETER), - Self::FieldLiteralTypeAnnotation => Some(&FIELD_LITERAL_TYPE_ANNOTATION), - Self::InvalidFieldLiteralType => Some(&INVALID_FIELD_LITERAL_TYPE), - Self::FieldIndexOutOfBounds => Some(&FIELD_INDEX_OUT_OF_BOUNDS), - } - } -} - -pub(crate) fn unknown_special_form_length( - span: SpanId, - path: &Path<'_>, -) -> SpecialFormExpanderDiagnostic { - let mut diagnostic = Diagnostic::new( - SpecialFormExpanderDiagnosticCategory::UnknownSpecialForm, - Severity::Error, - ) - .primary(Label::new(span, "Fix this path to have exactly 3 segments")); - - if path.segments.len() > 3 { - // Point to the problematic segment(s) - for segment in path.segments.iter().skip(3) { - diagnostic - .labels - .push(Label::new(segment.span, "Remove this extra segment")); - } - } - - diagnostic.add_message(Message::help( - "Special form paths must follow the pattern '::kernel::special_form::' with exactly \ - 3 segments", - )); - - diagnostic.add_message(Message::note(format!( - "Found path with {} segments, but special form paths must have exactly 3 segments", - path.segments.len() - ))); - - diagnostic -} - -pub(crate) fn unknown_special_form_name( - span: SpanId, - path: &Path<'_>, -) -> SpecialFormExpanderDiagnostic { - let function_name = path.segments[2].name.value; - let function_span = path.segments[2].name.span; - - let mut diagnostic = Diagnostic::new( - SpecialFormExpanderDiagnosticCategory::UnknownSpecialForm, - Severity::Error, - ) - .primary(Label::new( - function_span, - format!("Replace '{function_name}' with a valid special form name"), - )); - - diagnostic - .labels - .push(Label::new(span, "This special form path is invalid")); - - let mut closest_match = did_you_mean( - function_name, - enum_iterator::all::() - .map(|kind| path.segments.allocator().intern_symbol(kind.as_str())), - Some(1), - None, - ); - - let help = closest_match.pop().map_or( - Cow::Borrowed("Special forms must use one of the predefined names shown in the note below"), - |kind| Cow::Owned(format!("Did you mean to use '{kind}' instead?")), - ); - - diagnostic.add_message(Message::help(help)); - - let names = enum_iterator::all::() - .map(SpecialFormKind::as_str) - .collect::>() - .join(", "); - - diagnostic.add_message(Message::note(format!( - "Available special forms include: {names}" - ))); - - diagnostic -} - -pub(crate) fn unknown_special_form_generics( - generics: &[&PathSegmentArgument], -) -> SpecialFormExpanderDiagnostic { - let (first, rest) = generics - .split_first() - .expect("should have at least one generic argument"); - - let mut diagnostic = Diagnostic::new( - SpecialFormExpanderDiagnosticCategory::UnknownSpecialForm, - Severity::Error, - ) - .primary(Label::new(first.span(), "Remove these generic arguments")); - - for argument in rest { - diagnostic - .labels - .push(Label::new(argument.span(), "... and these too")); - } - - diagnostic.add_message(Message::help( - "Special form paths must not include generic arguments. Remove the angle brackets and \ - their contents.", - )); - - diagnostic.add_message(Message::note( - "Special forms are built-in language constructs that don't support generics in their path \ - reference.", - )); - - diagnostic -} - -pub(super) fn invalid_argument_length( - span: SpanId, - kind: SpecialFormKind, - arguments: &[Argument], - expected: &[usize], -) -> SpecialFormExpanderDiagnostic { - let diagnostic = Diagnostic::new( - SpecialFormExpanderDiagnosticCategory::SpecialFormArgumentLength, - Severity::Error, - ); - - let actual = arguments.len(); - - let canonical: Vec<_> = expected - .iter() - .map(|length| format!("{kind}/{length}")) - .collect(); - - let max_expected = expected.iter().max().copied().unwrap_or(0); - - let mut diagnostic = if actual > max_expected { - let excess = &arguments[max_expected..]; - - let (first, rest) = excess.split_first().unwrap_or_else(|| unreachable!()); - - let mut diagnostic = diagnostic.primary(Label::new(first.span, "Remove this argument")); - - for argument in rest { - diagnostic - .labels - .push(Label::new(argument.span, "... and this argument")); - } - - diagnostic.labels.push(Label::new( - span, - format!("In this `{kind}` special form call"), - )); - - diagnostic - } else { - diagnostic.primary(Label::new(span, "Add missing arguments")) - }; - - // Specific help text with code examples - let help_text = match kind { - SpecialFormKind::If => { - "Use either:\n- if/2: (if condition then-expr)\n- if/3: (if condition then-expr \ - else-expr)" - } - SpecialFormKind::As => "The as/2 form should look like: (as value type-expr)", - SpecialFormKind::Let => { - "Use either:\n- let/3: (let name value body)\n- let/4: (let name type value body)" - } - SpecialFormKind::Type => "The type/3 form should look like: (type name type-expr body)", - SpecialFormKind::Newtype => { - "The newtype/3 form should look like: (newtype name type-expr body)" - } - SpecialFormKind::Use => "The use/3 form should look like: (use module imports body)", - SpecialFormKind::Fn => { - "The fn/4 form should look like: (fn generics arguments return-type body)" - } - SpecialFormKind::Input => { - "Use either:\n- input/2: (input name type)\n- input/3: (input name type default)" - } - SpecialFormKind::Access => "The access/2 form should look like: (. object field)", - SpecialFormKind::Index => "The index/2 form should look like: ([] object index)", - }; - - diagnostic.add_message(Message::help(help_text)); - - diagnostic.add_message(Message::note(format!( - "The {kind} function has {} variant{}: {}", - expected.len(), - if expected.len() == 1 { "" } else { "s" }, - canonical.join(", ") - ))); - - diagnostic -} - -pub(crate) fn labeled_arguments_not_supported( - span: SpanId, - arguments: &[LabeledArgument], -) -> SpecialFormExpanderDiagnostic { - let mut diagnostic = Diagnostic::new( - SpecialFormExpanderDiagnosticCategory::LabeledArgumentsNotSupported, - Severity::Error, - ) - .primary(Label::new(span, "In this special form call")); - - let (first, rest) = arguments.split_first().unwrap_or_else(|| unreachable!()); - - diagnostic - .labels - .push(Label::new(first.span, "Remove this labeled argument")); - - for argument in rest { - diagnostic - .labels - .push(Label::new(argument.span, "... and this labeled argument")); - } - - diagnostic.add_message(Message::help( - "Special forms only accept positional arguments. Convert all labeled arguments to \ - positional arguments in the correct order.", - )); - - diagnostic.add_message(Message::note( - "Unlike regular functions, special forms have fixed parameter positions and cannot use \ - labeled arguments.", - )); - - diagnostic -} - -#[derive(Debug, Copy, Clone, PartialEq, Eq, Hash)] -pub(crate) enum InvalidTypeExpressionKind { - Dict, - List, - Literal, - Let, - Type, - NewType, - Use, - Input, - Closure, - If, - Field, - Index, - As, - Dummy, -} - -impl InvalidTypeExpressionKind { - const fn as_str(self) -> &'static str { - match self { - Self::Dict => "dictionary", - Self::List => "list", - Self::Literal => "literal", - Self::Let => "let binding", - Self::Type => "type definition", - Self::NewType => "newtype definition", - Self::Use => "use", - Self::Input => "input", - Self::Closure => "function", - Self::If => "if", - Self::Field => "field access", - Self::Index => "index", - Self::As => "as", - Self::Dummy => "dummy", - } - } -} - -impl Display for InvalidTypeExpressionKind { - fn fmt(&self, fmt: &mut fmt::Formatter<'_>) -> fmt::Result { - fmt.write_str(self.as_str()) - } -} - -const TYPE_EXPRESSION_NOTE: &str = "Valid type expressions include: -- Type names: String, Int, Float -- Struct types: {name: String, age: Int} -- Tuple types: (String, Int, Boolean) -- Unions: (| String Int) -- Intersections: (& String Int) -- Generic types: Array, Option"; - -pub(crate) fn invalid_type_expression( - span: SpanId, - kind: InvalidTypeExpressionKind, -) -> SpecialFormExpanderDiagnostic { - let diagnostic = Diagnostic::new( - SpecialFormExpanderDiagnosticCategory::InvalidTypeExpression, - Severity::Error, - ); - - let message = match kind { - InvalidTypeExpressionKind::Literal => { - Cow::Borrowed("Replace this literal with a type name") - } - InvalidTypeExpressionKind::If => { - Cow::Borrowed("Replace this conditional with a concrete type") - } - InvalidTypeExpressionKind::Dict - | InvalidTypeExpressionKind::List - | InvalidTypeExpressionKind::Let - | InvalidTypeExpressionKind::Type - | InvalidTypeExpressionKind::NewType - | InvalidTypeExpressionKind::Use - | InvalidTypeExpressionKind::Input - | InvalidTypeExpressionKind::Closure - | InvalidTypeExpressionKind::Field - | InvalidTypeExpressionKind::Index - | InvalidTypeExpressionKind::As - | InvalidTypeExpressionKind::Dummy => { - Cow::Owned(format!("Replace this {kind} with a proper type expression")) - } - }; - - let mut diagnostic = diagnostic.primary(Label::new(span, message)); - - let help_text = match kind { - InvalidTypeExpressionKind::Dict => { - "Dictionaries do not constitute a valid type expression, did you mean to instantiate a \ - struct type or refer to the `Dict` type?" - } - InvalidTypeExpressionKind::List => { - "Arrays do not constitute a valid type expression, did you mean to instantiate a tuple \ - type or refer to the `Array` type?" - } - InvalidTypeExpressionKind::If => { - "HashQL does not support conditional types. Use a concrete type like Int or String." - } - InvalidTypeExpressionKind::Literal - | InvalidTypeExpressionKind::Let - | InvalidTypeExpressionKind::Type - | InvalidTypeExpressionKind::NewType - | InvalidTypeExpressionKind::Use - | InvalidTypeExpressionKind::Input - | InvalidTypeExpressionKind::Closure - | InvalidTypeExpressionKind::Field - | InvalidTypeExpressionKind::Index - | InvalidTypeExpressionKind::As - | InvalidTypeExpressionKind::Dummy => { - "Replace this expression with a valid type reference, struct type, or tuple type" - } - }; - - diagnostic.add_message(Message::help(help_text)); - - diagnostic.add_message(Message::note(TYPE_EXPRESSION_NOTE)); - - diagnostic -} - -pub(crate) fn invalid_type_call_function(span: SpanId) -> SpecialFormExpanderDiagnostic { - let mut diagnostic = Diagnostic::new( - SpecialFormExpanderDiagnosticCategory::InvalidTypeExpression, - Severity::Error, - ) - .primary(Label::new( - span, - "Function call with non-path callee cannot be used as a type", - )); - - diagnostic.add_message(Message::help( - "Only specific type constructors like intersection (&) and union (|) operators can be \ - used in type expressions.", - )); - - diagnostic.add_message(Message::note(TYPE_EXPRESSION_NOTE)); - - diagnostic -} - -pub(crate) fn unsupported_type_constructor_function(span: SpanId) -> SpecialFormExpanderDiagnostic { - let mut diagnostic = Diagnostic::new( - SpecialFormExpanderDiagnosticCategory::InvalidTypeExpression, - Severity::Error, - ) - .primary(Label::new( - span, - "This function cannot be used as a type constructor", - )); - - diagnostic.add_message(Message::help( - "Only specific type constructors like intersection (&) and union (|) operators can be \ - used in type expressions.", - )); - - diagnostic.add_message(Message::note( - "Currently supported type operations are:\n- Intersection: math::bit_and (written as & in \ - source)\n- Union: math::bit_or (written as | in source)", - )); - - diagnostic -} - -#[derive(Debug, Copy, Clone, PartialEq, Eq, Hash, derive_more::Display)] -pub(crate) enum BindingMode { - #[display("use")] - Use, - #[display("let")] - Let, - #[display("type")] - Type, - #[display("newtype")] - Newtype, - #[display("input")] - Input, - #[display("`.`")] - Access, -} - -pub(crate) fn invalid_binding_name_not_path( - span: SpanId, - mode: BindingMode, -) -> SpecialFormExpanderDiagnostic { - let mut diagnostic = Diagnostic::new( - SpecialFormExpanderDiagnosticCategory::InvalidBindingName, - Severity::Error, - ) - .primary(Label::new( - span, - "Replace this expression with a simple identifier", - )); - - diagnostic.add_message(Message::help(format!( - "The {mode} binding name must be a simple identifier. Complex expressions are not allowed \ - in binding positions." - ))); - - let note = match mode { - BindingMode::Use => { - "Valid examples of use bindings:\n- (use module_name * body)\n- (use ::math (sin, cos) \ - ...)\n- (use ::string (trim: string_trim) ...)" - } - BindingMode::Let => { - "Valid examples of let bindings:\n- (let x value body)\n- (let counter 0 ...)\n- (let \ - user_name input ...)" - } - BindingMode::Type => { - "Valid examples of type bindings:\n- (type Person (name: String, age: Int) body)\n- \ - (type Output (| Integer Natural) ...)\n- (type UserId String ...)" - } - BindingMode::Newtype => { - "Valid examples of newtype bindings:\n- (newtype UserId String body)\n- (newtype Email \ - String ...)\n- (newtype Percentage Number ...)" - } - BindingMode::Input => { - "Valid examples of input bindings:\n- (input name String)\n- (input age Int \ - default_age)\n- (input options (enabled: Boolean))" - } - BindingMode::Access => { - "Valid examples of access bindings:\n- (. user name)\n- (. person age)\n- (. options \ - enabled)" - } - }; - - diagnostic.add_message(Message::note(note)); - - diagnostic -} - -pub(crate) fn invalid_let_name_qualified_path( - span: SpanId, - mode: BindingMode, -) -> SpecialFormExpanderDiagnostic { - let mut diagnostic = Diagnostic::new( - SpecialFormExpanderDiagnosticCategory::QualifiedBindingName, - Severity::Error, - ) - .primary(Label::new(span, "Replace this with a simple identifier")); - - diagnostic.add_message(Message::help(format!( - "{mode} binding names must be simple identifiers without any path qualification. \ - Qualified paths cannot be used as binding names." - ))); - - diagnostic.add_message(Message::note( - "Valid identifiers are simple names like 'x', 'counter', '+', or 'user_name' without any \ - namespace qualification, generic parameters, or path separators.", - )); - - diagnostic -} - -pub(crate) fn invalid_type_name_qualified_path( - span: SpanId, - mode: BindingMode, -) -> SpecialFormExpanderDiagnostic { - let mut diagnostic = Diagnostic::new( - SpecialFormExpanderDiagnosticCategory::QualifiedBindingName, - Severity::Error, - ) - .primary(Label::new( - span, - "Replace this qualified path with a simple identifier", - )); - - diagnostic.add_message(Message::help(format!( - "The {mode} binding requires a simple type name (like 'String' or 'MyType'), not a \ - qualified path (like 'std::string::String'). Remove the path segments." - ))); - - diagnostic.add_message(Message::note( - "Valid type names are simple identifiers, optionally followed by generic arguments (e.g., \ - 'Identifier' or 'Container'). They cannot contain '::' path separators in this \ - context.", - )); - - diagnostic -} - -pub(crate) fn type_with_existing_annotation(span: SpanId) -> SpecialFormExpanderDiagnostic { - let mut diagnostic = Diagnostic::new( - SpecialFormExpanderDiagnosticCategory::TypeWithExistingAnnotation, - Severity::Error, - ) - .primary(Label::new(span, "Remove this type annotation")); - - diagnostic.add_message(Message::help( - "Type expressions used in special forms cannot have their own type annotations. The \ - expression itself defines a type and cannot be annotated with another type.", - )); - - diagnostic.add_message(Message::note( - "When constructing type expressions for special forms like 'type', 'newtype', or 'as', \ - the expression itself represents a type definition and cannot have a separate type \ - annotation.", - )); - - diagnostic -} - -pub(crate) fn invalid_use_import(span: SpanId) -> SpecialFormExpanderDiagnostic { - let mut diagnostic = Diagnostic::new( - SpecialFormExpanderDiagnosticCategory::InvalidUseImport, - Severity::Error, - ) - .primary(Label::new(span, "Replace with a valid import expression")); - - diagnostic.add_message(Message::help( - "Use imports must be either a glob (*), a tuple of identifiers, or a struct of bindings. \ - Other expression types are not valid in this context.", - )); - - diagnostic.add_message(Message::note( - "Valid import expressions include:\n- Glob: *\n- Tuple of identifiers: (name1, name2)\n- \ - Struct with aliases: (name1: alias1, name2: alias2) or (name1: _, name2: _)", - )); - - diagnostic -} - -pub(crate) fn use_imports_with_type_annotation(span: SpanId) -> SpecialFormExpanderDiagnostic { - let mut diagnostic = Diagnostic::new( - SpecialFormExpanderDiagnosticCategory::InvalidUseImport, - Severity::Error, - ) - .primary(Label::new(span, "Remove this type annotation")); - - diagnostic.add_message(Message::help( - "Use import expressions cannot have type annotations. Import expressions define which \ - symbols to import, and do not have a meaningful type in this context.", - )); - - diagnostic.add_message(Message::note( - "Import expressions in the 'use' special form can only be a glob (*), a tuple of \ - identifiers, or a struct of bindings, none of which should have type annotations.", - )); - - diagnostic -} - -pub(crate) fn invalid_path_in_use_binding(span: SpanId) -> SpecialFormExpanderDiagnostic { - let mut diagnostic = Diagnostic::new( - SpecialFormExpanderDiagnosticCategory::InvalidUseImport, - Severity::Error, - ) - .primary(Label::new(span, "Use a simple identifier here")); - - diagnostic.add_message(Message::help( - "Use binding names must be simple identifiers. Qualified paths or complex expressions \ - cannot be used in this context.", - )); - - diagnostic.add_message(Message::note( - "In tuple imports, each element must be a simple identifier. For example: (name1, name2) \ - is valid, but (path::to::name,) is not.", - )); - - diagnostic -} - -pub(crate) fn use_path_with_generics( - span: SpanId, - path: &Path<'_>, -) -> SpecialFormExpanderDiagnostic { - let mut diagnostic = Diagnostic::new( - SpecialFormExpanderDiagnosticCategory::UsePathWithGenerics, - Severity::Error, - ) - .primary(Label::new(span, "Remove these generic arguments")); - - // Add labels for each generic argument segment in the path - for segment in &path.segments { - if !segment.arguments.is_empty() { - diagnostic.labels.push(Label::new( - segment.span, - "Generic arguments are not allowed here", - )); - } - } - - diagnostic.add_message(Message::help( - "The 'use' special form does not support generic arguments in import paths. Remove all \ - generic arguments from the path.", - )); - - diagnostic.add_message(Message::note( - "Use statements in HashQL can only import modules or specific symbols, but cannot specify \ - generic parameters during import.", - )); - - diagnostic -} - -pub(crate) fn fn_generics_with_type_annotation(span: SpanId) -> SpecialFormExpanderDiagnostic { - let mut diagnostic = Diagnostic::new( - SpecialFormExpanderDiagnosticCategory::FnGenericsWithTypeAnnotation, - Severity::Error, - ) - .primary(Label::new(span, "Remove this type annotation")); - - diagnostic.add_message(Message::help( - "Function generics declarations cannot have type annotations. Generic parameter lists \ - define type parameters for the function, and do not have a meaningful type themselves.", - )); - - diagnostic.add_message(Message::note( - "In the 'fn' special form, the generics argument should be either a tuple of identifiers \ - such as (T, U) or a struct of bounded type parameters such as (T: SomeBound, U: \ - OtherBound, V: _), where an underscore indicates no bound.", - )); - - diagnostic -} - -pub(crate) fn invalid_fn_generics_expression(span: SpanId) -> SpecialFormExpanderDiagnostic { - let mut diagnostic = Diagnostic::new( - SpecialFormExpanderDiagnosticCategory::InvalidFnGenericsExpression, - Severity::Error, - ) - .primary(Label::new(span, "Use a valid generics expression")); - - diagnostic.add_message(Message::help( - "Function generics must be specified as either a tuple of identifiers or a struct of \ - bounded type parameters. Other expression types are not valid in this context.", - )); - - diagnostic.add_message(Message::note( - "Valid generics expressions include:\n- Empty: ()\n- Tuple of identifiers: (T, U, V)\n- \ - Struct with bounds: (T: SomeBound, U: OtherBound) or (T: _, U: _) for unbounded types", - )); - - diagnostic -} - -pub(crate) fn invalid_fn_generic_param(span: SpanId) -> SpecialFormExpanderDiagnostic { - let mut diagnostic = Diagnostic::new( - SpecialFormExpanderDiagnosticCategory::InvalidFnGenericParam, - Severity::Error, - ) - .primary(Label::new(span, "Use a simple identifier here")); - - diagnostic.add_message(Message::help( - "Generic type parameters must be simple identifiers. Qualified paths or complex \ - expressions cannot be used in this context.", - )); - - diagnostic.add_message(Message::note( - "In function generic parameter lists, each element must be a simple identifier. For \ - example: (T, U, V) is valid, but (some::path,) is not.", - )); - - diagnostic -} - -pub(crate) fn fn_params_with_type_annotation(span: SpanId) -> SpecialFormExpanderDiagnostic { - let mut diagnostic = Diagnostic::new( - SpecialFormExpanderDiagnosticCategory::FnParamsWithTypeAnnotation, - Severity::Error, - ) - .primary(Label::new(span, "Remove this type annotation")); - - diagnostic.add_message(Message::help( - "Function parameter declarations cannot have type annotations at the struct level. The \ - struct itself represents the parameter list, and each field represents a parameter with \ - its type.", - )); - - diagnostic.add_message(Message::note( - "In the 'fn' special form, parameter lists should be structured as (param1: Type1, \ - param2: Type2), where the struct itself does not have a type annotation.", - )); - - diagnostic -} - -pub(crate) fn invalid_fn_params_expression(span: SpanId) -> SpecialFormExpanderDiagnostic { - let mut diagnostic = Diagnostic::new( - SpecialFormExpanderDiagnosticCategory::InvalidFnParamsExpression, - Severity::Error, - ) - .primary(Label::new(span, "Use a struct expression for parameters")); - - diagnostic.add_message(Message::help( - "Function parameters must be specified as a struct where field names are parameter names \ - and field values are parameter types. Other expression types are not valid in this \ - context.", - )); - - diagnostic.add_message(Message::note( - "Valid parameter expression is a struct in the form: (param1: Type1, param2: Type2, ...)", - )); - - diagnostic -} - -pub(crate) fn invalid_generic_argument_path(span: SpanId) -> SpecialFormExpanderDiagnostic { - let mut diagnostic = Diagnostic::new( - SpecialFormExpanderDiagnosticCategory::InvalidGenericArgumentPath, - Severity::Error, - ) - .primary(Label::new(span, "Replace with a simple identifier")); - - diagnostic.add_message(Message::help( - "Generic arguments must be simple identifiers. Qualified paths cannot be used as generic \ - arguments in this context.", - )); - - diagnostic.add_message(Message::note( - "In generic parameter constraints, arguments should be simple identifiers like 'T', 'U', \ - or 'Element' without namespace qualification or path separators.", - )); - - diagnostic -} - -pub(crate) fn invalid_generic_argument_type(span: SpanId) -> SpecialFormExpanderDiagnostic { - let mut diagnostic = Diagnostic::new( - SpecialFormExpanderDiagnosticCategory::InvalidGenericArgumentType, - Severity::Error, - ) - .primary(Label::new(span, "Use a simple type identifier here")); - - diagnostic.add_message(Message::help( - "Generic argument types must be simple path identifiers. Complex types like structs, \ - tuples, or function types cannot be used as generic argument types in this context.", - )); - - diagnostic.add_message(Message::note( - "Valid generic argument types are simple identifiers that refer to type names, such as \ - 'String', 'Number', or type parameters like 'T'.", - )); - - diagnostic -} - -pub(crate) fn duplicate_generic_constraint( - span: SpanId, - param: &str, - original_span: SpanId, -) -> SpecialFormExpanderDiagnostic { - let mut diagnostic = Diagnostic::new( - SpecialFormExpanderDiagnosticCategory::DuplicateGenericConstraint, - Severity::Error, - ) - .primary(Label::new( - span, - format!("Remove this duplicate declaration of '{param}'"), - )); - - diagnostic.labels.push(Label::new( - original_span, - format!("'{param}' was previously declared here"), - )); - - diagnostic.add_message(Message::help( - "Each generic parameter can only be declared once in a function or type definition. \ - Remove the duplicate declaration or use a different name.", - )); - - diagnostic.add_message(Message::note( - "Generic parameter names must be unique within a single generic parameter list. For \ - example, in foo, 'T' and 'U' are unique parameters.", - )); - - diagnostic -} - -pub(crate) fn duplicate_closure_parameter( - span: SpanId, - param: &str, - original_span: SpanId, -) -> SpecialFormExpanderDiagnostic { - let mut diagnostic = Diagnostic::new( - SpecialFormExpanderDiagnosticCategory::DuplicateClosureParameter, - Severity::Error, - ) - .primary(Label::new( - span, - format!("Remove this duplicate parameter '{param}'"), - )); - - diagnostic.labels.push(Label::new( - original_span, - format!("'{param}' was previously declared here"), - )); - - diagnostic.add_message(Message::help( - "Each function parameter must have a unique name. Rename this parameter or remove the \ - duplicate declaration.", - )); - - diagnostic.add_message(Message::note( - "Function parameters must have unique names within the same parameter list. For example, \ - in fn(x: Int, y: String): ReturnType body), 'x' and 'y' are unique parameters.", - )); - - diagnostic -} - -pub(crate) fn duplicate_closure_generic( - span: SpanId, - param_name: &str, - original_span: SpanId, -) -> SpecialFormExpanderDiagnostic { - let mut diagnostic = Diagnostic::new( - SpecialFormExpanderDiagnosticCategory::DuplicateGenericConstraint, - Severity::Error, - ) - .primary(Label::new( - span, - format!("Remove this duplicate generic parameter '{param_name}'"), - )); - - diagnostic.labels.push(Label::new( - original_span, - format!("'{param_name}' was previously declared here"), - )); - - diagnostic.add_message(Message::help( - "Each generic parameter can only be declared once in a function definition. Remove the \ - duplicate declaration or use a different name.", - )); - - diagnostic.add_message(Message::note( - "Generic parameter names must be unique within a function's generic parameter list. For \ - example, in fn(param: T): U -> body), 'T' and 'U' are unique parameters.", - )); - - diagnostic -} - -pub(crate) fn field_literal_type_annotation(span: SpanId) -> SpecialFormExpanderDiagnostic { - let mut diagnostic = Diagnostic::new( - SpecialFormExpanderDiagnosticCategory::FieldLiteralTypeAnnotation, - Severity::Error, - ) - .primary(Label::new(span, "Remove this type annotation")); - - diagnostic.add_message(Message::help( - "Field access using numeric literals cannot have type annotations. The literal represents \ - the field index directly and doesn't need a separate type.", - )); - - diagnostic.add_message(Message::note( - "When using numeric literals for field access (e.g., in tuple destructuring), the number \ - itself indicates the position and cannot be annotated with a type.", - )); - - diagnostic -} - -pub(crate) fn invalid_field_literal_type(span: SpanId) -> SpecialFormExpanderDiagnostic { - let mut diagnostic = Diagnostic::new( - SpecialFormExpanderDiagnosticCategory::InvalidFieldLiteralType, - Severity::Error, - ) - .primary(Label::new(span, "Use an integer literal here")); - - diagnostic.add_message(Message::help( - "Field access using literals requires an integer literal that specifies the field index. \ - Other literal types like strings, booleans, or numbers cannot be used for field indexing.", - )); - - diagnostic.add_message(Message::note( - "Valid field access examples:\n- (access tuple 0) - accesses first field\n- (access \ - record 2) - accesses third field\n- (access data my_field) - accesses named field", - )); - - diagnostic -} - -pub(crate) fn field_index_out_of_bounds(span: SpanId) -> SpecialFormExpanderDiagnostic { - let mut diagnostic = Diagnostic::new( - SpecialFormExpanderDiagnosticCategory::FieldIndexOutOfBounds, - Severity::Error, - ) - .primary(Label::new( - span, - "Use a valid field index within usize bounds", - )); - - diagnostic.add_message(Message::help( - "Field indices must be non-negative integers that fit within the bounds of usize. Very \ - large numbers or negative numbers cannot be used as field indices.", - )); - - diagnostic.add_message(Message::note(format!( - "Field indexing in HashQL uses zero-based indexing where the first field is at index 0, \ - the second at index 1, and so on. The maximum valid index depends on the system's \ - architecture, which is {}-bit.", - usize::BITS - ))); - - diagnostic -} diff --git a/libs/@local/hashql/ast/src/lower/special_form_expander/mod.rs b/libs/@local/hashql/ast/src/lower/special_form_expander/mod.rs deleted file mode 100644 index 155d041aee9..00000000000 --- a/libs/@local/hashql/ast/src/lower/special_form_expander/mod.rs +++ /dev/null @@ -1,1451 +0,0 @@ -pub mod error; - -use core::{ - fmt::{self, Display}, - mem, -}; - -use hashql_core::{ - collections::{FastHashMap, fast_hash_map_with_capacity}, - heap::{self, Heap}, - span::SpanId, - symbol::{Ident, IdentKind}, - value::Primitive, -}; -use hashql_diagnostics::DiagnosticIssues; - -use self::error::{ - BindingMode, InvalidTypeExpressionKind, SpecialFormExpanderDiagnosticIssues, - duplicate_closure_generic, duplicate_closure_parameter, duplicate_generic_constraint, - field_index_out_of_bounds, field_literal_type_annotation, fn_generics_with_type_annotation, - fn_params_with_type_annotation, invalid_argument_length, invalid_binding_name_not_path, - invalid_field_literal_type, invalid_fn_generic_param, invalid_fn_generics_expression, - invalid_fn_params_expression, invalid_generic_argument_path, invalid_generic_argument_type, - invalid_let_name_qualified_path, invalid_path_in_use_binding, invalid_type_call_function, - invalid_type_expression, invalid_type_name_qualified_path, invalid_use_import, - labeled_arguments_not_supported, type_with_existing_annotation, unknown_special_form_generics, - unknown_special_form_length, unknown_special_form_name, unsupported_type_constructor_function, - use_imports_with_type_annotation, use_path_with_generics, -}; -use crate::{ - node::{ - expr::{ - AsExpr, CallExpr, ClosureExpr, Expr, ExprKind, FieldExpr, IfExpr, IndexExpr, InputExpr, - LetExpr, NewTypeExpr, StructExpr, TupleExpr, TypeExpr, UseExpr, - call::Argument, - closure::{ClosureParam, ClosureSignature}, - r#use::{Glob, UseBinding, UseKind}, - }, - generic::{GenericArgument, GenericConstraint, GenericParam, Generics}, - id::NodeId, - path::{Path, PathSegmentArgument}, - r#type::{ - IntersectionType, StructField, StructType, TupleField, TupleType, Type, TypeKind, - UnionType, - }, - }, - visit::{Visitor, walk_expr}, -}; - -mod paths {} - -#[derive(Debug, Copy, Clone, PartialEq, Eq, Hash, enum_iterator::Sequence)] -enum SpecialFormKind { - If, - As, - Let, - Type, - Newtype, - Use, - Fn, - Input, - Access, - Index, -} - -impl SpecialFormKind { - const fn as_str(self) -> &'static str { - match self { - Self::If => "if", - Self::As => "as", - Self::Let => "let", - Self::Type => "type", - Self::Newtype => "newtype", - Self::Use => "use", - Self::Fn => "fn", - Self::Input => "input", - Self::Access => "access", - Self::Index => "index", - } - } - - fn from_str(name: &str) -> Option { - match name { - "if" => Some(Self::If), - "as" => Some(Self::As), - "let" => Some(Self::Let), - "type" => Some(Self::Type), - "newtype" => Some(Self::Newtype), - "use" => Some(Self::Use), - "fn" => Some(Self::Fn), - "input" => Some(Self::Input), - "access" => Some(Self::Access), - "index" => Some(Self::Index), - _ => None, - } - } -} - -impl Display for SpecialFormKind { - fn fmt(&self, fmt: &mut fmt::Formatter<'_>) -> fmt::Result { - fmt.write_str(self.as_str()) - } -} - -pub struct SpecialFormExpander<'heap> { - heap: &'heap Heap, - diagnostics: SpecialFormExpanderDiagnosticIssues, -} - -impl<'heap> SpecialFormExpander<'heap> { - pub const fn new(heap: &'heap Heap) -> Self { - Self { - heap, - diagnostics: DiagnosticIssues::new(), - } - } - - pub fn take_diagnostics(&mut self) -> SpecialFormExpanderDiagnosticIssues { - mem::take(&mut self.diagnostics) - } - - fn lower_expr_to_type_call(&mut self, expr: CallExpr<'heap>) -> Option> { - const fn create_intersection_type<'heap>( - id: NodeId, - span: SpanId, - types: heap::Vec<'heap, Type<'heap>>, - ) -> TypeKind<'heap> { - TypeKind::Intersection(IntersectionType { id, span, types }) - } - - const fn create_union_type<'heap>( - id: NodeId, - span: SpanId, - types: heap::Vec<'heap, Type<'heap>>, - ) -> TypeKind<'heap> { - TypeKind::Union(UnionType { id, span, types }) - } - - let ExprKind::Path(path) = expr.function.kind else { - self.diagnostics - .push(invalid_type_call_function(expr.function.span)); - return None; - }; - - let constructor = if path.matches_absolute_path(["core", "bits", "and"]) { - // The `&` operator, which is internally overloaded for types to create intersections - create_intersection_type - } else if path.matches_absolute_path(["core", "bits", "or"]) { - // The `|` operator, which is internally overloaded for types to create unions - create_union_type - } else { - self.diagnostics - .push(unsupported_type_constructor_function(expr.function.span)); - return None; - }; - - let mut types = Vec::with_capacity_in(expr.arguments.len(), self.heap); - - let arguments_len = expr.arguments.len(); - for argument in expr.arguments { - let Some(r#type) = self.lower_expr_to_type(*argument.value) else { - continue; - }; - - types.push(r#type); - } - - if types.len() != arguments_len { - // An error occurred downstream, propagate said error - return None; - } - - Some(Type { - id: expr.id, - span: expr.span, - kind: constructor(expr.id, expr.span, types), - }) - } - - fn lower_expr_to_type_struct(&mut self, expr: StructExpr<'heap>) -> Option> { - if let Some(type_expr) = &expr.r#type { - self.diagnostics - .push(type_with_existing_annotation(type_expr.span)); - return None; - } - - let entries_len = expr.entries.len(); - let mut fields = Vec::with_capacity_in(entries_len, self.heap); - - for entry in expr.entries { - let Some(r#type) = self.lower_expr_to_type(*entry.value) else { - continue; - }; - - fields.push(StructField { - id: entry.id, - span: entry.span, - name: entry.key, - r#type, - }); - } - - if fields.len() != entries_len { - // Downstream an error happened so we're propagating the error - return None; - } - - Some(Type { - id: expr.id, - span: expr.span, - kind: TypeKind::Struct(StructType { - id: expr.id, - span: expr.span, - fields, - }), - }) - } - - fn lower_expr_to_type_tuple(&mut self, expr: TupleExpr<'heap>) -> Option> { - if let Some(type_expr) = &expr.r#type { - self.diagnostics - .push(type_with_existing_annotation(type_expr.span)); - return None; - } - - let elements_len = expr.elements.len(); - let mut fields = Vec::with_capacity_in(elements_len, self.heap); - - for element in expr.elements { - let Some(r#type) = self.lower_expr_to_type(*element.value) else { - continue; - }; - - fields.push(TupleField { - id: element.id, - span: element.span, - r#type, - }); - } - - if fields.len() != elements_len { - // Downstream an error happened, so we're propagating the error - return None; - } - - Some(Type { - id: expr.id, - span: expr.span, - kind: TypeKind::Tuple(TupleType { - id: expr.id, - span: expr.span, - fields, - }), - }) - } - - fn lower_expr_to_type(&mut self, expr: Expr<'heap>) -> Option> { - match expr.kind { - ExprKind::Call(call_expr) => self.lower_expr_to_type_call(call_expr), - ExprKind::Struct(struct_expr) => self.lower_expr_to_type_struct(struct_expr), - ExprKind::Tuple(tuple_expr) => self.lower_expr_to_type_tuple(tuple_expr), - ExprKind::Path(path) => Some(Type { - id: expr.id, - span: expr.span, - kind: TypeKind::Path(path), - }), - ExprKind::Underscore => Some(Type { - id: expr.id, - span: expr.span, - kind: TypeKind::Infer, - }), - kind @ (ExprKind::Dict(_) - | ExprKind::List(_) - | ExprKind::Literal(_) - | ExprKind::Let(_) - | ExprKind::Type(_) - | ExprKind::NewType(_) - | ExprKind::Use(_) - | ExprKind::Input(_) - | ExprKind::Closure(_) - | ExprKind::If(_) - | ExprKind::Field(_) - | ExprKind::Index(_) - | ExprKind::As(_) - | ExprKind::Dummy) => { - let kind_name = match kind { - ExprKind::Dict(_) => InvalidTypeExpressionKind::Dict, - ExprKind::List(_) => InvalidTypeExpressionKind::List, - ExprKind::Literal(_) => InvalidTypeExpressionKind::Literal, - ExprKind::Let(_) => InvalidTypeExpressionKind::Let, - ExprKind::Type(_) => InvalidTypeExpressionKind::Type, - ExprKind::NewType(_) => InvalidTypeExpressionKind::NewType, - ExprKind::Use(_) => InvalidTypeExpressionKind::Use, - ExprKind::Input(_) => InvalidTypeExpressionKind::Input, - ExprKind::Closure(_) => InvalidTypeExpressionKind::Closure, - ExprKind::If(_) => InvalidTypeExpressionKind::If, - ExprKind::Field(_) => InvalidTypeExpressionKind::Field, - ExprKind::Index(_) => InvalidTypeExpressionKind::Index, - ExprKind::As(_) => InvalidTypeExpressionKind::As, - ExprKind::Dummy => InvalidTypeExpressionKind::Dummy, - ExprKind::Call(_) - | ExprKind::Struct(_) - | ExprKind::Tuple(_) - | ExprKind::Path(_) - | ExprKind::Underscore => unreachable!(), - }; - - self.diagnostics - .push(invalid_type_expression(expr.span, kind_name)); - None - } - } - } - - /// Lowers an if/2 special form to an `IfExpr` with no else branch. - /// - /// The if/2 form has the syntax: `(if condition then-expr)` - /// and is transformed into an if expression with no else branch. - fn lower_if_2(call: CallExpr<'heap>) -> ExprKind<'heap> { - let [test, then] = call - .arguments - .try_into() - .expect("The caller should've verified the length of the arguments"); - - ExprKind::If(IfExpr { - id: call.id, - span: call.span, - test: test.value, - then: then.value, - r#else: None, - }) - } - - /// Lowers an if/3 special form to an `IfExpr` with an else branch. - /// - /// The if/3 form has the syntax: `(if condition then-expr else-expr)` - /// and is transformed into a complete if-then-else expression. - fn lower_if_3(call: CallExpr<'heap>) -> ExprKind<'heap> { - let [test, then, r#else] = call - .arguments - .try_into() - .expect("The caller should've verified the length of the arguments"); - - ExprKind::If(IfExpr { - id: call.id, - span: call.span, - test: test.value, - then: then.value, - r#else: Some(r#else.value), - }) - } - - /// Lowers an if special form to the appropriate `IfExpr` variant. - /// - /// There are two forms of the `if` special form: - /// - if/2: `(if condition then-expr)` - no else branch - /// - if/3: `(if condition then-expr else-expr)` - with else branch - /// - /// This function validates the argument count and delegates to the appropriate - /// specialized lowering function. - fn lower_if(&mut self, call: CallExpr<'heap>) -> Option> { - if call.arguments.len() == 2 { - Some(Self::lower_if_2(call)) - } else if call.arguments.len() == 3 { - Some(Self::lower_if_3(call)) - } else { - self.diagnostics.push(invalid_argument_length( - call.span, - SpecialFormKind::If, - &call.arguments, - &[2, 3], - )); - - None - } - } - - /// Lowers an as/2 special form to an `AsExpr`. - /// - /// The as/2 form has the syntax: `(as value type-expr)` - /// and is transformed into a type assertion expression. This validates - /// that `value` conforms to the type specified by `type-expr`. - /// - /// The function first checks that exactly 2 arguments are provided, - /// then attempts to convert the second argument into a valid type expression. - fn lower_as(&mut self, call: CallExpr<'heap>) -> Option> { - if call.arguments.len() != 2 { - self.diagnostics.push(invalid_argument_length( - call.span, - SpecialFormKind::As, - &call.arguments, - &[2], - )); - - return None; - } - - let [value, r#type] = call.arguments.try_into().unwrap_or_else(|_| unreachable!()); - - let r#type = self.lower_expr_to_type(*r#type.value)?; - - Some(ExprKind::As(AsExpr { - id: call.id, - span: call.span, - value: value.value, - r#type: Box::new_in(r#type, self.heap), - })) - } - - /// Attempts to extract a `Path` from an argument. - /// - /// This function is used by various special form lowering functions to extract - /// path expressions from arguments. It checks if the argument contains a path - /// expression and returns it if present, otherwise it adds a diagnostic and - /// returns `None`. - /// - /// The `mode` parameter is used for generating appropriate error diagnostics. - fn lower_argument_to_path( - &mut self, - mode: BindingMode, - argument: Argument<'heap>, - ) -> Option> { - let ExprKind::Path(path) = argument.value.kind else { - self.diagnostics - .push(invalid_binding_name_not_path(argument.value.span, mode)); - - return None; - }; - - Some(path) - } - - /// Attempts to extract an identifier from an argument. - /// - /// This function validates that the argument contains a simple path expression that - /// can be converted to an identifier. It first extracts a path using `lower_argument_to_path` - /// and then ensures the path is a simple identifier (not a qualified path). - /// - /// The `mode` parameter is used for generating appropriate error diagnostics. - fn lower_argument_to_ident( - &mut self, - mode: BindingMode, - argument: Argument<'heap>, - ) -> Option> { - let path = self.lower_argument_to_path(mode, argument)?; - let span = path.span; - - let Some(name) = path.into_ident() else { - self.diagnostics - .push(invalid_let_name_qualified_path(span, mode)); - - return None; - }; - - Some(name) - } - - /// Attempts to extract a field identifier from an argument. - /// - /// This function handles both named field access (using identifiers) and indexed field access - /// (using integer literals). For literals, it validates that they are integers without type - /// annotations and within usize bounds. Otherwise, it falls back to `lower_argument_to_ident` - /// for named field access. - /// - /// The `mode` parameter is used for generating appropriate error diagnostics. - fn lower_argument_to_field( - &mut self, - mode: BindingMode, - argument: Argument<'heap>, - ) -> Option> { - if let ExprKind::Literal(literal) = &argument.value.kind { - if let Some(r#type) = &literal.r#type { - self.diagnostics - .push(field_literal_type_annotation(r#type.span)); - } - - let Primitive::Integer(integer) = literal.kind else { - self.diagnostics - .push(invalid_field_literal_type(literal.span)); - return None; - }; - - if integer.as_usize().is_none() { - self.diagnostics - .push(field_index_out_of_bounds(literal.span)); - return None; - } - - return Some(Ident { - span: literal.span, - value: integer.as_symbol(), - kind: IdentKind::Lexical, - }); - } - - self.lower_argument_to_ident(mode, argument) - } - - fn lower_argument_to_generic_ident( - &mut self, - mode: BindingMode, - argument: Argument<'heap>, - ) -> Option<(Ident<'heap>, heap::Vec<'heap, PathSegmentArgument<'heap>>)> { - let path = self.lower_argument_to_path(mode, argument)?; - let span = path.span; - - let Ok(name) = path.into_generic_ident() else { - self.diagnostics - .push(invalid_type_name_qualified_path(span, mode)); - - return None; - }; - - Some(name) - } - - fn lower_path_segment_arguments_to_constraints( - &mut self, - arguments: heap::Vec<'heap, PathSegmentArgument<'heap>>, - ) -> Option>> { - let mut constraints = Vec::with_capacity_in(arguments.len(), self.heap); - - let mut seen = fast_hash_map_with_capacity(arguments.len()); - - for argument in arguments { - match argument { - PathSegmentArgument::Argument(GenericArgument { - id, - span, - ref r#type, - }) if let Type { - kind: TypeKind::Path(path), - .. - } = r#type.as_ref() - && let Some(&ident) = path.as_ident() => - { - if let Err(error) = seen.try_insert(ident.value, ident.span) { - self.diagnostics.push(duplicate_generic_constraint( - ident.span, - ident.value.as_str(), - *error.entry.get(), - )); - - continue; - } - - constraints.push(GenericConstraint { - id, - span, - name: ident, - bound: None, - }); - } - // Specialized errors for paths, to properly guide the user - PathSegmentArgument::Argument(GenericArgument { ref r#type, .. }) - if let Type { - kind: TypeKind::Path(path), - .. - } = r#type.as_ref() => - { - self.diagnostics - .push(invalid_generic_argument_path(path.span)); - - return None; - } - PathSegmentArgument::Argument(generic_argument) => { - self.diagnostics - .push(invalid_generic_argument_type(generic_argument.r#type.span)); - - return None; - } - PathSegmentArgument::Constraint(generic_constraint) => { - if let Err(error) = - seen.try_insert(generic_constraint.name.value, generic_constraint.name.span) - { - self.diagnostics.push(duplicate_generic_constraint( - generic_constraint.span, - generic_constraint.name.value.as_str(), - *error.entry.get(), - )); - - continue; - } - - constraints.push(generic_constraint); - } - } - } - - Some(constraints) - } - - /// Lowers a let/3 special form to a `LetExpr` without type annotation. - /// - /// The let/3 form has the syntax: `(let name value body)` - /// and is transformed into a let expression with no explicit type annotation. - fn lower_let_3(&mut self, call: CallExpr<'heap>) -> Option> { - let [name, value, body] = call - .arguments - .try_into() - .expect("The caller should've verified the length of the arguments"); - - let name = self.lower_argument_to_ident(BindingMode::Let, name)?; - - Some(ExprKind::Let(LetExpr { - id: call.id, - span: call.span, - name, - value: value.value, - r#type: None, - body: body.value, - })) - } - - /// Lowers a let/4 special form to a `LetExpr` with an explicit type annotation. - /// - /// The let/4 form has the syntax: `(let name type value body)` - /// and is transformed into a let expression with an explicit type annotation. - fn lower_let_4(&mut self, call: CallExpr<'heap>) -> Option> { - let [name, r#type, value, body] = call - .arguments - .try_into() - .expect("The caller should've verified the length of the arguments"); - - let (name, r#type) = Option::zip( - self.lower_argument_to_ident(BindingMode::Let, name), - self.lower_expr_to_type(*r#type.value), - )?; - - Some(ExprKind::Let(LetExpr { - id: call.id, - span: call.span, - name, - value: value.value, - r#type: Some(Box::new_in(r#type, self.heap)), - body: body.value, - })) - } - - /// Lowers a `let` special form to the appropriate `LetExpr` variant. - /// - /// There are two forms of the `let` special form: - /// - let/3: `(let name value body)` - no type annotation - /// - let/4: `(let name type value body)` - with type annotation - /// - /// This function validates the argument count and delegates to the appropriate - /// specialized lowering function. - fn lower_let(&mut self, call: CallExpr<'heap>) -> Option> { - if call.arguments.len() == 3 { - self.lower_let_3(call) - } else if call.arguments.len() == 4 { - self.lower_let_4(call) - } else { - self.diagnostics.push(invalid_argument_length( - call.span, - SpecialFormKind::Let, - &call.arguments, - &[3, 4], - )); - - None - } - } - - /// Lowers a type/3 special form to a `TypeExpr`. - /// - /// The type/3 form has the syntax: `(type name type-expr body)` - /// and is transformed into a type expression that defines a type alias. - fn lower_type(&mut self, call: CallExpr<'heap>) -> Option> { - if call.arguments.len() != 3 { - self.diagnostics.push(invalid_argument_length( - call.span, - SpecialFormKind::Type, - &call.arguments, - &[3], - )); - - return None; - } - - let [name, value, body] = call.arguments.try_into().unwrap_or_else(|_| unreachable!()); - - let ((name, arguments), value) = Option::zip( - self.lower_argument_to_generic_ident(BindingMode::Type, name), - self.lower_expr_to_type(*value.value), - )?; - - let constraints = self.lower_path_segment_arguments_to_constraints(arguments)?; - - Some(ExprKind::Type(TypeExpr { - id: call.id, - span: call.span, - - name, - constraints, - - value: Box::new_in(value, self.heap), - body: body.value, - })) - } - - /// Lowers a newtype/3 special form to a `NewTypeExpr`. - /// - /// The newtype/3 form has the syntax: `(newtype name type-expr body)` - /// and is transformed into a newtype expression that defines a new type - /// with the structure of the provided type expression. - fn lower_newtype(&mut self, call: CallExpr<'heap>) -> Option> { - if call.arguments.len() != 3 { - self.diagnostics.push(invalid_argument_length( - call.span, - SpecialFormKind::Newtype, - &call.arguments, - &[3], - )); - - return None; - } - - let [name, value, body] = call.arguments.try_into().unwrap_or_else(|_| unreachable!()); - - let ((name, arguments), value) = Option::zip( - self.lower_argument_to_generic_ident(BindingMode::Newtype, name), - self.lower_expr_to_type(*value.value), - )?; - - let constraints = self.lower_path_segment_arguments_to_constraints(arguments)?; - - Some(ExprKind::NewType(NewTypeExpr { - id: call.id, - span: call.span, - - name, - constraints, - - value: Box::new_in(value, self.heap), - body: body.value, - })) - } - - /// Processes a struct expression for use imports. - /// - /// Struct-style imports have the form `{key: value, ...}` where each key represents the - /// name to bind and each value is either an underscore (to use the same name) or - /// an identifier (to use as alias). - /// - /// Returns a `UseKind::Named` with the appropriate bindings if successful. - fn lower_use_imports_struct(&mut self, r#struct: StructExpr<'heap>) -> Option> { - // {key: value}, each value must be a value must be an underscore *or* ident - if let Some(type_expr) = &r#struct.r#type { - self.diagnostics - .push(use_imports_with_type_annotation(type_expr.span)); - return None; - } - - let entries_len = r#struct.entries.len(); - let mut bindings = Vec::with_capacity_in(entries_len, self.heap); - - for entry in r#struct.entries { - let path = match entry.value.kind { - ExprKind::Path(path) => path, - ExprKind::Underscore => { - bindings.push(UseBinding { - id: entry.id, - span: entry.span, - name: entry.key, - alias: None, - }); - - continue; - } - ExprKind::Call(_) - | ExprKind::Struct(_) - | ExprKind::Dict(_) - | ExprKind::Tuple(_) - | ExprKind::List(_) - | ExprKind::Literal(_) - | ExprKind::Let(_) - | ExprKind::Type(_) - | ExprKind::NewType(_) - | ExprKind::Use(_) - | ExprKind::Input(_) - | ExprKind::Closure(_) - | ExprKind::If(_) - | ExprKind::Field(_) - | ExprKind::Index(_) - | ExprKind::As(_) - | ExprKind::Dummy => { - self.diagnostics.push(invalid_use_import(entry.value.span)); - continue; - } - }; - - let path_span = path.span; - let Some(alias) = path.into_ident() else { - self.diagnostics - .push(invalid_path_in_use_binding(path_span)); - continue; - }; - - bindings.push(UseBinding { - id: entry.id, - span: entry.span, - name: entry.key, - alias: Some(alias), - }); - } - - if bindings.len() != entries_len { - // error occurred downstream, propagate said error - return None; - } - - Some(UseKind::Named(bindings)) - } - - /// Processes a tuple expression for use imports. - /// - /// Tuple-style imports have the form `(path1, path2, ...)` where each path - /// should be a simple identifier. These imports use the original name without aliasing. - /// - /// Returns a `UseKind::Named` with the appropriate bindings if successful. - fn lower_use_imports_tuple(&mut self, tuple: TupleExpr<'heap>) -> Option> { - if let Some(type_expr) = &tuple.r#type { - self.diagnostics - .push(use_imports_with_type_annotation(type_expr.span)); - return None; - } - - let elements_len = tuple.elements.len(); - let mut bindings = Vec::with_capacity_in(elements_len, self.heap); - - for element in tuple.elements { - let ExprKind::Path(path) = element.value.kind else { - self.diagnostics - .push(invalid_use_import(element.value.span)); - continue; - }; - - let path_span = path.span; - let Some(name) = path.into_ident() else { - self.diagnostics - .push(invalid_path_in_use_binding(path_span)); - continue; - }; - - bindings.push(UseBinding { - id: element.id, - span: element.span, - name, - alias: None, - }); - } - - if bindings.len() != elements_len { - // error occurred downstream, propagate said error - return None; - } - - Some(UseKind::Named(bindings)) - } - - /// Processes use imports in different forms. - /// - /// This function handles three forms of imports: - /// - `*` (symbol) - Import all items (glob import) - /// - Struct-style imports - Named imports with potential aliases - /// - Tuple-style imports - Named imports without aliases - /// - /// Returns the appropriate `UseKind` variant based on the import form. - fn lower_use_imports(&mut self, argument: Argument<'heap>) -> Option> { - match argument.value.kind { - ExprKind::Path(path) => { - let path_id = path.id; - - let path_span = path.span; - if let Some(ident) = path.into_ident() { - if ident.value.as_str() == "*" { - return Some(UseKind::Glob(Glob { - id: path_id, - span: ident.span, - })); - } - - self.diagnostics.push(invalid_use_import(ident.span)); - return None; - } - - self.diagnostics - .push(invalid_path_in_use_binding(path_span)); - None - } - ExprKind::Struct(r#struct) => self.lower_use_imports_struct(r#struct), - ExprKind::Tuple(tuple) => self.lower_use_imports_tuple(tuple), - ExprKind::Call(_) - | ExprKind::Dict(_) - | ExprKind::List(_) - | ExprKind::Literal(_) - | ExprKind::Let(_) - | ExprKind::Type(_) - | ExprKind::NewType(_) - | ExprKind::Use(_) - | ExprKind::Input(_) - | ExprKind::Closure(_) - | ExprKind::If(_) - | ExprKind::Field(_) - | ExprKind::Index(_) - | ExprKind::As(_) - | ExprKind::Underscore - | ExprKind::Dummy => { - self.diagnostics - .push(invalid_use_import(argument.value.span)); - None - } - } - } - - /// Lowers a use/3 special form to a `UseExpr`. - /// - /// The use/3 form has the syntax: `(use path imports body)` - /// where path is the module path to import from, imports specifies - /// what to import, and body is the expression in which the imports are available. - /// - /// This function verifies the argument count and structure, then processes - /// the path and imports to create a `UseExpr`. - fn lower_use(&mut self, call: CallExpr<'heap>) -> Option> { - if call.arguments.len() != 3 { - self.diagnostics.push(invalid_argument_length( - call.span, - SpecialFormKind::Use, - &call.arguments, - &[3], - )); - return None; - } - - let [path, imports, body] = call.arguments.try_into().unwrap_or_else(|_| unreachable!()); - - let (path, kind) = Option::zip( - self.lower_argument_to_path(BindingMode::Use, path), - self.lower_use_imports(imports), - )?; - - if path.has_generic_arguments() { - self.diagnostics - .push(use_path_with_generics(path.span, &path)); - - return None; - } - - Some(ExprKind::Use(UseExpr { - id: call.id, - span: call.span, - path, - kind, - body: body.value, - })) - } - - /// Processes a tuple expression for function generic parameters. - /// - /// This function extracts generic parameter names from a tuple expression - /// with the form `(param1, param2, ...)` where each element is a path - /// that can be converted to an identifier. - /// - /// Returns a `Generics` instance containing the generic parameters with no bounds. - fn lower_fn_generics_tuple(&mut self, tuple: TupleExpr<'heap>) -> Option> { - if let Some(type_expr) = &tuple.r#type { - self.diagnostics - .push(fn_generics_with_type_annotation(type_expr.span)); - return None; - } - - let elements_len = tuple.elements.len(); - let mut params = Vec::with_capacity_in(elements_len, self.heap); - - for element in tuple.elements { - let ExprKind::Path(path) = element.value.kind else { - self.diagnostics - .push(invalid_fn_generics_expression(element.value.span)); - continue; - }; - - let path_span = path.span; - let Some(name) = path.into_ident() else { - self.diagnostics.push(invalid_fn_generic_param(path_span)); - continue; - }; - - params.push(GenericParam { - id: element.id, - span: element.span, - name, - bound: None, - }); - } - - if params.len() != elements_len { - // Downstream an error happened which we catch - return None; - } - - Some(Generics { - id: tuple.id, - span: tuple.span, - params, - }) - } - - /// Processes a struct expression for function generic parameters with bounds. - /// - /// This function extracts generic parameters from a struct expression with the form - /// `(param1: bound1, param2: _, ...)` where each key is a parameter name and each - /// value is either an underscore (for no bound) or a type expression (for a bound). - /// - /// Returns a `Generics` instance containing the generic parameters with their bounds. - fn lower_fn_generics_struct(&mut self, r#struct: StructExpr<'heap>) -> Option> { - if let Some(type_expr) = &r#struct.r#type { - self.diagnostics - .push(fn_generics_with_type_annotation(type_expr.span)); - return None; - } - - let entries_len = r#struct.entries.len(); - let mut params = Vec::with_capacity_in(entries_len, self.heap); - - for entry in r#struct.entries { - let bound = if matches!(entry.value.kind, ExprKind::Underscore) { - None - } else if let Some(bound) = self.lower_expr_to_type(*entry.value) { - Some(Box::new_in(bound, self.heap)) - } else { - continue; - }; - - params.push(GenericParam { - id: entry.id, - span: entry.span, - name: entry.key, - bound, - }); - } - - if params.len() != entries_len { - // Downstream an error happened which we catch - return None; - } - - Some(Generics { - id: r#struct.id, - span: r#struct.span, - params, - }) - } - - /// Processes an argument for function generic parameters. - /// - /// This function handles two forms of generic parameter declarations: - /// - Tuple form: Simple parameters without bounds - /// - Struct form: Parameters with optional type bounds - /// - /// Returns a `Generics` instance if successful. - fn lower_fn_generics(&mut self, argument: Argument<'heap>) -> Option> { - match argument.value.kind { - ExprKind::Tuple(tuple) => self.lower_fn_generics_tuple(tuple), - ExprKind::Struct(r#struct) => self.lower_fn_generics_struct(r#struct), - ExprKind::Call(_) - | ExprKind::Dict(_) - | ExprKind::List(_) - | ExprKind::Literal(_) - | ExprKind::Path(_) - | ExprKind::Let(_) - | ExprKind::Type(_) - | ExprKind::NewType(_) - | ExprKind::Use(_) - | ExprKind::Input(_) - | ExprKind::Closure(_) - | ExprKind::If(_) - | ExprKind::Field(_) - | ExprKind::Index(_) - | ExprKind::As(_) - | ExprKind::Underscore - | ExprKind::Dummy => { - self.diagnostics - .push(invalid_fn_generics_expression(argument.value.span)); - None - } - } - } - - /// Processes a struct expression for function parameters. - /// - /// This function extracts parameter names and type bounds from a struct expression - /// with the form `(param1: type1, param2: type2, ...)` where each key is a parameter name - /// and each value is a type expression representing the parameter type. - /// - /// Returns a vector of `ClosureParam` instances if successful. - fn lower_fn_parameters( - &mut self, - argument: Argument<'heap>, - ) -> Option>> { - let ExprKind::Struct(r#struct) = argument.value.kind else { - self.diagnostics - .push(invalid_fn_params_expression(argument.value.span)); - return None; - }; - - if let Some(type_expr) = &r#struct.r#type { - self.diagnostics - .push(fn_params_with_type_annotation(type_expr.span)); - return None; - } - - let entries_len = r#struct.entries.len(); - let mut params = Vec::with_capacity_in(entries_len, self.heap); - - for entry in r#struct.entries { - let Some(bound) = self.lower_expr_to_type(*entry.value) else { - continue; - }; - - params.push(ClosureParam { - id: entry.id, - span: entry.span, - name: entry.key, - bound: Box::new_in(bound, self.heap), - }); - } - - if params.len() != entries_len { - // downstream we've received an error, propagate said error - return None; - } - - Some(params) - } - - /// Lowers a fn/4 special form to a `ClosureExpr`. - /// - /// The fn/4 form has the syntax: `(fn generics params return-type body)` - /// where: - /// - `generics` defines type parameters - /// - `params` defines function parameters and their types - /// - `return-type` specifies the function return type - /// - `body` is the function implementation - /// - /// This function processes the arguments to create a function expression. - fn lower_fn(&mut self, call: CallExpr<'heap>) -> Option> { - if call.arguments.len() != 4 { - self.diagnostics.push(invalid_argument_length( - call.span, - SpecialFormKind::Fn, - &call.arguments, - &[4], - )); - - return None; - } - - let [generics, params, return_type, body] = - call.arguments.try_into().unwrap_or_else(|_| unreachable!()); - - let ((generics, params), return_type) = self - .lower_fn_generics(generics) - .zip(self.lower_fn_parameters(params)) - .zip(self.lower_expr_to_type(*return_type.value))?; - - let mut seen = FastHashMap::with_capacity_and_hasher( - generics.params.len().max(params.len()), - foldhash::fast::RandomState::default(), - ); - - for param in &generics.params { - if let Err(error) = seen.try_insert(param.name.value, param.name.span) { - self.diagnostics.push(duplicate_closure_generic( - param.name.span, - param.name.value.as_str(), - *error.entry.get(), - )); - } - } - - seen.clear(); - - for param in ¶ms { - if let Err(error) = seen.try_insert(param.name.value, param.name.span) { - self.diagnostics.push(duplicate_closure_parameter( - param.name.span, - param.name.value.as_str(), - *error.entry.get(), - )); - } - } - - let signature = ClosureSignature { - id: NodeId::PLACEHOLDER, - // TODO: ideally we'd like to merge the span of `generics`, `params`, and `return_type` - // into one. - span: call.span, - generics, - inputs: params, - output: Box::new_in(return_type, self.heap), - }; - - Some(ExprKind::Closure(ClosureExpr { - id: call.id, - span: call.span, - signature: Box::new_in(signature, self.heap), - body: body.value, - })) - } - - /// Lowers an input/2 special form to an `InputExpr` without a default value. - /// - /// The input/2 form has the syntax: `(input name type)` - /// and is transformed into an input expression that defines a required input. - fn lower_input_2(&mut self, call: CallExpr<'heap>) -> Option> { - let [name, r#type] = call - .arguments - .try_into() - .expect("The caller should've verified the length of the arguments"); - - let (name, r#type) = Option::zip( - self.lower_argument_to_ident(BindingMode::Input, name), - self.lower_expr_to_type(*r#type.value), - )?; - - Some(ExprKind::Input(InputExpr { - id: call.id, - span: call.span, - name, - r#type: Box::new_in(r#type, self.heap), - default: None, - })) - } - - /// Lowers an input/3 special form to an `InputExpr` with a default value. - /// - /// The input/3 form has the syntax: `(input name type default)` - /// and is transformed into an input expression with a default value. - fn lower_input_3(&mut self, call: CallExpr<'heap>) -> Option> { - let [name, r#type, default] = call - .arguments - .try_into() - .expect("The caller should've verified the length of the arguments"); - - let (name, r#type) = Option::zip( - self.lower_argument_to_ident(BindingMode::Input, name), - self.lower_expr_to_type(*r#type.value), - )?; - - Some(ExprKind::Input(InputExpr { - id: call.id, - span: call.span, - name, - r#type: Box::new_in(r#type, self.heap), - default: Some(default.value), - })) - } - - /// Lowers an input special form to the appropriate `InputExpr` variant. - /// - /// There are two forms of the `input` special form: - /// - input/2: `(input name type)` - defines a required input - /// - input/3: `(input name type default)` - defines an input with a default value - /// - /// This function validates the argument count and delegates to the appropriate - /// specialized lowering function. - fn lower_input(&mut self, call: CallExpr<'heap>) -> Option> { - if call.arguments.len() == 2 { - self.lower_input_2(call) - } else if call.arguments.len() == 3 { - self.lower_input_3(call) - } else { - self.diagnostics.push(invalid_argument_length( - call.span, - SpecialFormKind::Input, - &call.arguments, - &[2, 3], - )); - - None - } - } - - /// Lowers an access/2 special form to a `FieldExpr`. - /// - /// The access/2 form has the syntax: `(access object field)` - /// and is transformed into a field access expression that retrieves - /// the specified field from the object. - /// - /// This is equivalent to the dot notation `object.field` in many languages. - fn lower_access(&mut self, call: CallExpr<'heap>) -> Option> { - if call.arguments.len() != 2 { - self.diagnostics.push(invalid_argument_length( - call.span, - SpecialFormKind::Access, - &call.arguments, - &[2], - )); - - return None; - } - - let [body, field] = call.arguments.try_into().unwrap_or_else(|_| unreachable!()); - - let field = self.lower_argument_to_field(BindingMode::Access, field)?; - - Some(ExprKind::Field(FieldExpr { - id: call.id, - span: call.span, - value: body.value, - field, - })) - } - - /// Lowers an index/2 special form to an `IndexExpr`. - /// - /// The index/2 form has the syntax: `(index collection index)` - /// and is transformed into an index access expression that retrieves - /// the element at the specified index from the collection. - /// - /// This is equivalent to the bracket notation `collection[index]` in many languages. - fn lower_index(&mut self, call: CallExpr<'heap>) -> Option> { - if call.arguments.len() != 2 { - self.diagnostics.push(invalid_argument_length( - call.span, - SpecialFormKind::Index, - &call.arguments, - &[2], - )); - return None; - } - - let [body, index] = call.arguments.try_into().unwrap_or_else(|_| unreachable!()); - - Some(ExprKind::Index(IndexExpr { - id: call.id, - span: call.span, - value: body.value, - index: index.value, - })) - } -} - -impl<'heap> Visitor<'heap> for SpecialFormExpander<'heap> { - fn visit_expr(&mut self, expr: &mut Expr<'heap>) { - // First we walk the whole expression tree, and only then do we expand ourselves. - walk_expr(self, expr); - - let ExprKind::Call(call) = &mut expr.kind else { - return; - }; - - let ExprKind::Path(path) = &call.function.kind else { - return; - }; - - // We're not checking for arguments, as these will result in an error later - if !path.starts_with_absolute_path(["kernel", "special_form"], false) { - return; - } - - // Anything below here means that we're dealing with a special form, therefore anytime we - // error out we replace the kind with a dummy expression. This allows us to continue - // processing the rest of the expression tree during the different phases of lowering. - - let ExprKind::Call(call) = mem::replace(&mut expr.kind, ExprKind::Dummy) else { - // We're verified before that this is a call expression - unreachable!() - }; - - let ExprKind::Path(path) = &call.function.kind else { - // We're verified before that this is a path expression - unreachable!() - }; - - if !call.labeled_arguments.is_empty() { - self.diagnostics.push(labeled_arguments_not_supported( - call.span, - &call.labeled_arguments, - )); - - return; - } - - if path.segments.len() != 3 { - // Special form path is always exactly three segments long - self.diagnostics - .push(unknown_special_form_length(path.span, path)); - - return; - } - - if path.has_generic_arguments() { - let mut arguments = Vec::new(); - - for segment in &path.segments { - arguments.extend(&segment.arguments); - } - - self.diagnostics - .push(unknown_special_form_generics(&arguments)); - - return; - } - - let function = &path.segments[2].name; - - let Some(special_form) = SpecialFormKind::from_str(function.value.as_str()) else { - self.diagnostics - .push(unknown_special_form_name(path.span, path)); - - return; - }; - - let kind = match special_form { - SpecialFormKind::If => self.lower_if(call), - SpecialFormKind::As => self.lower_as(call), - SpecialFormKind::Let => self.lower_let(call), - SpecialFormKind::Type => self.lower_type(call), - SpecialFormKind::Newtype => self.lower_newtype(call), - SpecialFormKind::Use => self.lower_use(call), - SpecialFormKind::Fn => self.lower_fn(call), - SpecialFormKind::Input => self.lower_input(call), - SpecialFormKind::Access => self.lower_access(call), - SpecialFormKind::Index => self.lower_index(call), - }; - - if let Some(kind) = kind { - expr.kind = kind; - } - } -} - -#[cfg(test)] -mod tests { - use enum_iterator::all; - - use super::*; - - #[test] - fn special_form_name_bidirectional() { - // Verify that for every variant, from_str(as_str(variant)) == Some(variant) - for variant in all::() { - let name = variant.as_str(); - let parsed = SpecialFormKind::from_str(name); - - assert_eq!(parsed, Some(variant)); - } - } -} From 997e4205a2b1edaef084dcd41cefa818855e7a8b Mon Sep 17 00:00:00 2001 From: Bilal Mahmoud <7252775+indietyp@users.noreply.github.com> Date: Mon, 15 Jun 2026 18:47:08 +0200 Subject: [PATCH 45/55] feat: make errors more predictable --- .../hashql/ast/src/lower/expander/error.rs | 8 +++-- .../hashql/ast/src/lower/expander/let.rs | 17 ++++++++-- .../hashql/ast/src/lower/expander/newtype.rs | 20 ++++++++++-- .../hashql/ast/src/lower/expander/type.rs | 13 ++++++-- .../hashql/ast/src/lower/expander/use.rs | 28 ++++++++++------- .../let-argument-not-ident.jsonc | 6 ++-- .../let-argument-not-ident.stderr | 16 ++++++++++ .../let-argument-not-path.jsonc | 2 +- .../newtype-collect-all-errors.jsonc | 2 ++ .../newtype-collect-all-errors.stderr | 31 +++++++++++++++++++ .../type-collect-all-errors.jsonc | 2 ++ .../type-collect-all-errors.stderr | 31 +++++++++++++++++++ .../use-glob-not-ident.jsonc | 1 + .../use-glob-not-ident.stderr | 23 ++++++++++++++ .../use-glob-not-star.jsonc | 1 + .../use-glob-not-star.stderr | 23 ++++++++++++++ .../special-form-expander/use-literal.jsonc | 1 + .../special-form-expander/use-literal.stderr | 23 ++++++++++++++ 18 files changed, 223 insertions(+), 25 deletions(-) diff --git a/libs/@local/hashql/ast/src/lower/expander/error.rs b/libs/@local/hashql/ast/src/lower/expander/error.rs index 854c7525a66..009662dd08e 100644 --- a/libs/@local/hashql/ast/src/lower/expander/error.rs +++ b/libs/@local/hashql/ast/src/lower/expander/error.rs @@ -11,7 +11,7 @@ use hashql_core::{ namespace::ModuleNamespace, }, span::{SpanId, Spanned}, - symbol::Symbol, + symbol::{Symbol, sym}, }; use hashql_diagnostics::{ Diagnostic, DiagnosticIssues, Label, Patch, Suggestions, @@ -382,11 +382,13 @@ struct SpellingSuggestions<'heap, I> { impl<'heap, I> SpellingSuggestions<'heap, I> { fn emit(self, diagnostic: &mut ExpanderDiagnostic) -> Vec> where - I: IntoIterator> + Clone, + I: IntoIterator, IntoIter: Clone>, { let similar = did_you_mean( self.name.value, - self.candidates, + self.candidates + .into_iter() + .filter(|candidate| *candidate != sym::dummy), Some(self.top_n), self.cutoff, ); diff --git a/libs/@local/hashql/ast/src/lower/expander/let.rs b/libs/@local/hashql/ast/src/lower/expander/let.rs index f9f431c19ae..ca99fd19f63 100644 --- a/libs/@local/hashql/ast/src/lower/expander/let.rs +++ b/libs/@local/hashql/ast/src/lower/expander/let.rs @@ -1,6 +1,11 @@ use core::mem; -use hashql_core::{heap::BumpAllocator, module::item::Item, span::SpanId, symbol::Ident}; +use hashql_core::{ + heap::BumpAllocator, + module::item::Item, + span::SpanId, + symbol::{Ident, sym}, +}; use super::{BindingKind, CurrentItem, Expander, r#type::lower_expr_to_type}; use crate::{ @@ -37,12 +42,14 @@ fn lower_let_impl<'heap, S>( where S: BumpAllocator, { - let Some(name) = argument_to_ident(name) else { + let name = if let Some(name) = argument_to_ident(name) { + name + } else { expander .diagnostics .push(error::invalid_let_binding_name(name)); - return Expr::dummy(); + Ident::synthetic(sym::dummy) }; let item = expander.visit(&mut value.value); @@ -95,6 +102,10 @@ where None }; + if name.value == sym::dummy { + return Expr::dummy(); + } + Expr { id: NodeId::PLACEHOLDER, span, diff --git a/libs/@local/hashql/ast/src/lower/expander/newtype.rs b/libs/@local/hashql/ast/src/lower/expander/newtype.rs index 1b0b6704d73..15dbf8d0b61 100644 --- a/libs/@local/hashql/ast/src/lower/expander/newtype.rs +++ b/libs/@local/hashql/ast/src/lower/expander/newtype.rs @@ -1,6 +1,11 @@ use core::mem; -use hashql_core::{heap::BumpAllocator, module::Universe, span::SpanId}; +use hashql_core::{ + heap::{self, BumpAllocator}, + module::Universe, + span::SpanId, + symbol::{Ident, sym}, +}; use super::Expander; use crate::{ @@ -25,12 +30,17 @@ fn lower_newtype_impl<'heap, S>( where S: BumpAllocator, { - let Some((name, constraints)) = argument_to_generic_ident(expander, name) else { + let (name, constraints) = if let Some(result) = argument_to_generic_ident(expander, name) { + result + } else { expander .diagnostics .push(error::invalid_newtype_binding_name(name)); - return Expr::dummy(); + ( + Ident::synthetic(sym::dummy), + heap::Vec::new_in(expander.heap), + ) }; let mut value = mem::replace(&mut value.value, Expr::dummy()); @@ -68,6 +78,10 @@ where }, ); + if name.value == sym::dummy { + return Expr::dummy(); + } + expr } diff --git a/libs/@local/hashql/ast/src/lower/expander/type.rs b/libs/@local/hashql/ast/src/lower/expander/type.rs index fb328096e42..0c40780fca8 100644 --- a/libs/@local/hashql/ast/src/lower/expander/type.rs +++ b/libs/@local/hashql/ast/src/lower/expander/type.rs @@ -365,12 +365,17 @@ fn lower_type_impl<'heap, S>( where S: BumpAllocator, { - let Some((name, constraints)) = argument_to_generic_ident(expander, name) else { + let (name, constraints) = if let Some(result) = argument_to_generic_ident(expander, name) { + result + } else { expander .diagnostics .push(error::invalid_type_binding_name(name)); - return Expr::dummy(); + ( + Ident::synthetic(sym::dummy), + heap::Vec::new_in(expander.heap), + ) }; let mut value = mem::replace(&mut value.value, Expr::dummy()); @@ -434,6 +439,10 @@ where }, ); + if name.value == sym::dummy { + return Expr::dummy(); + } + expr } diff --git a/libs/@local/hashql/ast/src/lower/expander/use.rs b/libs/@local/hashql/ast/src/lower/expander/use.rs index 98739e4b180..f8e2a9d77fc 100644 --- a/libs/@local/hashql/ast/src/lower/expander/use.rs +++ b/libs/@local/hashql/ast/src/lower/expander/use.rs @@ -277,22 +277,28 @@ fn lower_use_impl<'heap, S>( where S: BumpAllocator, { - let path = mem::replace(&mut path.value, Expr::dummy()); - let ExprKind::Path(path) = path.kind else { + let path_expr = mem::replace(&mut path.value, Expr::dummy()); + let path = if let ExprKind::Path(path) = path_expr.kind { + if path.has_generic_arguments() { + expander + .diagnostics + .push(error::use_path_generic_arguments(path.span)); + // non-fatal: continue with the path + } + Some(path) + } else { expander .diagnostics - .push(error::invalid_use_path(path.span)); - return Expr::dummy(); + .push(error::invalid_use_path(path_expr.span)); + None }; - if path.has_generic_arguments() { - expander - .diagnostics - .push(error::use_path_generic_arguments(path.span)); - // we continue here, because it's not fatal - } + let imports = lower_imports(expander, imports); - let Some(imports) = lower_imports(expander, imports) else { + // If either path or imports are invalid, we still visit the body + // to collect diagnostics from nested expressions. + let Some((path, imports)) = path.zip(imports) else { + expander.visit(&mut body.value); return Expr::dummy(); }; diff --git a/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/let-argument-not-ident.jsonc b/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/let-argument-not-ident.jsonc index 41617073b30..90300dd49f2 100644 --- a/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/let-argument-not-ident.jsonc +++ b/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/let-argument-not-ident.jsonc @@ -8,12 +8,14 @@ [ "::kernel::special_form::let", "x::A", - "y::B", + //~^ ERROR expected a simple identifier for the `let` binding name + { "#literal": true }, [ "::kernel::special_form::let", "::z", + //~^ ERROR expected a simple identifier for the `let` binding name { "#literal": true }, - ["+", "x", "y"] + ["+", { "#literal": true }, { "#literal": true }] ] ] ] diff --git a/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/let-argument-not-ident.stderr b/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/let-argument-not-ident.stderr index 21354b71a08..7e27162c781 100644 --- a/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/let-argument-not-ident.stderr +++ b/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/let-argument-not-ident.stderr @@ -1,3 +1,19 @@ +error[expander::invalid-binding-name]: Invalid binding name + ╭▸ +15 │ "::z", + │ ━━━ expected a simple identifier for the `let` binding name + │ + ├ help: write `(let name value body)` with a plain name such as `x` + ╰ note: the first argument to `let` introduces a new local binding and must be a plain identifier without path qualification or generic arguments + +error[expander::invalid-binding-name]: Invalid binding name + ╭▸ +10 │ "x::A", + │ ━━━━ expected a simple identifier for the `let` binding name + │ + ├ help: write `(let name value body)` with a plain name such as `x` + ╰ note: the first argument to `let` introduces a new local binding and must be a plain identifier without path qualification or generic arguments + error[expander::invalid-binding-name]: Invalid binding name ╭▸ 5 │ "Int", diff --git a/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/let-argument-not-path.jsonc b/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/let-argument-not-path.jsonc index 1bd16eaa126..70353a296e0 100644 --- a/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/let-argument-not-path.jsonc +++ b/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/let-argument-not-path.jsonc @@ -5,5 +5,5 @@ { "#literal": true }, //~^ ERROR expected a simple identifier for the `let` binding name { "#literal": true }, - ["+", "x", "x"] + ["+", { "#literal": true }, { "#literal": true }] ] diff --git a/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/newtype-collect-all-errors.jsonc b/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/newtype-collect-all-errors.jsonc index d6c559a4b0b..991c535608e 100644 --- a/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/newtype-collect-all-errors.jsonc +++ b/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/newtype-collect-all-errors.jsonc @@ -2,3 +2,5 @@ //@ description: We should collect all errors when lowering newtype/3, and not only report the first one. ["::kernel::special_form::newtype", "::x", { "#literal": 1 }, "x"] //~^ ERROR expected a type name for the `newtype` binding +//~| ERROR cannot use a literal value as a type +//~| ERROR cannot find value `x` in this scope diff --git a/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/newtype-collect-all-errors.stderr b/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/newtype-collect-all-errors.stderr index 6bfb4ce07e3..7b8d68ece10 100644 --- a/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/newtype-collect-all-errors.stderr +++ b/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/newtype-collect-all-errors.stderr @@ -1,3 +1,34 @@ +error[expander::invalid-expression-in-type-position]: Invalid expression in type position + ╭▸ +3 │ ["::kernel::special_form::newtype", "::x", { "#literal": 1 }, "x"] + │ ━━━━━━━━━━━━━━━━━ cannot use a literal value as a type + │ + ├ help: replace this with a type path, tuple type, struct type, `_`, `(| ...)`, or `(& ...)` + ╰ note: valid type forms are: type paths like `String`, tuple types like `(Int, String)`, struct types like `(name: String)`, `_` for inference, unions `(| ...)`, and intersections `(& ...)` + +error[expander::unresolved-variable]: Unresolved variable + ╭▸ +3 │ ["::kernel::special_form::newtype", "::x", { "#literal": 1 }, "x"] + │ ━ cannot find value `x` in this scope + │ + ╰ note: this could be a typo, a name used outside its scope, or a missing declaration; if it is a function or type from another module, you may need to import it first +help: a similar imported name exists + ╭╴ +3 - ["::kernel::special_form::newtype", "::x", { "#literal": 1 }, "x"] +3 + ["::kernel::special_form::newtype", "::x", { "#literal": 1 }, "~"] + ├╴ +3 - ["::kernel::special_form::newtype", "::x", { "#literal": 1 }, "x"] +3 + ["::kernel::special_form::newtype", "::x", { "#literal": 1 }, "↑"] + ├╴ +3 - ["::kernel::special_form::newtype", "::x", { "#literal": 1 }, "x"] +3 + ["::kernel::special_form::newtype", "::x", { "#literal": 1 }, "√"] + ├╴ +3 - ["::kernel::special_form::newtype", "::x", { "#literal": 1 }, "x"] +3 + ["::kernel::special_form::newtype", "::x", { "#literal": 1 }, "∛"] + ├╴ +3 │ ["::kernel::special_form::newtype", "::x", { "#literal": 1 }, "index"] + ╰╴ ++++ + error[expander::invalid-binding-name]: Invalid binding name ╭▸ 3 │ ["::kernel::special_form::newtype", "::x", { "#literal": 1 }, "x"] diff --git a/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/type-collect-all-errors.jsonc b/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/type-collect-all-errors.jsonc index 2f4a41c7687..8ec8655441b 100644 --- a/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/type-collect-all-errors.jsonc +++ b/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/type-collect-all-errors.jsonc @@ -2,3 +2,5 @@ //@ description: We should collect all errors when lowering type/3, and not only report the first one. ["::kernel::special_form::type", "::x", { "#literal": 1 }, "x"] //~^ ERROR expected a type name for the `type` binding +//~| ERROR cannot use a literal value as a type +//~| ERROR cannot find value `x` in this scope diff --git a/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/type-collect-all-errors.stderr b/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/type-collect-all-errors.stderr index 4ce28048470..6bae582536e 100644 --- a/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/type-collect-all-errors.stderr +++ b/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/type-collect-all-errors.stderr @@ -1,3 +1,34 @@ +error[expander::invalid-expression-in-type-position]: Invalid expression in type position + ╭▸ +3 │ ["::kernel::special_form::type", "::x", { "#literal": 1 }, "x"] + │ ━━━━━━━━━━━━━━━━━ cannot use a literal value as a type + │ + ├ help: replace this with a type path, tuple type, struct type, `_`, `(| ...)`, or `(& ...)` + ╰ note: valid type forms are: type paths like `String`, tuple types like `(Int, String)`, struct types like `(name: String)`, `_` for inference, unions `(| ...)`, and intersections `(& ...)` + +error[expander::unresolved-variable]: Unresolved variable + ╭▸ +3 │ ["::kernel::special_form::type", "::x", { "#literal": 1 }, "x"] + │ ━ cannot find value `x` in this scope + │ + ╰ note: this could be a typo, a name used outside its scope, or a missing declaration; if it is a function or type from another module, you may need to import it first +help: a similar imported name exists + ╭╴ +3 - ["::kernel::special_form::type", "::x", { "#literal": 1 }, "x"] +3 + ["::kernel::special_form::type", "::x", { "#literal": 1 }, "~"] + ├╴ +3 - ["::kernel::special_form::type", "::x", { "#literal": 1 }, "x"] +3 + ["::kernel::special_form::type", "::x", { "#literal": 1 }, "↑"] + ├╴ +3 - ["::kernel::special_form::type", "::x", { "#literal": 1 }, "x"] +3 + ["::kernel::special_form::type", "::x", { "#literal": 1 }, "√"] + ├╴ +3 - ["::kernel::special_form::type", "::x", { "#literal": 1 }, "x"] +3 + ["::kernel::special_form::type", "::x", { "#literal": 1 }, "∛"] + ├╴ +3 │ ["::kernel::special_form::type", "::x", { "#literal": 1 }, "index"] + ╰╴ ++++ + error[expander::invalid-binding-name]: Invalid binding name ╭▸ 3 │ ["::kernel::special_form::type", "::x", { "#literal": 1 }, "x"] diff --git a/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/use-glob-not-ident.jsonc b/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/use-glob-not-ident.jsonc index e700391f1a8..0b095d1b3f0 100644 --- a/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/use-glob-not-ident.jsonc +++ b/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/use-glob-not-ident.jsonc @@ -6,4 +6,5 @@ "::core::math::X", //~^ ERROR expected `*`, a tuple of names, or a struct of aliases "x" + //~^ ERROR cannot find value `x` in this scope ] diff --git a/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/use-glob-not-ident.stderr b/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/use-glob-not-ident.stderr index c0aa7a50c21..08747c34738 100644 --- a/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/use-glob-not-ident.stderr +++ b/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/use-glob-not-ident.stderr @@ -1,3 +1,26 @@ +error[expander::unresolved-variable]: Unresolved variable + ╭▸ +8 │ "x" + │ ━ cannot find value `x` in this scope + │ + ╰ note: this could be a typo, a name used outside its scope, or a missing declaration; if it is a function or type from another module, you may need to import it first +help: a similar imported name exists + ╭╴ +8 - "x" +8 + "~" + ├╴ +8 - "x" +8 + "↑" + ├╴ +8 - "x" +8 + "√" + ├╴ +8 - "x" +8 + "∛" + ├╴ +8 │ "index" + ╰╴ ++++ + error[expander::invalid-use-imports]: Invalid use imports ╭▸ 6 │ "::core::math::X", diff --git a/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/use-glob-not-star.jsonc b/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/use-glob-not-star.jsonc index dc6dc1ce675..c94aaf3a59f 100644 --- a/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/use-glob-not-star.jsonc +++ b/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/use-glob-not-star.jsonc @@ -6,4 +6,5 @@ "X", //~^ ERROR expected `*`, a tuple of names, or a struct of aliases "x" + //~^ ERROR cannot find value `x` in this scope ] diff --git a/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/use-glob-not-star.stderr b/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/use-glob-not-star.stderr index 112cf61cdc8..fb876c95f42 100644 --- a/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/use-glob-not-star.stderr +++ b/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/use-glob-not-star.stderr @@ -1,3 +1,26 @@ +error[expander::unresolved-variable]: Unresolved variable + ╭▸ +8 │ "x" + │ ━ cannot find value `x` in this scope + │ + ╰ note: this could be a typo, a name used outside its scope, or a missing declaration; if it is a function or type from another module, you may need to import it first +help: a similar imported name exists + ╭╴ +8 - "x" +8 + "~" + ├╴ +8 - "x" +8 + "↑" + ├╴ +8 - "x" +8 + "√" + ├╴ +8 - "x" +8 + "∛" + ├╴ +8 │ "index" + ╰╴ ++++ + error[expander::invalid-use-imports]: Invalid use imports ╭▸ 6 │ "X", diff --git a/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/use-literal.jsonc b/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/use-literal.jsonc index 37c379ce908..1ce484a6dee 100644 --- a/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/use-literal.jsonc +++ b/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/use-literal.jsonc @@ -6,4 +6,5 @@ { "#literal": 1 }, //~^ ERROR expected `*`, a tuple of names, or a struct of aliases "x" + //~^ ERROR cannot find value `x` in this scope ] diff --git a/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/use-literal.stderr b/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/use-literal.stderr index ab7efef0756..e53366834cd 100644 --- a/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/use-literal.stderr +++ b/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/use-literal.stderr @@ -1,3 +1,26 @@ +error[expander::unresolved-variable]: Unresolved variable + ╭▸ +8 │ "x" + │ ━ cannot find value `x` in this scope + │ + ╰ note: this could be a typo, a name used outside its scope, or a missing declaration; if it is a function or type from another module, you may need to import it first +help: a similar imported name exists + ╭╴ +8 - "x" +8 + "~" + ├╴ +8 - "x" +8 + "↑" + ├╴ +8 - "x" +8 + "√" + ├╴ +8 - "x" +8 + "∛" + ├╴ +8 │ "index" + ╰╴ ++++ + error[expander::invalid-use-imports]: Invalid use imports ╭▸ 6 │ { "#literal": 1 }, From 345d9269e246bb11969c61b42bb23c101f26bd9a Mon Sep 17 00:00:00 2001 From: Bilal Mahmoud <7252775+indietyp@users.noreply.github.com> Date: Tue, 16 Jun 2026 10:33:03 +0200 Subject: [PATCH 46/55] feat: expander --- .../hashql/ast/src/lower/expander/error.rs | 30 +---------- .../hashql/ast/src/lower/expander/input.rs | 18 +++++-- .../hashql/ast/src/lower/expander/mod.rs | 52 +++++++++---------- libs/@local/hashql/ast/src/lower/mod.rs | 12 ++--- .../ui/lower/expander/access-field-list.jsonc | 8 +++ .../lower/expander/access-field-list.stderr | 6 +++ .../generics-multiple-module-segments.jsonc | 4 ++ .../generics-multiple-module-segments.stderr | 9 ++++ .../lower/expander/input-invalid-name.jsonc | 4 ++ .../lower/expander/input-invalid-name.stderr | 7 +++ .../lower/expander/input-name-is-path.jsonc | 4 ++ .../lower/expander/input-name-is-path.stderr | 7 +++ .../intrinsic-generic-arguments.jsonc | 9 ++++ .../intrinsic-generic-arguments.stderr | 6 +++ .../intrinsic-type-generic-arguments.jsonc | 9 ++++ .../intrinsic-type-generic-arguments.stderr | 6 +++ .../expander/labeled-argument-access.jsonc | 9 ++++ .../expander/labeled-argument-access.stderr | 6 +++ .../lower/expander/labeled-argument-as.jsonc | 9 ++++ .../lower/expander/labeled-argument-as.stderr | 6 +++ .../lower/expander/labeled-argument-fn.jsonc | 13 +++++ .../lower/expander/labeled-argument-fn.stderr | 6 +++ .../expander/labeled-argument-index.jsonc | 9 ++++ .../expander/labeled-argument-index.stderr | 6 +++ .../expander/labeled-argument-input.jsonc | 9 ++++ .../expander/labeled-argument-input.stderr | 6 +++ .../lower/expander/labeled-argument-let.jsonc | 10 ++++ .../expander/labeled-argument-let.stderr | 7 +++ .../expander/labeled-argument-newtype.jsonc | 10 ++++ .../expander/labeled-argument-newtype.stderr | 6 +++ .../expander/labeled-argument-type.jsonc | 10 ++++ .../expander/labeled-argument-type.stderr | 6 +++ .../lower/expander/labeled-argument-use.jsonc | 10 ++++ .../expander/labeled-argument-use.stderr | 6 +++ .../expander/let-intrinsic-swallow.jsonc | 8 +++ .../expander/let-intrinsic-swallow.stdout | 17 ++++++ .../let-intrinsic-type-annotation.jsonc | 10 ++++ .../let-intrinsic-type-annotation.stderr | 10 ++++ .../ui/lower/expander/package-not-found.jsonc | 4 ++ .../lower/expander/package-not-found.stderr | 10 ++++ .../let-3-alias.jsonc | 2 +- .../pre-expansion-name-resolver/let-4.jsonc | 8 ++- .../let-absolute.jsonc | 2 +- .../resolve-symbol.jsonc | 2 +- .../type-3-alias.jsonc | 2 +- .../fn-generics-struct.jsonc | 2 +- .../expander/type-call-labeled-argument.jsonc | 9 ++++ .../type-call-labeled-argument.stderr | 7 +++ .../expander/type-call-not-constructor.jsonc | 9 ++++ .../expander/type-call-not-constructor.stderr | 10 ++++ .../type-generic-constraint-duplicate.jsonc | 9 ++++ .../type-generic-constraint-duplicate.stderr | 8 +++ .../expander/type-intrinsic-swallow.jsonc | 8 +++ .../expander/type-intrinsic-swallow.stdout | 23 ++++++++ .../expander/use-duplicate-binding.jsonc | 9 ++++ .../expander/use-duplicate-binding.stderr | 8 +++ .../ui/lower/expander/use-invalid-path.jsonc | 9 ++++ .../ui/lower/expander/use-invalid-path.stderr | 6 +++ .../ui/lower/name-mangler/absolute-path.jsonc | 7 ++- 59 files changed, 462 insertions(+), 72 deletions(-) create mode 100644 libs/@local/hashql/ast/tests/ui/lower/expander/access-field-list.jsonc create mode 100644 libs/@local/hashql/ast/tests/ui/lower/expander/access-field-list.stderr create mode 100644 libs/@local/hashql/ast/tests/ui/lower/expander/generics-multiple-module-segments.jsonc create mode 100644 libs/@local/hashql/ast/tests/ui/lower/expander/generics-multiple-module-segments.stderr create mode 100644 libs/@local/hashql/ast/tests/ui/lower/expander/input-invalid-name.jsonc create mode 100644 libs/@local/hashql/ast/tests/ui/lower/expander/input-invalid-name.stderr create mode 100644 libs/@local/hashql/ast/tests/ui/lower/expander/input-name-is-path.jsonc create mode 100644 libs/@local/hashql/ast/tests/ui/lower/expander/input-name-is-path.stderr create mode 100644 libs/@local/hashql/ast/tests/ui/lower/expander/intrinsic-generic-arguments.jsonc create mode 100644 libs/@local/hashql/ast/tests/ui/lower/expander/intrinsic-generic-arguments.stderr create mode 100644 libs/@local/hashql/ast/tests/ui/lower/expander/intrinsic-type-generic-arguments.jsonc create mode 100644 libs/@local/hashql/ast/tests/ui/lower/expander/intrinsic-type-generic-arguments.stderr create mode 100644 libs/@local/hashql/ast/tests/ui/lower/expander/labeled-argument-access.jsonc create mode 100644 libs/@local/hashql/ast/tests/ui/lower/expander/labeled-argument-access.stderr create mode 100644 libs/@local/hashql/ast/tests/ui/lower/expander/labeled-argument-as.jsonc create mode 100644 libs/@local/hashql/ast/tests/ui/lower/expander/labeled-argument-as.stderr create mode 100644 libs/@local/hashql/ast/tests/ui/lower/expander/labeled-argument-fn.jsonc create mode 100644 libs/@local/hashql/ast/tests/ui/lower/expander/labeled-argument-fn.stderr create mode 100644 libs/@local/hashql/ast/tests/ui/lower/expander/labeled-argument-index.jsonc create mode 100644 libs/@local/hashql/ast/tests/ui/lower/expander/labeled-argument-index.stderr create mode 100644 libs/@local/hashql/ast/tests/ui/lower/expander/labeled-argument-input.jsonc create mode 100644 libs/@local/hashql/ast/tests/ui/lower/expander/labeled-argument-input.stderr create mode 100644 libs/@local/hashql/ast/tests/ui/lower/expander/labeled-argument-let.jsonc create mode 100644 libs/@local/hashql/ast/tests/ui/lower/expander/labeled-argument-let.stderr create mode 100644 libs/@local/hashql/ast/tests/ui/lower/expander/labeled-argument-newtype.jsonc create mode 100644 libs/@local/hashql/ast/tests/ui/lower/expander/labeled-argument-newtype.stderr create mode 100644 libs/@local/hashql/ast/tests/ui/lower/expander/labeled-argument-type.jsonc create mode 100644 libs/@local/hashql/ast/tests/ui/lower/expander/labeled-argument-type.stderr create mode 100644 libs/@local/hashql/ast/tests/ui/lower/expander/labeled-argument-use.jsonc create mode 100644 libs/@local/hashql/ast/tests/ui/lower/expander/labeled-argument-use.stderr create mode 100644 libs/@local/hashql/ast/tests/ui/lower/expander/let-intrinsic-swallow.jsonc create mode 100644 libs/@local/hashql/ast/tests/ui/lower/expander/let-intrinsic-swallow.stdout create mode 100644 libs/@local/hashql/ast/tests/ui/lower/expander/let-intrinsic-type-annotation.jsonc create mode 100644 libs/@local/hashql/ast/tests/ui/lower/expander/let-intrinsic-type-annotation.stderr create mode 100644 libs/@local/hashql/ast/tests/ui/lower/expander/package-not-found.jsonc create mode 100644 libs/@local/hashql/ast/tests/ui/lower/expander/package-not-found.stderr create mode 100644 libs/@local/hashql/ast/tests/ui/lower/expander/type-call-labeled-argument.jsonc create mode 100644 libs/@local/hashql/ast/tests/ui/lower/expander/type-call-labeled-argument.stderr create mode 100644 libs/@local/hashql/ast/tests/ui/lower/expander/type-call-not-constructor.jsonc create mode 100644 libs/@local/hashql/ast/tests/ui/lower/expander/type-call-not-constructor.stderr create mode 100644 libs/@local/hashql/ast/tests/ui/lower/expander/type-generic-constraint-duplicate.jsonc create mode 100644 libs/@local/hashql/ast/tests/ui/lower/expander/type-generic-constraint-duplicate.stderr create mode 100644 libs/@local/hashql/ast/tests/ui/lower/expander/type-intrinsic-swallow.jsonc create mode 100644 libs/@local/hashql/ast/tests/ui/lower/expander/type-intrinsic-swallow.stdout create mode 100644 libs/@local/hashql/ast/tests/ui/lower/expander/use-duplicate-binding.jsonc create mode 100644 libs/@local/hashql/ast/tests/ui/lower/expander/use-duplicate-binding.stderr create mode 100644 libs/@local/hashql/ast/tests/ui/lower/expander/use-invalid-path.jsonc create mode 100644 libs/@local/hashql/ast/tests/ui/lower/expander/use-invalid-path.stderr diff --git a/libs/@local/hashql/ast/src/lower/expander/error.rs b/libs/@local/hashql/ast/src/lower/expander/error.rs index 009662dd08e..83bcd3ff937 100644 --- a/libs/@local/hashql/ast/src/lower/expander/error.rs +++ b/libs/@local/hashql/ast/src/lower/expander/error.rs @@ -37,11 +37,6 @@ const EMPTY_PATH: TerminalDiagnosticCategory = TerminalDiagnosticCategory { name: "Empty path", }; -const ABSOLUTE_PATH_MISMATCH: TerminalDiagnosticCategory = TerminalDiagnosticCategory { - id: "absolute-path-mismatch", - name: "Absolute path length mismatch", -}; - const GENERIC_ARGUMENTS_IN_MODULE: TerminalDiagnosticCategory = TerminalDiagnosticCategory { id: "generic-arguments-in-module", name: "Generic arguments in module path", @@ -236,7 +231,6 @@ const USE_PATH_GENERIC_ARGUMENTS: TerminalDiagnosticCategory = TerminalDiagnosti #[derive(Debug, Copy, Clone, PartialEq, Eq, Hash)] pub enum ExpanderDiagnosticCategory { EmptyPath, - AbsolutePathMismatch, GenericArgumentsInModule, UnresolvedVariable, PackageNotFound, @@ -289,7 +283,6 @@ impl DiagnosticCategory for ExpanderDiagnosticCategory { fn subcategory(&self) -> Option<&dyn DiagnosticCategory> { match self { Self::EmptyPath => Some(&EMPTY_PATH), - Self::AbsolutePathMismatch => Some(&ABSOLUTE_PATH_MISMATCH), Self::GenericArgumentsInModule => Some(&GENERIC_ARGUMENTS_IN_MODULE), Self::UnresolvedVariable => Some(&UNRESOLVED_VARIABLE), Self::PackageNotFound => Some(&PACKAGE_NOT_FOUND), @@ -411,6 +404,7 @@ impl<'heap, I> SpellingSuggestions<'heap, I> { } } +#[coverage(off)] // An empty path should not be possible to be constructed inside the CST. pub(crate) fn empty_path(span: SpanId) -> ExpanderDiagnostic { let mut diagnostic = Diagnostic::new(ExpanderDiagnosticCategory::EmptyPath, Severity::Bug) .primary(Label::new(span, "path has no segments")); @@ -422,28 +416,6 @@ pub(crate) fn empty_path(span: SpanId) -> ExpanderDiagnostic { diagnostic } -pub(crate) fn absolute_path_mismatch( - path_span: SpanId, - path_length: usize, - absolute_length: usize, -) -> ExpanderDiagnostic { - let mut diagnostic = Diagnostic::new( - ExpanderDiagnosticCategory::AbsolutePathMismatch, - Severity::Bug, - ) - .primary(Label::new( - path_span, - format!("path has {path_length} segments but resolved to only {absolute_length}"), - )); - - diagnostic.add_message(Message::note( - "expansion can only prepend omitted ancestors, so the resolved absolute path must be at \ - least as long as the user's path", - )); - - diagnostic -} - pub(crate) fn generic_arguments_in_module( module_segments: &[PathSegment<'_>], ) -> Option { diff --git a/libs/@local/hashql/ast/src/lower/expander/input.rs b/libs/@local/hashql/ast/src/lower/expander/input.rs index da62130a191..9a2992610b6 100644 --- a/libs/@local/hashql/ast/src/lower/expander/input.rs +++ b/libs/@local/hashql/ast/src/lower/expander/input.rs @@ -1,6 +1,11 @@ use core::mem; -use hashql_core::{heap::BumpAllocator, module::Universe, span::SpanId, symbol::Ident}; +use hashql_core::{ + heap::BumpAllocator, + module::Universe, + span::SpanId, + symbol::{Ident, sym}, +}; use super::Expander; use crate::{ @@ -32,11 +37,14 @@ fn lower_input_impl<'heap, S>( where S: BumpAllocator, { - let Some(name) = argument_to_ident(name) else { + let name = if let Some(name) = argument_to_ident(name) { + name + } else { expander .diagnostics .push(error::invalid_input_binding_name(name)); - return Expr::dummy(); + + Ident::synthetic(sym::dummy) }; let mut type_expr = mem::replace(&mut r#type.value, Expr::dummy()); @@ -51,6 +59,10 @@ where Box::new_in(value, expander.heap) }); + if name.value == sym::dummy { + return Expr::dummy(); + } + Expr { id: NodeId::PLACEHOLDER, span, diff --git a/libs/@local/hashql/ast/src/lower/expander/mod.rs b/libs/@local/hashql/ast/src/lower/expander/mod.rs index 990b6c3834d..85211beea9f 100644 --- a/libs/@local/hashql/ast/src/lower/expander/mod.rs +++ b/libs/@local/hashql/ast/src/lower/expander/mod.rs @@ -137,7 +137,7 @@ impl<'env, 'heap, S> Expander<'env, 'heap, S> { .iter() .find(|item| item.name == sym::special_form) else { - panic!("kernel module does not contain the special form item"); + unreachable!("kernel module should always contain the special form module"); }; Self { @@ -363,36 +363,34 @@ where } let absolute_path = item.absolute_path_rev(self.namespace.registry()); - if absolute_path.len() < path.segments.len() { - self.diagnostics.push(error::absolute_path_mismatch( - path.span, - path.segments.len(), - absolute_path.len(), - )); - self.trampoline = Some(node::expr::Expr::dummy()); - - return; - } - // We must pad the segments with placeholders so that the path segments match the absolute - // path - let padding = absolute_path.len() - path.segments.len(); - let padding_span = path.segments[0].span; + if absolute_path.len() >= path.segments.len() { + // The canonical path is longer (or equal): pad with placeholder segments, + // rotate the originals into position, then fill in the canonical names. + let padding = absolute_path.len() - path.segments.len(); + let padding_span = path.segments[0].span; - path.segments.extend(core::iter::repeat_n( - node::path::PathSegment { - id: NodeId::PLACEHOLDER, - span: padding_span, - name: Ident { + path.segments.extend(core::iter::repeat_n( + node::path::PathSegment { + id: NodeId::PLACEHOLDER, span: padding_span, - value: sym::dummy, - kind: hashql_core::symbol::IdentKind::Lexical, + name: Ident { + span: padding_span, + value: sym::dummy, + kind: hashql_core::symbol::IdentKind::Lexical, + }, + arguments: heap::Vec::new_in(self.heap), }, - arguments: heap::Vec::new_in(self.heap), - }, - padding, - )); - path.segments.rotate_right(padding); + padding, + )); + path.segments.rotate_right(padding); + } else { + // The canonical path is shorter (re-export through a longer path): + // truncate the extra leading segments. + let excess = path.segments.len() - absolute_path.len(); + path.segments.rotate_left(excess); + path.segments.truncate(absolute_path.len()); + } for (segment, name) in path.segments.iter_mut().rev().zip(absolute_path) { segment.name.value = name; diff --git a/libs/@local/hashql/ast/src/lower/mod.rs b/libs/@local/hashql/ast/src/lower/mod.rs index 35dfb11cb6d..dc913f8022b 100644 --- a/libs/@local/hashql/ast/src/lower/mod.rs +++ b/libs/@local/hashql/ast/src/lower/mod.rs @@ -28,16 +28,16 @@ //! # Examples //! //! ```rust -//! use hashql_ast::lowering::lower; +//! use hashql_ast::lower::lower; //! use hashql_core::{ //! r#type::environment::Environment, //! module::ModuleRegistry, //! symbol::Symbol, //! }; //! -//! # fn example<'heap>(env: &Environment<'heap>, registry: &ModuleRegistry<'heap>, mut expr: hashql_ast::node::expr::Expr<'heap>) { +//! # fn example<'heap>(env: &Environment<'heap>, registry: &ModuleRegistry<'heap>, mut expr: hashql_ast::node::expr::Expr<'heap>, scratch: &mut hashql_core::heap::Scratch) { //! let module_name = env.heap.intern_symbol("my_module"); -//! let result = lower(module_name, &mut expr, env, registry); +//! let result = lower(module_name, &mut expr, env, registry, scratch); //! //! match result { //! Ok(extracted_types) => { @@ -136,7 +136,7 @@ pub struct ExtractedTypes<'heap> { /// # Examples /// /// ```rust -/// use hashql_ast::lowering::lower; +/// use hashql_ast::lower::lower; /// use hashql_core::{ /// r#type::environment::Environment, /// module::ModuleRegistry, @@ -144,9 +144,9 @@ pub struct ExtractedTypes<'heap> { /// }; /// # use hashql_diagnostics::{Success, Failure}; /// -/// # fn example<'heap>(env: &Environment<'heap>, registry: &ModuleRegistry<'heap>, mut expr: hashql_ast::node::expr::Expr<'heap>) { +/// # fn example<'heap>(env: &Environment<'heap>, registry: &ModuleRegistry<'heap>, mut expr: hashql_ast::node::expr::Expr<'heap>, scratch: &mut hashql_core::heap::Scratch) { /// let module_name = env.heap.intern_symbol("my_module"); -/// let result = lower(module_name, &mut expr, env, registry); +/// let result = lower(module_name, &mut expr, env, registry, scratch); /// /// // Check for successful lowering /// match result { diff --git a/libs/@local/hashql/ast/tests/ui/lower/expander/access-field-list.jsonc b/libs/@local/hashql/ast/tests/ui/lower/expander/access-field-list.jsonc new file mode 100644 index 00000000000..bf26c697194 --- /dev/null +++ b/libs/@local/hashql/ast/tests/ui/lower/expander/access-field-list.jsonc @@ -0,0 +1,8 @@ +//@ run: fail +//@ description: field access with a list expression should error +[ + "::kernel::special_form::access", + { "#literal": "hello" }, + { "#list": [{ "#literal": 1 }] } + //~^ ERROR expected a field name or integer index +] diff --git a/libs/@local/hashql/ast/tests/ui/lower/expander/access-field-list.stderr b/libs/@local/hashql/ast/tests/ui/lower/expander/access-field-list.stderr new file mode 100644 index 00000000000..115d732fea7 --- /dev/null +++ b/libs/@local/hashql/ast/tests/ui/lower/expander/access-field-list.stderr @@ -0,0 +1,6 @@ +error[expander::invalid-access-field]: Invalid access field + ╭▸ +6 │ { "#list": [{ "#literal": 1 }] } + │ ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ expected a field name or integer index + │ + ╰ help: use a simple identifier like `name` or an integer like `0` for tuple fields \ No newline at end of file diff --git a/libs/@local/hashql/ast/tests/ui/lower/expander/generics-multiple-module-segments.jsonc b/libs/@local/hashql/ast/tests/ui/lower/expander/generics-multiple-module-segments.jsonc new file mode 100644 index 00000000000..f81ffe85e1c --- /dev/null +++ b/libs/@local/hashql/ast/tests/ui/lower/expander/generics-multiple-module-segments.jsonc @@ -0,0 +1,4 @@ +//@ run: fail +//@ description: generic arguments on multiple module segments should all be reported +["::kernel::special_form::if", { "#literal": true }, { "#literal": 1 }] +//~^ ERROR generic argument not allowed here diff --git a/libs/@local/hashql/ast/tests/ui/lower/expander/generics-multiple-module-segments.stderr b/libs/@local/hashql/ast/tests/ui/lower/expander/generics-multiple-module-segments.stderr new file mode 100644 index 00000000000..0580923a6ef --- /dev/null +++ b/libs/@local/hashql/ast/tests/ui/lower/expander/generics-multiple-module-segments.stderr @@ -0,0 +1,9 @@ +error[expander::generic-arguments-in-module]: Generic arguments in module path + ╭▸ +3 │ ["::kernel::special_form::if", { "#literal": true }, { "#literal": 1 }] + │ ┯━━━━━━ ────── neither is this + │ │ + │ generic argument not allowed here + │ + ├ help: move the generic arguments to the final segment of the path, or remove them + ╰ note: modules are not generic; only the final item in a path can be parameterized \ No newline at end of file diff --git a/libs/@local/hashql/ast/tests/ui/lower/expander/input-invalid-name.jsonc b/libs/@local/hashql/ast/tests/ui/lower/expander/input-invalid-name.jsonc new file mode 100644 index 00000000000..5200a4d7f25 --- /dev/null +++ b/libs/@local/hashql/ast/tests/ui/lower/expander/input-invalid-name.jsonc @@ -0,0 +1,4 @@ +//@ run: fail +//@ description: input binding name must be a simple identifier +["::kernel::special_form::input", { "#literal": 1 }, "Integer"] +//~^ ERROR expected a simple identifier for the `input` name diff --git a/libs/@local/hashql/ast/tests/ui/lower/expander/input-invalid-name.stderr b/libs/@local/hashql/ast/tests/ui/lower/expander/input-invalid-name.stderr new file mode 100644 index 00000000000..2903b3cbc85 --- /dev/null +++ b/libs/@local/hashql/ast/tests/ui/lower/expander/input-invalid-name.stderr @@ -0,0 +1,7 @@ +error[expander::invalid-binding-name]: Invalid binding name + ╭▸ +3 │ ["::kernel::special_form::input", { "#literal": 1 }, "Integer"] + │ ━━━━━━━━━━━━━━━━━ expected a simple identifier for the `input` name + │ + ├ help: write `(input name type)` with a plain name such as `user_id` + ╰ note: the first argument to `input` declares a named parameter and must be a plain identifier \ No newline at end of file diff --git a/libs/@local/hashql/ast/tests/ui/lower/expander/input-name-is-path.jsonc b/libs/@local/hashql/ast/tests/ui/lower/expander/input-name-is-path.jsonc new file mode 100644 index 00000000000..22bebe3f7df --- /dev/null +++ b/libs/@local/hashql/ast/tests/ui/lower/expander/input-name-is-path.jsonc @@ -0,0 +1,4 @@ +//@ run: fail +//@ description: input binding name must be a simple identifier, not a qualified path +["::kernel::special_form::input", "x::y", "Integer"] +//~^ ERROR expected a simple identifier for the `input` name diff --git a/libs/@local/hashql/ast/tests/ui/lower/expander/input-name-is-path.stderr b/libs/@local/hashql/ast/tests/ui/lower/expander/input-name-is-path.stderr new file mode 100644 index 00000000000..862e0bd8425 --- /dev/null +++ b/libs/@local/hashql/ast/tests/ui/lower/expander/input-name-is-path.stderr @@ -0,0 +1,7 @@ +error[expander::invalid-binding-name]: Invalid binding name + ╭▸ +3 │ ["::kernel::special_form::input", "x::y", "Integer"] + │ ━━━━ expected a simple identifier for the `input` name + │ + ├ help: write `(input name type)` with a plain name such as `user_id` + ╰ note: the first argument to `input` declares a named parameter and must be a plain identifier \ No newline at end of file diff --git a/libs/@local/hashql/ast/tests/ui/lower/expander/intrinsic-generic-arguments.jsonc b/libs/@local/hashql/ast/tests/ui/lower/expander/intrinsic-generic-arguments.jsonc new file mode 100644 index 00000000000..f779863b7fa --- /dev/null +++ b/libs/@local/hashql/ast/tests/ui/lower/expander/intrinsic-generic-arguments.jsonc @@ -0,0 +1,9 @@ +//@ run: fail +//@ description: generic arguments on intrinsic special forms should error +[ + "::kernel::special_form::if", + //~^ ERROR `if` does not accept generic arguments + { "#literal": true }, + { "#literal": 1 }, + { "#literal": 2 } +] diff --git a/libs/@local/hashql/ast/tests/ui/lower/expander/intrinsic-generic-arguments.stderr b/libs/@local/hashql/ast/tests/ui/lower/expander/intrinsic-generic-arguments.stderr new file mode 100644 index 00000000000..74c28df8532 --- /dev/null +++ b/libs/@local/hashql/ast/tests/ui/lower/expander/intrinsic-generic-arguments.stderr @@ -0,0 +1,6 @@ +error[expander::intrinsic-generic-arguments]: Generic arguments on intrinsic + ╭▸ +4 │ "::kernel::special_form::if", + │ ━━━━━━━━━━━ `if` does not accept generic arguments + │ + ╰ help: remove the generic arguments from `if` \ No newline at end of file diff --git a/libs/@local/hashql/ast/tests/ui/lower/expander/intrinsic-type-generic-arguments.jsonc b/libs/@local/hashql/ast/tests/ui/lower/expander/intrinsic-type-generic-arguments.jsonc new file mode 100644 index 00000000000..2975105a126 --- /dev/null +++ b/libs/@local/hashql/ast/tests/ui/lower/expander/intrinsic-type-generic-arguments.jsonc @@ -0,0 +1,9 @@ +//@ run: fail +//@ description: generic arguments on type intrinsics (Union/Intersection) should error +[ + "::kernel::special_form::type", + "Foo", + ["::kernel::type::Union", "String"], + //~^ ERROR `Union` does not accept generic arguments + { "#literal": 0 } +] diff --git a/libs/@local/hashql/ast/tests/ui/lower/expander/intrinsic-type-generic-arguments.stderr b/libs/@local/hashql/ast/tests/ui/lower/expander/intrinsic-type-generic-arguments.stderr new file mode 100644 index 00000000000..380aecd05b9 --- /dev/null +++ b/libs/@local/hashql/ast/tests/ui/lower/expander/intrinsic-type-generic-arguments.stderr @@ -0,0 +1,6 @@ +error[expander::intrinsic-generic-arguments]: Generic arguments on intrinsic + ╭▸ +6 │ ["::kernel::type::Union", "String"], + │ ━━━━━━━━━━━━━━ `Union` does not accept generic arguments + │ + ╰ help: remove the generic arguments from `Union` \ No newline at end of file diff --git a/libs/@local/hashql/ast/tests/ui/lower/expander/labeled-argument-access.jsonc b/libs/@local/hashql/ast/tests/ui/lower/expander/labeled-argument-access.jsonc new file mode 100644 index 00000000000..3da524bcc91 --- /dev/null +++ b/libs/@local/hashql/ast/tests/ui/lower/expander/labeled-argument-access.jsonc @@ -0,0 +1,9 @@ +//@ run: fail +//@ description: labeled arguments are not allowed in `access` +[ + "::kernel::special_form::access", + { "#literal": "hello" }, + "name", + { ":extra": { "#literal": 0 } } + //~^ ERROR labeled arguments are not allowed in `.` +] diff --git a/libs/@local/hashql/ast/tests/ui/lower/expander/labeled-argument-access.stderr b/libs/@local/hashql/ast/tests/ui/lower/expander/labeled-argument-access.stderr new file mode 100644 index 00000000000..dbace318ec7 --- /dev/null +++ b/libs/@local/hashql/ast/tests/ui/lower/expander/labeled-argument-access.stderr @@ -0,0 +1,6 @@ +error[expander::labeled-arguments-not-supported]: Labeled arguments not supported + ╭▸ +7 │ { ":extra": { "#literal": 0 } } + │ ━━━━━━━━━━━━━━━━━━━━━━━━━━━ labeled arguments are not allowed in `.` + │ + ╰ help: pass the arguments positionally: `(. value field)` \ No newline at end of file diff --git a/libs/@local/hashql/ast/tests/ui/lower/expander/labeled-argument-as.jsonc b/libs/@local/hashql/ast/tests/ui/lower/expander/labeled-argument-as.jsonc new file mode 100644 index 00000000000..2c3ea60ee1f --- /dev/null +++ b/libs/@local/hashql/ast/tests/ui/lower/expander/labeled-argument-as.jsonc @@ -0,0 +1,9 @@ +//@ run: fail +//@ description: labeled arguments are not allowed in `as` +[ + "::kernel::special_form::as", + { "#literal": 1 }, + "Integer", + { ":extra": { "#literal": 0 } } + //~^ ERROR labeled arguments are not allowed in `as` +] diff --git a/libs/@local/hashql/ast/tests/ui/lower/expander/labeled-argument-as.stderr b/libs/@local/hashql/ast/tests/ui/lower/expander/labeled-argument-as.stderr new file mode 100644 index 00000000000..e91b4487074 --- /dev/null +++ b/libs/@local/hashql/ast/tests/ui/lower/expander/labeled-argument-as.stderr @@ -0,0 +1,6 @@ +error[expander::labeled-arguments-not-supported]: Labeled arguments not supported + ╭▸ +7 │ { ":extra": { "#literal": 0 } } + │ ━━━━━━━━━━━━━━━━━━━━━━━━━━━ labeled arguments are not allowed in `as` + │ + ╰ help: pass the arguments positionally: `(as value type)` \ No newline at end of file diff --git a/libs/@local/hashql/ast/tests/ui/lower/expander/labeled-argument-fn.jsonc b/libs/@local/hashql/ast/tests/ui/lower/expander/labeled-argument-fn.jsonc new file mode 100644 index 00000000000..a7219d96406 --- /dev/null +++ b/libs/@local/hashql/ast/tests/ui/lower/expander/labeled-argument-fn.jsonc @@ -0,0 +1,13 @@ +//@ run: fail +//@ description: labeled arguments are not allowed in `fn` +[ + "::kernel::special_form::fn", + { "#tuple": ["T"] }, + { "#struct": { "x": "Integer" } }, + "Integer", + { "#literal": 0 }, + { + ":extra": { "#literal": 0 } + //~^ ERROR labeled arguments are not allowed in `fn` + } +] diff --git a/libs/@local/hashql/ast/tests/ui/lower/expander/labeled-argument-fn.stderr b/libs/@local/hashql/ast/tests/ui/lower/expander/labeled-argument-fn.stderr new file mode 100644 index 00000000000..951bbac9655 --- /dev/null +++ b/libs/@local/hashql/ast/tests/ui/lower/expander/labeled-argument-fn.stderr @@ -0,0 +1,6 @@ +error[expander::labeled-arguments-not-supported]: Labeled arguments not supported + ╭▸ +10 │ ":extra": { "#literal": 0 } + │ ━━━━━━━━━━━━━━━━━━━━━━━━━━━ labeled arguments are not allowed in `fn` + │ + ╰ help: pass the arguments positionally: `(fn generics params return-type body)` \ No newline at end of file diff --git a/libs/@local/hashql/ast/tests/ui/lower/expander/labeled-argument-index.jsonc b/libs/@local/hashql/ast/tests/ui/lower/expander/labeled-argument-index.jsonc new file mode 100644 index 00000000000..3d6303f0327 --- /dev/null +++ b/libs/@local/hashql/ast/tests/ui/lower/expander/labeled-argument-index.jsonc @@ -0,0 +1,9 @@ +//@ run: fail +//@ description: labeled arguments are not allowed in `[]` +[ + "::kernel::special_form::index", + { "#literal": "hello" }, + { "#literal": 0 }, + { ":extra": { "#literal": 0 } } + //~^ ERROR labeled arguments are not allowed in `[]` +] diff --git a/libs/@local/hashql/ast/tests/ui/lower/expander/labeled-argument-index.stderr b/libs/@local/hashql/ast/tests/ui/lower/expander/labeled-argument-index.stderr new file mode 100644 index 00000000000..cb1dd2a315a --- /dev/null +++ b/libs/@local/hashql/ast/tests/ui/lower/expander/labeled-argument-index.stderr @@ -0,0 +1,6 @@ +error[expander::labeled-arguments-not-supported]: Labeled arguments not supported + ╭▸ +7 │ { ":extra": { "#literal": 0 } } + │ ━━━━━━━━━━━━━━━━━━━━━━━━━━━ labeled arguments are not allowed in `[]` + │ + ╰ help: pass the arguments positionally: `([] collection index)` \ No newline at end of file diff --git a/libs/@local/hashql/ast/tests/ui/lower/expander/labeled-argument-input.jsonc b/libs/@local/hashql/ast/tests/ui/lower/expander/labeled-argument-input.jsonc new file mode 100644 index 00000000000..8cd0638f2e0 --- /dev/null +++ b/libs/@local/hashql/ast/tests/ui/lower/expander/labeled-argument-input.jsonc @@ -0,0 +1,9 @@ +//@ run: fail +//@ description: labeled arguments are not allowed in `input` +[ + "::kernel::special_form::input", + "x", + "Integer", + { ":extra": { "#literal": 0 } } + //~^ ERROR labeled arguments are not allowed in `input` +] diff --git a/libs/@local/hashql/ast/tests/ui/lower/expander/labeled-argument-input.stderr b/libs/@local/hashql/ast/tests/ui/lower/expander/labeled-argument-input.stderr new file mode 100644 index 00000000000..5c67c19b253 --- /dev/null +++ b/libs/@local/hashql/ast/tests/ui/lower/expander/labeled-argument-input.stderr @@ -0,0 +1,6 @@ +error[expander::labeled-arguments-not-supported]: Labeled arguments not supported + ╭▸ +7 │ { ":extra": { "#literal": 0 } } + │ ━━━━━━━━━━━━━━━━━━━━━━━━━━━ labeled arguments are not allowed in `input` + │ + ╰ help: pass the arguments positionally: `(input name type)` or `(input name type default)` \ No newline at end of file diff --git a/libs/@local/hashql/ast/tests/ui/lower/expander/labeled-argument-let.jsonc b/libs/@local/hashql/ast/tests/ui/lower/expander/labeled-argument-let.jsonc new file mode 100644 index 00000000000..f236487d7f1 --- /dev/null +++ b/libs/@local/hashql/ast/tests/ui/lower/expander/labeled-argument-let.jsonc @@ -0,0 +1,10 @@ +//@ run: fail +//@ description: labeled arguments are not allowed in `let` +[ + "::kernel::special_form::let", + "x", + { "#literal": 1 }, + "x", + { ":extra": { "#literal": 0 } } + //~^ ERROR labeled arguments are not allowed in `let` +] diff --git a/libs/@local/hashql/ast/tests/ui/lower/expander/labeled-argument-let.stderr b/libs/@local/hashql/ast/tests/ui/lower/expander/labeled-argument-let.stderr new file mode 100644 index 00000000000..9fd9862fa12 --- /dev/null +++ b/libs/@local/hashql/ast/tests/ui/lower/expander/labeled-argument-let.stderr @@ -0,0 +1,7 @@ +error[expander::labeled-arguments-not-supported]: Labeled arguments not supported + ╭▸ +8 │ { ":extra": { "#literal": 0 } } + │ ━━━━━━━━━━━━━━━━━━━━━━━━━━━ labeled arguments are not allowed in `let` + │ + ├ help: pass the arguments positionally: `(let name value body)` or `(let name type value body)` + ╰ note: `let` has a fixed argument order: name, optional type annotation, value, body \ No newline at end of file diff --git a/libs/@local/hashql/ast/tests/ui/lower/expander/labeled-argument-newtype.jsonc b/libs/@local/hashql/ast/tests/ui/lower/expander/labeled-argument-newtype.jsonc new file mode 100644 index 00000000000..e87be19e841 --- /dev/null +++ b/libs/@local/hashql/ast/tests/ui/lower/expander/labeled-argument-newtype.jsonc @@ -0,0 +1,10 @@ +//@ run: fail +//@ description: labeled arguments are not allowed in `newtype` +[ + "::kernel::special_form::newtype", + "Foo", + "Integer", + "Foo", + { ":extra": { "#literal": 0 } } + //~^ ERROR labeled arguments are not allowed in `newtype` +] diff --git a/libs/@local/hashql/ast/tests/ui/lower/expander/labeled-argument-newtype.stderr b/libs/@local/hashql/ast/tests/ui/lower/expander/labeled-argument-newtype.stderr new file mode 100644 index 00000000000..4aa765f1fd8 --- /dev/null +++ b/libs/@local/hashql/ast/tests/ui/lower/expander/labeled-argument-newtype.stderr @@ -0,0 +1,6 @@ +error[expander::labeled-arguments-not-supported]: Labeled arguments not supported + ╭▸ +8 │ { ":extra": { "#literal": 0 } } + │ ━━━━━━━━━━━━━━━━━━━━━━━━━━━ labeled arguments are not allowed in `newtype` + │ + ╰ help: pass the arguments positionally: `(newtype Name type-expr body)` \ No newline at end of file diff --git a/libs/@local/hashql/ast/tests/ui/lower/expander/labeled-argument-type.jsonc b/libs/@local/hashql/ast/tests/ui/lower/expander/labeled-argument-type.jsonc new file mode 100644 index 00000000000..1f03db4a6bf --- /dev/null +++ b/libs/@local/hashql/ast/tests/ui/lower/expander/labeled-argument-type.jsonc @@ -0,0 +1,10 @@ +//@ run: fail +//@ description: labeled arguments are not allowed in `type` +[ + "::kernel::special_form::type", + "Foo", + "Integer", + { "#literal": 0 }, + { ":extra": { "#literal": 0 } } + //~^ ERROR labeled arguments are not allowed in `type` +] diff --git a/libs/@local/hashql/ast/tests/ui/lower/expander/labeled-argument-type.stderr b/libs/@local/hashql/ast/tests/ui/lower/expander/labeled-argument-type.stderr new file mode 100644 index 00000000000..d5456216f5b --- /dev/null +++ b/libs/@local/hashql/ast/tests/ui/lower/expander/labeled-argument-type.stderr @@ -0,0 +1,6 @@ +error[expander::labeled-arguments-not-supported]: Labeled arguments not supported + ╭▸ +8 │ { ":extra": { "#literal": 0 } } + │ ━━━━━━━━━━━━━━━━━━━━━━━━━━━ labeled arguments are not allowed in `type` + │ + ╰ help: pass the arguments positionally: `(type Name type-expr body)` \ No newline at end of file diff --git a/libs/@local/hashql/ast/tests/ui/lower/expander/labeled-argument-use.jsonc b/libs/@local/hashql/ast/tests/ui/lower/expander/labeled-argument-use.jsonc new file mode 100644 index 00000000000..79c4ee5da55 --- /dev/null +++ b/libs/@local/hashql/ast/tests/ui/lower/expander/labeled-argument-use.jsonc @@ -0,0 +1,10 @@ +//@ run: fail +//@ description: labeled arguments are not allowed in `use` +[ + "::kernel::special_form::use", + "::core::math", + { "#tuple": ["add"] }, + { "#literal": 0 }, + { ":extra": { "#literal": 0 } } + //~^ ERROR labeled arguments are not allowed in `use` +] diff --git a/libs/@local/hashql/ast/tests/ui/lower/expander/labeled-argument-use.stderr b/libs/@local/hashql/ast/tests/ui/lower/expander/labeled-argument-use.stderr new file mode 100644 index 00000000000..3da726aa99f --- /dev/null +++ b/libs/@local/hashql/ast/tests/ui/lower/expander/labeled-argument-use.stderr @@ -0,0 +1,6 @@ +error[expander::labeled-arguments-not-supported]: Labeled arguments not supported + ╭▸ +8 │ { ":extra": { "#literal": 0 } } + │ ━━━━━━━━━━━━━━━━━━━━━━━━━━━ labeled arguments are not allowed in `use` + │ + ╰ help: pass the arguments positionally: `(use path imports body)` \ No newline at end of file diff --git a/libs/@local/hashql/ast/tests/ui/lower/expander/let-intrinsic-swallow.jsonc b/libs/@local/hashql/ast/tests/ui/lower/expander/let-intrinsic-swallow.jsonc new file mode 100644 index 00000000000..83cbd93c4ad --- /dev/null +++ b/libs/@local/hashql/ast/tests/ui/lower/expander/let-intrinsic-swallow.jsonc @@ -0,0 +1,8 @@ +//@ run: pass +//@ description: rebinding an intrinsic special form should be swallowed (body returned directly) +[ + "::kernel::special_form::let", + "my_if", + "::kernel::special_form::if", + ["my_if", { "#literal": true }, { "#literal": 1 }, { "#literal": 2 }] +] diff --git a/libs/@local/hashql/ast/tests/ui/lower/expander/let-intrinsic-swallow.stdout b/libs/@local/hashql/ast/tests/ui/lower/expander/let-intrinsic-swallow.stdout new file mode 100644 index 00000000000..867f42c0938 --- /dev/null +++ b/libs/@local/hashql/ast/tests/ui/lower/expander/let-intrinsic-swallow.stdout @@ -0,0 +1,17 @@ +Expr#4294967040@30 + ExprKind (If) + IfExpr#4294967040@30 + Expr#4294967040@25 + ExprKind (Literal) + LiteralExpr#4294967040@24 + Primitive (True) + Expr#4294967040@27 + ExprKind (Literal) + LiteralExpr#4294967040@26 + Primitive (Integer) + Integer (1) + Expr#4294967040@29 + ExprKind (Literal) + LiteralExpr#4294967040@28 + Primitive (Integer) + Integer (2) diff --git a/libs/@local/hashql/ast/tests/ui/lower/expander/let-intrinsic-type-annotation.jsonc b/libs/@local/hashql/ast/tests/ui/lower/expander/let-intrinsic-type-annotation.jsonc new file mode 100644 index 00000000000..d0984ac708c --- /dev/null +++ b/libs/@local/hashql/ast/tests/ui/lower/expander/let-intrinsic-type-annotation.jsonc @@ -0,0 +1,10 @@ +//@ run: fail +//@ description: type annotation on a rebinding of an intrinsic should produce a diagnostic +[ + "::kernel::special_form::let", + "my_if", + "Integer", + //~^ ERROR type annotation on `my_if` is not allowed here + "::kernel::special_form::if", + ["my_if", { "#literal": true }, { "#literal": 1 }, { "#literal": 2 }] +] diff --git a/libs/@local/hashql/ast/tests/ui/lower/expander/let-intrinsic-type-annotation.stderr b/libs/@local/hashql/ast/tests/ui/lower/expander/let-intrinsic-type-annotation.stderr new file mode 100644 index 00000000000..9255a2b760f --- /dev/null +++ b/libs/@local/hashql/ast/tests/ui/lower/expander/let-intrinsic-type-annotation.stderr @@ -0,0 +1,10 @@ +error[expander::intrinsic-type-annotation]: Type annotation on intrinsic binding + ╭▸ +6 │ "Integer", + │ ━━━━━━━ type annotation on `my_if` is not allowed here +7 │ //~^ ERROR type annotation on `my_if` is not allowed here +8 │ "::kernel::special_form::if", + │ ────────────────────────── this resolves to a compiler intrinsic + │ + ├ help: remove the type annotation: `(let my_if value body)` + ╰ note: compiler intrinsics cannot be given a type annotation because they are not ordinary values \ No newline at end of file diff --git a/libs/@local/hashql/ast/tests/ui/lower/expander/package-not-found.jsonc b/libs/@local/hashql/ast/tests/ui/lower/expander/package-not-found.jsonc new file mode 100644 index 00000000000..9be08060aa1 --- /dev/null +++ b/libs/@local/hashql/ast/tests/ui/lower/expander/package-not-found.jsonc @@ -0,0 +1,4 @@ +//@ run: fail +//@ description: referencing a nonexistent root package should error +"::nonexistent::something" +//~^ ERROR cannot find package `nonexistent` diff --git a/libs/@local/hashql/ast/tests/ui/lower/expander/package-not-found.stderr b/libs/@local/hashql/ast/tests/ui/lower/expander/package-not-found.stderr new file mode 100644 index 00000000000..0f3d2b2ac69 --- /dev/null +++ b/libs/@local/hashql/ast/tests/ui/lower/expander/package-not-found.stderr @@ -0,0 +1,10 @@ +error[expander::package-not-found]: Package not found + ╭▸ +3 │ "::nonexistent::something" + │ ┬─┯━━━━━━━━━━─────────── + │ │ │ + │ │ cannot find package `nonexistent` + │ in this path + │ + ├ help: check the package name, or add it to the project dependencies + ╰ note: absolute paths start from an installed package \ No newline at end of file diff --git a/libs/@local/hashql/ast/tests/ui/lower/expander/pre-expansion-name-resolver/let-3-alias.jsonc b/libs/@local/hashql/ast/tests/ui/lower/expander/pre-expansion-name-resolver/let-3-alias.jsonc index b96c57e2c48..1bd76f1783f 100644 --- a/libs/@local/hashql/ast/tests/ui/lower/expander/pre-expansion-name-resolver/let-3-alias.jsonc +++ b/libs/@local/hashql/ast/tests/ui/lower/expander/pre-expansion-name-resolver/let-3-alias.jsonc @@ -1,3 +1,3 @@ //@ run: pass //@ description: if given that `a = b`, then `a` should be replaced with `b` in the body -["let", "b", {"#literal": 0}, ["let", "a", "b", "a"]] +["let", "b", { "#literal": 0 }, ["let", "a", "b", "a"]] diff --git a/libs/@local/hashql/ast/tests/ui/lower/expander/pre-expansion-name-resolver/let-4.jsonc b/libs/@local/hashql/ast/tests/ui/lower/expander/pre-expansion-name-resolver/let-4.jsonc index 048cc2c21c6..fe9e415afa7 100644 --- a/libs/@local/hashql/ast/tests/ui/lower/expander/pre-expansion-name-resolver/let-4.jsonc +++ b/libs/@local/hashql/ast/tests/ui/lower/expander/pre-expansion-name-resolver/let-4.jsonc @@ -1,3 +1,9 @@ //@ run: pass //@ description: Test that `let/4` is resolved to `::kernel::special_form::let` -["let", "a", "Integer", { "#literal": 0 }, ["+", { "#literal": 2 }, { "#literal": 3 }]] +[ + "let", + "a", + "Integer", + { "#literal": 0 }, + ["+", { "#literal": 2 }, { "#literal": 3 }] +] diff --git a/libs/@local/hashql/ast/tests/ui/lower/expander/pre-expansion-name-resolver/let-absolute.jsonc b/libs/@local/hashql/ast/tests/ui/lower/expander/pre-expansion-name-resolver/let-absolute.jsonc index 6b34ea7468a..e1bccc73874 100644 --- a/libs/@local/hashql/ast/tests/ui/lower/expander/pre-expansion-name-resolver/let-absolute.jsonc +++ b/libs/@local/hashql/ast/tests/ui/lower/expander/pre-expansion-name-resolver/let-absolute.jsonc @@ -1,3 +1,3 @@ //@ run: pass //@ description: let without expansion in it's already defined form should do replacement -["::kernel::special_form::let", "a", {"#literal": 1}, "a"] +["::kernel::special_form::let", "a", { "#literal": 1 }, "a"] diff --git a/libs/@local/hashql/ast/tests/ui/lower/expander/pre-expansion-name-resolver/resolve-symbol.jsonc b/libs/@local/hashql/ast/tests/ui/lower/expander/pre-expansion-name-resolver/resolve-symbol.jsonc index a4239bd608b..b6eef3a3518 100644 --- a/libs/@local/hashql/ast/tests/ui/lower/expander/pre-expansion-name-resolver/resolve-symbol.jsonc +++ b/libs/@local/hashql/ast/tests/ui/lower/expander/pre-expansion-name-resolver/resolve-symbol.jsonc @@ -1,3 +1,3 @@ //@ run: pass //@ description: Test that symbols are resolved to their corresponding mapping -["&&", {"#literal": true}, {"#literal": false}] +["&&", { "#literal": true }, { "#literal": false }] diff --git a/libs/@local/hashql/ast/tests/ui/lower/expander/pre-expansion-name-resolver/type-3-alias.jsonc b/libs/@local/hashql/ast/tests/ui/lower/expander/pre-expansion-name-resolver/type-3-alias.jsonc index bab4aa0f4b3..a9295fbdea7 100644 --- a/libs/@local/hashql/ast/tests/ui/lower/expander/pre-expansion-name-resolver/type-3-alias.jsonc +++ b/libs/@local/hashql/ast/tests/ui/lower/expander/pre-expansion-name-resolver/type-3-alias.jsonc @@ -1,3 +1,3 @@ //@ run: pass //@ description: if given that `a = b`, then `a` should be replaced with `b` in the body -["type", "b", "Integer", ["type", "a", "b", ["as", {"#literal": 0}, "a"]]] +["type", "b", "Integer", ["type", "a", "b", ["as", { "#literal": 0 }, "a"]]] diff --git a/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/fn-generics-struct.jsonc b/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/fn-generics-struct.jsonc index d81bebfdbe6..c1886cccc15 100644 --- a/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/fn-generics-struct.jsonc +++ b/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/fn-generics-struct.jsonc @@ -5,5 +5,5 @@ { "#struct": { "T": "Integer" } }, { "#struct": {} }, "_", - {"#literal": 0} + { "#literal": 0 } ] diff --git a/libs/@local/hashql/ast/tests/ui/lower/expander/type-call-labeled-argument.jsonc b/libs/@local/hashql/ast/tests/ui/lower/expander/type-call-labeled-argument.jsonc new file mode 100644 index 00000000000..35b65805374 --- /dev/null +++ b/libs/@local/hashql/ast/tests/ui/lower/expander/type-call-labeled-argument.jsonc @@ -0,0 +1,9 @@ +//@ run: fail +//@ description: labeled arguments are not allowed in type constructor calls +[ + "::kernel::special_form::type", + "Foo", + ["|", "Integer", { ":extra": "String" }], + //~^ ERROR labeled arguments are not allowed in type constructor calls + { "#literal": 0 } +] diff --git a/libs/@local/hashql/ast/tests/ui/lower/expander/type-call-labeled-argument.stderr b/libs/@local/hashql/ast/tests/ui/lower/expander/type-call-labeled-argument.stderr new file mode 100644 index 00000000000..2226a15b9c1 --- /dev/null +++ b/libs/@local/hashql/ast/tests/ui/lower/expander/type-call-labeled-argument.stderr @@ -0,0 +1,7 @@ +error[expander::labeled-arguments-not-supported]: Labeled arguments not supported + ╭▸ +6 │ ["|", "Integer", { ":extra": "String" }], + │ ━━━━━━━━━━━━━━━━━━ labeled arguments are not allowed in type constructor calls + │ + ├ help: remove the labels and write the operand types positionally, for example `(| Int String)` + ╰ note: type constructors such as `|` (union) and `&` (intersection) take positional type operands \ No newline at end of file diff --git a/libs/@local/hashql/ast/tests/ui/lower/expander/type-call-not-constructor.jsonc b/libs/@local/hashql/ast/tests/ui/lower/expander/type-call-not-constructor.jsonc new file mode 100644 index 00000000000..616bd929caf --- /dev/null +++ b/libs/@local/hashql/ast/tests/ui/lower/expander/type-call-not-constructor.jsonc @@ -0,0 +1,9 @@ +//@ run: fail +//@ description: calling a type intrinsic that is not a type constructor (Union/Intersection) should error +[ + "::kernel::special_form::type", + "Foo", + ["::kernel::type::List", "Integer"], + //~^ ERROR `::kernel::type::List` is a type, not a type constructor + { "#literal": 0 } +] diff --git a/libs/@local/hashql/ast/tests/ui/lower/expander/type-call-not-constructor.stderr b/libs/@local/hashql/ast/tests/ui/lower/expander/type-call-not-constructor.stderr new file mode 100644 index 00000000000..578f82b5847 --- /dev/null +++ b/libs/@local/hashql/ast/tests/ui/lower/expander/type-call-not-constructor.stderr @@ -0,0 +1,10 @@ +error[expander::invalid-type-constructor-call]: Invalid type constructor call + ╭▸ +6 │ ["::kernel::type::List", "Integer"], + │ ┬─┯━━━━━━━━━━━━━━━━━━━───────────── + │ │ │ + │ │ `::kernel::type::List` is a type, not a type constructor + │ call syntax is only valid for type constructors like `|` and `&` + │ + ├ help: use `::kernel::type::List` directly as a type path, or write `::kernel::type::List<...>` for generic arguments + ╰ note: only `|` (union) and `&` (intersection) can be called as type constructors in type position \ No newline at end of file diff --git a/libs/@local/hashql/ast/tests/ui/lower/expander/type-generic-constraint-duplicate.jsonc b/libs/@local/hashql/ast/tests/ui/lower/expander/type-generic-constraint-duplicate.jsonc new file mode 100644 index 00000000000..3cd8a22cf1a --- /dev/null +++ b/libs/@local/hashql/ast/tests/ui/lower/expander/type-generic-constraint-duplicate.jsonc @@ -0,0 +1,9 @@ +//@ run: fail +//@ description: duplicate generic constraint names using the constraint syntax should error +[ + "::kernel::special_form::type", + "Foo", + //~^ ERROR duplicate generic parameter `T` + { "#struct": { "foo": "T" } }, + "_" +] diff --git a/libs/@local/hashql/ast/tests/ui/lower/expander/type-generic-constraint-duplicate.stderr b/libs/@local/hashql/ast/tests/ui/lower/expander/type-generic-constraint-duplicate.stderr new file mode 100644 index 00000000000..1b8bef0a877 --- /dev/null +++ b/libs/@local/hashql/ast/tests/ui/lower/expander/type-generic-constraint-duplicate.stderr @@ -0,0 +1,8 @@ +error[expander::duplicate-generic-constraint]: Duplicate generic constraint + ╭▸ +5 │ "Foo", + │ ┬ ━ duplicate generic parameter `T` + │ │ + │ `T` was first declared here + │ + ╰ help: remove the duplicate declaration or use a different name \ No newline at end of file diff --git a/libs/@local/hashql/ast/tests/ui/lower/expander/type-intrinsic-swallow.jsonc b/libs/@local/hashql/ast/tests/ui/lower/expander/type-intrinsic-swallow.jsonc new file mode 100644 index 00000000000..e685883183e --- /dev/null +++ b/libs/@local/hashql/ast/tests/ui/lower/expander/type-intrinsic-swallow.jsonc @@ -0,0 +1,8 @@ +//@ run: pass +//@ description: rebinding Union intrinsic should be swallowed (body returned directly) +[ + "::kernel::special_form::type", + "MyUnion", + "|", + ["type", "Foo", ["MyUnion", "Integer", "String"], { "#literal": 0 }] +] diff --git a/libs/@local/hashql/ast/tests/ui/lower/expander/type-intrinsic-swallow.stdout b/libs/@local/hashql/ast/tests/ui/lower/expander/type-intrinsic-swallow.stdout new file mode 100644 index 00000000000..9799e430eda --- /dev/null +++ b/libs/@local/hashql/ast/tests/ui/lower/expander/type-intrinsic-swallow.stdout @@ -0,0 +1,23 @@ +Expr#4294967040@39 + ExprKind (Type) + TypeExpr#4294967040@39 (name: Foo) + Type#4294967040@36 + TypeKind (Union) + UnionType#4294967040@36 + Type#4294967040@31 + TypeKind (Path) + Path#4294967040@31 (rooted: true) + PathSegment#4294967040@30 (name: kernel) + PathSegment#4294967040@30 (name: type) + PathSegment#4294967040@30 (name: Integer) + Type#4294967040@35 + TypeKind (Path) + Path#4294967040@35 (rooted: true) + PathSegment#4294967040@34 (name: kernel) + PathSegment#4294967040@34 (name: type) + PathSegment#4294967040@34 (name: String) + Expr#4294967040@38 + ExprKind (Literal) + LiteralExpr#4294967040@37 + Primitive (Integer) + Integer (0) diff --git a/libs/@local/hashql/ast/tests/ui/lower/expander/use-duplicate-binding.jsonc b/libs/@local/hashql/ast/tests/ui/lower/expander/use-duplicate-binding.jsonc new file mode 100644 index 00000000000..5d895613f54 --- /dev/null +++ b/libs/@local/hashql/ast/tests/ui/lower/expander/use-duplicate-binding.jsonc @@ -0,0 +1,9 @@ +//@ run: fail +//@ description: duplicate names in use bindings should error +[ + "::kernel::special_form::use", + "::core::math", + { "#tuple": ["add", "add"] }, + //~^ ERROR duplicate import binding `add` + { "#literal": 0 } +] diff --git a/libs/@local/hashql/ast/tests/ui/lower/expander/use-duplicate-binding.stderr b/libs/@local/hashql/ast/tests/ui/lower/expander/use-duplicate-binding.stderr new file mode 100644 index 00000000000..dbd5f119fb9 --- /dev/null +++ b/libs/@local/hashql/ast/tests/ui/lower/expander/use-duplicate-binding.stderr @@ -0,0 +1,8 @@ +error[expander::duplicate-use-binding]: Duplicate use binding + ╭▸ +6 │ { "#tuple": ["add", "add"] }, + │ ┬── ━━━ duplicate import binding `add` + │ │ + │ `add` was first imported here + │ + ╰ help: remove the duplicate or use an alias to import under a different name \ No newline at end of file diff --git a/libs/@local/hashql/ast/tests/ui/lower/expander/use-invalid-path.jsonc b/libs/@local/hashql/ast/tests/ui/lower/expander/use-invalid-path.jsonc new file mode 100644 index 00000000000..6d4c75f8330 --- /dev/null +++ b/libs/@local/hashql/ast/tests/ui/lower/expander/use-invalid-path.jsonc @@ -0,0 +1,9 @@ +//@ run: fail +//@ description: the use path must be a path expression, not a literal +[ + "::kernel::special_form::use", + { "#literal": 1 }, + //~^ ERROR expected a module path + { "#tuple": ["add"] }, + { "#literal": 0 } +] diff --git a/libs/@local/hashql/ast/tests/ui/lower/expander/use-invalid-path.stderr b/libs/@local/hashql/ast/tests/ui/lower/expander/use-invalid-path.stderr new file mode 100644 index 00000000000..43689fe0d12 --- /dev/null +++ b/libs/@local/hashql/ast/tests/ui/lower/expander/use-invalid-path.stderr @@ -0,0 +1,6 @@ +error[expander::invalid-use-path]: Invalid use path + ╭▸ +5 │ { "#literal": 1 }, + │ ━━━━━━━━━━━━━━━━━ expected a module path + │ + ╰ help: the first argument to `use` must be a path like `core::math` identifying the module to import from \ No newline at end of file diff --git a/libs/@local/hashql/ast/tests/ui/lower/name-mangler/absolute-path.jsonc b/libs/@local/hashql/ast/tests/ui/lower/name-mangler/absolute-path.jsonc index 6765a6a9f09..f767ff3a251 100644 --- a/libs/@local/hashql/ast/tests/ui/lower/name-mangler/absolute-path.jsonc +++ b/libs/@local/hashql/ast/tests/ui/lower/name-mangler/absolute-path.jsonc @@ -1,3 +1,8 @@ //@ run: pass //@ description: Absolute paths should stay unchanged. -["let", "add", { "#literal": 2 }, ["::core::math::add", { "#literal": 1 }, { "#literal": 3 }]] +[ + "let", + "add", + { "#literal": 2 }, + ["::core::math::add", { "#literal": 1 }, { "#literal": 3 }] +] From b5f73ee2b531d5361bb7c5d6ab20a9a6e74edea2 Mon Sep 17 00:00:00 2001 From: Bilal Mahmoud <7252775+indietyp@users.noreply.github.com> Date: Tue, 16 Jun 2026 10:43:37 +0200 Subject: [PATCH 47/55] chore: remove USE expression from the AST --- libs/@local/hashql/ast/src/format/dump.rs | 63 ----------------- .../hashql/ast/src/lower/expander/error.rs | 1 - .../hashql/ast/src/lower/expander/fn.rs | 1 - .../hashql/ast/src/lower/expander/type.rs | 1 - .../hashql/ast/src/lower/expander/use.rs | 2 - .../src/lower/type_extractor/definition.rs | 1 - libs/@local/hashql/ast/src/node/expr/mod.rs | 27 +------ libs/@local/hashql/ast/src/node/expr/use.rs | 67 +----------------- libs/@local/hashql/ast/src/visit.rs | 70 +------------------ libs/@local/hashql/hir/src/reify/mod.rs | 8 --- 10 files changed, 3 insertions(+), 238 deletions(-) diff --git a/libs/@local/hashql/ast/src/format/dump.rs b/libs/@local/hashql/ast/src/format/dump.rs index 30d00aa85f2..e10ded95ee6 100644 --- a/libs/@local/hashql/ast/src/format/dump.rs +++ b/libs/@local/hashql/ast/src/format/dump.rs @@ -27,14 +27,12 @@ use crate::node::{ expr::{ AsExpr, CallExpr, ClosureExpr, DictExpr, Expr, ExprKind, FieldExpr, IfExpr, IndexExpr, InputExpr, LetExpr, ListExpr, LiteralExpr, NewTypeExpr, StructExpr, TupleExpr, TypeExpr, - UseExpr, call::{Argument, LabeledArgument}, closure::{ClosureParam, ClosureSignature}, dict::DictEntry, list::ListElement, r#struct::StructEntry, tuple::TupleElement, - r#use::{Glob, UseBinding, UseKind}, }, generic::{GenericArgument, GenericConstraint, GenericParam, Generics}, id::NodeId, @@ -352,62 +350,6 @@ impl_syntax_dump!(struct TypeExpr(name); []constraints value body); impl_syntax_dump!(struct NewTypeExpr(name); []constraints value body); -impl SyntaxDump for UseBinding<'_> { - fn syntax_dump(&self, fmt: &mut Formatter, depth: usize) -> fmt::Result { - let Self { - id, - span, - name, - alias, - } = self; - - let mut properties = vec![format!("name: {name}")]; - if let Some(alias) = alias { - properties.push(format!("alias: {alias}")); - } - - write_header( - fmt, - depth, - "UseBinding", - Some(*id), - Some(*span), - Some(&properties.join(", ")), - ) - } -} - -impl SyntaxDump for Glob { - fn syntax_dump(&self, fmt: &mut Formatter, depth: usize) -> fmt::Result { - let Self { id, span } = self; - - write_header(fmt, depth, "Glob", Some(*id), Some(*span), None) - } -} - -impl SyntaxDump for UseKind<'_> { - fn syntax_dump(&self, fmt: &mut Formatter, depth: usize) -> fmt::Result { - match self { - UseKind::Named(bindings) => { - write_header(fmt, depth, "UseKind", None, None, Some("Named"))?; - - for binding in bindings { - binding.syntax_dump(fmt, depth + 1)?; - } - - Ok(()) - } - UseKind::Glob(glob) => { - write_header(fmt, depth, "UseKind", None, None, Some("Glob"))?; - - glob.syntax_dump(fmt, depth + 1) - } - } - } -} - -impl_syntax_dump!(struct UseExpr(); path kind body); - impl_syntax_dump!(struct InputExpr(name); r#type ?default); #[rustfmt::skip] @@ -478,11 +420,6 @@ impl SyntaxDump for ExprKind<'_> { new_type_expr.syntax_dump(fmt, depth + 1) } - Self::Use(use_expr) => { - write_header(fmt, depth, "ExprKind", None, None, Some("Use"))?; - - use_expr.syntax_dump(fmt, depth + 1) - } Self::Input(input_expr) => { write_header(fmt, depth, "ExprKind", None, None, Some("Input"))?; diff --git a/libs/@local/hashql/ast/src/lower/expander/error.rs b/libs/@local/hashql/ast/src/lower/expander/error.rs index 83bcd3ff937..b6ec20e3eed 100644 --- a/libs/@local/hashql/ast/src/lower/expander/error.rs +++ b/libs/@local/hashql/ast/src/lower/expander/error.rs @@ -2031,7 +2031,6 @@ pub(crate) fn invalid_expression_in_type_position( ExprKind::Let(_) => "a `let` expression", ExprKind::Type(_) => "a `type` declaration", ExprKind::NewType(_) => "a `newtype` declaration", - ExprKind::Use(_) => "a `use` expression", ExprKind::Input(_) => "an `input` expression", ExprKind::Closure(_) => "a closure expression", ExprKind::If(_) => "an `if` expression", diff --git a/libs/@local/hashql/ast/src/lower/expander/fn.rs b/libs/@local/hashql/ast/src/lower/expander/fn.rs index 927f3eaa027..5073b1c60fa 100644 --- a/libs/@local/hashql/ast/src/lower/expander/fn.rs +++ b/libs/@local/hashql/ast/src/lower/expander/fn.rs @@ -124,7 +124,6 @@ where | ExprKind::Let(_) | ExprKind::Type(_) | ExprKind::NewType(_) - | ExprKind::Use(_) | ExprKind::Input(_) | ExprKind::Closure(_) | ExprKind::If(_) diff --git a/libs/@local/hashql/ast/src/lower/expander/type.rs b/libs/@local/hashql/ast/src/lower/expander/type.rs index 0c40780fca8..e42aa36e6b8 100644 --- a/libs/@local/hashql/ast/src/lower/expander/type.rs +++ b/libs/@local/hashql/ast/src/lower/expander/type.rs @@ -197,7 +197,6 @@ where | ExprKind::Let(_) | ExprKind::Type(_) | ExprKind::NewType(_) - | ExprKind::Use(_) | ExprKind::Input(_) | ExprKind::Closure(_) | ExprKind::If(_) diff --git a/libs/@local/hashql/ast/src/lower/expander/use.rs b/libs/@local/hashql/ast/src/lower/expander/use.rs index f8e2a9d77fc..ff85964ce44 100644 --- a/libs/@local/hashql/ast/src/lower/expander/use.rs +++ b/libs/@local/hashql/ast/src/lower/expander/use.rs @@ -85,7 +85,6 @@ fn lower_imports_struct<'heap, S>( | ExprKind::Let(_) | ExprKind::Type(_) | ExprKind::NewType(_) - | ExprKind::Use(_) | ExprKind::Input(_) | ExprKind::Closure(_) | ExprKind::If(_) @@ -139,7 +138,6 @@ where | ExprKind::Let(_) | ExprKind::Type(_) | ExprKind::NewType(_) - | ExprKind::Use(_) | ExprKind::Input(_) | ExprKind::Closure(_) | ExprKind::If(_) diff --git a/libs/@local/hashql/ast/src/lower/type_extractor/definition.rs b/libs/@local/hashql/ast/src/lower/type_extractor/definition.rs index 992df125044..c237b45089f 100644 --- a/libs/@local/hashql/ast/src/lower/type_extractor/definition.rs +++ b/libs/@local/hashql/ast/src/lower/type_extractor/definition.rs @@ -305,7 +305,6 @@ impl<'heap> Visitor<'heap> for TypeDefinitionExtractor<'_, 'heap> { | ExprKind::Literal(_) | ExprKind::Path(_) | ExprKind::Let(_) - | ExprKind::Use(_) | ExprKind::Input(_) | ExprKind::Closure(_) | ExprKind::If(_) diff --git a/libs/@local/hashql/ast/src/node/expr/mod.rs b/libs/@local/hashql/ast/src/node/expr/mod.rs index 066dcb7e747..a0700ee1044 100644 --- a/libs/@local/hashql/ast/src/node/expr/mod.rs +++ b/libs/@local/hashql/ast/src/node/expr/mod.rs @@ -59,7 +59,7 @@ pub use self::{ r#as::AsExpr, call::CallExpr, closure::ClosureExpr, dict::DictExpr, field::FieldExpr, r#if::IfExpr, index::IndexExpr, input::InputExpr, r#let::LetExpr, list::ListExpr, literal::LiteralExpr, newtype::NewTypeExpr, r#struct::StructExpr, tuple::TupleExpr, - r#type::TypeExpr, r#use::UseExpr, + r#type::TypeExpr, }; use super::{id::NodeId, path::Path}; @@ -320,31 +320,6 @@ pub enum ExprKind<'heap> { /// ``` NewType(NewTypeExpr<'heap>), - /// A module import expression (special form). - /// - /// Imports symbols from another module into the current scope. This is expanded - /// from a function call during AST transformation. HashQL supports selective - /// imports with optional renaming. - /// - /// # Examples - /// - /// ## J-Expr - /// - /// ```json - /// ["use", "path::to::module", {"#struct": {"item1": "_", "original": "renamed"}}, ] - /// ["use", "path::to::module", {"#tuple": ["item1", "original"]}, ] - /// ["use", "path::to::module", "*", ] - /// ``` - /// - /// ## Documentation Format - /// - /// ```text - /// use path::to::module::{item1, original as renamed} in - /// use path::to::module::{item1, original} in - /// use path::to::module::* in - /// ``` - Use(UseExpr<'heap>), - /// An input parameter declaration (special form). /// /// Declares an input parameter for a function or query. This is expanded diff --git a/libs/@local/hashql/ast/src/node/expr/use.rs b/libs/@local/hashql/ast/src/node/expr/use.rs index 983a759d99b..1b7465ec2d5 100644 --- a/libs/@local/hashql/ast/src/node/expr/use.rs +++ b/libs/@local/hashql/ast/src/node/expr/use.rs @@ -1,7 +1,6 @@ use hashql_core::{heap, span::SpanId, symbol::Ident}; -use super::Expr; -use crate::node::{id::NodeId, path::Path}; +use crate::node::id::NodeId; /// A binding for an imported symbol. /// @@ -36,67 +35,3 @@ pub enum UseKind<'heap> { Named(heap::Vec<'heap, UseBinding<'heap>>), Glob(Glob), } - -/// A module import expression in the HashQL Abstract Syntax Tree. -/// -/// Represents a `use` declaration that imports symbols from another module -/// into the current scope. Imports can bring in specific named items or all -/// exported items from a module. -/// -/// Imported symbols are only visible within the body expression. -/// -/// # Examples -/// -/// ## J-Expr -/// -/// ```json -/// // Named Import -/// ["use", "core::math", {"#tuple": ["sin", "cos", "tan"]}, -/// ["*", -/// ["sin", "angle"], -/// ["cos", "angle"] -/// ] -/// ] -/// -/// // Named import with renaming -/// ["use", "core::math", {"#tuple": {"sin": "_", "cos": "cosine", "tan": "_"}}, -/// ["*", -/// ["sin", "angle"], -/// ["cosine", "angle"] -/// ] -/// ] -/// -/// // Glob import -/// ["use", "core::math", "*", -/// ["*", -/// ["sin", "angle"], -/// ["cos", "angle"] -/// ] -/// ] -/// ``` -/// -/// ## Documentation Format -/// -/// ```text -/// // Named import -/// use math::{sin, cos, tan} in -/// *(sin(angle), cos(angle)) -/// -/// // Import with renaming -/// use math::{sin, cos as cosine, tan} in -/// *(sin(angle), cosine(angle)) -/// -/// // Glob import -/// use math::* in -/// *(sin(angle), cos(angle)) -/// ``` -#[derive(Debug, Clone, PartialEq, Eq, Hash)] -pub struct UseExpr<'heap> { - pub id: NodeId, - pub span: SpanId, - - pub path: Path<'heap>, - pub kind: UseKind<'heap>, - - pub body: heap::Box<'heap, Expr<'heap>>, -} diff --git a/libs/@local/hashql/ast/src/visit.rs b/libs/@local/hashql/ast/src/visit.rs index 04b38ad1fa1..f5046123035 100644 --- a/libs/@local/hashql/ast/src/visit.rs +++ b/libs/@local/hashql/ast/src/visit.rs @@ -78,7 +78,7 @@ use hashql_core::{span::SpanId, symbol::Ident}; use crate::node::{ expr::{ CallExpr, ClosureExpr, DictExpr, Expr, ExprKind, FieldExpr, IfExpr, IndexExpr, InputExpr, - LetExpr, ListExpr, LiteralExpr, NewTypeExpr, StructExpr, TupleExpr, TypeExpr, UseExpr, + LetExpr, ListExpr, LiteralExpr, NewTypeExpr, StructExpr, TupleExpr, TypeExpr, r#as::AsExpr, call::{Argument, LabeledArgument}, closure::{ClosureParam, ClosureSignature}, @@ -86,7 +86,6 @@ use crate::node::{ list::ListElement, r#struct::StructEntry, tuple::TupleElement, - r#use::{Glob, UseBinding, UseKind}, }, generic::{GenericArgument, GenericConstraint, GenericParam, Generics}, id::NodeId, @@ -250,18 +249,6 @@ pub trait Visitor<'heap> { walk_newtype_expr(self, expr); } - fn visit_use_expr(&mut self, expr: &mut UseExpr<'heap>) { - walk_use_expr(self, expr); - } - - fn visit_use_expr_binding(&mut self, binding: &mut UseBinding<'heap>) { - walk_use_expr_binding(self, binding); - } - - fn visit_use_expr_glob(&mut self, glob: &mut Glob) { - walk_use_expr_glob(self, glob); - } - fn visit_input_expr(&mut self, expr: &mut InputExpr<'heap>) { walk_input_expr(self, expr); } @@ -423,7 +410,6 @@ pub fn walk_expr<'heap, T: Visitor<'heap> + ?Sized>( ExprKind::Let(let_expr) => visitor.visit_let_expr(let_expr), ExprKind::Type(type_expr) => visitor.visit_type_expr(type_expr), ExprKind::NewType(new_type_expr) => visitor.visit_newtype_expr(new_type_expr), - ExprKind::Use(use_expr) => visitor.visit_use_expr(use_expr), ExprKind::Input(input_expr) => visitor.visit_input_expr(input_expr), ExprKind::Closure(closure_expr) => visitor.visit_closure_expr(closure_expr), ExprKind::If(if_expr) => visitor.visit_if_expr(if_expr), @@ -703,60 +689,6 @@ pub fn walk_newtype_expr<'heap, T: Visitor<'heap> + ?Sized>( visitor.visit_expr(body); } -pub fn walk_use_expr<'heap, T: Visitor<'heap> + ?Sized>( - visitor: &mut T, - UseExpr { - id, - span, - path, - kind, - body, - }: &mut UseExpr<'heap>, -) { - visitor.visit_id(id); - visitor.visit_span(span); - - visitor.visit_path(path); - - match kind { - UseKind::Named(bindings) => { - for binding in bindings { - visitor.visit_use_expr_binding(binding); - } - } - UseKind::Glob(glob) => visitor.visit_use_expr_glob(glob), - } - - visitor.visit_expr(body); -} - -pub fn walk_use_expr_binding<'heap, T: Visitor<'heap> + ?Sized>( - visitor: &mut T, - UseBinding { - id, - span, - name, - alias, - }: &mut UseBinding<'heap>, -) { - visitor.visit_id(id); - visitor.visit_span(span); - - visitor.visit_ident(name); - - if let Some(alias) = alias { - visitor.visit_ident(alias); - } -} - -pub fn walk_use_expr_glob<'heap, T: Visitor<'heap> + ?Sized>( - visitor: &mut T, - Glob { id, span }: &mut Glob, -) { - visitor.visit_id(id); - visitor.visit_span(span); -} - pub fn walk_input_expr<'heap, T: Visitor<'heap> + ?Sized>( visitor: &mut T, InputExpr { diff --git a/libs/@local/hashql/hir/src/reify/mod.rs b/libs/@local/hashql/hir/src/reify/mod.rs index 3b1890f1c1e..f02073485cf 100644 --- a/libs/@local/hashql/hir/src/reify/mod.rs +++ b/libs/@local/hashql/hir/src/reify/mod.rs @@ -819,14 +819,6 @@ impl<'heap> ReificationContext<'_, '_, '_, 'heap> { return None; } - ExprKind::Use(_) => { - self.diagnostics.push(unprocessed_expression( - expr.span, - "use declaration", - "import resolution", - )); - return None; - } ExprKind::Input(input) => (input.span, self.input_expr(hir_id, input)?), ExprKind::Closure(closure) => (closure.span, self.closure_expr(hir_id, closure)?), ExprKind::If(r#if) => (r#if.span, self.if_expr(r#if)?), From fef3b37e12f4404ed79dcc4a4409d50e71d5e038 Mon Sep 17 00:00:00 2001 From: Bilal Mahmoud <7252775+indietyp@users.noreply.github.com> Date: Tue, 16 Jun 2026 10:47:27 +0200 Subject: [PATCH 48/55] fix: remove derives that should not be derived --- libs/@local/hashql/ast/src/node/expr/as.rs | 2 +- libs/@local/hashql/ast/src/node/expr/call.rs | 6 +++--- libs/@local/hashql/ast/src/node/expr/closure.rs | 6 +++--- libs/@local/hashql/ast/src/node/expr/dict.rs | 4 ++-- libs/@local/hashql/ast/src/node/expr/field.rs | 2 +- libs/@local/hashql/ast/src/node/expr/if.rs | 2 +- libs/@local/hashql/ast/src/node/expr/index.rs | 2 +- libs/@local/hashql/ast/src/node/expr/input.rs | 2 +- libs/@local/hashql/ast/src/node/expr/let.rs | 2 +- libs/@local/hashql/ast/src/node/expr/list.rs | 4 ++-- libs/@local/hashql/ast/src/node/expr/mod.rs | 4 ++-- libs/@local/hashql/ast/src/node/expr/newtype.rs | 2 +- libs/@local/hashql/ast/src/node/expr/struct.rs | 4 ++-- libs/@local/hashql/ast/src/node/expr/tuple.rs | 4 ++-- libs/@local/hashql/ast/src/node/expr/type.rs | 2 +- 15 files changed, 24 insertions(+), 24 deletions(-) diff --git a/libs/@local/hashql/ast/src/node/expr/as.rs b/libs/@local/hashql/ast/src/node/expr/as.rs index 03de6752510..db889fa5410 100644 --- a/libs/@local/hashql/ast/src/node/expr/as.rs +++ b/libs/@local/hashql/ast/src/node/expr/as.rs @@ -27,7 +27,7 @@ use crate::node::{id::NodeId, r#type::Type}; /// value as String /// value as {name: String, age: Int} /// ``` -#[derive(Debug, Clone, PartialEq, Eq, Hash)] +#[derive(Debug)] pub struct AsExpr<'heap> { pub id: NodeId, pub span: SpanId, diff --git a/libs/@local/hashql/ast/src/node/expr/call.rs b/libs/@local/hashql/ast/src/node/expr/call.rs index 327bcb668c3..07819f50ebd 100644 --- a/libs/@local/hashql/ast/src/node/expr/call.rs +++ b/libs/@local/hashql/ast/src/node/expr/call.rs @@ -19,7 +19,7 @@ use crate::node::id::NodeId; /// For this function call, there are two `Argument` instances: /// - One for the expression `x` /// - One for the expression `+(y, 1)` -#[derive(Debug, Clone, PartialEq, Eq, Hash)] +#[derive(Debug)] pub struct Argument<'heap> { // TODO: we might be able to remove these pub id: NodeId, @@ -46,7 +46,7 @@ pub struct Argument<'heap> { /// - One for the label `:x` with the value `1` /// - One for the label `:y` with the value `2` /// - One for the label `:z` with the value `3` -#[derive(Debug, Clone, PartialEq, Eq, Hash)] +#[derive(Debug)] pub struct LabeledArgument<'heap> { pub id: NodeId, pub span: SpanId, @@ -91,7 +91,7 @@ pub struct LabeledArgument<'heap> { /// let func = if condition then fn1 else fn2 in /// func(value) /// ``` -#[derive(Debug, Clone, PartialEq, Eq, Hash)] +#[derive(Debug)] pub struct CallExpr<'heap> { pub id: NodeId, pub span: SpanId, diff --git a/libs/@local/hashql/ast/src/node/expr/closure.rs b/libs/@local/hashql/ast/src/node/expr/closure.rs index 6f7402fceb2..196f82db0ce 100644 --- a/libs/@local/hashql/ast/src/node/expr/closure.rs +++ b/libs/@local/hashql/ast/src/node/expr/closure.rs @@ -6,7 +6,7 @@ use crate::node::{generic::Generics, id::NodeId, r#type::Type}; /// A parameter declaration for a closure. /// /// Represents a named parameter with an associated type in a closure's signature. -#[derive(Debug, Clone, PartialEq, Eq, Hash)] +#[derive(Debug)] pub struct ClosureParam<'heap> { pub id: NodeId, pub span: SpanId, @@ -20,7 +20,7 @@ pub struct ClosureParam<'heap> { /// Defines the interface of a closure function, including its generic type parameters, /// input parameters, and return type. The signature provides all type information /// necessary for type checking and validation of the closure. -#[derive(Debug, Clone, PartialEq, Eq, Hash)] +#[derive(Debug)] pub struct ClosureSignature<'heap> { pub id: NodeId, pub span: SpanId, @@ -56,7 +56,7 @@ pub struct ClosureSignature<'heap> { /// fn(x: T, y: T): T => *(x, y) /// fn(x: T, y: T): T => *(x, y) /// ``` -#[derive(Debug, Clone, PartialEq, Eq, Hash)] +#[derive(Debug)] pub struct ClosureExpr<'heap> { pub id: NodeId, pub span: SpanId, diff --git a/libs/@local/hashql/ast/src/node/expr/dict.rs b/libs/@local/hashql/ast/src/node/expr/dict.rs index e3fb3a74f0f..2e81197a8ee 100644 --- a/libs/@local/hashql/ast/src/node/expr/dict.rs +++ b/libs/@local/hashql/ast/src/node/expr/dict.rs @@ -8,7 +8,7 @@ use crate::node::{id::NodeId, r#type::Type}; /// Represents a single key-value pair in a dictionary expression. /// Both the key and value are expressions that will be evaluated /// when the dictionary is created. -#[derive(Debug, Clone, PartialEq, Eq, Hash)] +#[derive(Debug)] pub struct DictEntry<'heap> { pub id: NodeId, pub span: SpanId, @@ -38,7 +38,7 @@ pub struct DictEntry<'heap> { /// ```text /// {"key1": value1, "key2": value2} /// ``` -#[derive(Debug, Clone, PartialEq, Eq, Hash)] +#[derive(Debug)] pub struct DictExpr<'heap> { pub id: NodeId, pub span: SpanId, diff --git a/libs/@local/hashql/ast/src/node/expr/field.rs b/libs/@local/hashql/ast/src/node/expr/field.rs index 371573863a8..84f23e2baf4 100644 --- a/libs/@local/hashql/ast/src/node/expr/field.rs +++ b/libs/@local/hashql/ast/src/node/expr/field.rs @@ -24,7 +24,7 @@ use crate::node::id::NodeId; /// ```text /// user.name /// ``` -#[derive(Debug, Clone, PartialEq, Eq, Hash)] +#[derive(Debug)] pub struct FieldExpr<'heap> { pub id: NodeId, pub span: SpanId, diff --git a/libs/@local/hashql/ast/src/node/expr/if.rs b/libs/@local/hashql/ast/src/node/expr/if.rs index cd8be7152bc..648f6c13117 100644 --- a/libs/@local/hashql/ast/src/node/expr/if.rs +++ b/libs/@local/hashql/ast/src/node/expr/if.rs @@ -32,7 +32,7 @@ use crate::node::id::NodeId; /// if has_permission /// then perform_action() /// ``` -#[derive(Debug, Clone, PartialEq, Eq, Hash)] +#[derive(Debug)] pub struct IfExpr<'heap> { pub id: NodeId, pub span: SpanId, diff --git a/libs/@local/hashql/ast/src/node/expr/index.rs b/libs/@local/hashql/ast/src/node/expr/index.rs index d57a2c24afe..c63ed42dd6d 100644 --- a/libs/@local/hashql/ast/src/node/expr/index.rs +++ b/libs/@local/hashql/ast/src/node/expr/index.rs @@ -32,7 +32,7 @@ use crate::node::id::NodeId; /// items[0] /// matrix[i][j] /// ``` -#[derive(Debug, Clone, PartialEq, Eq, Hash)] +#[derive(Debug)] pub struct IndexExpr<'heap> { pub id: NodeId, pub span: SpanId, diff --git a/libs/@local/hashql/ast/src/node/expr/input.rs b/libs/@local/hashql/ast/src/node/expr/input.rs index d0eeefec605..2b77aa1898a 100644 --- a/libs/@local/hashql/ast/src/node/expr/input.rs +++ b/libs/@local/hashql/ast/src/node/expr/input.rs @@ -28,7 +28,7 @@ use crate::node::{id::NodeId, r#type::Type}; /// input(limit, Int) /// input(limit, Int, 10) /// ``` -#[derive(Debug, Clone, PartialEq, Eq, Hash)] +#[derive(Debug)] pub struct InputExpr<'heap> { pub id: NodeId, pub span: SpanId, diff --git a/libs/@local/hashql/ast/src/node/expr/let.rs b/libs/@local/hashql/ast/src/node/expr/let.rs index 5efa2ade134..46eb8d5c199 100644 --- a/libs/@local/hashql/ast/src/node/expr/let.rs +++ b/libs/@local/hashql/ast/src/node/expr/let.rs @@ -27,7 +27,7 @@ use crate::node::{id::NodeId, r#type::Type}; /// let x = 42 in /// let x: Int = 42 in /// ``` -#[derive(Debug, Clone, PartialEq, Eq, Hash)] +#[derive(Debug)] pub struct LetExpr<'heap> { pub id: NodeId, pub span: SpanId, diff --git a/libs/@local/hashql/ast/src/node/expr/list.rs b/libs/@local/hashql/ast/src/node/expr/list.rs index c791f4125be..57f1c716c6c 100644 --- a/libs/@local/hashql/ast/src/node/expr/list.rs +++ b/libs/@local/hashql/ast/src/node/expr/list.rs @@ -7,7 +7,7 @@ use crate::node::{id::NodeId, r#type::Type}; /// /// Represents a single value in a list, containing the expression that /// produces the element value. -#[derive(Debug, Clone, PartialEq, Eq, Hash)] +#[derive(Debug)] pub struct ListElement<'heap> { pub id: NodeId, pub span: SpanId, @@ -36,7 +36,7 @@ pub struct ListElement<'heap> { /// [value1, value2, value3] /// [value1, value2, value3] as List /// ``` -#[derive(Debug, Clone, PartialEq, Eq, Hash)] +#[derive(Debug)] pub struct ListExpr<'heap> { pub id: NodeId, pub span: SpanId, diff --git a/libs/@local/hashql/ast/src/node/expr/mod.rs b/libs/@local/hashql/ast/src/node/expr/mod.rs index a0700ee1044..fd62deace95 100644 --- a/libs/@local/hashql/ast/src/node/expr/mod.rs +++ b/libs/@local/hashql/ast/src/node/expr/mod.rs @@ -72,7 +72,7 @@ use super::{id::NodeId, path::Path}; /// The examples below demonstrate the `JExpr` syntax (JSON-based frontend), as well as a fictional /// "documentation syntax" (used for readability) for each expression kind. Remember that these are /// just frontend representations - the AST itself is independent of any particular syntax. -#[derive(Debug, Clone, PartialEq, Eq, Hash)] +#[derive(Debug)] pub enum ExprKind<'heap> { /// A function call expression. /// @@ -519,7 +519,7 @@ pub enum ExprKind<'heap> { /// Each expression has a unique identifier and a span that points to its /// location in the source code, which are crucial for error reporting, /// debugging, and tracking nodes through transformation phases. -#[derive(Debug, Clone, PartialEq, Eq, Hash)] +#[derive(Debug)] pub struct Expr<'heap> { pub id: NodeId, pub span: SpanId, diff --git a/libs/@local/hashql/ast/src/node/expr/newtype.rs b/libs/@local/hashql/ast/src/node/expr/newtype.rs index 2a6d61866f8..f2ed36d4cc2 100644 --- a/libs/@local/hashql/ast/src/node/expr/newtype.rs +++ b/libs/@local/hashql/ast/src/node/expr/newtype.rs @@ -36,7 +36,7 @@ use crate::node::{generic::GenericConstraint, id::NodeId, r#type::Type}; /// newtype AccountId = String in /// AccountId("1234") /// ``` -#[derive(Debug, Clone, PartialEq, Eq, Hash)] +#[derive(Debug)] pub struct NewTypeExpr<'heap> { pub id: NodeId, pub span: SpanId, diff --git a/libs/@local/hashql/ast/src/node/expr/struct.rs b/libs/@local/hashql/ast/src/node/expr/struct.rs index 0a3fed6c2a0..37a38b081f2 100644 --- a/libs/@local/hashql/ast/src/node/expr/struct.rs +++ b/libs/@local/hashql/ast/src/node/expr/struct.rs @@ -7,7 +7,7 @@ use crate::node::{id::NodeId, r#type::Type}; /// /// A struct entry consists of a named field (represented by an identifier) /// and its corresponding value expression. -#[derive(Debug, Clone, PartialEq, Eq, Hash)] +#[derive(Debug)] pub struct StructEntry<'heap> { pub id: NodeId, pub span: SpanId, @@ -42,7 +42,7 @@ pub struct StructEntry<'heap> { /// (:) /// (field1: value1, field2: value2) /// ``` -#[derive(Debug, Clone, PartialEq, Eq, Hash)] +#[derive(Debug)] pub struct StructExpr<'heap> { pub id: NodeId, pub span: SpanId, diff --git a/libs/@local/hashql/ast/src/node/expr/tuple.rs b/libs/@local/hashql/ast/src/node/expr/tuple.rs index 2e190944ad4..109fa17a2ab 100644 --- a/libs/@local/hashql/ast/src/node/expr/tuple.rs +++ b/libs/@local/hashql/ast/src/node/expr/tuple.rs @@ -7,7 +7,7 @@ use crate::node::{id::NodeId, r#type::Type}; /// /// Represents a single value in a tuple, containing the expression that /// produces the element value. -#[derive(Debug, Clone, PartialEq, Eq, Hash)] +#[derive(Debug)] pub struct TupleElement<'heap> { pub id: NodeId, pub span: SpanId, @@ -42,7 +42,7 @@ pub struct TupleElement<'heap> { /// () /// (value1, value2, value3) /// ``` -#[derive(Debug, Clone, PartialEq, Eq, Hash)] +#[derive(Debug)] pub struct TupleExpr<'heap> { pub id: NodeId, pub span: SpanId, diff --git a/libs/@local/hashql/ast/src/node/expr/type.rs b/libs/@local/hashql/ast/src/node/expr/type.rs index 06f4ce0c21f..05efdadaf4f 100644 --- a/libs/@local/hashql/ast/src/node/expr/type.rs +++ b/libs/@local/hashql/ast/src/node/expr/type.rs @@ -28,7 +28,7 @@ use crate::node::{generic::GenericConstraint, id::NodeId, r#type::Type}; /// type UserId = String in /// type Point = {x: Float, y: Float} in /// ``` -#[derive(Debug, Clone, PartialEq, Eq, Hash)] +#[derive(Debug)] pub struct TypeExpr<'heap> { pub id: NodeId, pub span: SpanId, From 0116eff8f28c4e03847edc3394f1904c0dbb4f5e Mon Sep 17 00:00:00 2001 From: Bilal Mahmoud <7252775+indietyp@users.noreply.github.com> Date: Tue, 16 Jun 2026 11:01:00 +0200 Subject: [PATCH 49/55] fix: docs and dependencies --- Cargo.lock | 4 - libs/@local/hashql/ast/Cargo.toml | 4 - libs/@local/hashql/ast/src/lower/mod.rs | 164 ++++-------------- .../src/lower/type_extractor/definition.rs | 5 +- .../ast/src/lower/type_extractor/mod.rs | 6 +- .../ast/src/lower/type_extractor/translate.rs | 10 +- .../@local/hashql/core/src/collections/mod.rs | 2 + 7 files changed, 45 insertions(+), 150 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 6209888d114..957d5de1d87 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -4058,10 +4058,6 @@ dependencies = [ name = "hashql-ast" version = "0.0.0" dependencies = [ - "derive_more", - "enum-iterator", - "foldhash 0.2.0", - "hashbrown 0.17.0", "hashql-compiletest", "hashql-core", "hashql-diagnostics", diff --git a/libs/@local/hashql/ast/Cargo.toml b/libs/@local/hashql/ast/Cargo.toml index 41fbcbae2ea..9ace6d1f4ec 100644 --- a/libs/@local/hashql/ast/Cargo.toml +++ b/libs/@local/hashql/ast/Cargo.toml @@ -16,10 +16,6 @@ hashql-diagnostics = { workspace = true, public = true } # Private workspace dependencies # Private third-party dependencies -derive_more = { workspace = true, features = ["display"] } -enum-iterator = { workspace = true } -foldhash = { workspace = true } -hashbrown = { workspace = true } simple-mermaid = { workspace = true } tracing = { workspace = true } diff --git a/libs/@local/hashql/ast/src/lower/mod.rs b/libs/@local/hashql/ast/src/lower/mod.rs index dc913f8022b..800c217fd33 100644 --- a/libs/@local/hashql/ast/src/lower/mod.rs +++ b/libs/@local/hashql/ast/src/lower/mod.rs @@ -1,56 +1,31 @@ -//! HashQL AST lowering and transformation pipeline. +//! AST lowering pipeline. //! -//! This module provides the core lowering functionality that transforms parsed HashQL AST nodes -//! into a form suitable for type checking and code generation in the HIR. The lowering process -//! applies multiple transformation passes including name resolution, special form expansion, -//! sanitization, import resolution, name mangling, type extraction, and node renumbering. +//! Transforms a parsed HashQL AST into a form suitable for HIR construction +//! by running a sequence of passes that modify the tree in place. //! -//! The lowering pipeline ensures that: -//! - All names are properly resolved and scoped -//! - Special forms and macros are expanded -//! - Code is sanitized for safety and correctness -//! - Type information is extracted and preserved -//! - Nodes are uniquely numbered for analysis +//! # Pipeline //! -//! # Pipeline Overview +//! The [`lower`] function runs these passes in order: //! -//! The [`lower`] function orchestrates the complete transformation pipeline: +//! 1. [`Expander`] resolves names, expands special forms, and resolves imports in a single top-down +//! traversal. +//! 2. [`Sanitizer`] validates the expanded tree (e.g. rejects bare special form references that +//! survived expansion). +//! 3. [`NameMangler`] rewrites user-facing names into internal mangled forms. +//! 4. [`TypeDefinitionExtractor`] collects named type definitions. +//! 5. [`NodeRenumberer`] assigns unique IDs to every AST node. +//! 6. [`TypeExtractor`] collects anonymous types and closure signatures. //! -//! 1. **Pre-expansion name resolution** - Resolves names before macro expansion -//! 2. **Special form expansion** - Expands macros and special language constructs -//! 3. **Sanitization** - Applies safety and correctness transformations -//! 4. **Import resolution** - Resolves module imports and builds namespace -//! 5. **Name mangling** - Applies name mangling for code generation -//! 6. **Type definition extraction** - Extracts named type definitions -//! 7. **Node renumbering** - Assigns unique identifiers to AST nodes -//! 8. **Type extraction** - Extracts anonymous types and closure signatures +//! Each pass may emit diagnostics. The pipeline continues through all passes +//! and returns the union of all diagnostics, so the user sees every error at +//! once rather than one pass at a time. //! -//! # Examples -//! -//! ```rust -//! use hashql_ast::lower::lower; -//! use hashql_core::{ -//! r#type::environment::Environment, -//! module::ModuleRegistry, -//! symbol::Symbol, -//! }; -//! -//! # fn example<'heap>(env: &Environment<'heap>, registry: &ModuleRegistry<'heap>, mut expr: hashql_ast::node::expr::Expr<'heap>, scratch: &mut hashql_core::heap::Scratch) { -//! let module_name = env.heap.intern_symbol("my_module"); -//! let result = lower(module_name, &mut expr, env, registry, scratch); -//! -//! match result { -//! Ok(extracted_types) => { -//! // Use extracted type information for analysis -//! println!("Extracted {} local types", extracted_types.value.locals.len()); -//! } -//! Err(diagnostics) => { -//! // Handle lowering errors -//! eprintln!("Lowering failed with {} errors", diagnostics.into_issues().len()); -//! } -//! } -//! # } -//! ``` +//! [`Expander`]: expander::Expander +//! [`Sanitizer`]: sanitizer::Sanitizer +//! [`NameMangler`]: name_mangler::NameMangler +//! [`TypeDefinitionExtractor`]: type_extractor::TypeDefinitionExtractor +//! [`NodeRenumberer`]: node_renumberer::NodeRenumberer +//! [`TypeExtractor`]: type_extractor::TypeExtractor use hashql_core::{ heap::ResetAllocator, @@ -73,109 +48,38 @@ use crate::{node::expr::Expr, visit::Visitor as _}; pub mod error; pub mod expander; -// pub mod import_resolver; pub mod name_mangler; pub mod node_renumberer; -// pub mod pre_expansion_name_resolver; pub mod sanitizer; -// pub mod special_form_expander; pub mod type_extractor; -/// Type information extracted during the lowering process. -/// -/// This structure contains all the type-related information that is discovered and extracted -/// during the AST lowering pipeline. It includes locally defined types, anonymous types -/// (such as tuple types or array types), and closure signatures. -/// -/// The extracted types are used by subsequent compilation phases for type checking, -/// inference, and code generation. +/// Type information collected by the lowering pipeline. #[derive(Debug)] pub struct ExtractedTypes<'heap> { /// Named type definitions local to the current module. - /// - /// These are types that have been explicitly defined in the source code with names, - /// such as struct definitions, enum definitions, and type aliases. pub locals: TypeLocals<'heap>, - /// Anonymous types discovered during lowering. - /// - /// These include types that don't have explicit names in the source code but are - /// constructed from type expressions, such as tuple types, array types, function - /// types, and generic instantiations. + /// Anonymous types from type expressions (tuples, unions, generics, etc.). pub anonymous: AnonymousTypes, - /// Closure signatures extracted from closure expressions. - /// - /// Contains type signature information for all closure expressions found in the - /// AST, including parameter types, return types, and capture information. + /// Closure signatures from closure expressions. pub signatures: ClosureSignatures<'heap>, } -/// Performs the complete AST lowering transformation pipeline. -/// -/// This function orchestrates all the transformation passes required to convert a parsed HashQL AST -/// into a form suitable for type checking and code generation. The lowering process is destructive -/// – it modifies the provided AST in place while extracting type information and collecting -/// diagnostics. -/// -/// The function applies transformations in a specific order to ensure correctness: -/// each pass may depend on the results of previous passes, and the order is carefully -/// designed to handle dependencies between different kinds of analysis and transformation. -/// -/// # Arguments -/// -/// - `module_name` - The symbolic name of the module being lowered, used for type resolution. -/// - `expr` - The root expression of the AST to be lowered (modified in place). -/// - `env` - The type environment containing heap allocation and type system context. -/// - `registry` - Registry of available modules for import and name resolution. -/// -/// Returns a [`Status`] containing either the extracted type information on success, or diagnostic -/// issues if the lowering process encounters errors. Even on success, the status may -/// contain warnings or other non-fatal diagnostics. -/// -/// # Examples -/// -/// ```rust -/// use hashql_ast::lower::lower; -/// use hashql_core::{ -/// r#type::environment::Environment, -/// module::ModuleRegistry, -/// symbol::Symbol, -/// }; -/// # use hashql_diagnostics::{Success, Failure}; -/// -/// # fn example<'heap>(env: &Environment<'heap>, registry: &ModuleRegistry<'heap>, mut expr: hashql_ast::node::expr::Expr<'heap>, scratch: &mut hashql_core::heap::Scratch) { -/// let module_name = env.heap.intern_symbol("my_module"); -/// let result = lower(module_name, &mut expr, env, registry, scratch); -/// -/// // Check for successful lowering -/// match result { -/// Ok(Success {value, advisories}) => { -/// // Process the successful result -/// println!("Successfully lowered module with {} local types", -/// value.locals.len()); -/// } -/// Err(Failure {primary, secondary}) => { -/// // Handle errors -/// eprintln!("Primary Error: {primary:?}"); +/// Runs the full lowering pipeline on `expr`, modifying it in place. /// -/// for error in secondary { -/// eprintln!("Secondary Error: {error:?}"); -/// } -/// } -/// } -/// # } -/// ``` +/// Returns the collected [`ExtractedTypes`] on success. All passes run +/// regardless of earlier errors so that the returned diagnostics cover +/// the entire tree. /// /// # Errors /// -/// The function collects diagnostics from each transformation pass and returns them -/// as part of the [`Status`]. Possible error categories include: +/// Returns a [`Status`] containing diagnostics from any pass that failed: /// -/// - [`LoweringDiagnosticCategory::Expander`] - Errors during special form expansion -/// - [`LoweringDiagnosticCategory::Sanitizer`] - Errors during code sanitization -/// - [`LoweringDiagnosticCategory::Resolver`] - Errors during import resolution -/// - [`LoweringDiagnosticCategory::Extractor`] - Errors during type extraction +/// - [`LoweringDiagnosticCategory::Expander`]: name resolution, special form expansion, or import +/// resolution errors. +/// - [`LoweringDiagnosticCategory::Sanitizer`]: invalid AST constructs that survived expansion. +/// - [`LoweringDiagnosticCategory::Extractor`]: type extraction errors. pub fn lower<'heap, S>( module_name: Symbol<'heap>, expr: &mut Expr<'heap>, diff --git a/libs/@local/hashql/ast/src/lower/type_extractor/definition.rs b/libs/@local/hashql/ast/src/lower/type_extractor/definition.rs index c237b45089f..151604b7949 100644 --- a/libs/@local/hashql/ast/src/lower/type_extractor/definition.rs +++ b/libs/@local/hashql/ast/src/lower/type_extractor/definition.rs @@ -101,10 +101,7 @@ impl<'env, 'heap> TypeDefinitionExtractor<'env, 'heap> { let mut diagnostics = DiagnosticIssues::new(); // Setup the translation unit and environment - let mut locals = FastHashMap::with_capacity_and_hasher( - self.alias.len() + self.opaque.len(), - foldhash::fast::RandomState::default(), - ); + let mut locals = fast_hash_map_with_capacity(self.alias.len() + self.opaque.len()); let mut allocated_generic_constraints = 0; // This could be easier if we were to use a `FastHashMap` for the alias and opaque diff --git a/libs/@local/hashql/ast/src/lower/type_extractor/mod.rs b/libs/@local/hashql/ast/src/lower/type_extractor/mod.rs index 5827bdb89ea..1a67aad1f42 100644 --- a/libs/@local/hashql/ast/src/lower/type_extractor/mod.rs +++ b/libs/@local/hashql/ast/src/lower/type_extractor/mod.rs @@ -7,7 +7,7 @@ use alloc::borrow::Cow; use core::ops::Index; use hashql_core::{ - collections::FastHashMap, + collections::{FastHashMap, FastHashMapIntoIter}, module::{ ModuleRegistry, locals::{TypeDef, TypeLocals}, @@ -45,7 +45,7 @@ impl Index for AnonymousTypes { } impl IntoIterator for AnonymousTypes { - type IntoIter = hashbrown::hash_map::IntoIter; + type IntoIter = FastHashMapIntoIter; type Item = (NodeId, TypeId); fn into_iter(self) -> Self::IntoIter { @@ -65,7 +65,7 @@ impl<'heap> Index for ClosureSignatures<'heap> { } impl<'heap> IntoIterator for ClosureSignatures<'heap> { - type IntoIter = hashbrown::hash_map::IntoIter>; + type IntoIter = FastHashMapIntoIter>; type Item = (NodeId, TypeDef<'heap>); fn into_iter(self) -> Self::IntoIter { diff --git a/libs/@local/hashql/ast/src/lower/type_extractor/translate.rs b/libs/@local/hashql/ast/src/lower/type_extractor/translate.rs index 02b34e355e6..f7f29b322a2 100644 --- a/libs/@local/hashql/ast/src/lower/type_extractor/translate.rs +++ b/libs/@local/hashql/ast/src/lower/type_extractor/translate.rs @@ -8,7 +8,10 @@ use alloc::borrow::Cow; use hashql_core::{ - collections::{FastHashMap, FastHashSet, SmallVec, TinyVec, fast_hash_set_with_capacity}, + collections::{ + FastHashMap, FastHashSet, SmallVec, TinyVec, fast_hash_map_with_capacity, + fast_hash_set_with_capacity, + }, intern::Provisioned, module::{ ModuleRegistry, Universe, @@ -640,10 +643,7 @@ where node::r#type::TypeKind::Struct(struct_type) => { let mut fields = SmallVec::with_capacity(struct_type.fields.len()); - let mut spans = FastHashMap::with_capacity_and_hasher( - fields.len(), - foldhash::fast::RandomState::default(), - ); + let mut spans = fast_hash_map_with_capacity(fields.len()); for node::r#type::StructField { name, r#type, span, .. diff --git a/libs/@local/hashql/core/src/collections/mod.rs b/libs/@local/hashql/core/src/collections/mod.rs index 930b4ba50d2..5f7c9c4bf4a 100644 --- a/libs/@local/hashql/core/src/collections/mod.rs +++ b/libs/@local/hashql/core/src/collections/mod.rs @@ -14,6 +14,8 @@ pub type FastHasher = foldhash::fast::RandomState; pub type FastHashMap = HashMap; pub type FastHashMapEntry<'map, K, V, A = Global> = hashbrown::hash_map::Entry<'map, K, V, FastHasher, A>; +pub type FastHashMapIntoIter = hashbrown::hash_map::IntoIter; +pub type FastHashMapIter<'map, K, V> = hashbrown::hash_map::Iter<'map, K, V>; pub type FastHashSet = HashSet; pub type FastHashSetEntry<'map, T, A = Global> = hashbrown::hash_set::Entry<'map, T, FastHasher, A>; From 9c8a5e0ca9e42aed33693a9b66bbb36b55cfb9d9 Mon Sep 17 00:00:00 2001 From: Bilal Mahmoud <7252775+indietyp@users.noreply.github.com> Date: Tue, 16 Jun 2026 11:26:07 +0200 Subject: [PATCH 50/55] fix: docs --- libs/@local/hashql/ast/src/lib.rs | 51 ++++--------------- .../hashql/ast/src/lower/expander/mod.rs | 6 +-- .../hashql/ast/src/lower/expander/type.rs | 2 +- 3 files changed, 14 insertions(+), 45 deletions(-) diff --git a/libs/@local/hashql/ast/src/lib.rs b/libs/@local/hashql/ast/src/lib.rs index 238ff13d822..988acb364b0 100644 --- a/libs/@local/hashql/ast/src/lib.rs +++ b/libs/@local/hashql/ast/src/lib.rs @@ -1,47 +1,16 @@ -//! # HashQL Abstract Syntax Tree +//! HashQL abstract syntax tree and lowering pipeline. //! -//! This crate defines the Abstract Syntax Tree (AST) for HashQL, a side-effect free, -//! purely functional query language designed for bi-temporal graph databases. +//! This crate defines the AST for HashQL and the [`lower`] pipeline that +//! transforms it into a form suitable for HIR construction. The AST is +//! frontend-agnostic: nodes are defined independently of any syntax, with +//! J-Expr as the current primary parser. //! -//! ## Overview +//! # Modules //! -//! The HashQL AST provides a structured representation of HashQL programs after parsing. -//! It captures the hierarchical structure of the code with nodes for expressions, types, -//! and declarations. This AST is the foundation for subsequent compilation phases including -//! type checking, optimization, and evaluation. -//! -//! ## Key Features -//! -//! - **Frontend Agnostic**: The AST is designed to be independent of any particular syntax. While -//! the current primary interface is through J-Expr (JSON-based expressions), the AST can support -//! multiple frontend syntaxes. -//! -//! - **Memory Efficient**: Uses arena allocation through a custom [`heap`] module to minimize -//! allocations and improve performance during parsing and transformation. -//! -//! - **Source Tracking**: Each node maintains its location in the source code via span identifiers. -//! -//! - **Comprehensive Language Model**: Supports the full range of language constructs in HashQL, -//! including expressions, types, path references, and special forms. -//! -//! ## Core Modules -//! -//! - [`node`]: Defines the AST node types that represent language constructs -//! - [`lowering`]: Defines the lowering process for AST nodes, converting them into a more -//! optimized form suitable for conversion into the HIR. -//! -//! ## Special Forms -//! -//! HashQL implements several language constructs as "special forms" that are initially parsed -//! as function calls and then transformed into specialized AST nodes. These include: -//! -//! - `let` for variable binding -//! - `if` for conditional expressions -//! - `fn` for closure definitions -//! - `use` for module imports -//! - Field and index access expressions -//! -//! [`heap`]: hashql_core::heap +//! - [`node`]: AST node types (expressions, types, paths, generics). +//! - [`lower`]: Lowering pipeline (expansion, sanitization, type extraction). +//! - [`visit`]: Visitor trait for AST traversal. +//! - [`format`](mod@format): Debug formatting for AST dumps. //! //! ## Workspace dependencies #![cfg_attr(doc, doc = simple_mermaid::mermaid!("../docs/dependency-diagram.mmd"))] diff --git a/libs/@local/hashql/ast/src/lower/expander/mod.rs b/libs/@local/hashql/ast/src/lower/expander/mod.rs index 85211beea9f..6d8db089cf7 100644 --- a/libs/@local/hashql/ast/src/lower/expander/mod.rs +++ b/libs/@local/hashql/ast/src/lower/expander/mod.rs @@ -93,8 +93,8 @@ struct CurrentItem<'heap> { /// Resolves every path in the AST against the module namespace, rewrites /// paths to their absolute form, and lowers special form calls (e.g., `let`, /// `fn`, `use`) into typed AST nodes. Errors that prevent resolution produce -/// [`Expr::dummy`] placeholders so that later diagnostics can be suppressed -/// for cascading failures. +/// dummy expression placeholders so that later diagnostics can be +/// suppressed for cascading failures. pub struct Expander<'env, 'heap, S> { heap: &'heap heap::Heap, scratch: S, @@ -161,7 +161,7 @@ impl<'env, 'heap, S> Expander<'env, 'heap, S> { /// /// Returns `None` when the expression resolved to a local binding, /// was not a path, or resolution failed (in which case the expression - /// is replaced with [`Expr::dummy`]). + /// is replaced with a dummy expression). fn visit(&mut self, expr: &mut node::expr::Expr<'heap>) -> Option> where S: BumpAllocator, diff --git a/libs/@local/hashql/ast/src/lower/expander/type.rs b/libs/@local/hashql/ast/src/lower/expander/type.rs index e42aa36e6b8..c55254cca07 100644 --- a/libs/@local/hashql/ast/src/lower/expander/type.rs +++ b/libs/@local/hashql/ast/src/lower/expander/type.rs @@ -104,7 +104,7 @@ where /// /// Paths, tuples, structs, `_`, and type constructor calls (`|`, `&`) are /// valid. Everything else produces a diagnostic and returns [`Type::dummy`]. -/// [`Expr::Dummy`] is suppressed (a resolution error was already reported). +/// [`ExprKind::Dummy`] is suppressed (a resolution error was already reported). pub(super) fn lower_expr_to_type<'heap, S>( expander: &mut Expander<'_, 'heap, S>, expr: Expr<'heap>, From 290a5b0034198528ee5c47b02c0e94037f8b6154 Mon Sep 17 00:00:00 2001 From: Bilal Mahmoud <7252775+indietyp@users.noreply.github.com> Date: Thu, 18 Jun 2026 17:20:58 +0200 Subject: [PATCH 51/55] chore: remove stray debugging --- Cargo.lock | 1 - libs/@local/hashql/ast/Cargo.toml | 1 - libs/@local/hashql/ast/src/lower/expander/let.rs | 2 -- 3 files changed, 4 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 957d5de1d87..b941f4dc2d1 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -4062,7 +4062,6 @@ dependencies = [ "hashql-core", "hashql-diagnostics", "simple-mermaid", - "tracing", ] [[package]] diff --git a/libs/@local/hashql/ast/Cargo.toml b/libs/@local/hashql/ast/Cargo.toml index 9ace6d1f4ec..08373e9b04b 100644 --- a/libs/@local/hashql/ast/Cargo.toml +++ b/libs/@local/hashql/ast/Cargo.toml @@ -17,7 +17,6 @@ hashql-diagnostics = { workspace = true, public = true } # Private third-party dependencies simple-mermaid = { workspace = true } -tracing = { workspace = true } [dev-dependencies] hashql-compiletest = { workspace = true } diff --git a/libs/@local/hashql/ast/src/lower/expander/let.rs b/libs/@local/hashql/ast/src/lower/expander/let.rs index ca99fd19f63..69485d05c77 100644 --- a/libs/@local/hashql/ast/src/lower/expander/let.rs +++ b/libs/@local/hashql/ast/src/lower/expander/let.rs @@ -54,12 +54,10 @@ where let item = expander.visit(&mut value.value); - tracing::info!("item: {:?}, item: {:?}", name.value, item); let kind = item.filter(|item| !item.has_arguments).map_or( BindingKind::Local(hashql_core::module::Universe::Value), |item| BindingKind::Remote(item.item), ); - tracing::info!("kind: {:?}", kind); expander.bind(name.value, kind, |expander| { expander.visit(&mut body.value); From d06c1fb27c4e8736b8401ed8c677180b2732c647 Mon Sep 17 00:00:00 2001 From: Bilal Mahmoud <7252775+indietyp@users.noreply.github.com> Date: Thu, 18 Jun 2026 17:45:01 +0200 Subject: [PATCH 52/55] fix: formatting --- .../expander/generics-multiple-module-segments.jsonc | 8 ++++++-- .../expander/generics-multiple-module-segments.stderr | 8 ++++---- .../hir/tests/ui/lower/checking/bind-arguments.jsonc | 6 +++++- .../hir/tests/ui/lower/inference/bind-arguments.jsonc | 6 +++++- .../hir/tests/ui/lower/inference/infer-argument.jsonc | 5 ++++- 5 files changed, 24 insertions(+), 9 deletions(-) diff --git a/libs/@local/hashql/ast/tests/ui/lower/expander/generics-multiple-module-segments.jsonc b/libs/@local/hashql/ast/tests/ui/lower/expander/generics-multiple-module-segments.jsonc index f81ffe85e1c..d6cf9e7798e 100644 --- a/libs/@local/hashql/ast/tests/ui/lower/expander/generics-multiple-module-segments.jsonc +++ b/libs/@local/hashql/ast/tests/ui/lower/expander/generics-multiple-module-segments.jsonc @@ -1,4 +1,8 @@ //@ run: fail //@ description: generic arguments on multiple module segments should all be reported -["::kernel::special_form::if", { "#literal": true }, { "#literal": 1 }] -//~^ ERROR generic argument not allowed here +[ + "::kernel::special_form::if", + //~^ ERROR generic argument not allowed here + { "#literal": true }, + { "#literal": 1 } +] diff --git a/libs/@local/hashql/ast/tests/ui/lower/expander/generics-multiple-module-segments.stderr b/libs/@local/hashql/ast/tests/ui/lower/expander/generics-multiple-module-segments.stderr index 0580923a6ef..432c1f1e9fd 100644 --- a/libs/@local/hashql/ast/tests/ui/lower/expander/generics-multiple-module-segments.stderr +++ b/libs/@local/hashql/ast/tests/ui/lower/expander/generics-multiple-module-segments.stderr @@ -1,9 +1,9 @@ error[expander::generic-arguments-in-module]: Generic arguments in module path ╭▸ -3 │ ["::kernel::special_form::if", { "#literal": true }, { "#literal": 1 }] - │ ┯━━━━━━ ────── neither is this - │ │ - │ generic argument not allowed here +4 │ "::kernel::special_form::if", + │ ┯━━━━━━ ────── neither is this + │ │ + │ generic argument not allowed here │ ├ help: move the generic arguments to the final segment of the path, or remove them ╰ note: modules are not generic; only the final item in a path can be parameterized \ No newline at end of file diff --git a/libs/@local/hashql/hir/tests/ui/lower/checking/bind-arguments.jsonc b/libs/@local/hashql/hir/tests/ui/lower/checking/bind-arguments.jsonc index 0ec04681e8a..b92706e2b1f 100644 --- a/libs/@local/hashql/hir/tests/ui/lower/checking/bind-arguments.jsonc +++ b/libs/@local/hashql/hir/tests/ui/lower/checking/bind-arguments.jsonc @@ -1,3 +1,7 @@ //@ run: pass //@ description: Verifies type checking for binding specific types (Number, Integer) to a generic function call. -["::core::math::add", { "#literal": 42.12 }, { "#literal": 42 }] +[ + "::core::math::add", + { "#literal": 42.12 }, + { "#literal": 42 } +] diff --git a/libs/@local/hashql/hir/tests/ui/lower/inference/bind-arguments.jsonc b/libs/@local/hashql/hir/tests/ui/lower/inference/bind-arguments.jsonc index 6344fb59bb6..ffc2b7c5438 100644 --- a/libs/@local/hashql/hir/tests/ui/lower/inference/bind-arguments.jsonc +++ b/libs/@local/hashql/hir/tests/ui/lower/inference/bind-arguments.jsonc @@ -1,3 +1,7 @@ //@ run: pass //@ description: Verifies type inference for explicitly binding generic arguments (Number, Integer) in a function call. -["::core::math::add", { "#literal": 42.12 }, { "#literal": 42 }] +[ + "::core::math::add", + { "#literal": 42.12 }, + { "#literal": 42 } +] diff --git a/libs/@local/hashql/hir/tests/ui/lower/inference/infer-argument.jsonc b/libs/@local/hashql/hir/tests/ui/lower/inference/infer-argument.jsonc index 9cc8dc537f9..fdc7475f12b 100644 --- a/libs/@local/hashql/hir/tests/ui/lower/inference/infer-argument.jsonc +++ b/libs/@local/hashql/hir/tests/ui/lower/inference/infer-argument.jsonc @@ -1,6 +1,9 @@ //@ run: pass //@ description: Test that inference in argument position works correctly -["use", "::core::math", "*", +[ + "use", + "::core::math", + "*", [ [ "fn", From ae3ca8b283f63a490ad6cfce01951a42a99d82b3 Mon Sep 17 00:00:00 2001 From: Bilal Mahmoud <7252775+indietyp@users.noreply.github.com> Date: Thu, 18 Jun 2026 17:50:08 +0200 Subject: [PATCH 53/55] fix: delay access dummy error --- libs/@local/hashql/ast/src/lower/expander/access.rs | 12 ++++++++---- .../access-field-index-out-of-bounds.jsonc | 1 + .../access-field-index-out-of-bounds.stderr | 8 ++++++++ .../access-field-literal-boolean.jsonc | 1 + .../access-field-literal-boolean.stderr | 8 ++++++++ .../access-field-literal-string.jsonc | 1 + .../access-field-literal-string.stderr | 8 ++++++++ 7 files changed, 35 insertions(+), 4 deletions(-) diff --git a/libs/@local/hashql/ast/src/lower/expander/access.rs b/libs/@local/hashql/ast/src/lower/expander/access.rs index f115e394a34..ec4e99ab53b 100644 --- a/libs/@local/hashql/ast/src/lower/expander/access.rs +++ b/libs/@local/hashql/ast/src/lower/expander/access.rs @@ -3,7 +3,7 @@ use core::mem; use hashql_core::{ heap::BumpAllocator, span::SpanId, - symbol::{Ident, IdentKind}, + symbol::{Ident, IdentKind, sym}, value::Primitive, }; @@ -78,13 +78,17 @@ fn lower_access_impl<'heap, S>( where S: BumpAllocator, { - let Some(field) = argument_to_field(expander, field) else { - return Expr::dummy(); - }; + // `argument_to_field` will add a diagnostic directly, therefore unlike the other expanders we + // just create the synthetic dummy + let field = argument_to_field(expander, field).unwrap_or_else(|| Ident::synthetic(sym::dummy)); let mut value = mem::replace(&mut value.value, Expr::dummy()); expander.visit(&mut value); + if field.value == sym::dummy { + return Expr::dummy(); + } + Expr { id: NodeId::PLACEHOLDER, span, diff --git a/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/access-field-index-out-of-bounds.jsonc b/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/access-field-index-out-of-bounds.jsonc index a45b32c3f55..1a4c0e3d1de 100644 --- a/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/access-field-index-out-of-bounds.jsonc +++ b/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/access-field-index-out-of-bounds.jsonc @@ -2,3 +2,4 @@ //@ description: Field index out of bounds should error ["::kernel::special_form::access", "data", { "#literal": 18446744073709551616 }] //~^ ERROR field index is out of bounds +//~| ERROR cannot find value `data` in this scope diff --git a/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/access-field-index-out-of-bounds.stderr b/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/access-field-index-out-of-bounds.stderr index 80a6cef0ca7..f805d8bd0e2 100644 --- a/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/access-field-index-out-of-bounds.stderr +++ b/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/access-field-index-out-of-bounds.stderr @@ -1,3 +1,11 @@ +error[expander::unresolved-variable]: Unresolved variable + ╭▸ +3 │ ["::kernel::special_form::access", "data", { "#literal": 18446744073709551616 }] + │ ━━━━ cannot find value `data` in this scope + │ + ├ help: check the spelling, or import the name with a `use` statement + ╰ note: this could be a typo, a name used outside its scope, or a missing declaration; if it is a function or type from another module, you may need to import it first + error[expander::field-index-out-of-bounds]: Field index out of bounds ╭▸ 3 │ ["::kernel::special_form::access", "data", { "#literal": 18446744073709551616 }] diff --git a/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/access-field-literal-boolean.jsonc b/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/access-field-literal-boolean.jsonc index 9700f27ea38..316cd176be1 100644 --- a/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/access-field-literal-boolean.jsonc +++ b/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/access-field-literal-boolean.jsonc @@ -2,3 +2,4 @@ //@ description: Field access with boolean literal should error ["::kernel::special_form::access", "data", { "#literal": true }] //~^ ERROR expected an integer for field indexing +//~| ERROR cannot find value `data` in this scope diff --git a/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/access-field-literal-boolean.stderr b/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/access-field-literal-boolean.stderr index b775a33892e..6addf9781df 100644 --- a/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/access-field-literal-boolean.stderr +++ b/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/access-field-literal-boolean.stderr @@ -1,3 +1,11 @@ +error[expander::unresolved-variable]: Unresolved variable + ╭▸ +3 │ ["::kernel::special_form::access", "data", { "#literal": true }] + │ ━━━━ cannot find value `data` in this scope + │ + ├ help: check the spelling, or import the name with a `use` statement + ╰ note: this could be a typo, a name used outside its scope, or a missing declaration; if it is a function or type from another module, you may need to import it first + error[expander::invalid-field-literal-type]: Invalid field literal type ╭▸ 3 │ ["::kernel::special_form::access", "data", { "#literal": true }] diff --git a/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/access-field-literal-string.jsonc b/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/access-field-literal-string.jsonc index be58bf8afd2..70e26cfe4a9 100644 --- a/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/access-field-literal-string.jsonc +++ b/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/access-field-literal-string.jsonc @@ -2,3 +2,4 @@ //@ description: Field access with string literal should error ["::kernel::special_form::access", "data", { "#literal": "field_name" }] //~^ ERROR expected an integer for field indexing +//~| ERROR cannot find value `data` in this scope diff --git a/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/access-field-literal-string.stderr b/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/access-field-literal-string.stderr index 6091f29fdd1..beaee1d5975 100644 --- a/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/access-field-literal-string.stderr +++ b/libs/@local/hashql/ast/tests/ui/lower/expander/special-form-expander/access-field-literal-string.stderr @@ -1,3 +1,11 @@ +error[expander::unresolved-variable]: Unresolved variable + ╭▸ +3 │ ["::kernel::special_form::access", "data", { "#literal": "field_name" }] + │ ━━━━ cannot find value `data` in this scope + │ + ├ help: check the spelling, or import the name with a `use` statement + ╰ note: this could be a typo, a name used outside its scope, or a missing declaration; if it is a function or type from another module, you may need to import it first + error[expander::invalid-field-literal-type]: Invalid field literal type ╭▸ 3 │ ["::kernel::special_form::access", "data", { "#literal": "field_name" }] From 2c2978633ad3b358bb0e4160f6f9e46a648f2e00 Mon Sep 17 00:00:00 2001 From: Bilal Mahmoud <7252775+indietyp@users.noreply.github.com> Date: Fri, 19 Jun 2026 17:08:37 +0200 Subject: [PATCH 54/55] fix: scoped API change --- libs/@local/hashql/ast/src/lower/expander/fn.rs | 4 ++-- libs/@local/hashql/ast/src/lower/expander/type.rs | 2 +- libs/@local/hashql/ast/src/lower/expander/use.rs | 2 +- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/libs/@local/hashql/ast/src/lower/expander/fn.rs b/libs/@local/hashql/ast/src/lower/expander/fn.rs index 5073b1c60fa..2528018ed6c 100644 --- a/libs/@local/hashql/ast/src/lower/expander/fn.rs +++ b/libs/@local/hashql/ast/src/lower/expander/fn.rs @@ -146,7 +146,7 @@ where { let diagnostics = &mut expander.diagnostics; - expander.scratch.scoped(|scratch| { + expander.scratch.scoped_mut(|scratch| { let mut seen = fast_hash_map_with_capacity_in(generics.params.len(), scratch); generics.params.retain(|param| { @@ -207,7 +207,7 @@ where { let diagnostics = &mut expander.diagnostics; - expander.scratch.scoped(|scratch| { + expander.scratch.scoped_mut(|scratch| { let mut seen = fast_hash_map_with_capacity_in(params.len(), scratch); params.retain(|param| { diff --git a/libs/@local/hashql/ast/src/lower/expander/type.rs b/libs/@local/hashql/ast/src/lower/expander/type.rs index c55254cca07..b210bd06942 100644 --- a/libs/@local/hashql/ast/src/lower/expander/type.rs +++ b/libs/@local/hashql/ast/src/lower/expander/type.rs @@ -311,7 +311,7 @@ where { // Generic constraints _may_ be recursive. To allow for that we must put the name of the // ident into view before we do anything - let constraints = expander.scratch.scoped(|scratch| { + let constraints = expander.scratch.scoped_mut(|scratch| { path_arguments_to_constraints_unvalidated( expander.heap, scratch, diff --git a/libs/@local/hashql/ast/src/lower/expander/use.rs b/libs/@local/hashql/ast/src/lower/expander/use.rs index ff85964ce44..db7d838b1d4 100644 --- a/libs/@local/hashql/ast/src/lower/expander/use.rs +++ b/libs/@local/hashql/ast/src/lower/expander/use.rs @@ -155,7 +155,7 @@ where if let Some(UseKind::Named(bindings)) = &mut imports { let diagnostics = &mut expander.diagnostics; - expander.scratch.scoped(|scratch| { + expander.scratch.scoped_mut(|scratch| { let mut seen = fast_hash_map_with_capacity_in(bindings.len(), scratch); bindings.retain(|binding| { From ea95719d0773a0b2f99e89d1ed44acd9d2375bd8 Mon Sep 17 00:00:00 2001 From: Bilal Mahmoud <7252775+indietyp@users.noreply.github.com> Date: Fri, 19 Jun 2026 17:22:40 +0200 Subject: [PATCH 55/55] fix: lower nested call expr correctly --- .../hashql/ast/src/lower/expander/type.rs | 13 +++++---- .../ui/lower/expander/nested-union.jsonc | 3 ++ .../ui/lower/expander/nested-union.stdout | 29 +++++++++++++++++++ 3 files changed, 40 insertions(+), 5 deletions(-) create mode 100644 libs/@local/hashql/ast/tests/ui/lower/expander/nested-union.jsonc create mode 100644 libs/@local/hashql/ast/tests/ui/lower/expander/nested-union.stdout diff --git a/libs/@local/hashql/ast/src/lower/expander/type.rs b/libs/@local/hashql/ast/src/lower/expander/type.rs index b210bd06942..a2669dde9d3 100644 --- a/libs/@local/hashql/ast/src/lower/expander/type.rs +++ b/libs/@local/hashql/ast/src/lower/expander/type.rs @@ -49,7 +49,7 @@ where hashql_core::module::item::ItemKind::Intrinsic(IntrinsicItem::Type(type_intrinsic)), }, has_arguments: _, // We don't care here, intrinsics never have arguments - }) = expander.with_universe(hashql_core::module::Universe::Type, |expander| { + }) = expander.with_universe(Universe::Type, |expander| { expander.visit(&mut call.function) }) else { @@ -68,7 +68,11 @@ where }; let mut types = Vec::with_capacity_in(call.arguments.len(), expander.heap); - for argument in call.arguments { + for mut argument in call.arguments { + expander.with_universe(Universe::Type, |expander| { + expander.visit(&mut argument.value) + }); + types.push(lower_expr_to_type(expander, argument.value)); } @@ -389,9 +393,8 @@ where } }, |expander, constraints| { - let item = expander.with_universe(hashql_core::module::Universe::Type, |expander| { - expander.visit(&mut value) - }); + let item = + expander.with_universe(Universe::Type, |expander| expander.visit(&mut value)); if let Some(CurrentItem { item: diff --git a/libs/@local/hashql/ast/tests/ui/lower/expander/nested-union.jsonc b/libs/@local/hashql/ast/tests/ui/lower/expander/nested-union.jsonc new file mode 100644 index 00000000000..7f22ad597bc --- /dev/null +++ b/libs/@local/hashql/ast/tests/ui/lower/expander/nested-union.jsonc @@ -0,0 +1,3 @@ +//@ run: pass +//@ description: nested unions should be expanded correctly +["type", "Foo", ["|", "Integer", ["|", "String", "Never"]], "_"] diff --git a/libs/@local/hashql/ast/tests/ui/lower/expander/nested-union.stdout b/libs/@local/hashql/ast/tests/ui/lower/expander/nested-union.stdout new file mode 100644 index 00000000000..c23de0feda3 --- /dev/null +++ b/libs/@local/hashql/ast/tests/ui/lower/expander/nested-union.stdout @@ -0,0 +1,29 @@ +Expr#4294967040@32 + ExprKind (Type) + TypeExpr#4294967040@32 (name: Foo) + Type#4294967040@29 + TypeKind (Union) + UnionType#4294967040@29 + Type#4294967040@15 + TypeKind (Path) + Path#4294967040@15 (rooted: true) + PathSegment#4294967040@14 (name: kernel) + PathSegment#4294967040@14 (name: type) + PathSegment#4294967040@14 (name: Integer) + Type#4294967040@28 + TypeKind (Union) + UnionType#4294967040@28 + Type#4294967040@23 + TypeKind (Path) + Path#4294967040@23 (rooted: true) + PathSegment#4294967040@22 (name: kernel) + PathSegment#4294967040@22 (name: type) + PathSegment#4294967040@22 (name: String) + Type#4294967040@27 + TypeKind (Path) + Path#4294967040@27 (rooted: true) + PathSegment#4294967040@26 (name: kernel) + PathSegment#4294967040@26 (name: type) + PathSegment#4294967040@26 (name: Never) + Expr#4294967040@31 + ExprKind (Underscore)