Appearance
P1-P8 阶段总览
最后同步:2026-04-10
这页只保留阶段级结论、当前已核对的数量和继续推进的方向。 逐轮切片记录、旧版长文和本轮入口整理记录已归档到 路线图归档。
总体结论
- 这轮把 ordinary / cleanup control-flow selected transparent question-wrapped nested projected aggregate
matchcatch-all public surface 正式对齐到 tuple / struct / fixed-array destructuring:match ((if branch { tuple_left } else { tuple_right })?).outer.payload.values { (left, right) if left < right => ... }、match ((match branch { true => state_left, false => state_right })?).outer.payload.current { State { value } if value == 3 => ... }与match ((if branch { array_left } else { array_right })?).outer.payload.values { [first, middle, last] if middle == 5 => ... },以及对应的defer match ((match branch { true => tuple_left, false => tuple_right })?).outer.payload.values { ... }、defer match ((if branch { state_left } else { state_right })?).outer.payload.current { ... }与defer match ((match branch { true => array_left, false => array_right })?).outer.payload.values { ... }版本,现在都已由独立的 driver LLVM IR 回归与ql build --emit objfixture 锁住,不再只是 direct question-wrapped nested projected aggregate、control-flow nested projected aggregate 与 control-flow question-wrapped nested call-root aggregate 三侧文案各自存在、但没有把 control-flow question-wrapped nested projected aggregate catch-all 当作独立用户面承诺的隐式能力;对应路线图也已同步明确写出 control-flow question-wrapped nested projected tuple / struct / fixed-array aggregate catch-all 示例。 - 这轮把 ordinary / cleanup same-file import-alias transparent question-wrapped nested projected aggregate
matchcatch-all public surface 正式对齐到 tuple / struct / fixed-array destructuring:match (tuple_alias?).outer.payload.values { (left, right) if left < right => ... }、match (state_alias?).outer.payload.current { State { value } if value == 3 => ... }与match (array_alias?).outer.payload.values { [first, middle, last] if middle == 5 => ... },以及对应的defer match (cleanup_tuple_alias?).outer.payload.values { ... }、defer match (cleanup_state_alias?).outer.payload.current { ... }与defer match (cleanup_array_alias?).outer.payload.values { ... }版本,现在都已由独立的 driver LLVM IR 回归与ql build --emit objfixture 锁住,不再只是 direct question-wrapped nested projected aggregate、same-file import-alias nested projected aggregate 与 import-alias question-wrapped nested call-root aggregate 三侧文案各自存在、但没有把 import-alias question-wrapped nested projected aggregate catch-all 当作独立用户面承诺的隐式能力;对应路线图也已同步明确写出 import-alias question-wrapped nested projected tuple / struct / fixed-array aggregate catch-all 示例。 - 这轮把 ordinary / cleanup transparent question-wrapped nested projected aggregate
matchcatch-all public surface 正式对齐到 tuple / struct / fixed-array destructuring:match (tuple_env?).outer.payload.values { (left, right) if left < right => ... }、match (state_env?).outer.payload.current { State { value } if value == 3 => ... }与match (array_env?).outer.payload.values { [first, middle, last] if middle == 5 => ... },以及对应的defer match (tuple_env?).outer.payload.values { ... }、defer match (state_env?).outer.payload.current { ... }与defer match (array_env?).outer.payload.values { ... }版本,现在都已由独立的 driver LLVM IR 回归与ql build --emit objfixture 锁住,不再只是 direct nested projected aggregate、question-wrapped projected aggregate 与 question-wrapped nested call-root aggregate 三侧文案各自存在、但没有把 question-wrapped nested projected aggregate catch-all 当作独立用户面承诺的隐式能力;对应路线图也已同步明确写出 question-wrapped nested projected tuple / struct / fixed-array aggregate catch-all 示例。 - 这轮把 ordinary / cleanup same-file import-alias control-flow selected transparent question-wrapped projected aggregate
matchcatch-all public surface 正式对齐到 tuple / struct / fixed-array destructuring:match ((if branch { bundle_alias } else { alt_bundle_alias })()?).pair { (left, right) if left < right => ... }、match ((match branch { true => bundle_alias, false => alt_bundle_alias })()?).current { State { value } if value == 3 => ... }与match ((if branch { bundle_alias } else { alt_bundle_alias })()?).values { [first, middle, last] if middle == 5 => ... },以及对应的defer match ((match branch { true => cleanup_bundle_alias, false => cleanup_alt_bundle_alias })()?).pair { ... }、defer match ((if branch { cleanup_bundle_alias } else { cleanup_alt_bundle_alias })()?).current { ... }与defer match ((match branch { true => cleanup_bundle_alias, false => cleanup_alt_bundle_alias })()?).values { ... }版本,现在都已由独立的 driver LLVM IR 回归与ql build --emit objfixture 锁住,不再只是 import-alias question-wrapped projected aggregate、control-flow question-wrapped projected aggregate 与 import-alias control-flow projected aggregate 三侧文案各自存在、但没有把 import-alias control-flow question-wrapped projected aggregate catch-all 当作独立用户面承诺的隐式能力;对应路线图也已同步明确写出 import-alias control-flow question-wrapped projected tuple / struct / fixed-array aggregate catch-all 示例。 - 这轮把 ordinary / cleanup control-flow selected transparent question-wrapped projected aggregate
matchcatch-all public surface 正式对齐到 tuple / struct / fixed-array destructuring:match ((if branch { bundle_value } else { alt_bundle_value })()?).pair { (left, right) if left < right => ... }、match ((match branch { true => bundle_value, false => alt_bundle_value })()?).current { State { value } if value == 3 => ... }与match ((if branch { bundle_value } else { alt_bundle_value })()?).values { [first, middle, last] if middle == 5 => ... },以及对应的defer match ((match branch { true => bundle_value, false => alt_bundle_value })()?).pair { ... }、defer match ((if branch { bundle_value } else { alt_bundle_value })()?).current { ... }与defer match ((match branch { true => bundle_value, false => alt_bundle_value })()?).values { ... }版本,现在都已由独立的 driver LLVM IR 回归与ql build --emit objfixture 锁住,不再只是 direct question-wrapped projected aggregate、control-flow projected aggregate 与 question-wrapped call-root aggregate 三侧文案各自存在、但没有把 control-flow question-wrapped projected aggregate catch-all 当作独立用户面承诺的隐式能力;对应路线图也已同步明确写出 control-flow question-wrapped projected tuple / struct / fixed-array aggregate catch-all 示例。 - 这轮把 ordinary / cleanup same-file import-alias transparent question-wrapped projected aggregate
matchcatch-all public surface 正式对齐到 tuple / struct / fixed-array destructuring:match (bundle_alias()?).pair { (left, right) if left < right => ... }、match (bundle_alias()?).current { State { value } if value == 3 => ... }、match (bundle_alias()?).values { [first, middle, last] if middle == 5 => ... },以及对应的defer match (cleanup_bundle_alias()?).pair { ... }、defer match (cleanup_bundle_alias()?).current { ... }与defer match (cleanup_bundle_alias()?).values { ... }版本,现在都已由独立的 driver LLVM IR 回归与ql build --emit objfixture 锁住,不再只是 direct question-wrapped projected aggregate、import-alias projected aggregate 与 cleanupforprojected question-root 局部样例各自存在、但没有把 import-alias question-wrapped projected aggregate catch-all 当作独立用户面承诺的隐式能力;对应路线图也已同步明确写出 import-alias question-wrapped projected tuple / struct / fixed-array aggregate catch-all 示例。 - 这轮把 ordinary / cleanup transparent question-wrapped projected aggregate
matchcatch-all public surface 正式对齐到 tuple / struct / fixed-array destructuring:match (bundle_value()?).pair { (left, right) if left < right => ... }、match (bundle_value()?).current { State { value } if value == 3 => ... }与match (bundle_value()?).values { [first, middle, last] if middle == 5 => ... },以及对应的defer match (bundle_value()?).pair { ... }、defer match (bundle_value()?).current { ... }与defer match (bundle_value()?).values { ... }版本,现在都已由独立的 driver LLVM IR 回归与ql build --emit objfixture 锁住,不再只是 projected aggregate catch-all、match+?最小样例与 cleanupforprojected question-root 局部样例各自存在、但没有把 question-wrapped projected aggregate catch-all 当作独立用户面承诺的隐式能力;对应路线图也已同步明确写出 question-wrapped projected tuple / struct / fixed-array aggregate catch-all 示例。 - 这轮把 ordinary / cleanup same-file import-alias control-flow selected transparent question-wrapped nested call-root aggregate
matchcatch-all public surface 正式对齐到 tuple / struct / fixed-array destructuring:match ((if true { tuples } else { alt_tuples })(1)?).payload.values { (left, right) if left < right => ... }、match ((match true { true => states, false => alt_states })(3)?).payload.current { State { value } if value == 3 => ... }与match ((if true { deep } else { alt_deep })(4)?).outer.payload.values { [first, middle, last] if middle == 5 => ... },以及对应的defer match ((match true { true => tuples, false => alt_tuples })(1)?).payload.values { ... }、defer match ((if true { states } else { alt_states })(3)?).payload.current { ... }与defer match ((match true { true => deep, false => alt_deep })(4)?).outer.payload.values { ... }版本,现在都已由独立的 driver LLVM IR 回归与ql build --emit objfixture 锁住,不再只是 import-alias question-wrapped nested call-root aggregate 与既有 import-alias control-flow nested call-root aggregate 两侧文案各自存在、但没有把 import-alias control-flow question-wrapped nested call-root aggregate catch-all 当作独立用户面承诺的隐式能力;对应路线图也已同步明确写出 import-alias control-flow question-wrapped nested call-root tuple / struct / fixed-array aggregate catch-all 示例。 - 这轮把 ordinary / cleanup control-flow selected transparent question-wrapped nested call-root aggregate
matchcatch-all public surface 正式对齐到 tuple / struct / fixed-array destructuring:match ((if true { tuple_env } else { alt_tuple_env })(1)?).payload.values { (left, right) if left < right => ... }、match ((match true { true => state_env, false => alt_state_env })(3)?).payload.current { State { value } if value == 3 => ... }与match ((if true { deep_env } else { alt_deep_env })(4)?).outer.payload.values { [first, middle, last] if middle == 5 => ... },以及对应的defer match ((match true { true => tuple_env, false => alt_tuple_env })(1)?).payload.values { ... }、defer match ((if true { state_env } else { alt_state_env })(3)?).payload.current { ... }与defer match ((match true { true => deep_env, false => alt_deep_env })(4)?).outer.payload.values { ... }版本,现在都已由独立的 driver LLVM IR 回归与ql build --emit objfixture 锁住,不再只是 direct question-wrapped nested call-root aggregate 与既有 control-flow nested call-root aggregate 两侧文案各自存在、但没有把 control-flow question-wrapped nested call-root aggregate catch-all 当作独立用户面承诺的隐式能力;对应路线图也已同步明确写出 control-flow question-wrapped nested call-root tuple / struct / fixed-array aggregate catch-all 示例。 - 这轮把 ordinary / cleanup same-file import-alias transparent question-wrapped nested call-root aggregate
matchcatch-all public surface 正式对齐到 tuple / struct / fixed-array destructuring:match (tuples(1)?).payload.values { (left, right) if left < right => ... }、match (states(3)?).payload.current { State { value } if value == 3 => ... }、match (arrays(4)?).payload.values { [first, middle, last] if middle == 5 => ... }与match (deep(6)?).outer.payload.values { [first, middle, last] if middle == 7 => ... },以及对应的defer match (tuples(1)?).payload.values { ... }、defer match (states(3)?).payload.current { ... }、defer match (arrays(4)?).payload.values { ... }与defer match (deep(6)?).outer.payload.values { ... }版本,现在都已由独立的 driver LLVM IR 回归与ql build --emit objfixture 锁住,不再只是 direct question-wrapped nested call-root aggregate 与既有 import-alias nested call-root aggregate 两侧文案各自存在、但没有把 import-alias question-wrapped nested call-root aggregate catch-all 当作独立用户面承诺的隐式能力;对应路线图也已同步明确写出 import-alias question-wrapped nested call-root tuple / struct / fixed-array aggregate catch-all 示例。 - 这轮把 ordinary / cleanup transparent question-wrapped nested call-root aggregate
matchcatch-all public surface 正式对齐到 tuple / struct / fixed-array destructuring:match (tuple_env(1)?).payload.values { (left, right) if left < right => ... }、match (state_env(3)?).payload.current { State { value } if value == 3 => ... }、match (array_env(4)?).payload.values { [first, middle, last] if middle == 5 => ... }与match (deep_env(6)?).outer.payload.values { [first, middle, last] if middle == 7 => ... },以及对应的defer match (tuple_env(1)?).payload.values { ... }、defer match (state_env(3)?).payload.current { ... }、defer match (array_env(4)?).payload.values { ... }与defer match (deep_env(6)?).outer.payload.values { ... }版本,现在都已由独立的 driver LLVM IR 回归与ql build --emit objfixture 锁住,不再只是 direct question-wrapped call-root aggregate、既有 nested call-root aggregate 与 projected question-root 局部样例各自存在、但没有把 question-wrapped nested call-root aggregate catch-all 当作独立用户面承诺的隐式能力;对应路线图也已同步明确写出 question-wrapped nested call-root tuple / struct / fixed-array aggregate catch-all 示例。 - 这轮把 ordinary / cleanup same-file import-alias control-flow selected transparent question-wrapped call-root aggregate
matchcatch-all public surface 正式对齐到 tuple / struct / fixed-array destructuring:match (if branch { pair_alias } else { alt_pair_alias })()? { (left, right) if left < right => ... }、match (match branch { true => state_alias, false => alt_state_alias })()? { State { value } if value == 3 => ... }、match (if branch { values_alias } else { alt_values_alias })()? { [first, middle, last] if middle == 5 => ... },以及对应的defer match (match branch { true => pair_alias, false => alt_pair_alias })()? { ... }、defer match (if branch { state_alias } else { alt_state_alias })()? { ... }与defer match (match branch { true => values_alias, false => alt_values_alias })()? { ... }版本,现在都已由独立的 driver LLVM IR 回归与ql build --emit objfixture 锁住,不再只是 import-alias question-wrapped call-root aggregate 与既有 import-alias control-flow call-root aggregate 两侧文案各自存在、但没有把 import-alias control-flow question-wrapped call-root aggregate catch-all 当作独立用户面承诺的隐式能力;对应路线图也已同步明确写出 import-alias control-flow question-wrapped call-root tuple / struct / fixed-array aggregate catch-all 示例。 - 这轮把 ordinary / cleanup control-flow selected transparent question-wrapped call-root aggregate
matchcatch-all public surface 正式对齐到 tuple / struct / fixed-array destructuring:match (if branch { pair_value } else { alt_pair_value })()? { (left, right) if left < right => ... }、match (match branch { true => state_value, false => alt_state_value })()? { State { value } if value == 3 => ... }、match (if branch { values } else { alt_values })()? { [first, middle, last] if middle == 5 => ... },以及对应的defer match (match branch { true => pair_value, false => alt_pair_value })()? { ... }、defer match (if branch { state_value } else { alt_state_value })()? { ... }与defer match (match branch { true => values, false => alt_values })()? { ... }版本,现在都已由独立的 driver LLVM IR 回归与ql build --emit objfixture 锁住,不再只是 direct question-wrapped call-root aggregate 与既有 control-flow call-root aggregate 两侧文案各自存在、但没有把 control-flow question-wrapped call-root aggregate catch-all 当作独立用户面承诺的隐式能力;对应路线图也已同步明确写出 control-flow question-wrapped call-root tuple / struct / fixed-array aggregate catch-all 示例。 - 这轮把 ordinary / cleanup same-file import-alias transparent question-wrapped call-root aggregate
matchcatch-all public surface 正式对齐到 tuple / struct / fixed-array destructuring:match pair_alias()? { (left, right) if left < right => ... }、match state_alias()? { State { value } if value == 3 => ... }、match values_alias()? { [first, middle, last] if middle == 5 => ... },以及对应的defer match pair_alias()? { ... }、defer match state_alias()? { ... }与defer match values_alias()? { ... }版本,现在都已由独立的 driver LLVM IR 回归与ql build --emit objfixture 锁住,不再只是 direct question-wrapped call-root aggregate 与既有 import-alias call-root aggregate 两侧文案各自存在、但没有把 import-alias question-wrapped call-root aggregate catch-all 当作独立用户面承诺的隐式能力;对应路线图也已同步明确写出 import-alias question-wrapped call-root tuple / struct / fixed-array aggregate catch-all 示例。 - 这轮把 ordinary / cleanup transparent question-wrapped call-root aggregate
matchcatch-all public surface 正式对齐到 tuple / struct / fixed-array destructuring:match pair_value()? { (left, right) if left < right => ... }、match state_value()? { State { value } if value == 3 => ... }、match values()? { [first, middle, last] if middle == 5 => ... },以及对应的defer match pair_value()? { ... }、defer match state_value()? { ... }与defer match values()? { ... }版本,现在都已由独立的 driver LLVM IR 回归与ql build --emit objfixture 锁住,不再只是match+?最小标量样例与既有 call-root aggregate catch-all 文案各自存在、但没有把 question-wrapped call-root aggregate catch-all 当作独立用户面承诺的隐式能力;对应路线图也已同步明确写出 question-wrapped call-root tuple / struct / fixed-array aggregate catch-all 示例。 - 这轮把 ordinary / cleanup same-file import-alias control-flow selected awaited call-root aggregate
matchcatch-all public surface 正式对齐到 tuple / struct / fixed-array destructuring:match await (if branch { pair_alias } else { pair_const_alias })(1) { (left, right) if left < right => ... }、match await (match branch { true => state_const_alias, false => state_alias })(3) { State { value } if value == 3 => ... }、match await (if branch { values_alias } else { values_const_alias })(4) { [first, middle, last] if middle == 5 => ... },以及对应的defer match await (match branch { true => pair_const_alias, false => pair_alias })(4) { ... }、defer match await (if branch { state_alias } else { state_const_alias })(6) { ... }与defer match await (match branch { true => values_const_alias, false => values_alias })(7) { ... }版本,现在都已由独立的 driver LLVM IR 回归与ql build --emit objfixture 锁住,不再只是 import-alias awaited call-root aggregate catch-all 与 control-flow awaited call-root aggregate 文案各自存在、但没有把 same-file import-alias control-flow selected awaited call-root aggregate catch-all 当作独立用户面承诺的隐式能力;对应路线图也已同步明确写出 same-file import-alias control-flow selected awaited call-root tuple / struct / fixed-array aggregate catch-all 示例。 - 这轮把 ordinary / cleanup control-flow selected awaited call-root aggregate
matchcatch-all public surface 正式对齐到 tuple / struct / fixed-array destructuring:match await (if branch { pair_value } else { PAIR_VALUE })(1) { (left, right) if left < right => ... }、match await (match branch { true => STATE_VALUE, false => state_value })(3) { State { value } if value == 3 => ... }、match await (if branch { values } else { VALUES })(4) { [first, middle, last] if middle == 5 => ... },以及对应的defer match await (match branch { true => PAIR_VALUE, false => pair_value })(4) { ... }、defer match await (if branch { state_value } else { STATE_VALUE })(6) { ... }与defer match await (match branch { true => VALUES, false => values })(7) { ... }版本,现在都已由独立的 driver LLVM IR 回归与ql build --emit objfixture 锁住,不再只是 direct awaited call-root aggregate catch-all 与 control-flow awaited projected aggregate 文案各自存在、但没有把 control-flow selected awaited call-root aggregate catch-all 当作独立用户面承诺的隐式能力;对应路线图也已同步明确写出 control-flow selected awaited call-root tuple / struct / fixed-array aggregate catch-all 示例。 - 这轮把 ordinary / cleanup same-file import-alias awaited call-root aggregate
matchcatch-all public surface 正式对齐到 tuple / struct / fixed-array destructuring:match await pair_alias(1) { (left, right) if left < right => ... }、match await state_const_alias(3) { State { value } if value == 3 => ... }、match await values_alias(4) { [first, middle, last] if middle == 5 => ... },以及对应的defer match await pair_const_alias(4) { ... }、defer match await state_alias(6) { ... }与defer match await values_const_alias(7) { ... }版本,现在都已由独立的 driver LLVM IR 回归与ql build --emit objfixture 锁住,不再只是 direct awaited call-root aggregate catch-all 与 import-alias awaited projected aggregate 文案各自存在、但没有把 same-file import-alias awaited call-root aggregate catch-all 当作独立用户面承诺的隐式能力;对应路线图也已同步明确写出 same-file import-alias awaited call-root tuple / struct / fixed-array aggregate catch-all 示例。 - 这轮把 ordinary / cleanup direct awaited call-root aggregate
matchcatch-all public surface 正式对齐到 tuple / struct / fixed-array destructuring:match await pair_value(1) { (left, right) if left < right => ... }、match await state_value(3) { State { value } if value == 3 => ... }、match await values(4) { [first, middle, last] if middle == 5 => ... },以及对应的defer match await pair_value(4) { ... }、defer match await state_value(6) { ... }与defer match await values(7) { ... }版本,现在都已由独立的 driver LLVM IR 回归与ql build --emit objfixture 锁住,不再只是 “match await ...aggregate catch-all” 这类泛化描述已经覆盖、但没有把 direct awaited call-root aggregate catch-all 当作独立用户面承诺的隐式能力;对应路线图也已同步明确写出 direct awaited call-root tuple / struct / fixed-array aggregate catch-all 示例。 - 这轮把 ordinary / cleanup same-file import-alias control-flow selected call-root aggregate
matchcatch-all public surface 正式对齐到 tuple / struct / fixed-array destructuring:match (if branch { pair_alias } else { alt_pair_alias })() { (left, right) if left < right => ... }、match (match branch { true => state_alias, false => alt_state_alias })() { State { value } if value == 3 => ... }、match (if branch { values_alias } else { alt_values_alias })() { [first, middle, last] if middle == 5 => ... },以及对应的defer match (match branch { true => pair_alias, false => alt_pair_alias })() { ... }、defer match (if branch { state_alias } else { alt_state_alias })() { ... }与defer match (match branch { true => values_alias, false => alt_values_alias })() { ... }版本,现在都已由独立的 driver LLVM IR 回归与ql build --emit objfixture 锁住,不再只是 same-file import-alias call-root aggregate catch-all 与 generic callable control-flow root 文案各自存在、但没有把 same-file import-alias control-flow selected call-root aggregate catch-all 当作独立用户面承诺的隐式能力;对应路线图也已同步明确写出 same-file import-alias control-flow selected call-root tuple / struct / fixed-array aggregate catch-all 示例。 - 这轮把 ordinary / cleanup control-flow selected call-root aggregate
matchcatch-all public surface 正式对齐到 tuple / struct / fixed-array destructuring:match (if branch { pair_value } else { alt_pair_value })() { (left, right) if left < right => ... }、match (match branch { true => state_value, false => alt_state_value })() { State { value } if value == 3 => ... }、match (if branch { values } else { alt_values })() { [first, middle, last] if middle == 5 => ... },以及对应的defer match (match branch { true => pair_value, false => alt_pair_value })() { ... }、defer match (if branch { state_value } else { alt_state_value })() { ... }与defer match (match branch { true => values, false => alt_values })() { ... }版本,现在都已由独立的 driver LLVM IR 回归与ql build --emit objfixture 锁住,不再只是 direct call-root aggregate catch-all 与更一般的 callable control-flow root 文案各自存在、但没有把 control-flow selected call-root aggregate catch-all 当作独立用户面承诺的隐式能力;对应路线图也已同步明确写出 control-flow selected call-root tuple / struct / fixed-array aggregate catch-all 示例。 - 这轮把 ordinary / cleanup same-file import-alias control-flow selected nested projected aggregate
matchcatch-all public surface 正式对齐到 tuple / struct / fixed-array destructuring:match (if branch { left_tuple_alias } else { right_tuple_alias }).outer.payload.values { (left, right) if left < right => ... }、match (match branch { true => left_state_alias, false => right_state_alias }).outer.payload.current { State { value } if value == 3 => ... }、match (if branch { left_array_alias } else { right_array_alias }).outer.payload.values { [first, middle, last] if middle == 5 => ... },以及对应的defer match (match branch { true => cleanup_left_tuple_alias, false => cleanup_right_tuple_alias }).outer.payload.values { ... }、defer match (if branch { cleanup_left_state_alias } else { cleanup_right_state_alias }).outer.payload.current { ... }与defer match (match branch { true => cleanup_left_array_alias, false => cleanup_right_array_alias }).outer.payload.values { ... }版本,现在都已由独立的 driver LLVM IR 回归与ql build --emit objfixture 锁住,不再只是 same-file import-alias nested projected aggregate catch-all 与 same-file import-alias control-flow selected projected root 文案各自存在、但没有把 same-file import-alias control-flow selected nested projected aggregate catch-all 当作独立用户面承诺的隐式能力;对应路线图也已同步明确写出 same-file import-alias control-flow selected nested projected tuple / struct / fixed-array aggregate catch-all 示例。 - 这轮把 ordinary / cleanup control-flow selected nested projected aggregate
matchcatch-all public surface 正式对齐到 tuple / struct / fixed-array destructuring:match (if branch { tuple_left } else { tuple_right }).outer.payload.values { (left, right) if left < right => ... }、match (match branch { true => state_left, false => state_right }).outer.payload.current { State { value } if value == 3 => ... }、match (if branch { array_left } else { array_right }).outer.payload.values { [first, middle, last] if middle == 5 => ... },以及对应的defer match (match branch { true => tuple_left, false => tuple_right }).outer.payload.values { ... }、defer match (if branch { state_left } else { state_right }).outer.payload.current { ... }与defer match (match branch { true => array_left, false => array_right }).outer.payload.values { ... }版本,现在都已由独立的 driver LLVM IR 回归与ql build --emit objfixture 锁住,不再只是 direct nested projected aggregate catch-all 与更一般的 control-flow selected nested projected root 文案各自存在、但没有把 control-flow selected nested projected aggregate catch-all 当作独立用户面承诺的隐式能力;对应路线图也已同步明确写出 control-flow selected nested projected tuple / struct / fixed-array aggregate catch-all 示例。 - 这轮把 ordinary / cleanup same-file import-alias nested projected aggregate
matchcatch-all public surface 正式对齐到 tuple / struct / fixed-array destructuring:match tuple_alias.outer.payload.values { (left, right) if left < right => ... }、match state_alias.outer.payload.current { State { value } if value == 3 => ... }、match array_alias.outer.payload.values { [first, middle, last] if middle == 5 => ... },以及对应的defer match cleanup_tuple_alias.outer.payload.values { ... }、defer match cleanup_state_alias.outer.payload.current { ... }与defer match cleanup_array_alias.outer.payload.values { ... }版本,现在都已由独立的 driver LLVM IR 回归与ql build --emit objfixture 锁住,不再只是 same-file import-alias projected aggregate catch-all 与更一般的 nested projected root 文案各自存在、但没有把 same-file import-alias nested projected aggregate catch-all 当作独立用户面承诺的隐式能力;对应路线图也已同步明确写出 same-file import-alias nested projected tuple / struct / fixed-array aggregate catch-all 示例。 - 这轮把 ordinary / cleanup direct nested projected aggregate
matchcatch-all public surface 正式对齐到 tuple / struct / fixed-array destructuring:match tuple_env.outer.payload.values { (left, right) if left < right => ... }、match state_env.outer.payload.current { State { value } if value == 3 => ... }、match array_env.outer.payload.values { [first, middle, last] if middle == 5 => ... },以及对应的defer match tuple_env.outer.payload.values { ... }、defer match state_env.outer.payload.current { ... }与defer match array_env.outer.payload.values { ... }版本,现在都已由独立的 driver LLVM IR 回归与ql build --emit objfixture 锁住,不再只是 direct projected aggregate catch-all 与更一般的 nested projected root 文案各自存在、但没有把 local nested projected aggregate catch-all 当作独立用户面承诺的隐式能力;对应路线图也已同步明确写出 direct nested projected tuple / struct / fixed-array aggregate catch-all 示例。 - 这轮把 ordinary / cleanup same-file import-alias control-flow selected projected aggregate
matchcatch-all public surface 正式对齐到 tuple / struct / fixed-array destructuring:match (if branch { left_bundle_alias } else { right_bundle_alias }).pair { (left, right) if left < right => ... }、match (match branch { true => left_bundle_alias, false => right_bundle_alias }).current { State { value } if value == 3 => ... }、match (if branch { left_bundle_alias } else { right_bundle_alias }).values { [first, middle, last] if middle == 5 => ... },以及对应的defer match (match branch { true => cleanup_left_bundle_alias, false => cleanup_right_bundle_alias }).pair { ... }、defer match (if branch { cleanup_left_bundle_alias } else { cleanup_right_bundle_alias }).current { ... }与defer match (match branch { true => cleanup_left_bundle_alias, false => cleanup_right_bundle_alias }).values { ... }版本,现在都已由独立的 driver LLVM IR 回归与ql build --emit objfixture 锁住,不再只是 same-file import-alias projected aggregate catch-all 与 control-flow selected projected root 各自为政的隐式组合能力;对应路线图也已同步明确写出 same-file import-alias control-flow selected projected tuple / struct / fixed-array aggregate catch-all 示例。 - 这轮把 ordinary / cleanup same-file import-alias projected aggregate
matchcatch-all public surface 正式对齐到 tuple / struct / fixed-array destructuring:match bundle_alias.pair { (left, right) if left < right => ... }、match bundle_alias.current { State { value } if value == 3 => ... }、match bundle_alias.values { [first, middle, last] if middle == 5 => ... },以及对应的defer match cleanup_bundle_alias.pair { ... }、defer match cleanup_bundle_alias.current { ... }与defer match cleanup_bundle_alias.values { ... }版本,现在都已由独立的 driver LLVM IR 回归与ql build --emit objfixture 锁住,不再只是 direct projected aggregate catch-all 与 same-file aggregate item alias root 各自为政的隐式组合能力;对应路线图也已同步明确写出 same-file import-alias projected tuple / struct / fixed-array aggregate catch-all 示例。 - 这轮把 ordinary / cleanup control-flow selected projected aggregate
matchcatch-all public surface 正式对齐到 tuple / struct / fixed-array destructuring:match (if branch { left } else { right }).pair { (left, right) if left < right => ... }、match (match branch { true => left, false => right }).current { State { value } if value == 3 => ... }、match (if branch { left } else { right }).values { [first, middle, last] if middle == 5 => ... },以及对应的defer match (match branch { true => left, false => right }).pair { ... }、defer match (if branch { left } else { right }).current { ... }与defer match (match branch { true => left, false => right }).values { ... }版本,现在都已由独立的 driver LLVM IR 回归与ql build --emit objfixture 锁住,不再只是 direct projected aggregate catch-all 与 generic control-flow selected projected root 各自为政的隐式组合能力;对应路线图也已同步明确写出 control-flow selected projected tuple / struct / fixed-array aggregate catch-all 示例。 - 这轮把 ordinary / cleanup same-file import-alias awaited nested projected aggregate
matchcatch-all public surface 正式对齐到 tuple / struct / fixed-array destructuring:match (await tuple_alias(1)).outer.payload.values { (left, right) if left < right => ... }、match (await state_const_alias(3)).outer.payload.current { State { value } if value == 3 => ... }、match (await array_alias(4)).outer.payload.values { [first, middle, last] if middle == 5 => ... },以及对应的defer match (await tuple_const_alias(1)).outer.payload.values { ... }、defer match (await state_alias(3)).outer.payload.current { ... }与defer match (await array_const_alias(4)).outer.payload.values { ... }版本,现在都已由独立的 driver LLVM IR 回归与ql build --emit objfixture 锁住,不再只是 direct awaited nested projected aggregate catch-all 与 generic awaited alias root 各自为政的隐式组合能力;对应路线图也已同步明确写出 same-file import-alias awaited nested projected tuple / struct / fixed-array aggregate catch-all 示例。 - 这轮把 ordinary / cleanup same-file import-alias awaited projected aggregate
matchcatch-all public surface 正式对齐到 tuple / struct / fixed-array destructuring:match (await tuple_alias(1)).payload.values { (left, right) if left < right => ... }、match (await state_const_alias(3)).payload.current { State { value } if value == 3 => ... }、match (await array_alias(4)).payload.values { [first, middle, last] if middle == 5 => ... },以及对应的defer match (await tuple_const_alias(1)).payload.values { ... }、defer match (await state_alias(3)).payload.current { ... }与defer match (await array_const_alias(4)).payload.values { ... }版本,现在都已由独立的 driver LLVM IR 回归与ql build --emit objfixture 锁住,不再只是 direct awaited projected aggregate catch-all 与 generic awaited alias root 各自为政的隐式组合能力;对应路线图也已同步明确写出 same-file import-alias awaited projected tuple / struct / fixed-array aggregate catch-all 示例。 - 这轮把 ordinary / cleanup control-flow selected awaited projected aggregate
matchcatch-all public surface 正式对齐到 tuple / struct / fixed-array destructuring:match (await (if ... { tuple_env } else { TUPLE_ENV })(1)).payload.values { (left, right) if left < right => ... }、match (await (match ... { true => STATE_ENV, false => state_env })(3)).payload.current { State { value } if value == 3 => ... }、match (await (if ... { array_env } else { ARRAY_ENV })(4)).payload.values { [first, middle, last] if middle == 5 => ... },以及对应的defer match (await (match ... { true => TUPLE_ENV, false => tuple_env })(1)).payload.values { ... }、defer match (await (if ... { state_env } else { STATE_ENV })(3)).payload.current { ... }与defer match (await (match ... { true => ARRAY_ENV, false => array_env })(4)).payload.values { ... }版本,现在都已由独立的 driver LLVM IR 回归与ql build --emit objfixture 锁住,不再只是 direct awaited projected aggregate catch-all 与 awaited control-flow root 各自为政的隐式组合能力;对应路线图也已同步明确写出 control-flow selected awaited projected tuple / struct / fixed-array aggregate catch-all 示例。 - 这轮把 ordinary / cleanup control-flow selected awaited nested projected aggregate
matchcatch-all public surface 正式对齐到 tuple / struct / fixed-array destructuring:match (await (if ... { tuple_env } else { TUPLE_ENV })(1)).outer.payload.values { (left, right) if left < right => ... }、match (await (match ... { true => STATE_ENV, false => state_env })(3)).outer.payload.current { State { value } if value == 3 => ... }、match (await (if ... { array_env } else { ARRAY_ENV })(4)).outer.payload.values { [first, middle, last] if middle == 5 => ... },以及对应的defer match (await (match ... { true => TUPLE_ENV, false => tuple_env })(1)).outer.payload.values { ... }、defer match (await (if ... { state_env } else { STATE_ENV })(3)).outer.payload.current { ... }与defer match (await (match ... { true => ARRAY_ENV, false => array_env })(4)).outer.payload.values { ... }版本,现在都已由独立的 driver LLVM IR 回归与ql build --emit objfixture 锁住,不再只是 direct awaited nested projected aggregate catch-all 与 awaited control-flow root 各自为政的隐式组合能力;对应路线图也已同步明确写出 control-flow selected awaited nested projected tuple / struct / fixed-array aggregate catch-all 示例。 - 这轮把 ordinary / cleanup same-file import-alias control-flow selected awaited nested projected aggregate
matchcatch-all public surface 正式对齐到 tuple / struct / fixed-array destructuring:match (await (if ... { tuple_alias } else { tuple_const_alias })(1)).outer.payload.values { (left, right) if left < right => ... }、match (await (match ... { true => state_const_alias, false => state_alias })(3)).outer.payload.current { State { value } if value == 3 => ... }、match (await (if ... { array_alias } else { array_const_alias })(4)).outer.payload.values { [first, middle, last] if middle == 5 => ... },以及对应的defer match (await (match ... { true => tuple_const_alias, false => tuple_alias })(1)).outer.payload.values { ... }、defer match (await (if ... { state_alias } else { state_const_alias })(3)).outer.payload.current { ... }与defer match (await (match ... { true => array_const_alias, false => array_alias })(4)).outer.payload.values { ... }版本,现在都已由独立的 driver LLVM IR 回归与ql build --emit objfixture 锁住,不再只是 direct awaited nested projected aggregate catch-all 与 awaited control-flow root 各自为政的隐式组合能力;对应路线图也已同步明确写出 same-file import-alias control-flow selected awaited nested projected tuple / struct / fixed-array aggregate catch-all 示例。 - 这轮把 ordinary / cleanup direct awaited nested projected aggregate
matchcatch-all public surface 正式对齐到 tuple / struct / fixed-array destructuring:match (await tuple_env(1)).outer.payload.values { (left, right) if left < right => ... }、match (await state_env(3)).outer.payload.current { State { value } if value == 3 => ... }、match (await array_env(4)).outer.payload.values { [first, middle, last] if middle == 5 => ... },以及对应的defer match (await tuple_env(1)).outer.payload.values { ... }、defer match (await state_env(3)).outer.payload.current { ... }与defer match (await array_env(4)).outer.payload.values { ... }版本,现在都已由独立的 driver LLVM IR 回归与ql build --emit objfixture 锁住,不再只是 direct awaited projected aggregate catch-all 与 generic awaited nested projection 各自存在、但没有把 nested projected aggregate catch-all 当作独立用户面承诺的隐式能力;对应路线图也已同步明确写出 direct awaited nested projected tuple / struct / fixed-array aggregate catch-all 示例。 - 这轮把 ordinary / cleanup same-file import-alias control-flow selected awaited projected aggregate
matchcatch-all public surface 正式对齐到 tuple / struct / fixed-array destructuring:match (await (if ... { tuple_alias } else { tuple_const_alias })(1)).payload.values { (left, right) if left < right => ... }、match (await (match ... { true => state_const_alias, false => state_alias })(3)).payload.current { State { value } if value == 3 => ... }、match (await (if ... { array_alias } else { array_const_alias })(4)).payload.values { [first, middle, last] if middle == 5 => ... },以及对应的defer match (await (match ... { true => tuple_const_alias, false => tuple_alias })(1)).payload.values { ... }、defer match (await (if ... { state_alias } else { state_const_alias })(3)).payload.current { ... }与defer match (await (match ... { true => array_const_alias, false => array_alias })(4)).payload.values { ... }版本,现在都已由独立的 driver LLVM IR 回归与ql build --emit objfixture 锁住,不再只是 direct awaited projected aggregate catch-all 与 awaited control-flow root 各自为政的隐式组合能力;对应路线图也已同步明确写出 same-file import-alias control-flow selected awaited projected tuple / struct / fixed-array aggregate catch-all 示例。 - 这轮把 ordinary / cleanup direct awaited projected aggregate
matchcatch-all public surface 正式对齐到 tuple / struct / fixed-array destructuring:match (await tuple_env(1)).payload.values { (left, right) if left < right => ... }、match (await state_env(3)).payload.current { State { value } if value == 3 => ... }、match (await array_env(4)).payload.values { [first, middle, last] if middle == 5 => ... },以及对应的defer match (await tuple_env(1)).payload.values { ... }、defer match (await state_env(3)).payload.current { ... }与defer match (await array_env(4)).payload.values { ... }版本,现在都已由独立的 driver LLVM IR 回归与ql build --emit objfixture 锁住,不再只是文档里分散写着 “match (await ...).valueprojected scrutinee” 与 “match await ...aggregate catch-all” 两段泛化描述、但没有把 projected aggregate catch-all 作为单独用户面承诺的隐式能力;对应路线图也已同步明确写出 direct awaited projected tuple / struct / fixed-array aggregate catch-all 示例。 - 这轮把 ordinary / cleanup direct / projected / call-root / same-file import-alias call-root / nested call-root projected / same-file import-alias nested call-root projected / control-flow selected nested call-root projected / same-file import-alias control-flow selected nested call-root projected loadable
matchcatch-all public surface 正式对齐到 tuple / struct / fixed-array destructuring:match (1, 2) { (left, right) if left < right => ... }、match current { State { value } if value == 3 => ... }、match [1, 2, 3] { [first, _, last] if first < last => ... },以及match bundle.pair/bundle.current/bundle.values、match pair_value()/state_value()/values()、match pair_alias()/state_alias()/values_alias()、match tuple_env(1).payload.values/state_env(3).payload.current/deep_env(6).outer.payload.values、match tuples(1).payload.values/states(3).payload.current/deep(6).outer.payload.values、match (if ... { tuple_env } else { alt_tuple_env })(1).payload.values/match (match ... { true => state_env, false => alt_state_env })(3).payload.current/match (if ... { deep_env } else { alt_deep_env })(4).outer.payload.values与match (if ... { tuples } else { alt_tuples })(1).payload.values/match (match ... { true => states, false => alt_states })(3).payload.current/match (if ... { deep } else { alt_deep })(4).outer.payload.values这类 projected-root / call-root / import-alias-call-root / nested-call-root-projected / import-alias-nested-call-root-projected / control-flow-selected-nested-call-root-projected / import-alias-control-flow-selected-nested-call-root-projected 版本,连同对应的defer match版本,现在都已由独立的 driver LLVM IR 回归与ql build --emit objfixture 锁住,不再只是 backend 已支持、文档仍用“loadable scrutinee catch-all”泛化描述的隐式能力;对应路线图也已同步明确写出 direct / projected / call-root / import-alias-call-root / nested-call-root-projected / import-alias-nested-call-root-projected / control-flow-selected-nested-call-root-projected / import-alias-control-flow-selected-nested-call-root-projected aggregate catch-all 示例。 - 这轮把 cleanup block public surface 也正式对齐到 fixed-array destructuring:
defer { let [first, _, third] = [1, 2, 3]; ... }、defer { for [left, right] in ([4, 5], [6, 7]) { ... } }与defer { for await [left, right] in [worker(8), worker(10)] { ... } }现在都已由独立的 driver LLVM IR 回归与ql build --emit objfixture 锁住,不再只是 cleanup lowering 内部已经打通、但公开文档仍停留在 tuple / struct 的隐式能力;对应 cleanup 路线图描述也已同步改成 tuple / struct / fixed-array destructuring 的真实支持面。 - 这轮把 ordinary bind-pattern public surface 正式对齐到 fixed-array destructuring:ordinary
let [first, _, third] = [1, 2, 3]、ordinaryfor [left, right] in ([4, 5], [6, 7])与 fixed-shapefor await [left, right] in [worker(8), worker(10)]现在都已由独立的 driver LLVM IR 回归与ql build --emit objfixture 锁住,不再只是 backend 内部已打通但文档未承诺的隐式能力;对应路线图也已同步改成 tuple / struct / fixed-array destructuring 的真实支持面。 - 这轮继续把 ordinary awaited aggregate catch-all path 推到 fixed-array destructuring scrutinees:ordinary build surface 现在不再只限 ordinary
match await ...的_/ single binding / tuple / struct destructuring catch-all,而是已继续接受首个 fixed-array destructuring scrutinee 子集,即match await (if ... { values_alias } else { values_const_alias })(30) { [first, _, last] => ... }与match await (match ... { true => values_const_alias, false => values_alias })(13) { [first, middle, last] if first == 13 => ... }这类 ordinary awaited fixed-array catch-all scrutinee 也可直接进入 shared scrutinee lowering。对应的 driver LLVM IR 回归、ql build --emit objfixture,以及 ordinary bind-pattern fixed-array lowering 缺口都已单独锁住,因此 ordinary awaited aggregate catch-all family 已从 tuple/struct destructuring 继续推进到 fixed-array destructuring。 - 这轮继续把
TaskHandlecapturing closure transport 推到 cleanup awaited fixed-array destructuring scrutinees:capturing sync closure 现在不再只限 cleanup 的 tuple / struct aggregate destructuring scrutinee,而是已继续接受首个 fixed-array destructuring scrutinee 子集,即defer { sink(match await (if ... { left } else { right })() { [first, _, last] => ... }) }与defer match await (match ... { true => left, false => right })() { [first, middle, last] if first == 30 => ... }这类 fixed-array catch-all scrutinee 也可直接消费 closure 返回的 handle。对应的 driver LLVM IR 回归、ql build --emit objfixture,以及 fixed-array pattern 的最小 parser/typeck/codegen 支撑都已单独锁住,因此这条 task-handle cleanup-awaited transport 已从 tuple/struct destructuring 继续推进到 fixed-array destructuring。 - P1 到 P6 已完成,并且已经形成可持续扩展的工程主干。
- P7 正在进行,但主线不是“重新设计 async”,而是在既有 compiler/runtime/build 真相源上保守扩面。
- 这轮继续把
TaskHandlecapturing closure transport 推到 cleanup awaited aggregate destructuring scrutinees:capturing sync closure 现在不再只限 cleanup 的 awaited aggregatecurrentbinding scrutinee,而是已继续接受首个 awaited aggregate destructuring scrutinee 子集,即defer { sink(match await (if ... { pair_left } else { pair_right })() { (left, right) => ... }) }与defer match await (match ... { true => state_left, false => state_right })() { State { slot: Slot { value } } if value == 13 => ... }这类 tuple / struct catch-all scrutinee 也可直接消费 closure 返回的 handle。对应的 driver LLVM IR 回归与ql build --emit objfixture 也已单独锁住,因此这条 task-handle cleanup-awaited transport 已从 aggregate binding 继续推进到 aggregate destructuring。 - 这轮继续把
TaskHandlecapturing closure transport 推到 cleanup awaited aggregate binding scrutinees:capturing sync closure 现在不再只限 cleanup 的 projected awaited scalar scrutinee,而是已继续接受首个 awaited aggregate current-binding scrutinee 子集,即defer match await (if ... { state_left } else { state_right })() { current => ... }、defer match await (match ... { true => pair_left, false => pair_right })() { current => ... }这类 struct/tuple/fixed-array scrutinee 也可直接消费 closure 返回的 handle。对应的 driver LLVM IR 回归与ql build --emit objfixture 也已单独锁住,因此这条 task-handle cleanup-awaited transport 已开始进入 awaited aggregate scrutinee 面,而不再只停留在 scalar/projected value。 - 这轮继续把
TaskHandlecapturing closure transport 推到 cleanup awaited nested runtime projection values:capturing sync closure 现在不再只限 cleanup 的 direct awaited comparison 或 helper/inline awaited-value,而是已继续接受首个 nested runtime projection awaited-value 子集,即defer if wrap(await (if ... { left } else { right })()).slot.value == 13、defer match [wrap(await (match ... )()).slot.value, 0][offset(...)] { ... }这类 guard/scrutinee 也可直接消费 closure 返回的 handle。对应的 driver LLVM IR 回归与ql build --emit objfixture 也已单独锁住,因此这条 task-handle cleanup-awaited transport 已继续进入更广义的 cleanup control-flow projected-value 面。 - 这轮继续把
TaskHandlecapturing closure transport 推到 cleanup awaited helper/inline values:capturing sync closure 现在不再只限 cleanupdefer if await .../defer match await ...这条最小 awaited guard/scrutinee path,而是已继续接受首个 helper/inline awaited-value 子集,即defer if helper_alias(42, await (if ... { left } else { right })())与defer match State { value: (await (match ... )()).value }.value { ... }这类 guard/scrutinee 也可直接消费 closure 返回的 handle。对应的 driver LLVM IR 回归与ql build --emit objfixture 也已单独锁住,因此这条 task-handle cleanup-awaited transport 已开始真正进入更广义的 cleanup control-flow,而不再只停留在 direct awaited comparison。 - 这轮继续把
TaskHandlecapturing closure transport 推到 cleanup awaited tagged guarded-match different-closure alias roots:在上一轮 first tagged guarded-match different-closure root 基础上,cleanupdefer if await ...与defer match await ...现在都已继续接受首个 block-binding / local-alias-chain 版本,即先把 tagged/binding-pattern guardedmatch选出的不同 closure 绑定给局部,再经let rebound = chosen; rebound这一层局部链继续调用并 await 返回的 handle。对应的 driver LLVM IR 回归与ql build --emit objfixture 也已单独锁住,因此 cleanup awaited tagged guarded-match path 已不再只限 direct root / block-local alias tail root。 - 这轮继续把
TaskHandlecapturing closure transport 推到 cleanup awaited tagged guarded-match different-closure roots:cleanupdefer if await ...与defer match await ...现在都已支持首个 tagged/binding-pattern guardedmatch版本的 different-closure control-flow root,前者可直接 awaitmatch key { current if current == 42 => left, _ => right }选出的 closure,后者可 await tagged guardedmatch里 block-local alias tail 选出的 closure,并继续把返回的 handle 交给 cleanup guard / scrutinee。对应的 driver LLVM IR 回归与ql build --emit objfixture 也已单独锁住,因此 tagged guarded-match path 已不再只限 shared-local alias-chain 形态。 - 这轮继续把
TaskHandlecapturing closure transport 推到 cleanup awaited tagged guarded-match shared-local alias chains:cleanupdefer if await ...与defer match await ...现在都已支持首个 tagged/binding-pattern guardedmatch版本的 shared-local control-flow assignment-valued binding alias-chain,即先通过let chosen = match key { current if current == 42 => alias = right, _ => left }收敛到同一条局部共享链,再经let rebound = chosen; rebound调用并 await 返回的 handle。对应的 driver LLVM IR 回归与ql build --emit objfixture 也已单独锁住,因此 task-handle guarded-match path 已不再只限 bool-scrutinee 形态。 - 这轮继续把
TaskHandlecapturing closure transport 推到 cleanup awaited guarded-match different-closure alias roots:在上一轮 first guarded-match different-closure root 基础上,cleanupdefer if await ...与defer match await ...现在都已继续接受首个 block-binding / local-alias-chain 版本,即先把 guardedmatch选出的不同 closure 绑定给局部,再经let rebound = chosen; rebound这一层局部链继续调用并 await 返回的 handle。对应的 driver LLVM IR 回归与ql build --emit objfixture 也已单独锁住,因此 cleanup awaited guarded-match path 已不再只限 direct root / block-local alias tail root。 - 这轮继续把
TaskHandlecapturing closure transport 推到 cleanup awaited guarded-match different-closure roots:cleanupdefer if await ...与defer match await ...现在都已支持首个 guardedmatch版本的 different-closure control-flow root,前者可直接 awaitmatch branch { true if guard() => left, false => right, _ => right }选出的 closure,后者可 await guardedmatch里 block-local alias tail 选出的 closure,并继续把返回的 handle 交给 cleanup guard / scrutinee。对应的 driver LLVM IR 回归与ql build --emit objfixture 也已单独锁住,因此 cleanup awaited guarded-match path 已不再只限 shared-local alias-chain 形态。 - 这轮继续把
TaskHandlecapturing closure transport 推到 cleanup awaited guarded-match shared-local alias chains:cleanupdefer if await ...与defer match await ...现在都已支持首个 guardedmatch版本的 shared-local control-flow assignment-valued binding alias-chain,即先通过let chosen = match branch { true if guard() => alias = right, false => left, _ => left }收敛到同一条局部共享链,再经let rebound = chosen; rebound调用并 await 返回的 handle。对应的 driver LLVM IR 回归与ql build --emit objfixture 也已单独锁住,因此 cleanup awaited shared-local path 已不再只限无 guard 的if/ bool-match形态。 - 这轮继续把
TaskHandlecapturing closure transport 推到 cleanup awaited shared-local alias chains:cleanupdefer if await ...与defer match await ...现在已支持首个 shared-local control-flow assignment-valued binding alias-chain 子集,即通过let chosen = if branch { alias = right } else { left }或let chosen = match branch { true => alias = right, false => left }先收敛到同一条局部共享链,再经let rebound = chosen; rebound调用并 await 返回的 handle。对应的 driver LLVM IR 回归与ql build --emit objfixture 也已单独锁住,因此 cleanup awaited path 已不再只停留在 direct / alias-tail root。 - 这轮继续把
TaskHandlecapturing closure transport 推到 cleanup awaited different-closure alias roots:在上一轮 first different-closure cleanup-awaited root 基础上,cleanupdefer if await ...与defer match await ...现在已继续接受首个 block-binding / local-alias-chain 版本,即先把 runtime-if或 runtime-match选出的不同 closure 绑定给局部,再经let rebound = chosen; rebound这一层局部链继续调用并 await 返回的 handle。对应的 driver LLVM IR 回归与ql build --emit objfixture 也已单独锁住,因此 cleanup awaited different-closure path 已不再只限 direct root / block-local alias tail root。 - 这轮继续把
TaskHandlecapturing closure transport 推到 cleanup awaited different-closure roots:cleanupdefer if await ...与defer match await ...现在都已开放首个 different-closure control-flow 子集,前者可直接 await runtime-if选出的不同 closure root,后者可 await runtime-match选出的 block-local alias tail closure root,并继续把各自返回的 capturedTaskHandle交给 cleanup guard / scrutinee。对应的 driver LLVM IR 回归与ql build --emit objfixture 也已单独锁住,因此 cleanup awaited path 现在不再只停留在 same-root/same-binding transport。 - 这轮继续把
TaskHandlecapturing closure transport 推到 cleanup awaited alias roots:cleanupdefer if await ...与defer match await ...现在已支持首个 block-local alias tail / local alias chain 子集,即先在 cleanup block 内把 runtime-if或 integer-match选出的 closure 绑定给局部,再经局部 alias 尾值继续调用并 await 返回的 handle。对应的 driver LLVM IR 回归与ql build --emit objfixture 也已单独锁住,因此 cleanup awaited path 已不再只限 direct/local-binding matrix。 - 这轮继续把
TaskHandlecapturing closure transport 推到 cleanup awaited root matrix:cleanupdefer if await ...与defer match await ...现在都已同时接受两类最小 root,即 runtime-if选出的 direct closure root 与 ordinary integer-match绑定出来的 local closure root,并把各自捕获的 immutable same-functionTaskHandlebinding 继续交给 cleanup guard / scrutinee。对应的 driver LLVM IR 回归与ql build --emit objfixture 也已单独锁住,因此这条 cleanup awaited callable transport 已不再只是“一边 direct、一边 binding”的半矩阵。 - 这轮继续把
TaskHandlecapturing closure transport 推到 cleanup awaited roots:sync closure 现在已支持在 cleanupdefer if await <direct-root>()与defer match await <local-binding-root>()里,分别 await runtime-if选出的 direct closure root 和 ordinary integer-match绑定出来的 local closure root,并把各自捕获的 immutable same-functionTaskHandlebinding 继续交给 cleanup guard / scrutinee。对应的 driver LLVM IR 回归与ql build --emit objfixture 也已单独锁住,因此任务句柄现在不再只停留在 ordinary path,而是正式进入最小 cleanup awaited callable transport surface。 - 这轮继续把
TaskHandlecapturing closure transport 推到 ordinary control-flow roots:sync closure 现在已支持在 ordinaryifdirect root 与 integer-matchbinding root 下选出不同的 non-movecapturing closure,并把各自捕获的 immutable same-functionTaskHandlebinding 继续返回给外层await。对应的 driver LLVM IR 回归与ql build --emit objfixture 也已单独锁住,因此任务句柄现在不再只停留在 direct local / local alias call,而是正式进入最小 ordinary control-flow callable transport surface。 - 这轮继续把 capturing closure 推到 async value transport:sync closure 现在已支持 non-
move形态去捕获 immutable same-functionTaskHandlebinding,并经 ordinary direct local / local alias call 把 handle 返回给外层await。对应的 driver LLVM IR 回归与ql build --emit objfixture 也已单独锁住,因此任务句柄现在不再只停留在 async item / const / static / root-levelawaitvalue path,而是正式进入 capturing closure value flow。 - 这轮继续把
String推进到 capturing closure 本身:sync backend 现在已支持 non-movecapturing sync closure 去捕获 immutable same-functionStringbinding,并继续沿既有 by-value{ ptr, i64 }ABI 传入 closure body。对应的 driver LLVM IR 回归与ql build --emit objfixture 也已单独锁住,因此这轮不是只扩比较或分派表面,而是把String真正推进到了 capturing closure value flow。 - 这轮继续把
String推到 guarded ordinary capturing-closurematchcall roots:sync backend 现在已支持 stringmatch选出的 direct call root 与 local binding root 去调用不同 capturing closure,并继续复用现有 bool guard 子集;LLVM lowering 会把这些 guarded closure-selection string-arm compare 统一接到已有的memcmp-based string compare primitive。对应的 driver LLVM IR 回归与ql build --emit objfixture 也已单独锁住,因此String现在不再只停留在 unguarded ordinary closure-selection,而是进入最小 guarded closure-selection surface。 - 这轮继续把
String推到 ordinary capturing-closurematchcall roots:sync backend 现在已支持 stringmatch选出的 direct call root 与 local binding root 去调用不同 capturing closure,并继续限制在 same-fileconst/staticpath pattern +_catch-all 的 unguarded 子集;LLVM lowering 会把这些 closure-selection string-arm compare 统一接到已有的memcmp-based string compare primitive。对应的 driver LLVM IR 回归与ql build --emit objfixture 也已单独锁住,因此String现在不再只停留在普通值分派,而是正式进入最小 ordinary closure-selection surface。 - 这轮继续把
String推到 cleanupmatch:sync backend 现在已支持defer match value { ... }与defer (match value { ... })(...)里的 direct string literal arm、same-fileconst/staticpath pattern,以及_/ binding catch-all,并继续复用现有 bool guard 子集;LLVM lowering 会把这些 cleanup string-arm compare 统一接到已有的memcmp-based string compare primitive。对应的 driver LLVM IR 回归与ql build --emit objfixture 也已单独锁住,因此String现在不再只停留在 ordinarymatch,而是正式进入最小 cleanup pattern-dispatch surface。 - 这轮把 sync build 里的
Stringordered compare 也补进了真实可用 surface:left < right、left <= right、left > right与left >= right现在都已在ql-typeck里放开为合法的 string lexicographic comparison,并在 LLVM lowering 里统一走memcmp + prefix-length tiebreak;对应的 codegen 单测与ql buildobject fixture 也已单独锁住,因此这条Stringbuild 子集现在不再只停留在==/!=。 - 这轮继续把
String的交付面补到 C header:ql ffi header与 build-side header sidecar 现在都已支持把extern "c"函数里的String参数/返回值投影成typedef struct ql_string { const uint8_t* ptr; int64_t len; } ql_string;,并在生成的 header 里稳定输出对应 declaration;driver 单测和 CLI 集成测试也已单独锁住,因此这条Stringsurface 现在不再只停留在 LLVM/object build 内部。 - 这轮继续把
String推进到 ordinarymatch:sync backend 现在已支持 direct string literal arm、same-fileconst/staticpath pattern,以及_/ binding catch-all 的最小matchlowering,并继续复用现有 bool guard 子集;LLVM lowering 会把这些 string-arm compare 统一接到已有的memcmp-based string compare primitive。对应的 driver LLVM IR 回归与ql build --emit objfixture 也已单独锁住,因此String现在不再只停留在 compare / FFI header,而是正式进入最小 ordinary pattern-dispatch surface。 - P8 已进入前三条工程入口切片:最小
qlang.tomlmanifest graph、ql project graph、.qiV1 emit、ql build --emit-interface、ql check --sync-interfaces、package-aware dependency.qisyntax-load、dependency public symbol index,以及 imported dependency symbol 的最小 cross-file hover / definition / declaration / references、use ...导入路径和平铺 / grouped import 位置里的 package path segment / public symbol completion、dependency enum variant completion、dependency struct explicit field-label completion、dependency struct member-field / member-method completion、completion item 上的 declaration/type markdown documentation、显式 type use 上的最小textDocument/typeDefinition,以及 dependency enum variant token 到 dependency public enum declaration、dependency struct field token 到 dependency public field type、dependency method token 到 dependency public return type 的最小textDocument/typeDefinition子集;这条 receiver truth surface 现已覆盖 dependency method-call result local 及其 direct alias、direct dependency field-projection result local 及其 direct alias、struct destructuring / match destructuring 派生的 dependency local、typed closure param、inline tuple/arrayforloop binding、?解包后的 dependency receiver、block tail result 及其 direct alias、结果稳定收敛到同一个 dependency struct 的if/match表达式结果、不经命名 local 的 direct dependency field-projection / method-call / structured receiver,以及 target 可唯一恢复为 dependency struct 的impl/extend方法体selfreceiver,而 dependency member-field / member-method completion 现在也会额外带出解析后的字段类型 / 返回类型;field/method token 若直接接?,对应的typeDefinition现在也会优先落到Option[T]/Result[T, E]解包后的 dependency public type。broken-source / semantic-error 场景下的 import-root / variant / struct-field / struct-member-field token / struct-member-method token 最小 hover / definition / declaration / references fallback 已落地,dependency value root 现也已补上最小 hover / definition / declaration / references fallback,并继续只收敛到 dependency public struct declaration 与当前文件内仍解析到同一 root binding 的引入/使用位置;对应的 dependency import/type-root / dependency enum variant token / dependency value root / dependency struct field token / dependency method tokentypeDefinitionfallback 也都已接通;其中 inline tuple/arrayforloop binding、typed closure param,以及 value-position 的 imported dependency function /const/staticroot token 现在也已进入 field/method query 或 value-root query 与 broken-source fallback 合同。ql project emit-interface现在也已支持从 workspace-only 根 manifest 批量写出成员包默认.qi,并新增--changed-only只跳过valid的 package/member 接口,以及--check用于只校验这些默认接口是否都处于valid状态;其中 workspace--check现会在一次执行中汇总全部无效 member interface 并输出摘要,ql project graph现也已在 package/workspace 两条路径上展示默认.qi的路径/状态与引用 interface 状态,并把 manifest/源文件更新后的接口标记为stale,而 package-awareql check现在也会把 stale dependency interface 视为显式失败,ql check --sync-interfaces则只重发非valid的依赖.qi;同一条保守workspace/symbol搜索现也已从“当前包源码 modules + 已加载 dependency.qi”扩到“当前 workspace 其它 member package 的源码 modules”,并在当前包因 source diagnostics 失败时保留 dependency/sibling-member 搜索;这几条入口现都已覆盖 package dir / manifest / package source file / workspace-only root manifest;更完整的 cross-file editor semantics 仍未开始实现。 - 同一条 P8 receiver truth surface 本轮又继续前推了一小步:dependency
forloop receiver 现在已从 direct tuple/array root 扩到 structured iterable root,只要block/unsafe/if/match的 tail/arm 仍稳定收敛到同一个 dependency tuple/array element binding,就会继续复用同一 receiver identity;因此for current in (if flag { (config, config) } else { (config, config) }) { current.value }与for current in match flag { true => [config.child(), config.child()], false => [config.child(), config.child()] } { current.get() }现也已进入 dependency completion / query / broken-source value-root references 合同。 - 这轮再把 structured iterable root 的 standalone member
typeDefinition也抽出来:for current in (if flag { (config, config) } else { (config, config) }) { current.leaf.value }与for current in match flag { true => [config.child(), config.child()], false => [config.child(), config.child()] } { current.leaf().value }这两条路径,现在都已在成功 package analysis 路径与 broken-source fallback 上由独立 regression 锁住到 dependency publicLeafdeclaration;连同前两轮已单独锁住的 member completion 与 member query,这条 structured iterable root 的 standalone completion / query / membertypeDefinition合同现已闭合。 - 这轮再把 structured iterable root 的最小 standalone
bindingsregression 也抽出来:for current in (if flag { (config, config) } else { (config, config) }) { return current.value }现已在成功 package analysis 路径上单独锁住 dependency field definition,而for current in match flag { true => [config.child(), config.child()], false => [config.child(), config.child()] } { current.get() }这条绑定后的 direct member definition 也已在 broken-source fallback 上由独立 regression 锁住到 dependency public method declaration;这让 structured iterable receiver 的最小 local-binding contract 也不再只散落在 value-root / member 专项回归里。 - 这轮继续沿同一条 structured iterable root 往 root-token 级别收口:
for current in (if flag { (config, config) } else { (config, config) }) { current.value }与for current in match flag { true => [config.child(), config.child()], false => [config.child(), config.child()] } { current.get() }这两条路径上的currenttoken,现都已在成功 package analysis 路径与 broken-source fallback 上由独立 regression 锁住 hover / definition / declaration / references,并继续分别固定到 dependency publicConfig/Childdeclaration;同一位置的textDocument/typeDefinition现在也已由独立 regression 锁住,并分别稳定跳到 dependency publicConfig/Childdeclaration。至此这条 structured iterable receiver 的 root-token query /typeDefinition合同已闭合。 - 这轮继续把同一条 receiver identity 里的
block包裹 iterable root 的 standalone membertypeDefinition也抽出来:在前两轮已独立锁住for current in { (config, config) } { current.va }与for current in { [config.child(), config.child()] } { current.ge }这两条 member completion,以及for current in { (config, config) } { let first = current.value; let second = current.value; ... }与for current in { [config.child(), config.child()] } { let first = current.get(); let second = current.get(); ... }这两条 member query 之后,for current in { (config, config) } { current.leaf.value }与for current in { [config.child(), config.child()] } { current.leaf().value }这两条 member token 的typeDefinition,现在也都已在成功 package analysis 路径与 broken-source fallback 上由独立 regression 锁住到 dependency publicLeafdeclaration;至此这条 block-wrapped iterable root 的 standalone completion / query / membertypeDefinition合同已闭合。 - 这轮再把 block-wrapped iterable root 的最小 standalone
bindingsregression 也抽出来:for current in { (config, config) } { current.value }现已在成功 package analysis 路径上单独锁住 dependency field definition,而for current in { [config.child(), config.child()] } { current.get() }这条绑定后的 direct member definition 也已在 broken-source fallback 上由独立 regression 锁住到 dependency public method declaration;这让 block iterable receiver 的最小 local-binding contract 也不再只散落在 value-root / member 专项回归里。 - 这轮继续沿同一条 block-wrapped iterable root 往 root-token 级别收口:
for current in { (config, config) } { current.value }与for current in { [config.child(), config.child()] } { current.value }这两条路径上的currenttoken,现都已在成功 package analysis 路径与 broken-source fallback 上由独立 regression 锁住 hover / definition / declaration / references,并继续分别固定到 dependency publicConfig/Childdeclaration。这让这条 block iterable root 的 value-root query 不再只靠大矩阵或泛化逻辑兜底。 - 这轮再把同一条 block-wrapped iterable root 的
textDocument/typeDefinition也单独抽出来:for current in { (config, config) } { current.value }与for current in { [config.child(), config.child()] } { current.value }这两条路径上的currenttoken,现都已在成功 package analysis 路径与 broken-source fallback 上由独立 regression 锁住到 dependency publicConfig/Childdeclaration;连同上一轮刚独立锁住的 value-root query,这条 block iterable root 的 root-token query /typeDefinition合同现已闭合。 - 这轮再把同一条 receiver identity 里的
unsafe包裹 iterable root 的 standalone membertypeDefinition也抽出来:在前两轮已独立锁住for current in unsafe { (config, config) } { current.va }与for current in unsafe { [config.child(), config.child()] } { current.ge }这两条 member completion,以及for current in unsafe { (config, config) } { let first = current.value; let second = current.value; ... }与for current in unsafe { [config.child(), config.child()] } { let first = current.get(); let second = current.get(); ... }这两条 member query 之后,for current in unsafe { (config, config) } { current.leaf.value }与for current in unsafe { [config.child(), config.child()] } { current.leaf().value }这两条 member token 的typeDefinition,现在也都已在成功 package analysis 路径与 broken-source fallback 上由独立 regression 锁住到 dependency publicLeafdeclaration;至此这条 unsafe-wrapped iterable root 的 standalone completion / query / membertypeDefinition合同已闭合。 - 这轮继续沿同一条 unsafe-wrapped iterable root 往 root-token 级别收口:
for current in unsafe { (config, config) } { current.value }与for current in unsafe { [config.child(), config.child()] } { current.value }这两条路径上的currenttoken,现都已在成功 package analysis 路径与 broken-source fallback 上由独立 regression 锁住 hover / definition / declaration / references,并继续固定到 dependency public struct declaration;同一位置的textDocument/typeDefinition现在也已由独立 regression 锁住,分别稳定跳到 dependency publicConfig/Childdeclaration。这让这条 unsafe iterable root 的 value-root query / typeDefinition 不再只靠大矩阵或泛化逻辑兜底。 - 这轮再把 unsafe-wrapped iterable root 的最小 standalone
bindingsregression 也抽出来:for current in unsafe { (config, config) } { current.value }现已在成功 package analysis 路径上单独锁住 dependency field definition,而for current in unsafe { [config.child(), config.child()] } { current.get() }这条绑定后的 direct member definition 也已在 broken-source fallback 上由独立 regression 锁住到 dependency public method declaration;这让 unsafe iterable receiver 的最小 local-binding contract 也不再只散落在 value-root / member 专项回归里。 - 同一条
forreceiver truth surface 现在还继续扩到了 named iterable alias:let items = (config, config)、let items = if flag { (config, config) } else { (config, config) }、let items = match flag { ... }这类局部 iterable alias 只要仍稳定收敛到同一个 dependency element binding,后续for current in items { ... }也会直接复用同一条 completion / query / broken-source fallback path,而不是再要求用户把 iterable 强行写回内联形式。 - 这轮把 named iterable alias receiver 的 standalone regression 继续收口到最后一块:在前两轮已经独立锁住
let items = (config, config); for current in items { current.va }/{ current.ge }这两条 completion,以及let items = (config, config); for current in items { current.value }/{ current.get() }这两条 member query 之后,let items = (config, config); for current in items { current.leaf.value }与let items = (config, config); for current in items { current.leaf().value }这两条 member token 的typeDefinition现在也已在成功 package analysis 路径与 broken-source fallback 上由独立 regression 锁住到 dependency publicLeafdeclaration;至此 named iterable alias receiver 的 standalone completion / query / membertypeDefinition合同已闭合。 - 这轮继续沿同一条 named iterable alias receiver 往 root-token 级别收口:
let items = (config, config); for current in items { current.value }与let items = [config.child(), config.child()]; for current in items { current.value }这两条路径上的currenttoken,现都已在成功 package analysis 路径与 broken-source fallback 上由独立 regression 锁住 hover / definition / declaration / references,并继续分别固定到 dependency publicConfig/Childdeclaration;同一位置的textDocument/typeDefinition现在也已由独立 regression 锁住,分别稳定跳到 dependency publicConfig/Childdeclaration。这让这条 named iterable alias root-token query / typeDefinition 不再只靠大矩阵或泛化逻辑兜底。 - 这轮再把 named iterable alias receiver 的最小 standalone
bindingsregression 单独补齐了:let items = (config, config); for current in items { return current.value }现已在成功 package analysis 路径上单独锁住 dependency field definition,而let items = match flag { ... }; for current in items { let value = current.get() }这条绑定后的 direct member definition 也已在 broken-source fallback 上由独立 regression 锁住到 dependency public method declaration;这让 named iterable alias receiver 的 local-binding contract 也不再只散落在 member/root 专项回归里。 - 同一条 identity truth surface 这一轮也继续扩到了同文件 helper-return iterable root:当 free function 显式返回
(Cfg, Cfg)或[Child; 2]这类 tuple/array,且 element 最终仍唯一收敛到同一个 dependency struct binding 时,for current in configs(config) { current.value }与for current in children(config) { current.get() }现在也会直接复用同一条 dependency completion / query path;其中 helper-array receiver 在 broken-source / semantic-error 条件下也继续保留 dependency method definition fallback。 - 这轮把 helper-return iterable root 的 standalone regression 继续收口到最后一块:在前两轮已经独立锁住
for current in configs(config) { current.va }/for current in children(config) { current.ge }这两条 member completion,以及for current in configs(config) { current.value }/for current in children(config) { current.get() }这两条 member query 之后,for current in configs(config) { current.leaf.value }与for current in children(config) { current.leaf().value }这两条 member token 的typeDefinition现在也已在成功 package analysis 路径与 broken-source fallback 上由独立 regression 锁住到 dependency publicLeafdeclaration;至此 helper-return iterable receiver 的 standalone completion / query / membertypeDefinition合同已闭合。 - 这轮继续沿同一条 helper-return iterable root 往 root-token 级别收口:
for current in configs(config) { current.value }与for current in children(config) { current.value }这两条路径上的currenttoken,现都已在成功 package analysis 路径与 broken-source fallback 上由独立 regression 锁住 hover / definition / declaration / references,并继续分别固定到 dependency publicConfig/Childdeclaration;同一位置的textDocument/typeDefinition现在也已由独立 regression 锁住,分别稳定跳到 dependency publicConfig/Childdeclaration。这让这条 helper-return iterable root-token query / typeDefinition 不再只靠大矩阵或泛化逻辑兜底。 - 这轮也把 helper-return iterable receiver 的最小 standalone
bindingsregression 单独补齐了:for current in configs(config) { return current.value }现已在成功 package analysis 路径上单独锁住 dependency field definition,而for current in children(config) { let value = current.get() }这条绑定后的 direct member definition 也已在 broken-source fallback 上由独立 regression 锁住到 dependency public method declaration;至此 helper-return iterable receiver 的 local-binding contract 也不再只散落在更大的 member/root 矩阵里。 - 同一条 identity truth surface 现在还继续扩到了 dependency method-return iterable root:当 dependency method 显式返回
[Child; 2]或(Child, Child)这类 tuple/array 时,for current in config.children() { current.value }与for current in config.pair() { current.get() }也会继续落到同一条 dependency completion / query path,broken-source 条件下的 method definition fallback 也继续可用。 - 这轮把 dependency method-return iterable root 的 standalone regression 继续收口到最后一块:在前两轮已经独立锁住
for current in config.children() { current.va }/for current in config.pair() { current.ge }这两条 member completion,以及for current in config.children() { current.value }/for current in config.pair() { current.get() }这两条 member query 之后,for current in config.children() { current.leaf.value }与for current in config.pair() { current.leaf().value }这两条 member token 的typeDefinition现在也已在成功 package analysis 路径与 broken-source fallback 上由独立 regression 锁住到 dependency publicLeafdeclaration;至此 method-return iterable receiver 的 standalone completion / query / membertypeDefinition合同已闭合。 - 这轮继续沿同一条 dependency method-return iterable root 往 root-token 级别收口:
for current in config.children() { current.value }与for current in config.pair() { current.get() }这两条路径上的currenttoken,现都已在成功 package analysis 路径与 broken-source fallback 上由独立 regression 锁住 hover / definition / declaration / references,并继续固定到 dependency publicChilddeclaration;同一位置的textDocument/typeDefinition现在也已由独立 regression 锁住,并稳定跳到 dependency publicChilddeclaration。这让这条 method-return iterable root-token query / typeDefinition 不再只靠大矩阵或泛化逻辑兜底。 - 这轮再把 dependency method-return iterable receiver 的最小 standalone
bindingsregression 单独补齐了:for current in config.children() { return current.value }现已在成功 package analysis 路径上单独锁住 dependency field definition,而for current in config.pair() { let value = current.get() }这条绑定后的 direct member definition 也已在 broken-source fallback 上由独立 regression 锁住到 dependency public method declaration;这让 method-return iterable receiver 的 local-binding contract 也不再只散落在更大的 member/root 矩阵里。 - 同一条 identity truth surface 现在也已扩到 dependency field iterable root:当 dependency field 类型本身就是
[Child; 2]或(Child, Child)这类 tuple/array 时,for current in config.children { current.value }与for current in config.pair { current.get() }也会继续落到同一条 dependency completion / query path。 - 这轮把 dependency field iterable root 的 standalone regression 继续收口到最后一块:在前两轮已经独立锁住
for current in config.children { current.va }/for current in config.pair { current.ge }这两条 member completion,以及for current in config.children { current.value }/for current in config.pair { current.get() }这两条 member query 之后,for current in config.children { current.leaf.value }与for current in config.pair { current.leaf().value }这两条 member token 的typeDefinition现在也已在成功 package analysis 路径与 broken-source fallback 上由独立 regression 锁住到 dependency publicLeafdeclaration;至此 field iterable receiver 的 standalone completion / query / membertypeDefinition合同已闭合。 - 这轮继续沿同一条 dependency field iterable root 往 root-token 级别收口:
for current in config.children { current.value }与for current in config.pair { current.get() }这两条路径上的currenttoken,现都已在成功 package analysis 路径与 broken-source fallback 上由独立 regression 锁住 hover / definition / declaration / references,并继续固定到 dependency publicChilddeclaration;同一位置的textDocument/typeDefinition现在也已由独立 regression 锁住,并稳定跳到 dependency publicChilddeclaration。这让这条 field iterable root-token query / typeDefinition 不再只靠大矩阵或泛化逻辑兜底。 - 这轮再把 dependency field iterable receiver 的最小 standalone
bindingsregression 单独补齐了:for current in config.children { return current.value }现已在成功 package analysis 路径上单独锁住 dependency field definition,而for current in config.pair { let value = current.get() }这条绑定后的 direct member definition 也已在 broken-source fallback 上由独立 regression 锁住到 dependency public method declaration;这让 field iterable receiver 的 local-binding contract 也不再只散落在更大的 member/root 矩阵里。 - 同一条 identity truth surface 现在也已扩到 question-wrapped iterable root:当 dependency field / method 返回
Option[[Child; 2]]、Option[(Child, Child)]或等价Result[...]包裹的 iterable 时,for current in config.children? { current.value }与for current in config.pair()? { current.get() }也会继续落到同一条 dependency completion / query path,broken-source 条件下的 method definition fallback 仍可复用;此前已把for current in config.children? { current.va }与for current in config.pair()? { current.ge }这两条 direct question iterable member completion,以及for current in config.children? { current.value }与for current in config.pair()? { current.get() }这两条 direct question iterable member query,都在成功 package analysis 路径与 broken-source fallback 上用独立 regression 锁住;这轮再把for current in config.children? { current.leaf.value }与for current in config.pair()? { current.leaf().value }这两条 member token 的typeDefinition,也在成功 package analysis 路径与 broken-source fallback 上都用独立 regression 锁住到 dependency publicLeafdeclaration,因此 question-wrapped iterable root 的 standalone completion / query / membertypeDefinition已闭合。 - 这轮继续沿同一条 question-wrapped iterable root 往 receiver binding 的 root-token 级别收口:
for current in config.children? { current.value }与for current in config.pair()? { current.get() }这两条路径上的currenttoken,现都已在成功 package analysis 路径与 broken-source fallback 上由独立 regression 锁住 hover / definition / declaration / references,并继续固定到 dependency publicChilddeclaration。这让这条 question-wrapped iterable receiver root-token query 不再只靠已有 member/query 矩阵隐式兜底。 - 这轮再把同一组 question-wrapped iterable receiver binding root token 的
textDocument/typeDefinition单独抽成独立 regression:for current in config.children? { current.value }与for current in config.pair()? { current.get() }这两条路径上的currenttoken,现都已在成功 package analysis 路径与 broken-source fallback 上稳定跳到 dependency publicChilddeclaration;连同上一轮已单独锁住的同组 hover / definition / declaration / references,这条 question-wrapped iterable receiver root-token query /typeDefinition合同现已闭合。 - 同一条 identity truth surface 现在也已扩到同文件本地 receiver method iterable root:当
impl/extend里的方法 target 能唯一收敛到当前 dependency receiver,并显式返回[Child; 2]或(Child, Child)这类 tuple/array 时,for current in config.children() { current.value }与for current in self.pair() { current.get() }也会继续落到同一条 dependency completion / query path。 - 这轮再把同文件本地 receiver method iterable root 的 standalone member
typeDefinition也抽出来:for current in config.children() { current.leaf.value }与for current in self.pair() { current.leaf().value }这两条 member token,现在都已在成功 package analysis 路径与 broken-source fallback 上由独立 regression 锁住到 dependency publicLeafdeclaration;连同前两轮已单独锁住的 member completion 与 member query,这条 receiver 的 standalone completion / query / membertypeDefinition合同现已闭合。 - 这轮继续沿同一条同文件本地 receiver method iterable root 往 root-token 级别收口:
for current in config.children() { current.value }与for current in self.pair() { current.get() }这两条路径上的currenttoken,现都已在成功 package analysis 路径与 broken-source fallback 上由独立 regression 锁住 hover / definition / declaration / references,并继续固定到 dependency publicChilddeclaration;同一位置的textDocument/typeDefinition现在也已由独立 regression 锁住,并稳定跳到 dependency publicChilddeclaration。至此这条 local-method iterable receiver 的 root-token query /typeDefinition合同已闭合。 - 这轮再把同文件本地 receiver method iterable 的最小 standalone
bindingsregression 单独补齐了:for current in config.children() { return current.value }现已在成功 package analysis 路径上单独锁住 dependency field definition,而for current in self.pair() { let value = current.get() }这条绑定后的 direct member definition 也已在 broken-source fallback 上由独立 regression 锁住到 dependency public method declaration;这让 local-method iterable receiver 的 local-binding contract 也不再只散落在更大的 member/root 矩阵里。 - 同一条 identity truth surface 现在也已扩到 structured question-wrapped iterable root:当
if/match的各分支最终都解包到同一个 dependency iterable element binding 时,for current in (if flag { config.children? } else { config.children? }) { current.value }与for current in match flag { true => config.pair()?, false => config.pair()? } { current.get() }也会继续落到同一条 dependency completion / query path;此前已把for current in (if flag { config.children? } else { config.children? }) { current.va }与for current in match flag { true => config.pair()?, false => config.pair()? } { current.ge }这两条 structured question iterable member completion,以及for current in (if flag { config.children? } else { config.children? }) { current.value }与for current in match flag { true => config.pair()?, false => config.pair()? } { current.get() }这两条 structured question iterable member query,都在成功 package analysis 路径与 broken-source fallback 上用独立 regression 锁住;这轮再把for current in (if flag { config.children? } else { config.children? }) { current.leaf.value }与for current in match flag { true => config.pair()?, false => config.pair()? } { current.leaf().value }这两条 member token 的typeDefinition,也在成功 package analysis 路径与 broken-source fallback 上都用独立 regression 锁住到 dependency publicLeafdeclaration,因此 structured question-wrapped iterable root 的 standalone completion / query / membertypeDefinition已闭合。 - 这轮继续沿同一条 structured question-wrapped iterable root 往 receiver binding 的 root-token 级别收口:
for current in (if flag { config.children? } else { config.children? }) { current.value }与for current in match flag { true => config.pair()?, false => config.pair()? } { current.get() }这两条路径上的currenttoken,现都已在成功 package analysis 路径与 broken-source fallback 上由独立 regression 锁住 hover / definition / declaration / references,并继续固定到 dependency publicChilddeclaration。这让这条 structured question-wrapped iterable receiver root-token query 不再只靠已有 structured member/query 矩阵隐式兜底。 - 这轮再把同一组 structured question-wrapped iterable receiver binding root token 的
textDocument/typeDefinition单独抽成独立 regression:for current in (if flag { config.children? } else { config.children? }) { current.value }与for current in match flag { true => config.pair()?, false => config.pair()? } { current.get() }这两条路径上的currenttoken,现都已在成功 package analysis 路径与 broken-source fallback 上稳定跳到 dependency publicChilddeclaration;连同上一轮已单独锁住的同组 hover / definition / declaration / references,这条 structured question-wrapped iterable receiver root-token query /typeDefinition合同现已闭合。 - 这轮把 imported dependency public function return 也并进了同一条 receiver truth surface:当
use demo.dep.load/use demo.dep.maybe_load/use demo.dep.children唯一映射到 dependency.qi的 public function,且返回类型能唯一收敛到 dependency public struct、Option/Result解包后的 dependency public struct,或[Child; 2]/(Child, Child)这类 iterable element binding 时,load().value、maybe_load()?.value与for current in children() { current.get() }现在也都会直接复用同一条 dependency completion / query path;其中 function-return iterable receiver 在 broken-source / semantic-error 条件下也会继续保留 dependency method definition fallback。 - 这轮也把 imported dependency public
const/static根值并进了同一条 receiver truth surface:当use demo.dep.DEFAULT as cfg、use demo.dep.MAYBE as child、use demo.dep.ITEMS唯一映射到 dependency.qi的 publicconst/static,且声明类型能唯一收敛到 dependency public struct、Option/Result解包后的 dependency public struct,或[Child; 2]/(Child, Child)这类 iterable element binding 时,cfg.value、child?.value与for current in ITEMS { current.get() }现在也都会直接复用同一条 dependency completion / query path;其中 const/static iterable receiver 在 broken-source / semantic-error 条件下也会继续保留 dependency method definition fallback。 - 这轮再把 direct question-wrapped non-iterable imported receiver 的 member completion 也单独抽成独立 regression:当
use demo.dep.maybe_load/use demo.dep.MAYBE as child唯一映射到 dependency.qi的 public function /const/static,且?解包后仍能唯一收敛到同一个 dependency public struct 时,maybe_load()?.va/maybe_load()?.ge与child?.va/child?.ge这四条 direct member prefix,现在都已在成功 package analysis 路径与 broken-source fallback 上由独立 regression 锁住 dependency field / method completion;连同此前已单独锁住的maybe_load()?.value/maybe_load()?.get()与child?.value/child?.get()这四条 direct member token 的 hover / definition / declaration / references,以及maybe_load()?.leaf.value/maybe_load()?.leaf().value与child?.leaf.value/child?.leaf().value这四条 direct member token 的typeDefinition,这条 direct question-wrapped non-iterable receiver 的 standalone member completion + query +typeDefinition合同现已从大矩阵里闭合。 - 这轮再把同一条 direct question-wrapped non-iterable imported receiver 的 function-root field completion success-path 单独抽成独立 regression:
maybe_load()?.va这条路径上的va前缀,现已在成功 package analysis 路径上由独立 regression 锁住到 dependency fieldvaluecompletion;这让这条 function-root field completion 不再只继续混在旧的question_value_completion半矩阵里。 - 这轮再把同一条 direct question-wrapped non-iterable imported receiver 的 function-root field completion fallback 单独抽成独立 regression:
let broken: Int = "oops"; return maybe_load()?.va这条路径上的va前缀,现已在 broken-source fallback 上由独立 regression 锁住到 dependency fieldvaluecompletion;连同此前已单独锁住的 success-path regression,这条 function-root field completion 现在也不再继续混在旧的question_value_completion半矩阵里。 - 这轮继续把同一条 direct question-wrapped non-iterable imported receiver 的 function-root method completion success-path 单独抽成独立 regression:
maybe_load()?.ge这条路径上的ge前缀,现已在成功 package analysis 路径上由独立 regression 锁住到 dependency methodgetcompletion;这让这条 function-root method completion 也开始从旧的question_value_completion半矩阵里拆出来。 - 这轮继续把同一条 direct question-wrapped non-iterable imported receiver 的 function-root method completion fallback 单独抽成独立 regression:
let broken: Int = "oops"; return maybe_load()?.ge这条路径上的ge前缀,现已在 broken-source fallback 上由独立 regression 锁住到 dependency methodgetcompletion;连同此前已单独锁住的 success-path regression,这条 function-root method completion 现在也不再继续混在旧的question_value_completion半矩阵里。 - 这轮继续把同一条 direct question-wrapped non-iterable imported receiver 的 static-root field completion success-path 单独抽成独立 regression:
child?.va这条路径上的va前缀,现已在成功 package analysis 路径上由独立 regression 锁住到 dependency fieldvaluecompletion;这让这条 static-root field completion 也开始从旧的question_value_completion半矩阵里拆出来。 - 这轮继续把同一条 direct question-wrapped non-iterable imported receiver 的 static-root field completion fallback 单独抽成独立 regression:
let broken: Int = "oops"; return child?.va这条路径上的va前缀,现已在 broken-source fallback 上由独立 regression 锁住到 dependency fieldvaluecompletion;连同此前已单独锁住的 success-path regression,这条 static-root field completion 现在也不再继续混在旧的question_value_completion半矩阵里。 - 这轮继续把同一条 direct question-wrapped non-iterable imported receiver 的 static-root method completion success-path 单独抽成独立 regression:
child?.ge这条路径上的ge前缀,现已在成功 package analysis 路径上由独立 regression 锁住到 dependency methodgetcompletion;这让这条 static-root method completion 也开始从旧的question_value_completion半矩阵里拆出来。 - 这轮继续把同一条 direct question-wrapped non-iterable imported receiver 的 static-root method completion fallback 单独抽成独立 regression:
let broken: Int = "oops"; return child?.ge这条路径上的ge前缀,现已在 broken-source fallback 上由独立 regression 锁住到 dependency methodgetcompletion;连同此前已单独锁住的 success-path regression,这条 static-root method completion 现在也不再继续混在旧的question_value_completion半矩阵里。 - 到这里,旧的
question_value_completion混合半矩阵已经被question_function_value_completion、question_function_value_fallback_completion、question_function_method_completion、question_function_method_fallback_completion、question_static_value_completion、question_static_value_fallback_completion、question_static_method_completion与question_static_method_fallback_completion这八个独立 regression 全量替代;因此 direct question-wrapped non-iterable imported receiver 的 completion 半矩阵现已完成拆分,旧混合回归也可以正式退役。 - 这轮继续把同一条 direct question-wrapped non-iterable imported receiver 的 function-root field member queries success-path 单独抽成独立 regression:
let first = maybe_load()?.value; let second = maybe_load()?.value这组 token,现已在成功 package analysis 路径上由独立 regression 锁住 dependency fieldvalue的 hover / definition / declaration / references;这让这条 function-root field member queries 也开始从旧的question_value_member_queries半矩阵里拆出来。 - 这轮继续把同一条 direct question-wrapped non-iterable imported receiver 的 function-root field member queries fallback 单独抽成独立 regression:
let first = maybe_load()?.value; let second = maybe_load()?.value; return "oops"这组 token,现已在 broken-source fallback 上由独立 regression 锁住 dependency fieldvalue的 hover / definition / declaration / references;连同此前已单独锁住的 success-path regression,这条 function-root field member queries 现在也不再继续混在旧的question_value_member_queries半矩阵里。 - 这轮继续把同一条 direct question-wrapped non-iterable imported receiver 的 function-root method member queries success-path 单独抽成独立 regression:
let first = maybe_load()?.get(); let second = maybe_load()?.get()这组 token,现已在成功 package analysis 路径上由独立 regression 锁住 dependency methodget的 hover / definition / declaration / references;这让这条 function-root method member queries 也开始从旧的question_value_member_queries半矩阵里拆出来。 - 这轮继续把同一条 direct question-wrapped non-iterable imported receiver 的 function-root method member queries fallback 单独抽成独立 regression:
let first = maybe_load()?.get(); let second = maybe_load()?.get(); return "oops"这组 token,现已在 broken-source fallback 上由独立 regression 锁住 dependency methodget的 hover / definition / declaration / references;连同此前已单独锁住的 success-path regression,这条 function-root method member queries 现在也不再继续混在旧的question_value_member_queries半矩阵里。 - 这轮继续把同一条 direct question-wrapped non-iterable imported receiver 的 static-root field member queries success-path 单独抽成独立 regression:
let first = child?.value; let second = child?.value这组 token,现已在成功 package analysis 路径上由独立 regression 锁住 dependency fieldvalue的 hover / definition / declaration / references;这让这条 static-root field member queries 也开始从旧的question_value_member_queries半矩阵里拆出来。 - 这轮继续把同一条 direct question-wrapped non-iterable imported receiver 的 static-root field member queries fallback 单独抽成独立 regression:
let first = child?.value; let second = child?.value; return "oops"这组 token,现已在 broken-source fallback 上由独立 regression 锁住 dependency fieldvalue的 hover / definition / declaration / references;连同此前已单独锁住的 success-path regression,这条 static-root field member queries 现在也不再继续混在旧的question_value_member_queries半矩阵里。 - 这轮继续把同一条 direct question-wrapped non-iterable imported receiver 的 static-root method member queries success-path 单独抽成独立 regression:
let first = child?.get(); let second = child?.get()这组 token,现已在成功 package analysis 路径上由独立 regression 锁住 dependency methodget的 hover / definition / declaration / references;这让这条 static-root method member queries 也开始从旧的question_value_member_queries半矩阵里拆出来。 - 这轮继续把同一条 direct question-wrapped non-iterable imported receiver 的 static-root method member queries fallback 单独抽成独立 regression:
let first = child?.get(); let second = child?.get(); return "oops"这组 token,现已在 broken-source fallback 上由独立 regression 锁住 dependency methodget的 hover / definition / declaration / references;连同此前已单独锁住的 success-path regression,这条 static-root method member queries 现在也不再继续混在旧的question_value_member_queries半矩阵里。 - 到这里,旧的
question_value_member_queries混合半矩阵已经被question_function_value_member_queries、question_function_value_member_fallback_queries、question_function_method_member_queries、question_function_method_member_fallback_queries、question_static_value_member_queries、question_static_value_member_fallback_queries、question_static_method_member_queries与question_static_method_member_fallback_queries这八个独立 regression 全量替代;因此 direct question-wrapped non-iterable imported receiver 的 member queries 半矩阵现已完成拆分,旧混合回归也可以正式退役。 - 这轮继续把同一条 direct question-wrapped non-iterable imported receiver 的 function-root field member
typeDefinitionsuccess-path 单独抽成独立 regression:let next = maybe_load()?.leaf.value这条路径上的leaftoken,现已在成功 package analysis 路径上由独立 regression 锁住到 dependency publicLeafdeclaration;这让这条 function-root field membertypeDefinition也开始从旧的question_value_member_type_definition半矩阵里拆出来。 - 这轮继续把同一条 direct question-wrapped non-iterable imported receiver 的 function-root field member
typeDefinitionfallback 单独抽成独立 regression:let next = maybe_load()?.leaf.value; return "oops"这条路径上的leaftoken,现已在 broken-source fallback 上由独立 regression 锁住到 dependency publicLeafdeclaration;连同此前已单独锁住的 success-path regression,这条 function-root field membertypeDefinition现在也不再继续混在旧的question_value_member_type_definition半矩阵里。 - 这轮继续把同一条 direct question-wrapped non-iterable imported receiver 的 function-root method member
typeDefinitionsuccess-path 单独抽成独立 regression:let next = maybe_load()?.leaf().value这条路径上的leaftoken,现已在成功 package analysis 路径上由独立 regression 锁住到 dependency publicLeafdeclaration;这让这条 function-root method membertypeDefinition也开始从旧的question_value_member_type_definition半矩阵里拆出来。 - 这轮继续把同一条 direct question-wrapped non-iterable imported receiver 的 function-root method member
typeDefinitionfallback 单独抽成独立 regression:let next = maybe_load()?.leaf().value; return "oops"这条路径上的leaftoken,现已在 broken-source fallback 上由独立 regression 锁住到 dependency publicLeafdeclaration;连同此前已单独锁住的 success-path regression,这条 function-root method membertypeDefinition现在也不再继续混在旧的question_value_member_type_definition半矩阵里。 - 这轮继续把同一条 direct question-wrapped non-iterable imported receiver 的 static-root field member
typeDefinitionsuccess-path 单独抽成独立 regression:let next = child?.leaf.value这条路径上的leaftoken,现已在成功 package analysis 路径上由独立 regression 锁住到 dependency publicLeafdeclaration;这让这条 static-root field membertypeDefinition也开始从旧的question_value_member_type_definition半矩阵里拆出来。 - 这轮继续把同一条 direct question-wrapped non-iterable imported receiver 的 static-root field member
typeDefinitionfallback 单独抽成独立 regression:let next = child?.leaf.value; return "oops"这条路径上的leaftoken,现已在 broken-source fallback 上由独立 regression 锁住到 dependency publicLeafdeclaration;连同此前已单独锁住的 success-path regression,这条 static-root field membertypeDefinition现在也不再继续混在旧的question_value_member_type_definition半矩阵里。 - 这轮继续把同一条 direct question-wrapped non-iterable imported receiver 的 static-root method member
typeDefinitionsuccess-path 单独抽成独立 regression:let next = child?.leaf().value这条路径上的leaftoken,现已在成功 package analysis 路径上由独立 regression 锁住到 dependency publicLeafdeclaration;这让这条 static-root method membertypeDefinition也开始从旧的question_value_member_type_definition半矩阵里拆出来。 - 这轮继续把同一条 direct question-wrapped non-iterable imported receiver 的 static-root method member
typeDefinitionfallback 单独抽成独立 regression:let next = child?.leaf().value; return "oops"这条路径上的leaftoken,现已在 broken-source fallback 上由独立 regression 锁住到 dependency publicLeafdeclaration;连同此前已单独锁住的 success-path regression,这条 static-root method membertypeDefinition现在也不再继续混在旧的question_value_member_type_definition半矩阵里。 - 到这里,旧的
question_value_member_type_definition混合半矩阵已经被question_function_value_member_type_definition、question_function_value_member_fallback_type_definition、question_function_method_member_type_definition、question_function_method_member_fallback_type_definition、question_static_value_member_type_definition、question_static_value_member_fallback_type_definition、question_static_method_member_type_definition与question_static_method_member_fallback_type_definition这八个独立 regression 全量替代;因此 direct question-wrapped non-iterable imported receiver 的 membertypeDefinition半矩阵现已完成拆分,旧混合回归也可以正式退役。 - 这轮继续把同一条 direct question-wrapped non-iterable imported receiver 的 function-root field
bindingssuccess-path 单独抽成独立 regression:return maybe_load()?.value这条路径,现已在成功 package analysis 路径上由独立 regression 锁住 dependency fieldvaluedefinition;这让这条 function-root field binding 也开始从旧的question_value_bindings混合回归里拆出来。 - 这轮继续把同一条 direct question-wrapped non-iterable imported receiver 的 static-root field
bindingssuccess-path 单独抽成独立 regression:return child?.value这条路径,现已在成功 package analysis 路径上由独立 regression 锁住 dependency fieldvaluedefinition;这让这条 static-root field binding 也开始从旧的question_value_bindings混合回归里拆出来。 - 这轮继续把同一条 direct question-wrapped non-iterable imported receiver 的 function-root method
bindingsfallback 单独抽成独立 regression:let first = maybe_load()?.get(); return "oops"这条路径,现已在 broken-source fallback 上由独立 regression 锁住 dependency methodgetdefinition;这让这条 function-root method binding 也开始从旧的question_value_bindings混合回归里拆出来。 - 这轮继续把同一条 direct question-wrapped non-iterable imported receiver 的 static-root method
bindingsfallback 单独抽成独立 regression:let second = child?.get(); return "oops"这条路径,现已在 broken-source fallback 上由独立 regression 锁住 dependency methodgetdefinition;这让这条 static-root method binding 也开始从旧的question_value_bindings混合回归里拆出来。 - 到这里,旧的
question_value_bindings混合回归已经被question_function_value_bindings、question_static_value_bindings、question_function_method_bindings_fallback与question_static_method_bindings_fallback这四个独立 regression 全量替代;因此 direct question-wrapped non-iterable imported receiver 的最小 standalonebindings合同现已完成拆分,旧混合回归也可以正式退役。 - 这轮再把 direct question-wrapped non-iterable imported receiver 的最小 standalone
bindings也单独抽成独立 regression:return maybe_load()?.value与return child?.value这两条路径,现已在成功 package analysis 路径上单独锁住 dependency field definition,而let first = maybe_load()?.get()/let second = child?.get(); return "oops"这组 direct question function/static root 绑定后的 direct member definition,也已在 broken-source fallback 上由独立 regression 锁住到 dependency public method declaration;这让这条 direct question-wrapped imported value receiver 的最小 local-binding contract 也不再只散落在既有混合bindings回归里。 - 这轮再把 structured direct question-wrapped non-iterable imported receiver 的 member
typeDefinition单独抽成独立 regression:在前一轮已锁住(if flag { maybe_load()? } else { maybe_load()? }).va/.ge、(match flag { true => maybe_load()?, false => maybe_load()? }).va/.ge、(if flag { child? } else { child? }).va/.ge与(match flag { true => child?, false => child? }).va/.ge这八条 direct member prefix 的 dependency field / method completion,以及(...).value/(...).get()这八条 structured direct member token 在成功 package analysis 路径与 broken-source fallback 上的 hover / definition / declaration / references 之后,这一轮又把(...).leaf.value/(...).leaf().value这八条 structured direct member token 的typeDefinition在成功 package analysis 路径与 broken-source fallback 上单独锁住;连同更早已单独锁住的同组 structured root token query /typeDefinition,这条 structured direct question-wrapped non-iterable receiver 的 member completion + query +typeDefinition合同现已闭合。 - 这轮再把 structured direct question-wrapped non-iterable imported receiver 的最小 standalone
bindings也单独抽成独立 regression:return (if flag { maybe_load()? } else { maybe_load()? }).value与return (match flag { true => child?, false => child? }).value这两条路径,现已在成功 package analysis 路径上单独锁住 dependency field definition,而let first = (match flag { true => maybe_load()?, false => maybe_load()? }).get()/let second = (if flag { child? } else { child? }).get(); return "oops"这组 structured direct question function/static root 绑定后的 direct member definition,也已在 broken-source fallback 上由独立 regression 锁住到 dependency public method declaration;这让这条 structured direct question-wrapped imported value receiver 的最小 local-binding contract 也不再只散落在既有混合bindings回归里。 - 同一条 imported value receiver truth surface 这轮也显式补到了 grouped alias + question-wrapped non-iterable root:当
use demo.dep.{maybe_load as load_cfg}/use demo.dep.{MAYBE as maybe_cfg}这类 grouped alias 唯一映射到 dependency.qi的 public function /const/static,且?解包后仍能唯一收敛到同一个 dependency public struct 时,load_cfg()?.va/load_cfg()?.ge现在都会直接复用成功 package analysis 下的 dependency field / method completion path,而在 broken-source / semantic-error 条件下,load_cfg()?.va/load_cfg()?.ge与maybe_cfg?.va/maybe_cfg?.ge现在也都会继续保留 dependency field / method completion fallback;这轮再把load_cfg()?.value/load_cfg()?.get()与maybe_cfg?.value/maybe_cfg?.get()这四条 direct member token 的 hover / definition / declaration / references,以及load_cfg()?.leaf.value/load_cfg()?.leaf().value与maybe_cfg?.leaf.value/maybe_cfg?.leaf().value这四条 direct member token 的typeDefinition,在成功 package analysis 路径与 broken-source fallback 上都用独立 regression 锁住,因此这条 grouped alias + question-wrapped non-iterable receiver 的 direct member completion + query +typeDefinition合同现已闭合。 - 这轮再把 grouped alias + question-wrapped non-iterable imported receiver 的最小 standalone
bindings也单独抽成独立 regression:return load_cfg()?.value与return maybe_cfg?.value这两条路径,现已在成功 package analysis 路径上单独锁住 dependency field definition,而let first = load_cfg()?.get()/let second = maybe_cfg?.get(); return "oops"这组 grouped question function/static root 绑定后的 direct member definition,也已在 broken-source / semantic-error fallback 上由独立 regression 锁住到 dependency public method declaration;这让这条 grouped question-wrapped imported value receiver 的最小 local-binding contract 也不再只散落在既有混合bindings回归里。 - 这轮再把 grouped alias + question-wrapped non-iterable imported receiver 的 direct member completion 也单独抽成 standalone regression:
load_cfg()?.va/load_cfg()?.ge与maybe_cfg?.va/maybe_cfg?.ge这四条 direct member prefix,现都已在成功 package analysis 路径与 broken-source / semantic-error fallback 上由独立 regression 锁住到 dependency fieldvalue/ methodget;连同此前已独立锁住的 direct member query /typeDefinition,以及上一轮刚单独抽出的最小 standalonebindings,这条 grouped question value receiver 的 standalone completion / query /typeDefinition/ local-binding contract 现已全部收口,不再需要继续依赖旧的混合回归矩阵来兜底。 - 这轮又把同一条 imported value receiver truth surface 上的 structured grouped alias + question-wrapped non-iterable member
typeDefinition补齐了:在前一轮已锁住va/ge这八条 direct member prefix 的 dependency field / method completion,以及value/get()这八条 direct member token hover / definition / declaration / references 之后,(if flag { load_cfg()? } else { load_cfg()? }).leaf.value/.leaf().value、(match flag { true => load_cfg()?, false => load_cfg()? }).leaf.value/.leaf().value、(if flag { maybe_cfg? } else { maybe_cfg? }).leaf.value/.leaf().value与(match flag { true => maybe_cfg?, false => maybe_cfg? }).leaf.value/.leaf().value这八条 direct member token,现在也都已在成功 package analysis 路径与 broken-source fallback 上由独立 regression 锁住typeDefinition;因此这条 structured grouped alias + question-wrapped non-iterable receiver 的 member completion + query +typeDefinition合同现已闭合。 - 这轮再把 structured grouped alias + question-wrapped non-iterable imported receiver 的最小 standalone
bindings也单独抽成独立 regression:return (if flag { load_cfg()? } else { load_cfg()? }).value与return (match flag { true => maybe_cfg?, false => maybe_cfg? }).value这两条路径,现已在成功 package analysis 路径上单独锁住 dependency field definition,而let first = (match flag { true => load_cfg()?, false => load_cfg()? }).get()/let second = (if flag { maybe_cfg? } else { maybe_cfg? }).get(); return "oops"这组 structured grouped question function/static root 绑定后的 direct member definition,也已在 broken-source / semantic-error fallback 上由独立 regression 锁住到 dependency public method declaration;这让这条 structured grouped question-wrapped imported value receiver 的最小 local-binding contract 也不再只散落在既有混合bindings回归里。 - 这轮继续把同一条 grouped alias + question-wrapped iterable receiver 的 direct member contract 从 grouped-import 大矩阵里拆成 standalone regression:
for current in kids()? { current.leaf.value }与for current in maybe_items? { current.leaf().value },现都已在成功路径与 broken-source / semantic-error fallback 上由独立 regression 锁住到 dependency publicLeafdeclaration。连同前两轮已独立锁住的for current in kids()? { current.va }与for current in maybe_items? { current.ge }两条 member completion,以及for current in kids()? { let first = current.value; let second = current.value }与for current in maybe_items? { let first = current.get(); let second = current.get() }两条 member query,这条 direct grouped question iterable receiver 的 standalone member completion + query +typeDefinition合同现已闭合;这轮再把 direct grouped question iterable 的 standalone member completion 也补齐成field/method × function/static × success/fallback的完整 8-case 矩阵,因此 direct grouped question iterable member completion / query /typeDefinition现已全部只保留完整 standalone truth surface,而旧 mixed 文件也已整体退役。 - 这轮继续沿同一条 grouped alias + question-wrapped iterable receiver 往 receiver binding 的 root-token 级别收口:
for current in kids()? { current.value }与for current in maybe_items? { current.get() }这两条路径上的currenttoken,现都已在成功 package analysis 路径与 broken-source / semantic-error fallback 上由独立 regression 锁住 hover / definition / declaration / references,并继续固定到 dependency publicChilddeclaration;同一位置的textDocument/typeDefinition这轮也已在成功 package analysis 路径与 broken-source / semantic-error fallback 上由独立 regression 锁住,并稳定跳到 dependency publicChilddeclaration。至此这条 grouped question iterable receiver root-token query /typeDefinition合同现已闭合,不再只靠既有 member/query 矩阵隐式兜底。 - 这轮把同一条 grouped alias + question-wrapped iterable receiver 的
bindings也补齐成完整 standalone regression 矩阵了:for current in kids()? { return current.value }/{ return current.get() }、for current in maybe_items? { return current.value }/{ return current.get() }这四条 direct grouped iterable binding definition,现都已在成功 package analysis 路径与 broken-source / semantic-error fallback 上由独立 regression 锁住到 dependency public field / method declaration;旧 grouped-question-import mixedbindings文件里的同组 direct definition case 也已同时退役。至此这条 direct grouped question iterable receiver 的 standalonebindings合同现已闭合。 - 这轮开始把同一条 structured grouped alias + question-wrapped iterable receiver 往 receiver binding 的 root-token 级别拆成 standalone regression:
for current in (if flag { kids()? } else { kids()? }) { current.value }、for current in match flag { true => kids()?, false => kids()? } { current.value }、for current in (if flag { maybe_items? } else { maybe_items? }) { current.get() }与for current in match flag { true => maybe_items?, false => maybe_items? } { current.get() }这四条路径上的currenttoken,现都已在成功 package analysis 路径与 broken-source / semantic-error fallback 上由独立 regression 锁住 hover / definition / declaration / references,并继续固定到 dependency publicChilddeclaration;同一位置的textDocument/typeDefinition这轮也已在成功 package analysis 路径与 broken-source / semantic-error fallback 上由独立 regression 锁住,并稳定跳到 dependency publicChilddeclaration。至此这条 structured grouped question iterable receiver root-token query /typeDefinition合同现已闭合,不再只靠既有 structured member/query 矩阵隐式兜底。 - 这轮把同一条 structured grouped alias + question-wrapped iterable receiver 的
bindings也补齐成完整 standalone regression 矩阵了:for current in (if flag { kids()? } else { kids()? }) { return current.value }/{ return current.get() }、for current in match flag { true => kids()?, false => kids()? } { return current.value }/{ return current.get() }、for current in (if flag { maybe_items? } else { maybe_items? }) { return current.value }/{ return current.get() }与for current in match flag { true => maybe_items?, false => maybe_items? } { return current.value }/{ return current.get() }这八条 structured grouped iterable binding definition,现都已在成功 package analysis 路径与 broken-source / semantic-error fallback 上由独立 regression 锁住到 dependency public field / method declaration;旧 grouped-question-import mixedbindings文件里的同组 structured definition case 也已同时退役。至此这条 structured grouped question iterable receiver 的 standalonebindings合同现已闭合。 - 这轮把同一条 structured grouped alias + question-wrapped iterable receiver 的 member completion 也补齐成完整 standalone regression 矩阵了:
for current in (if flag { kids()? } else { kids()? }) { current.va }/{ current.ge }、for current in match flag { true => kids()?, false => kids()? } { current.va }/{ current.ge }、for current in (if flag { maybe_items? } else { maybe_items? }) { current.va }/{ current.ge }与for current in match flag { true => maybe_items?, false => maybe_items? } { current.va }/{ current.ge }这八条 structured grouped iterable member prefix,现都已在成功 package analysis 路径与 broken-source / semantic-error fallback 上由独立 regression 锁住到 dependency fieldvalue/ methodget。连同此前已独立锁住的同组 member query /typeDefinition,这条 structured grouped question iterable receiver 的 standalone member completion + query +typeDefinition合同现已闭合;旧 grouped-question-import mixedbindings文件里的同组 completion case 也已同时退役。 - 这轮把同一条 structured grouped alias + question-wrapped iterable receiver 的 member query 也补齐成完整 standalone regression 矩阵了:
for current in (if flag { kids()? } else { kids()? }) { let first = current.value; let second = current.value }/{ let first = current.get(); let second = current.get() }、for current in match flag { true => kids()?, false => kids()? } { let first = current.value; let second = current.value }/{ let first = current.get(); let second = current.get() }、for current in (if flag { maybe_items? } else { maybe_items? }) { let first = current.value; let second = current.value }/{ let first = current.get(); let second = current.get() }与for current in match flag { true => maybe_items?, false => maybe_items? } { let first = current.value; let second = current.value }/{ let first = current.get(); let second = current.get() }这八条 structured grouped iterable member query,现都已在成功 package analysis 路径与 broken-source / semantic-error fallback 上由独立 regression 锁住 hover / definition / declaration / references;旧 grouped-question-import mixedbindings文件里的同组 structured query case 也已同时退役。至此这条 structured grouped question iterable receiver 的 standalone member query 合同现已闭合。 - 这轮把同一条 structured grouped alias + question-wrapped iterable receiver 的 member
typeDefinition也补齐成完整 standalone regression 矩阵了:for current in (if flag { kids()? } else { kids()? }) { current.leaf.value }/{ current.leaf().value }、for current in match flag { true => kids()?, false => kids()? } { current.leaf.value }/{ current.leaf().value }、for current in (if flag { maybe_items? } else { maybe_items? }) { current.leaf.value }/{ current.leaf().value }与for current in match flag { true => maybe_items?, false => maybe_items? } { current.leaf.value }/{ current.leaf().value }这八条 structured grouped iterable member token,现都已在成功 package analysis 路径与 broken-source / semantic-error fallback 上由独立 regression 锁住到 dependency publicLeafdeclaration;旧 grouped-question-import mixedbindings文件里的同组 structuredtypeDefinitioncase 也已同时退役。至此这条 structured grouped question iterable receiver 的 standalone member completion + query +typeDefinition合同现已闭合。 - 这轮再把 structured direct question-wrapped iterable 的 member
typeDefinition单独抽成独立 regression:在前两轮已锁住for current in (if flag { maybe_children()? } else { maybe_children()? }) { current.va }/{ current.ge }、for current in match flag { true => maybe_children()?, false => maybe_children()? } { current.va }/{ current.ge }、for current in (if flag { items? } else { items? }) { current.va }/{ current.ge }与for current in match flag { true => items?, false => items? } { current.va }/{ current.ge }这八条 direct structured iterable member prefix 的 dependency field / method completion,以及同一组 structured receiver 上current.value/current.get()八个 member token 的 hover / definition / declaration / references 之后,这一轮又把current.leaf.value/current.leaf().value这八条 structured direct iterable member token 的typeDefinition,在成功 package analysis 路径与 broken-source fallback 上都由独立 regression 锁住;连同更早已单独锁住的 structured root token query /typeDefinition,这条 structured direct question-wrapped iterable receiver 的 member completion + query +typeDefinition合同现已闭合。 - 这轮再把 direct question-wrapped iterable member completion 单独抽成独立 regression:
for current in maybe_children()? { current.va }、for current in maybe_children()? { current.ge }、for current in items? { current.va }与for current in items? { current.ge }这四条 direct member prefix,现在都已在成功 package analysis 路径与 broken-source fallback 上由独立 regression 锁住 dependency field / method completion;连同前两轮已单独锁住的 direct question-wrapped iterable root query +typeDefinition,这条 imported iterable root truth surface 现在只剩 direct question-wrapped iterable member 的 query /typeDefinition仍待后续独立切片。 - 这轮再把 direct question-wrapped iterable member query 单独抽成独立 regression:
for current in maybe_children()? { current.value }、for current in maybe_children()? { current.get() }、for current in items? { current.value }与for current in items? { current.get() }这四条 direct member token,现在都已在成功 package analysis 路径与 broken-source fallback 上由独立 regression 锁住 hover / definition / declaration / references;连同此前已单独锁住的 direct question-wrapped iterable member completion,以及 direct / structured question-wrapped iterable root query +typeDefinition,这条 imported iterable root truth surface 现在只剩 direct question-wrapped iterable member 的typeDefinition仍待后续独立切片。 - 这轮再把 direct question-wrapped iterable member
typeDefinition单独抽成独立 regression:for current in maybe_children()? { current.leaf.value }、for current in maybe_children()? { current.leaf().value }、for current in items? { current.leaf.value }与for current in items? { current.leaf().value }这四条 direct member token,现在都已在成功 package analysis 路径与 broken-source fallback 上由独立 regression 锁住到 dependency publicLeafdeclaration 的跳转;连同此前已单独锁住的 direct question-wrapped iterable member completion / query,以及 direct / structured question-wrapped iterable root query +typeDefinition,这条 imported iterable root truth surface 的 direct question-wrapped iterable member 合同现已闭合。 - 这轮再把同一条 direct question-wrapped iterable receiver 的最小 local-binding contract 单独抽成 standalone regression:
for current in maybe_children()? { current.va }现已在成功 package analysis 路径与 broken-source fallback 上由独立bindingsregression 锁住 dependency field completion,而for current in items? { current.get() }这条绑定后的 direct member definition 也已在 broken-source fallback 上由独立 regression 锁住到 dependency public method declaration;这让 direct question iterable receiver 的 standalone bindings 不再只散落在 member/root 专项切片里。 - 这轮再把同一条 structured direct question-wrapped iterable receiver 的最小 local-binding contract 单独抽成 standalone regression:
for current in (if flag { maybe_children()? } else { maybe_children()? }) { current.va }现已在成功 package analysis 路径与 broken-source fallback 上由独立bindingsregression 锁住 dependency field completion,而for current in match flag { true => items?, false => items? } { current.get() }这条绑定后的 direct member definition 也已在 broken-source fallback 上由独立 regression 锁住到 dependency public method declaration;这让 structured direct question iterable receiver 的 standalone bindings 不再只散落在 member/root 专项切片里。 - imported dependency public function /
const/static的 value / iterable root token 这轮也补上了完整 query:load().value上的load、maybe_load()?.value上的maybe_load、cfg.value/cfg?.value上的cfg、child?.value上的child、for current in children() { current.get() }上的children、for current in ITEMS { current.get() }上的ITEMS、for current in maybe_children()? { current.get() }上的maybe_children、for current in items? { current.get() }上的items,以及 grouped import alias 形态下use demo.dep.{children as kids}/use demo.dep.{ITEMS as items}后续kids()/items上的 alias token,再加上 grouped alias + question-wrapped non-iterable 形态下use demo.dep.{maybe_load as load_cfg}/use demo.dep.{MAYBE as maybe_cfg}后续load_cfg()?/maybe_cfg?上的 alias token,以及 grouped alias + question-wrapped iterable 形态下use demo.dep.{maybe_children as kids}/use demo.dep.{MAYBE_ITEMS as maybe_items}后续kids()?/maybe_items?上的 alias token,当前已在成功 package analysis 路径与 dependency-only fallback 上接通 hover / definition / declaration / references,并继续共享同一条typeDefinitiontruth source;其中 hover / definition / declaration 现在都会落到解析后的 dependency public struct,references 则返回该 struct declaration 加当前文件内仍解析到同一 root binding 的 import local name 引入/使用位置,而typeDefinition现在也已显式锁定了 value/iterable-root 这组例子,并在这轮把 question-wrapped imported value/iterable root、grouped alias 下的kids()/items,以及 grouped alias + question-wrapped 下成功路径与 broken-source fallback 都已单独回归锁定的load_cfg()?/maybe_cfg?/kids()?/maybe_items?,连同成功路径与 broken-source fallback 都已单独回归锁定的 directmaybe_load()?/child?/maybe_children()?/items?一并锁进同一条 struct 跳转合同;此前已补齐的是 direct function iterable fallback 里的maybe_children()?query /typeDefinition,随后又把 structured direct function iterable success path 里的(if flag { maybe_children()? } else { maybe_children()? })root token query /typeDefinition锁住,再把match flag { true => maybe_children()?, false => maybe_children()? }这条 structured direct function iterable root 的成功路径与 broken-source fallback 锁住,随后又把 direct static 形态下(if flag { cfg? } else { cfg? })、match flag { true => cfg?, false => cfg? }、(if flag { items? } else { items? })与match flag { true => items?, false => items? },以及 grouped alias 形态下(if flag { maybe_cfg? } else { maybe_cfg? })、match flag { true => maybe_cfg?, false => maybe_cfg? }、(if flag { load_cfg()? } else { load_cfg()? })、match flag { true => load_cfg()?, false => load_cfg()? }、(if flag { kids()? } else { kids()? })与match flag { true => kids()?, false => kids()? }这十条 structured root 的成功路径与 broken-source fallback query /typeDefinition一并锁进同一合同;前一轮再把 direct question-wrapped non-iterable 形态下(if flag { maybe_load()? } else { maybe_load()? })、match flag { true => maybe_load()?, false => maybe_load()? }、(if flag { child? } else { child? })与match flag { true => child?, false => child? }这四条 structured root 的 hover / definition / declaration / references 单独抽成独立 regression,而这轮又把同一组 structured root 的typeDefinition也单独抽成独立 regression,覆盖成功 package analysis 路径与 broken-source fallback 上到 dependency public struct declaration 的跳转,因此 direct structured question-wrapped non-iterable root 的 query +typeDefinition合同现也已闭合;上一轮进一步把 grouped alias + question-wrapped iterable 形态下的 direct root query /typeDefinition单独抽成独立 regression:前者覆盖kids()?与maybe_items?这两条 root 在成功 package analysis 路径与 broken-source fallback 上的 hover / definition / declaration / references,后者覆盖同一组 direct root 在成功 package analysis 路径与 broken-source fallback 上的 struct 跳转;与此同时,structured grouped alias + question-wrapped iterable root query /typeDefinition现在也都单独抽成了独立 regression:前者覆盖(if flag { kids()? } else { kids()? })、match flag { true => kids()?, false => kids()? }、(if flag { maybe_items? } else { maybe_items? })与match flag { true => maybe_items?, false => maybe_items? }这四条 structured root 在成功 package analysis 路径与 broken-source fallback 上的 hover / definition / declaration / references,后者覆盖同一组 structured root 在成功 package analysis 路径与 broken-source fallback 上的 struct 跳转;前一轮再把 direct question-wrapped iterable 形态下的 structured root query 单独抽成独立 regression,覆盖(if flag { maybe_children()? } else { maybe_children()? })、match flag { true => maybe_children()?, false => maybe_children()? }、(if flag { items? } else { items? })与match flag { true => items?, false => items? }这四条 direct structured root 在成功 package analysis 路径与 broken-source fallback 上的 hover / definition / declaration / references;这轮再把同一组 direct structured question-wrapped iterable root 的typeDefinition也单独抽成独立 regression,覆盖同一组四条 root 在成功 package analysis 路径与 broken-source fallback 上到 dependency public struct declaration 的跳转;此前已单独抽出的则是 grouped alias + question-wrapped non-iterable 形态下的 direct root query /typeDefinition,以及 structured grouped alias + question-wrapped non-iterable root query 与typeDefinition。use demo.dep.load/use demo.dep.DEFAULT as cfg这类 import binding token 本身仍继续保留 imported symbol contract,不和 value / iterable root token 混用。 - 这轮再把 direct question-unwrapped dependency receiver 的 completion 半矩阵补齐:
config.child?.va上的 field completion 与config.child()?.ge上的 method completion,现在也已在成功 package analysis 路径与 broken-source fallback 上由独立 regression 锁住;连同前一轮已补齐的 field / method hover / declaration / references / definition 与typeDefinition,这条 direct question-unwrapped receiver 的 member completion / query / definition /typeDefinition合同现已闭合。 - 这轮再把 direct question-unwrapped dependency receiver 的 member completion 从旧混合回归里抽成 standalone regression 文件:
config.child?.va与config.child()?.ge这两条 direct member prefix,现都已在成功 package analysis 路径与 broken-source fallback 上由独立 completion regression 单独锁住到 dependency fieldvalue/ methodget;这让这条 direct question-unwrapped receiver 的 completion 也不再只散落在question_dependency_bindings这类早期混合文件里。 - 这轮再把同一条 direct question-unwrapped dependency receiver 的 field completion success-path 也单独抽成独立 regression:
config.child?.va这条路径上的va前缀,现已在成功 package analysis 路径上由独立 regression 锁住到 dependency fieldvaluecompletion;这让这条 field completion 不再只继续混在旧的question_unwrapped_completion半矩阵里。 - 这轮再把同一条 direct question-unwrapped dependency receiver 的 field completion fallback 也单独抽成独立 regression:
let broken: Int = "oops"; return config.child?.va这条路径上的va前缀,现已在 broken-source fallback 上由独立 regression 锁住到 dependency fieldvaluecompletion;连同此前已单独锁住的 success-path regression,这条 field completion 现在也不再继续混在旧的question_unwrapped_completion半矩阵里。 - 这轮再把同一条 direct question-unwrapped dependency receiver 的 method completion success-path 也单独抽成独立 regression:
config.child()?.ge这条路径上的ge前缀,现已在成功 package analysis 路径上由独立 regression 锁住到 dependency methodgetcompletion;这让这条 method completion 也不再只继续混在旧的question_unwrapped_completion半矩阵里。 - 这轮再把同一条 direct question-unwrapped dependency receiver 的 method completion fallback 也单独抽成独立 regression:
let broken: Int = "oops"; return config.child()?.ge这条路径上的ge前缀,现已在 broken-source fallback 上由独立 regression 锁住到 dependency methodgetcompletion;连同此前已单独锁住的 success-path regression,这条 method completion 现在也不再继续混在旧的question_unwrapped_completion半矩阵里。 - 到这一步,direct question-unwrapped dependency receiver 的 completion 四个半边也已全部由独立 regression 收口:field / method 两侧的 success-path 与 broken-source fallback 现都已有各自的 standalone 文件,旧的混合
question_unwrapped_completion.rs也已可以退场,不再继续承担半矩阵兜底职责。 - 这轮再把 direct question-unwrapped dependency receiver 的 member query 也从旧混合回归里抽成 standalone regression 文件:
config.child?.value与config.child()?.get()这两条 direct member token,现都已在成功 package analysis 路径与 broken-source fallback 上由独立 query regression 单独锁住 hover / definition / declaration / references;这让这条 direct question-unwrapped receiver 的 query 也不再继续散落在question_dependency_bindings这类早期混合文件里。 - 这轮再把 direct question-unwrapped dependency receiver 的 member
typeDefinition也从旧混合回归里抽成 standalone regression 文件:config.child?.leaf.value与config.child()?.leaf().value这两条 direct member token,现都已在成功 package analysis 路径与 broken-source fallback 上由独立typeDefinitionregression 单独锁住到 dependency publicLeafdeclaration;这让这条 direct question-unwrapped receiver 的typeDefinition也不再继续散落在question_dependency_bindings这类早期混合文件里。 - 这轮再把 direct question-unwrapped dependency receiver 的最小 standalone
bindingsregression 也从旧混合回归里抽出来:return config.child?.value现已在成功 package analysis 路径上单独锁住 dependency field definition,而let value = config.child()?.get(); return "oops"这条绑定后的 direct member definition 也已在 broken-source fallback 上由独立 regression 锁住到 dependency public method declaration;这让这条 direct question-unwrapped receiver 的 local-binding contract 也不再继续散落在question_dependency_bindings这类早期混合文件里。 - 这轮也把 structured question-unwrapped dependency receiver 的 member
typeDefinition半矩阵补齐了:(if flag { config.child? } else { config.child? }).leaf.value、(match flag { true => config.child?, false => config.child? }).leaf.value、(if flag { config.child()? } else { config.child()? }).leaf().value与(match flag { true => config.child()?, false => config.child()? }).leaf().value这四条路径,现在都已在成功 package analysis 路径与 broken-source fallback 上由独立 regression 锁住 membertypeDefinition;连同前一轮已锁住的 field / method completion,以及更早已锁住的 hover / definition / declaration / references,这条 structured question-unwrapped receiver 的 member completion / query / definition /typeDefinition合同现已闭合。 - 这轮再把 structured question-unwrapped dependency receiver 的 member query 也单独抽成独立 regression:
(if flag { config.child? } else { config.child? }).value、(match flag { true => config.child?, false => config.child? }).value、(if flag { config.child()? } else { config.child()? }).get()与(match flag { true => config.child()?, false => config.child()? }).get()这四条路径,现在都已在成功 package analysis 路径与 broken-source fallback 上由独立 regression 锁住 hover / definition / declaration / references;连同此前已单独锁住的va/gecompletion 与(...).leaf.value/(...).leaf().valuemembertypeDefinition,这条 structured question-unwrapped receiver 的 standalone member contract 现已闭合。 - 这轮又把同一条 value-root slice 上的 structured question-unwrapped receiver root token 也补齐了:除了前一轮已锁住的 direct
config.child?与config.child()?之外,(if flag { config.child? } else { config.child? })、match flag { true => config.child?, false => config.child? }、(if flag { config.child()? } else { config.child()? })与match flag { true => config.child()?, false => config.child()? }这四条 structured root 上的childtoken,现在也已在成功 package analysis 路径与 broken-source fallback 上由独立 regression 锁住 hover / definition / declaration / references;连同此前已存在的typeDefinition,这条 direct + structured question-unwrapped root 合同现已闭合。 - 这轮也把同一条 structured question-unwrapped receiver root 上的
typeDefinition半矩阵单独锁住了:(if flag { config.child? } else { config.child? })、match flag { true => config.child?, false => config.child? }、(if flag { config.child()? } else { config.child()? })与match flag { true => config.child()?, false => config.child()? }这四条 structured root 上的childtoken,现都已在成功 package analysis 路径与 broken-source fallback 上由独立 regression 锁到同一个解包后 dependency public struct declaration;至此,这条 direct + structured question-unwrapped root 的 query +typeDefinition合同已真正全部闭合。 - 这轮再把 structured question-unwrapped dependency receiver 的最小 standalone
bindingsregression 也从旧混合回归里抽出来:let first = (if flag { config.child? } else { config.child? }).value; let second = (match flag { true => config.child?, false => config.child? }).value这组 field definition,现已在成功 package analysis 路径上由独立 regression 单独锁住,而let first = (if flag { config.child()? } else { config.child()? }).get(); let second = (match flag { true => config.child()?, false => config.child()? }).get(); return "oops"这组绑定后的 direct member definition 也已在 broken-source fallback 上由独立 regression 锁住到 dependency public method declaration;这让这条 structured question-unwrapped receiver 的 local-binding contract 也不再继续散落在question_structured_dependency_bindings这类早期混合文件里。 - 这轮再把 direct question-unwrapped dependency receiver 的 root query 也从旧的泛化
question_root_queries里单独抽成 standalone regression 文件:config.child?与config.child()?这两条 direct root 上的childtoken,现都已在成功 package analysis 路径与 broken-source fallback 上由独立 regression 锁住 hover / definition / declaration / references,并继续固定到同一个解包后 dependency publicChilddeclaration;这让这条 direct question-unwrapped root query 不再只散落在更早的混合 root matrix 里。 - 这轮再把同一条 direct question-unwrapped dependency receiver 的 root
typeDefinition也从旧的泛化question_type_definition里单独抽成 standalone regression 文件:config.child?与config.child()?这两条 direct root 上的childtoken,现都已在成功 package analysis 路径与 broken-source fallback 上由独立 regression 锁到同一个解包后 dependency publicChilddeclaration;这让这条 direct question-unwrapped root 的 query +typeDefinition合同不再继续依赖早期的泛化 root type matrix。 - 这轮再把同一条 question-unwrapped local receiver 的 standalone member completion 抽出来:
let current = config.child?; return current.va与let current = config.child()?; return current.ge现在都已在成功 package analysis 路径与 broken-source fallback 上由独立 regression 锁住 dependency field / method completion;这让这条 question-unwrapped local receiver 的 member completion 不再只散落在更大的 question-unwrapped root / receiver truth surface 里。 - 这轮再把同一条 question-unwrapped local receiver 的 field-question completion success-path 也单独抽成独立 regression:
let current = config.child?; return current.va这条路径上的va前缀,现已在成功 package analysis 路径上由独立 regression 锁住到 dependency fieldvaluecompletion;这让这条 field-question completion 不再只继续混在旧的question_unwrapped_local_completion半矩阵里。 - 这轮再把同一条 question-unwrapped local receiver 的 field-question completion fallback 也单独抽成独立 regression:
let current = config.child?; return "oops"; return current.va这条路径上的va前缀,现已在 broken-source fallback 上由独立 regression 锁住到 dependency fieldvaluecompletion;连同此前已单独锁住的 success-path regression,这条 field-question completion 现在也不再继续混在旧的question_unwrapped_local_completion半矩阵里。 - 这轮再把同一条 question-unwrapped local receiver 的 method-return completion success-path 也单独抽成独立 regression:
let current = config.child()?; return current.ge这条路径上的ge前缀,现已在成功 package analysis 路径上由独立 regression 锁住到 dependency methodgetcompletion;这让这条 method-return completion 也不再只继续混在旧的question_unwrapped_local_completion半矩阵里。 - 这轮再把同一条 question-unwrapped local receiver 的 method-return completion fallback 也单独抽成独立 regression:
let current = config.child()?; return "oops"; return current.ge这条路径上的ge前缀,现已在 broken-source fallback 上由独立 regression 锁住到 dependency methodgetcompletion;连同此前已单独锁住的 success-path regression,这条 method-return completion 现在也不再继续混在旧的question_unwrapped_local_completion半矩阵里。 - 到这一步,question-unwrapped local receiver 的 completion 四个半边也已全部由独立 regression 收口:field-question / method-return 两侧的 success-path 与 broken-source fallback 现都已有各自的 standalone 文件,旧的混合
question_unwrapped_local_completion.rs也已可以退场,不再继续承担半矩阵兜底职责。 - 这轮再把同一条 question-unwrapped local receiver 的 standalone member query 抽出来:
let current = config.child?; let first = current.value; let second = current.value与let current = config.child()?; let first = current.get(); let second = current.get()现在都已在成功 package analysis 路径与 broken-source fallback 上由独立 regression 锁住 hover / definition / declaration / references;这让这条 question-unwrapped local receiver 的 member query 也不再只散落在更大的 question-unwrapped root / receiver truth surface 里。 - 这轮再把同一条 question-unwrapped local receiver 的 field-question member query success-path 也单独抽成独立 regression:
let current = config.child?; let first = current.value; let second = current.value这条路径上的valuetoken,现已在成功 package analysis 路径上由独立 regression 锁住 hover / definition / declaration / references;这让这条 field-question member query 不再只继续混在旧的question_unwrapped_local_member_queries半矩阵里。 - 这轮再把同一条 question-unwrapped local receiver 的 field-question member query fallback 也单独抽成独立 regression:
let current = config.child?; let first = current.value; let second = current.value; return "oops"这条路径上的valuetoken,现已在 broken-source fallback 上由独立 regression 锁住 hover / definition / declaration / references;连同此前已单独锁住的 success-path regression,这条 field-question member query 现在也不再继续混在旧的question_unwrapped_local_member_queries半矩阵里。 - 这轮再把同一条 question-unwrapped local receiver 的 method-return member query success-path 也单独抽成独立 regression:
let current = config.child()?; let first = current.get(); let second = current.get()这条路径上的gettoken,现已在成功 package analysis 路径上由独立 regression 锁住 hover / definition / declaration / references;这让这条 method-return member query 也不再只继续混在旧的question_unwrapped_local_member_queries半矩阵里。 - 这轮再把同一条 question-unwrapped local receiver 的 method-return member query fallback 也单独抽成独立 regression:
let current = config.child()?; let first = current.get(); let second = current.get(); return "oops"这条路径上的gettoken,现已在 broken-source fallback 上由独立 regression 锁住 hover / definition / declaration / references;连同此前已单独锁住的 success-path regression,这条 method-return member query 现在也不再继续混在旧的question_unwrapped_local_member_queries半矩阵里。 - 到这一步,question-unwrapped local receiver 的 member query 四个半边也已全部由独立 regression 收口:field-question / method-return 两侧的 success-path 与 broken-source fallback 现都已有各自的 standalone 文件,旧的混合
question_unwrapped_local_member_queries.rs也已可以退场,不再继续承担半矩阵兜底职责。 - 这轮再把同一条 question-unwrapped local receiver 的 standalone member
typeDefinition抽出来:let current = config.child?; return current.leaf.value与let current = config.child()?; return current.leaf().value现在都已在成功 package analysis 路径与 broken-source fallback 上由独立 regression 锁住到 dependency publicLeafdeclaration;连同前两轮已单独锁住的 member completion 与 member query,这条 question-unwrapped local receiver 的 standalone member contract 现已闭合。 - 这轮再把同一条 question-unwrapped local receiver 的 field-question member
typeDefinitionsuccess-path 也单独抽成独立 regression:let current = config.child?; return current.leaf.value这条路径上的leaftoken,现已在成功 package analysis 路径上由独立 regression 锁到 dependency publicLeafdeclaration;这让这条 field-question membertypeDefinition不再只继续混在旧的question_unwrapped_local_member_type_definition半矩阵里。 - 这轮再把同一条 question-unwrapped local receiver 的 field-question member
typeDefinitionfallback 也单独抽成独立 regression:let current = config.child?; let broken: Int = "oops"; return current.leaf.value这条路径上的leaftoken,现已在 broken-source fallback 上由独立 regression 锁到 dependency publicLeafdeclaration;连同此前已单独锁住的 success-path regression,这条 field-question membertypeDefinition现在也不再继续混在旧的question_unwrapped_local_member_type_definition半矩阵里。 - 这轮再把同一条 question-unwrapped local receiver 的 method-return member
typeDefinitionsuccess-path 也单独抽成独立 regression:let current = config.child()?; return current.leaf().value这条路径上的leaftoken,现已在成功 package analysis 路径上由独立 regression 锁到 dependency publicLeafdeclaration;这让这条 method-return membertypeDefinition也不再只继续混在旧的question_unwrapped_local_member_type_definition半矩阵里。 - 这轮再把同一条 question-unwrapped local receiver 的 method-return member
typeDefinitionfallback 也单独抽成独立 regression:let current = config.child()?; let broken: Int = "oops"; return current.leaf().value这条路径上的leaftoken,现已在 broken-source fallback 上由独立 regression 锁到 dependency publicLeafdeclaration;连同此前已单独锁住的 success-path regression,这条 method-return membertypeDefinition现在也不再继续混在旧的question_unwrapped_local_member_type_definition半矩阵里。 - 到这一步,question-unwrapped local receiver 的 member
typeDefinition四个半边也已全部由独立 regression 收口:field-question / method-return 两侧的 success-path 与 broken-source fallback 现都已有各自的 standalone 文件,旧的混合question_unwrapped_local_member_type_definition.rs也已可以退场,不再继续承担半矩阵兜底职责。 - 这轮再把同一条 question-unwrapped local receiver 的最小 standalone
bindingsregression 抽出来:let current = config.child?; return current.value现已在成功 package analysis 路径上单独锁住 dependency field definition,而let current = config.child()?; let value = current.get(); return "oops"这条绑定后的 direct member definition 也已在 broken-source fallback 上由独立 regression 锁住到 dependency public method declaration;这让这条 question-unwrapped local receiver 的最小 local-binding contract 也不再只散落在 value-root / member 专项回归里。 - 这轮再把同一条 question-unwrapped local receiver 的 field-question
bindingssuccess-path 也单独抽成独立 regression:let current = config.child?; return current.value这条路径上的valuetoken,现已在成功 package analysis 路径上由独立 regression 锁住到 dependency public field declaration;连同此前已单独锁住的 broken-source regression,这条 field-question local-binding contract 现在也不再继续混在旧的question_unwrapped_local_bindings半矩阵里。 - 这轮再把同一条 question-unwrapped local receiver 的 field-question
bindingsfallback 也单独抽成独立 regression:let current = config.child?; let broken: Int = "oops"; return current.value这条路径上的valuetoken,现已在 broken-source fallback 上由独立 regression 锁住到 dependency public field declaration;连同此前已单独锁住的 success-path regression,这条 field-question local-binding contract 现在也不再继续混在旧的question_unwrapped_local_bindings半矩阵里。 - 这轮再把同一条 question-unwrapped local receiver 的 method-return
bindingssuccess-path 也单独抽成独立 regression:let current = config.child()?; return current.get()这条路径上的gettoken,现已在成功 package analysis 路径上由独立 regression 锁住到 dependency public method declaration;连同此前已单独锁住的 broken-source regression,这条 method-return local-binding contract 现在也不再继续混在旧的question_unwrapped_local_bindings半矩阵里。 - 这轮再把同一条 question-unwrapped local receiver 的 method-return
bindingsfallback 也单独抽成独立 regression:let current = config.child()?; let value = current.get(); return "oops"这条路径上的gettoken,现已在 broken-source fallback 上由独立 regression 锁住到 dependency public method declaration;连同此前已单独锁住的 success-path regression,这条 method-return local-binding contract 现在也不再继续混在旧的question_unwrapped_local_bindings半矩阵里。 - 到这一步,question-unwrapped local receiver 的
bindings四个半边也已全部由独立 regression 收口:field-question / method-return 两侧的 success-path 与 broken-source fallback 现都已有各自的 standalone 文件,旧的混合question_unwrapped_local_bindings.rs也已可以退场,不再继续承担半矩阵兜底职责。 - 同一条 syntax-local dependency value root slice 这轮继续收口独立 success-path regression:对能从语法局部唯一恢复为 dependency struct 的 typed closure param、普通 named local、destructured local、inline tuple/array
forloop binding、question-unwrapped local、direct field-projection / method-call / structured receiver 派生值,以及impl/extend方法体selfreceiver,value root token 本身现在都会在成功分析路径下接通 hover / definition / declaration / references,而不是只在 broken-source fallback 里生效;当前结果仍固定为 dependency public struct declaration 与当前文件内的同 binding 局部引用。此前独立 regression 先锁定了let project = (current: Cfg) => current.value这类 closure parameter 形态,随后再把let current = config; current.value这类普通 named local root token、let current = config.child; let alias = current; alias.value这类 field-projection result direct alias local root token、let current = config.child(); let alias = current; alias.value这类 method-call result direct alias local root token、let Cfg { child } = config; child.value这类 destructured local root token、extend Cfg { pub fn read(self) -> Int { return self.value } }这类selfreceiver root token,以及for current in (config, config) { current.value }/for current in [config.child(), config.child()] { current.value }这两条 inline tuple/arrayforloop binding root token 的同一组 query 单独抽成独立 regression;这轮又把这两条 direct root token 的 broken-source fallback 也分别锁住,因此 inline tuple/arrayforloop binding root query 合同现已闭合;与此同时,let current = config.child(); let alias = current; let first = alias.value; let second = alias.value; return "oops"这条 method-call result direct alias local root token 的 broken-source fallback 这轮也已单独锁住,因此这条 alias root query 合同现在也已闭合;而let current = config.child; let alias = current; let first = alias.value; let second = alias.value; return "oops"这条 field-projection result direct alias local root token 的 broken-source fallback 这轮也已单独锁住,因此这条 alias root query 合同现在也已闭合;这轮再把extend Cfg { pub fn read(self) -> Int { let first = self.value; let second = self.value; return "oops" } }这条selfreceiver root token 的 broken-source fallback 也单独锁住,因此这条 self root query 合同现在也已闭合;这轮再把let project = (current: Cfg) => { let first = current.value; let second = current.value; return "oops" }这条 typed closure param root token 的 broken-source fallback 也单独锁住,因此这条 typed closure root query 合同现在也已闭合;这轮再把let current = { config.child() }; let alias = current; let first = alias.value; let second = alias.value; return "oops"这条 block-tail result direct alias local root token 的 broken-source fallback 也单独锁住,因此这条 alias root query 合同现在也已闭合。接着再把let current = config.child?; current.value这类 question-unwrapped local root token、let current = if flag { config.child() } else { config.child() }; current.value、let current = match flag { ... }; current.value这类 structured result local root token,以及let current = { config.child() }; current.value这类 block tail result local 的 success-path hover / definition / declaration / references 也单独锁住;与此同时,let current = if flag { config.child() } else { config.child() }; let alias = current; alias.value、let current = match flag { ... }; let alias = current; alias.value与let current = { config.child() }; let alias = current; alias.value这组 direct alias value-root query 这轮也补齐到成功 package analysis 路径与 broken-source fallback,继续避免 package bridge 退回普通 local query 语义。 - 这轮再把 structured result local 的 direct value-root fallback 也单独补齐了:
let current = if flag { config.child() } else { config.child() }; let first = current.value; let second = current.value; return "oops"与let current = match flag { true => config.child(), false => config.child() }; let first = current.value; let second = current.value; return "oops"这两条路径上的currenttoken,现在都已在成功 package analysis 路径与 broken-source fallback 上由独立 regression 锁住 hover / definition / declaration / references,并继续固定到 dependency publicChilddeclaration;同一位置的textDocument/typeDefinition这轮也已在成功 package analysis 路径与 broken-source fallback 上单独锁住到 dependency publicChilddeclaration。连同此前已单独锁住的 success-path regression,这条 structured result local direct root token 的 query /typeDefinition合同现已闭合;而这轮继续把let current = { config.child() }; let first = current.value; let second = current.value; return "oops"这条 block-tail direct local root token 也补齐到同一条 success-path + broken-source fallback query /typeDefinition合同,因此 block-tail direct local root 这条剩余切片现在也已闭合。 - 这轮再把同一条 syntax-local dependency value root slice 里的普通 named local direct root fallback 也单独补齐了:
let current = config; let first = current.value; let second = current.value; return "oops"这条路径上的currenttoken,现在也已在成功 package analysis 路径与 broken-source fallback 上由独立 regression 锁住 hover / definition / declaration / references,并继续固定到 dependency publicConfigdeclaration;连同此前已单独锁住的 success-path regression,这条 named local direct root token query 合同现也已闭合。 - 这轮再把同一条 syntax-local dependency value root slice 里的 destructured local direct root fallback 也单独补齐了:
let Cfg { child } = config; let first = child.value; let second = child.value; return "oops"这条路径上的childtoken,现在也已在成功 package analysis 路径与 broken-source fallback 上由独立 regression 锁住 hover / definition / declaration / references,并继续固定到 dependency publicChilddeclaration;连同此前已单独锁住的 success-path regression,这条 destructured local direct root token query 合同现也已闭合。 - 这轮再把同一条 syntax-local dependency value root slice 里的 direct field-projection result local fallback 也单独补齐了:
let current = config.child; let first = current.value; let second = current.value; return "oops"这条路径上的currenttoken,现在也已在成功 package analysis 路径与 broken-source fallback 上由独立 regression 锁住 hover / definition / declaration / references,并继续固定到 dependency publicChilddeclaration;连同此前已单独锁住的 success-path regression,这条 projected-field result local direct root token query 合同现也已闭合。 - 这轮再把同一条 syntax-local dependency value root slice 里的 direct method-call result local fallback 也单独补齐了:
let current = config.child(); let first = current.value; let second = current.value; return "oops"这条路径上的currenttoken,现在也已在成功 package analysis 路径与 broken-source fallback 上由独立 regression 锁住 hover / definition / declaration / references,并继续固定到 dependency publicChilddeclaration;连同此前已单独锁住的 success-path regression,这条 method-result local direct root token query 合同现也已闭合。 - 这轮再把同一条 question-unwrapped local receiver 的 field-question root query fallback 也单独抽成独立 regression:
let current = config.child?; return current.value + current.value这条 success-path 路径上的currenttoken,以及let current = config.child?; let broken: Int = "oops"; return current.value + current.value这条 broken-source fallback 路径上的currenttoken,现都已由独立 regression 锁住 hover / definition / declaration / references,并继续固定到 dependency publicChilddeclaration;这条 question-unwrapped local field-question root query 现在也不再继续混在更大的 value-root fallback matrix 里。 - 这轮再把同一条 question-unwrapped local receiver 的 field-question root
typeDefinitionfallback 也单独抽成独立 regression:let current = config.child?; return current.value这条 success-path 路径上的currenttoken,以及let current = config.child?; let broken: Int = "oops"; return current.value这条 broken-source fallback 路径上的currenttoken,现都已由独立 regression 锁到 dependency publicChilddeclaration;这条 question-unwrapped local field-question roottypeDefinition现在也不再继续混在更大的 value-root fallback matrix 里。 - 这轮再把同一条 question-unwrapped local receiver 的 method-return root query 也单独抽成独立 regression:
let current = config.child()?; return current.value + current.value这条 success-path 路径上的currenttoken,以及let current = config.child()?; let first = current.value; let second = current.value; return "oops"这条 broken-source fallback 路径上的currenttoken,现都已由独立 regression 锁住 hover / definition / declaration / references,并继续固定到 dependency publicChilddeclaration;这让 question-unwrapped local root query 不再只停留在config.child?这条 field-question 形态上。 - 这轮再把同一条 question-unwrapped local receiver 的 method-return root
typeDefinition也单独抽成独立 regression:let current = config.child()?; return current.value这条 success-path 路径上的currenttoken,以及let current = config.child()?; let value = current.value; return "oops"这条 broken-source fallback 路径上的currenttoken,现都已由独立 regression 锁到 dependency publicChilddeclaration;连同上一轮已单独锁住的 method-return root query,这条 question-unwrapped local method-return root contract 也不再继续混在更大的 value-root type matrix 里。 - 这轮再把 structured result local 的 direct alias member query 也单独抽成独立 regression:
let current = if flag { config.child() } else { config.child() }; let alias = current; alias.value、let current = match flag { true => config.child(), false => config.child() }; let alias = current; alias.value、let current = if flag { config.child() } else { config.child() }; let alias = current; alias.get()与let current = match flag { true => config.child(), false => config.child() }; let alias = current; alias.get()这四条路径,现在都已在成功 package analysis 路径与 broken-source fallback 上由独立 regression 锁住 hover / definition / declaration / references;这轮又把let current = if flag { config.child() } else { config.child() }; let alias = current; alias.va/.ge与let current = match flag { true => config.child(), false => config.child() }; let alias = current; alias.va/.ge这四条 direct alias member prefix completion 也单独抽成独立 regression,覆盖成功 package analysis 路径与 broken-source fallback;连同此前已单独锁住、并在这轮把 broken-source fallback 也补齐的 structured alias value-root query /typeDefinition、member definition 与 membertypeDefinition,这条 structured alias receiver 的 standalone completion / query / definition /typeDefinition合同现已闭合。 - 这轮再把 block tail result local 的 direct alias member prefix completion 也单独抽成独立 regression:
let current = { config.child() }; let alias = current; alias.va与let current = { config.child() }; let alias = current; alias.ge这两条路径,现在都已在成功 package analysis 路径与 broken-source fallback 上由独立 regression 锁住 completion;连同此前已单独锁住的 block-tail alias value-root query /typeDefinition、member definition 与 membertypeDefinition,这条 block-tail alias receiver 现在也补上了独立 completion 这一角。 - 这轮再把 block tail result local 的 direct alias member query 也单独抽成独立 regression:
let current = { config.child() }; let alias = current; alias.value与let current = { config.child() }; let alias = current; alias.get()这两条路径,现在都已在成功 package analysis 路径与 broken-source fallback 上由独立 regression 锁住 hover / definition / declaration / references;连同此前已单独锁住的 block-tail alias value-root query /typeDefinition、member definition、membertypeDefinition与独立 completion,这条 block-tail alias receiver 的 standalone completion / query / definition /typeDefinition合同现已闭合。 - 这轮再把
impl/extend方法体里的 dependencyselfreceiver member query 也单独抽成独立 regression:extend Cfg { pub fn read(self) -> Int { let first = self.value; let second = self.value; ... } }与extend Cfg { pub fn read(self) -> Int { let first = self.get(); let second = self.get(); ... } }这两条路径,现在都已在成功 package analysis 路径与 broken-source fallback 上由独立 regression 锁住 hover / definition / declaration / references;这让文档里已经承诺的self.value/self.get()member query 不再只靠大矩阵或混合测试兜底,但 self receiver 上的 completion / membertypeDefinition仍待继续拆出 standalone regression。 - 这轮再把 dependency
selfreceiver member prefix completion 也单独抽成独立 regression:extend Cfg { pub fn read(self) -> Int { return self.va } }与extend Cfg { pub fn read(self) -> Int { return self.ge } }这两条路径,现在都已在成功 package analysis 路径与 broken-source fallback 上由独立 regression 锁住 completion;至此 self receiver 上还没拆成 standalone regression 的只剩 membertypeDefinition。 - 这轮再把 dependency
selfreceiver membertypeDefinition也单独抽成独立 regression:extend Cfg { pub fn read(self) -> Int { return self.leaf.value } }与extend Cfg { pub fn read(self) -> Int { return self.leaf().value } }这两条路径,现在都已在成功 package analysis 路径与 broken-source fallback 上由独立 regression 锁住到 dependency publicLeafdeclaration;连同此前已单独锁住的 self receiver value-root query /typeDefinition、member query、member definition 与 completion,这条 self receiver 的 standalone completion / query / definition /typeDefinition合同现已闭合。 - 这轮再把 typed closure parameter receiver 的 member prefix completion 也单独抽成独立 regression:
let project = (current: Cfg) => current.va与let project = (current: Cfg) => current.ge这两条路径,现在都已在成功 package analysis 路径与 broken-source fallback 上由独立 regression 锁住 completion;这让文档里已承诺的 typed closure receiver completion 不再只靠大矩阵兜底,后续只需继续把 member query / membertypeDefinition也拆出来。 - 这轮再把 typed closure parameter receiver 的 member query 也单独抽成独立 regression:
let project = (current: Cfg) => { let first = current.value; let second = current.value; ... }与let project = (current: Cfg) => { let first = current.get(); let second = current.get(); ... }这两条路径,现在都已在成功 package analysis 路径与 broken-source fallback 上由独立 regression 锁住 hover / definition / declaration / references;至此 typed closure receiver 上还没拆成 standalone regression 的只剩 membertypeDefinition。 - 这轮再把 typed closure parameter receiver 的 member
typeDefinition也单独抽成独立 regression:let project = (current: Cfg) => current.leaf.value与let project = (current: Cfg) => current.leaf().value这两条路径,现在都已在成功 package analysis 路径与 broken-source fallback 上由独立 regression 锁住到 dependency publicLeafdeclaration;连同此前已单独锁住的 typed closure receiver value-root query /typeDefinition、member query、member definition 与 completion,这条 typed closure receiver 的 standalone completion / query / definition /typeDefinition合同现已闭合。 - 这轮再把 typed closure parameter receiver 的最小 standalone
bindingsregression 抽出来:let project = (current: Cfg) => current.value现已在成功 package analysis 路径上单独锁住 dependency field definition,而let project = (current: Cfg) => current.get(); let value = project(config); return "oops"这条绑定后的 direct member definition 也已在 broken-source fallback 上由独立 regression 锁住到 dependency public method declaration;这让 typed closure receiver 的最小 local-binding contract 也不再只散落在 value-root / member 专项回归里。 - 这轮再把 dependency field-projection result local 的 direct alias member definition 也单独抽成独立 regression:
let current = config.child; let alias = current; return alias.value与let current = config.child; let alias = current; let value = alias.get(); ...这两条路径,现在已分别在成功 package analysis 路径与 broken-source fallback 上由独立 regression 锁住 definition;这让文档里已经承诺的 projected-field alias receiver definition 不再只靠大矩阵或混合测试兜底,后续只需继续把 completion / query / membertypeDefinition拆出来。 - 这轮再把 dependency field-projection result local 的 direct alias member prefix completion 也单独抽成独立 regression:
let current = config.child; let alias = current; return alias.va与let current = config.child; let alias = current; return alias.ge这两条路径,现在都已在成功 package analysis 路径与 broken-source fallback 上由独立 regression 锁住 completion。 - 这轮再把 dependency field-projection result local 的 direct alias member query 也单独抽成独立 regression:
let current = config.child; let alias = current; let first = alias.value; let second = alias.value; ...与let current = config.child; let alias = current; let first = alias.get(); let second = alias.get(); ...这两条路径,现在都已在成功 package analysis 路径与 broken-source fallback 上由独立 regression 锁住 hover / definition / declaration / references。 - 这轮再把 dependency field-projection result local 的 direct alias member
typeDefinition也单独抽成独立 regression:let current = config.child; let alias = current; return alias.leaf.value与let current = config.child; let alias = current; return alias.leaf().value这两条路径,现在都已在成功 package analysis 路径与 broken-source fallback 上由独立 regression 锁住到 dependency publicLeafdeclaration;连同此前已单独锁住的 projected-field alias receiver value-root query /typeDefinition、member definition、completion 与 member query,这条 receiver 的 standalone completion / query / definition /typeDefinition合同现已闭合。 - 这轮开始转到下一条最邻近的 dependency method-call result local alias receiver,并先把 standalone member definition 抽出来:
let current = config.child(); let alias = current; return alias.value与let current = config.child(); let alias = current; let value = alias.get(); ...这两条路径,现在已分别在成功 package analysis 路径与 broken-source fallback 上由独立 regression 锁住 definition;这让文档里已经承诺的 method-result alias receiver definition 不再只靠大矩阵或混合测试兜底,后续继续补 completion / query / membertypeDefinition即可。 - 这轮再把 dependency method-call result local alias receiver 的 standalone member prefix completion 也抽出来:
let current = config.child(); let alias = current; return alias.va与let current = config.child(); let alias = current; return alias.ge这两条路径,现在都已在成功 package analysis 路径与 broken-source fallback 上由独立 regression 锁住 completion;至此 method-result alias receiver 上还没拆成 standalone regression 的只剩 member query 与 membertypeDefinition。 - 这轮再把 dependency method-call result local alias receiver 的 standalone member query 也抽出来:
let current = config.child(); let alias = current; let first = alias.value; let second = alias.value; ...与let current = config.child(); let alias = current; let first = alias.get(); let second = alias.get(); ...这两条路径,现在都已在成功 package analysis 路径与 broken-source fallback 上由独立 regression 锁住 hover / definition / declaration / references。 - 这轮再把 dependency method-call result local alias receiver 的 standalone member
typeDefinition也抽出来:let current = config.child(); let alias = current; return alias.leaf.value与let current = config.child(); let alias = current; return alias.leaf().value这两条路径,现在都已在成功 package analysis 路径与 broken-source fallback 上由独立 regression 锁住到 dependency publicLeafdeclaration;连同此前已单独锁住的 method-result alias receiver value-root query /typeDefinition、member definition、completion 与 member query,这条 receiver 的 standalone completion / query / definition /typeDefinition合同现已闭合。 - 当前最重要的治理要求仍然是三者一致:
- 代码里的真实实现
- 测试里的真实合同
- 文档里的当前结论
阶段状态
| 阶段 | 状态 | 已形成的稳定边界 |
|---|---|---|
| P1 | 已完成 | Rust workspace、lexer、parser、formatter、CLI 前端闭环 |
| P2 | 已完成 | HIR、resolve、first-pass typeck、统一 diagnostics、最小 query / LSP |
| P3 | 已完成 | 结构化 MIR、ownership facts、cleanup-aware 分析、closure groundwork |
| P4 | 已完成 | ql build、LLVM IR、obj / exe / dylib / staticlib、driver/codegen 边界 |
| P5 | 已完成 | 最小 C ABI 闭环、header projection、C/Rust host examples、FFI 集成回归 |
| P6 | 已完成 | same-file hover / definition / references / rename / completion / semantic tokens / document symbols / package-rooted conservative workspace symbols / LSP parity |
| P7 | 进行中 | 受控 async/runtime/task-handle lowering、library/program build 子集、Rust interop 扩展 |
| P8 | 启动中 | 最小 qlang.toml manifest graph、ql project graph、.qi V1 emit、package-aware dependency .qi load、后续 cross-file LSP 入口 |
各阶段一句话总结
P1 前端闭环
- 解决了“仓库能不能作为真实编译器工程演进”的问题。
P2 语义与查询地基
- HIR、resolve、typeck、diagnostics、analysis 与最小 LSP 已接到同一条语义流水线。
P3 MIR 与所有权地基
- MIR、ownership facts、cleanup-aware analysis 与 closure groundwork 已成立,但不应误读为完整 borrow/drop 系统已经完成。
P4 后端与产物
ql build已能真实产出llvm-ir、obj、exe、dylib、staticlib,toolchain discovery 和 codegen golden test 边界已稳定。
P5 FFI 与 C ABI
- 最小 C ABI、header projection、C/Rust host 示例和集成回归都已经进入真实工程工作流。
P6 编辑器与语义一致性
- same-file LSP/query 的共享 truth surface 已形成,hover / definition / references / rename / completion / semantic tokens 之外,当前同一份真相源也已接出 document symbol outline 与保守的 package-rooted
workspace/symbol搜索;该搜索现会从已打开 package 扩到同包源码 modules、同 workspace 的其它 member package 源码 modules,并带上已加载 dependency.qipublic symbols;当前包如果因 source diagnostics 暂时无法完整装载,也会保留 dependency / sibling-member 搜索,而不是立刻退化成 open-document-only;后续 editor work 默认应继续复用 analysis。
P7 async / runtime / Rust interop
当前已形成的 P7 事实面可以压缩成下面几条:
Task[T]、最小 runtime hook ABI skeleton、ql runtimetruth surface 已成立。- async library build 已开放
staticlib和最小 asyncdylib子集;稳定外部边界仍是同步extern "c"C ABI。 - async executable build 已开放
BuildEmit::LlvmIr/Object/Executable下的最小async fn main子集。 - 当前受控子集已经覆盖主要
await/spawnpayload family、projected task-handle consume/reinit、stable-dynamic 与 guard-refined dynamic path、fixed-shapefor await、awaitedmatchguard,以及 sync/async assignment-expression executable surface。 - sync ordinary executable surface 已覆盖 fixed-shape
for、assignment-expression、dynamic non-Task[...]array assignment、same-file foldableconst/staticitem value materialization,以及当前受控matchguard family。 - 更广义的 async ABI、cleanup codegen、generalized iterable、broader
dylib/ program bootstrap,以及更广 projection-sensitive ownership precision 仍然刻意关闭。
P8 项目级工具链与 cross-file editor 入口
ql-project现已提供最小qlang.tomlmanifest loader。- 当前真实 contract 已锁定在
[package].name、[workspace].members、[references].packages。 ql project graph [file-or-dir]已可向上发现 manifest 并输出当前 package/workspace/reference graph;package manifest 当前会额外显示默认.qi路径/状态与引用 interface 状态,workspace-only 根 manifest 则会进一步展开 member package 的 manifest、包名、默认.qi路径/状态、references 与引用 interface 状态;当 manifest 或任一src/**/*.ql比.qi更新时,状态会标记为stale。ql project emit-interface [file-or-dir] [-o <output>] [--changed-only] [--check]已可对 package manifest 的src/**/*.ql做逐文件分析,并输出 text-based.qipublic interface artifact;新增--changed-only后,若目标接口已是valid状态则会跳过并报告up-to-date interface: ...;新增--check后,则会只验证默认.qi是否处于valid状态;workspace-only 根 manifest 现在会把同轮内全部无效 member interface 汇总报告ql build <file> --emit-interface现也可在构建成功后顺手写出当前包默认<package>.qi,让声明文件生成不再只挂在单独的 project 子命令上。ql check现也会在 package-aware 路径上把 stale dependency interface 视为显式失败,并给出--sync-interfaces/ql project emit-interface的修复指引。ql check --sync-interfaces现会在 package-aware check 前递归同步写出本地引用包默认<package>.qi,减少依赖接口需要手工预生成的摩擦;当前该开关已支持 package directory、qlang.toml路径、包内源码文件路径,以及 workspace-only 根 manifest,并会对重复 dependency 写出做去重;同时现在只会对非valid的依赖 interface 执行重发。ql-analysis::analyze_package与 package-awareql check现已开始加载[references].packages指向的 dependency.qiartifact,并在 interface 缺失时显式失败;当前 package-awareql check入口已覆盖 package directory、qlang.toml、包内源码文件路径,以及 workspace-only 根 manifest,后者会顺序检查每个 workspace member package。- 当前 dependency
.qiload 已推进到 syntax-aware section parse:每个// source: ...module section 都会进入 interface-mode AST,支持 bodylessfn/impl/extend声明以及无值const/static接口声明;ql-analysis::analyze_package现也已把公开 dependency symbols 收进 package 级 truth surface,并接通 imported dependency symbol 的 cross-file hover / definition / declaration / references 到.qideclaration;这条查询链当前也已显式覆盖 grouped import alias 形态。与此同时,use ...导入路径和平铺 / grouped import 位置里的 dependency package path segment / public symbol completion 也已打通,且 grouped import 的空补全位会过滤已写过的 dependency item,减少重复提示;rename、更广义 completion 与真实 dependency build graph 仍未开放。 - 同一条 completion bridge 现在也会把已有的
CompletionItem.detail/ty直接映射成 LSP markdown documentation,让 same-file 与 dependency-backed completion 都能显示 declaration snippet 与类型提示,而不是只保留 label/detail;其中 dependency member-field / member-method completion 现在也已补齐ty,不再只显示 declaration 文本。 - dependency-only 回退现在还带有最小编辑期容错:当当前文档自身暂时分析失败时,真实
ql-lspbackend 仍会走 dependency-only package load 回退,继续提供use ...导入路径上的 dependency path segment / public symbol completion、dependency enum import-local root(alias、direct import、grouped direct import)上的 variant completion,以及 dependency struct explicit field-label completion;同一条回退链现在也已开放 imported dependency local name 的最小 hover / definition / declaration / references 查询,覆盖 import binding token 本身,以及 parse-only 可恢复的 single-segment use site/type root;dependency enum variant token、struct-field token(含 explicit / shorthand)与 syntax-local 可恢复 receiver 上的首个 dependency struct member-field token / member-method token 现在也已在同一路径下补齐最小 hover / definition / declaration / references 回退,而 dependency enum variant token 的最小textDocument/typeDefinition回退也已接上;与此同时,parse-only 可恢复的 dependency value root 现在也已补上最小 hover / definition / declaration / references 回退,除了 named local、typed closure param、inline tuple/arrayforloop binding 与impl/extend方法体selfreceiver 之外,这轮也把 value-position 的 imported dependency function /const/staticroot token,以及foriterable 头部的 imported dependency function /constroot token(例如maybe_load()?.value上的maybe_load、child?.value上的child、load_cfg()?.value上的load_cfg、maybe_cfg?.value上的maybe_cfg、children()上的children、ITEMS上的ITEMS、maybe_children()?上的maybe_children、items?上的items、grouped import alias 形态下kids()/items上的 alias token,以及 grouped alias + question-wrapped 形态下load_cfg()?/maybe_cfg?/kids()?/maybe_items?上的 alias token)并进了同一条 fallback path;同一批 imported value/iterable root token 的typeDefinition也已显式回归锁定,这轮则进一步把 question-wrapped imported value/iterable root token、grouped alias 下的 root token,以及 grouped alias + question-wrapped root token 一并锁进同一条 fallback struct 跳转合同,而不是退回 imported symbol 语义,其中 directmaybe_load()?/child?这组 question-wrapped non-iterable root、directmaybe_children()?/items?这组 question-wrapped iterable root、groupedload_cfg()?/maybe_cfg?这组 question-wrapped non-iterable root,以及 groupedkids()?/maybe_items?这组 question-wrapped iterable root 的 fallback query +typeDefinition现在也都已由独立 regression 单独锁定;这轮又补齐了 direct static fallback 下(if flag { child? } else { child? })/match flag { true => child?, false => child? }与(if flag { items? } else { items? })/match flag { true => items?, false => items? }这四条 structured root token query /typeDefinition,并把 grouped static 形态下(if flag { maybe_items? } else { maybe_items? })与match flag { true => maybe_items?, false => maybe_items? }这两条 structured iterable root fallback 也单独锁住了,同时把 structured grouped-import completion fallback matrix 也单独锁到 field/method 两侧,覆盖for current in (if flag { kids()? } else { kids()? }) { current.va }/for current in (if flag { kids()? } else { kids()? }) { current.ge }、for current in (if flag { maybe_items? } else { maybe_items? }) { current.va }/for current in (if flag { maybe_items? } else { maybe_items? }) { current.ge }、for current in match flag { true => kids()?, false => kids()? } { current.va }/for current in match flag { true => kids()?, false => kids()? } { current.ge },以及for current in match flag { true => maybe_items?, false => maybe_items? } { current.va }/for current in match flag { true => maybe_items?, false => maybe_items? } { current.ge }。同一 receiver slice 上的 dependency field / method completion 也已继续可用,并新增 inline tuple/arrayforloop binding 与 typed closure param;该路径当前仍不扩大到 broader member query、任意表达式 receiver 或其它同文件补全。 - dependency enum import-local root 的首个 non-import-path query contract 这轮正式从 alias 形态扩成完整导入局部名合同:当
use demo.dep.Command as Cmd、use demo.dep.Command或use demo.dep.{Command}这类导入形态能唯一映射到 dependency public enum 时,Cmd.Re/Command.Re现都可通过.qipublic surface 继续补全到Retry等 variants,而Cmd.Retry/Command.Retry这类 variant token 也都已接通 dependency hover / definition / declaration / references,并可通过textDocument/typeDefinition跳到 dependency enum declaration;与此同时,当当前文档仅有 same-file 语义错误时,真实ql-lspbackend 现在也会继续从该 variant token 提供 dependency hover / definition / declaration / references 与typeDefinition回退;更广义 dependency member completion 仍未开放。 - dependency struct import-local root 的首个 field contract 这轮也从 alias 形态扩成完整导入局部名合同:当
use demo.dep.Config as Cfg、use demo.dep.Config或use demo.dep.{Config}这类导入形态能唯一映射到 dependency public struct 时,Cfg { fl: true }/Config { fl: true }与let Cfg { fl: enabled } = built/let Config { fl: enabled } = built这类显式 struct literal / struct pattern 字段标签现在也都已接通 dependency public field completion,并会跳过同一字面量/模式里已经写过的 sibling 字段;struct-field token 查询当前已覆盖 explicit 与 shorthand 两种写法,并继续支持 dependency hover / definition / declaration / references;与此同时,对能从语法局部恢复为 dependency struct 的 named local value,config.value/built.value/current.value/config.child.value/let current = config.child; current.value/let current = if flag { config.child() } else { config.child() }; let alias = current; alias.value/let current = match flag { true => config.child(), false => config.child() }; let alias = current; alias.value/let current = { config.child() }; let alias = current; alias.value这类 member field token 现在也已接通同一条 dependency hover / definition / declaration / references,而config.va/built.va/current.va/let current = if flag { config.child() } else { config.child() }; let alias = current; alias.va/let current = match flag { true => config.child(), false => config.child() }; let alias = current; alias.va这类 syntax-local member prefix 也已接通 dependency field completion;当前 receiver slice 也已扩到let current = config.child、let current = config.child()、let Cfg { child } = config、let current = if flag { config.child() } else { config.child() }、let current = match flag { ... }、let current = { config.child() }及其 direct alias、以及for current in (config, config) { current.value }这类 inline tuple/arrayforloop binding;named local receiver 的 standalone bindings / completion / query / membertypeDefinition已全部收口后,这轮继续把 destructured local receiver 的return child.va/return child.ge这组 member completion、let Cfg { child } = config; let first = child.value; let second = child.value/let Cfg { child } = config; let first = child.get(); let second = child.get()连同 broken-source 下let Cfg { child } = config; let first = child.value; let second = child.value; return "oops"/let Cfg { child } = config; let first = child.get(); let second = child.get(); return "oops"这组 member query,以及let Cfg { child } = config; return child.leaf.value/let Cfg { child } = config; return child.leaf().value连同 broken-source 下let Cfg { child } = config; let value = child.leaf.value; return "oops"/let Cfg { child } = config; let value = child.leaf().value; return "oops"这组 membertypeDefinition单独抽成独立 regression;至此 destructured local receiver 的 standalone bindings / completion / query / membertypeDefinition也已全部收口。 - 这轮再把 destructured local receiver 的最小 standalone
bindingsregression 也从旧混合回归里抽出来:let Cfg { child } = config; return child.value现已在成功 package analysis 路径上由独立 regression 单独锁住 dependency field definition,而match config { Cfg { child } => child.get() }这条绑定后的 direct member definition 也已在 broken-source fallback 上由独立 regression 锁住到 dependency public method declaration;这让这条 destructured local receiver 的 local-binding contract 也不再继续散落在destructured_dependency_bindings这类早期混合文件里。 - 同一条 direct structured receiver slice 这轮开始拆 standalone member regression:
return (if flag { config.child() } else { config.child() }).va/.ge与return (match flag { true => config.child(), false => config.child() }).va/.ge这四条 direct structured receiver member completion,现在都已在成功 package analysis 路径与 broken-source fallback 上由独立 regression 锁住;direct structured receiver 的 standalone member query 与 membertypeDefinition仍待继续拆分。 - 同一条 direct structured receiver slice 这轮继续拆 standalone member regression:
let first = (if flag { config.child() } else { config.child() }).value; let second = (if flag { config.child() } else { config.child() }).value/.get(),以及let first = (match flag { true => config.child(), false => config.child() }).value; let second = (match flag { true => config.child(), false => config.child() }).value/.get()这四组 direct structured receiver member query,现在都已在成功 package analysis 路径与 broken-source fallback 上由独立 regression 锁住 hover / definition / declaration / references;direct structured receiver 剩余待继续拆分的只剩 membertypeDefinition。 - 同一条 direct structured receiver slice 这轮再把 standalone member regression 收口到
typeDefinition:return (if flag { config.child() } else { config.child() }).leaf.value/.leaf().value与return (match flag { true => config.child(), false => config.child() }).leaf.value/.leaf().value这四条 direct structured receiver membertypeDefinition,现在都已在成功 package analysis 路径与 broken-source fallback 上由独立 regression 锁住到 dependency publicLeafdeclaration;至此 direct structured receiver 的 standalone bindings / completion / query / membertypeDefinition也已全部收口。 - 这轮再把 direct structured receiver 的最小 standalone
bindingsregression 也抽出来:return (if flag { config.child() } else { config.child() }).value现已在成功 package analysis 路径上单独锁住 dependency field definition,而let value = (match flag { true => config.child(), false => config.child() }).get(); return "oops"这条绑定后的 direct member definition 也已在 broken-source fallback 上由独立 regression 锁住到 dependency public method declaration;这让 direct structured receiver 的最小 local-binding contract 也不再只散落在 member 专项切片里。 - 这轮开始转到下一条最邻近的 direct dependency method-call result receiver,并先把 standalone member completion 抽出来:
return config.child().va与return config.child().ge这两条路径,现在都已在成功 package analysis 路径与 broken-source fallback 上由独立 regression 锁住 completion;至此这条 direct method-result receiver 上还没拆成 standalone regression 的只剩 member query 与 membertypeDefinition。 - 这轮继续把同一条 direct dependency method-call result receiver 的 standalone member query 也抽出来:
let first = config.child().value; let second = config.child().value; ...与let first = config.child().get(); let second = config.child().get(); ...这两条路径,现在都已在成功 package analysis 路径与 broken-source fallback 上由独立 regression 锁住 hover / definition / declaration / references。 - 这轮再把同一条 direct dependency method-call result receiver 的 standalone member
typeDefinition也抽出来:return config.child().leaf.value与return config.child().leaf().value这两条路径,现在都已在成功 package analysis 路径与 broken-source fallback 上由独立 regression 锁住到 dependency publicLeafdeclaration;至此这条 direct method-result receiver 的 standalone completion / query /typeDefinition合同也已收口。 - 这轮再把 direct dependency method-call result receiver 的最小 standalone
bindingsregression 也抽出来:return config.child().value现已在成功 package analysis 路径上单独锁住 dependency field definition,而let value = config.child().get(); return "oops"这条绑定后的 direct member definition 也已在 broken-source fallback 上由独立 regression 锁住到 dependency public method declaration;这让 direct method-result receiver 的最小 local-binding contract 也不再只散落在 member 专项切片里。 - 这轮开始转到下一条最邻近的 direct dependency field-projection result receiver,并先把 standalone member completion 抽出来:
return config.child.va与return config.child.ge这两条路径,现在都已在成功 package analysis 路径与 broken-source fallback 上由独立 regression 锁住 completion;至此这条 direct projected-field receiver 上还没拆成 standalone regression 的只剩 member query 与 membertypeDefinition。 - 这轮继续把同一条 direct dependency field-projection result receiver 的 standalone member query 也抽出来:
let first = config.child.value; let second = config.child.value; ...与let first = config.child.get(); let second = config.child.get(); ...这两条路径,现在都已在成功 package analysis 路径与 broken-source fallback 上由独立 regression 锁住 hover / definition / declaration / references;至此这条 direct projected-field receiver 上还没拆成 standalone regression 的只剩 membertypeDefinition。 - 这轮再把同一条 direct dependency field-projection result receiver 的 standalone member
typeDefinition也抽出来:return config.child.leaf.value与return config.child.leaf().value这两条路径,现在都已在成功 package analysis 路径与 broken-source fallback 上由独立 regression 锁住到 dependency publicLeafdeclaration;至此这条 direct projected-field receiver 的 standalone completion / query /typeDefinition合同也已收口。 - 这轮开始转到下一条最邻近的 direct dependency block-tail result receiver,并先把 standalone member completion 抽出来:
return ({ config.child() }).va与return ({ config.child() }).ge这两条路径,现在都已在成功 package analysis 路径与 broken-source fallback 上由独立 regression 锁住 completion;至此这条 direct block-tail receiver 上还没拆成 standalone regression 的只剩 member query 与 membertypeDefinition。 - 这轮继续把同一条 direct dependency block-tail result receiver 的 standalone member query 也抽出来:
let first = ({ config.child() }).value; let second = ({ config.child() }).value; ...与let first = ({ config.child() }).get(); let second = ({ config.child() }).get(); ...这两条路径,现在都已在成功 package analysis 路径与 broken-source fallback 上由独立 regression 锁住 hover / definition / declaration / references;至此这条 direct block-tail receiver 上还没拆成 standalone regression 的只剩 membertypeDefinition。 - 这轮再把同一条 direct dependency block-tail result receiver 的 standalone member
typeDefinition也抽出来:return ({ config.child() }).leaf.value与return ({ config.child() }).leaf().value这两条路径,现在都已在成功 package analysis 路径与 broken-source fallback 上由独立 regression 锁住到 dependency publicLeafdeclaration;至此这条 direct block-tail receiver 的 standalone completion / query /typeDefinition合同也已收口。 - 这轮再把同一条 direct dependency block-tail result receiver 的最小 standalone
bindingsregression 抽出来:return ({ config.child() }).value现已在成功 package analysis 路径上单独锁住 dependency field definition,而let value = ({ config.child() }).get(); return "oops"这条绑定后的 direct member definition 也已在 broken-source fallback 上由独立 regression 锁住到 dependency public method declaration;这让 direct block-tail receiver 的最小 local-binding contract 也不再只散落在 member 专项切片里。 - dependency struct local-value member path 的首个 method contract 也已落地并补齐到 completion 与 broken-source fallback:当
use demo.dep.Config as Cfg这类 alias 能唯一映射到 dependency public struct,并且.qi中该 nominal struct 的 public method 仍可唯一解析(当前继续遵守 impl 优先、再看 extend 的保守规则)时,config.get()/built.get()/current.get()/let current = if flag { config.child() } else { config.child() }; let alias = current; alias.get()/let current = match flag { true => config.child(), false => config.child() }; let alias = current; alias.get()/let current = { config.child() }; let alias = current; alias.get()这类 member method token 现在已在成功分析路径与 same-file semantic-error fallback 上接通 dependency hover / definition / declaration / references,而config.ge/built.ge/current.ge/let current = if flag { config.child() } else { config.child() }; let alias = current; alias.ge/let current = match flag { true => config.child(), false => config.child() }; let alias = current; alias.ge这类 syntax-local member prefix 也已接通 dependency method completion;当前 receiver slice 也已扩到 dependency method-call result local、block tail result及其 direct alias、inline tuple/arrayforloop binding,以及结果稳定收敛到同一个 dependency struct 的if/matchstructured result local 及其 direct alias;这条能力当前仍只覆盖语法局部可恢复出的 named local receiver,不扩展到任意表达式 receiver。 - 上述
forloop receiver 切片本轮还明确补上了 structured iterable root 这条相邻真实用法:for current in { (config, config) } { current.value }、for current in (if flag { (config, config) } else { (config, config) }) { current.value }与for current in match flag { true => [config.child(), config.child()], false => [config.child(), config.child()] } { current.get() }现在都会走同一条 dependency receiver identity,而不是再单独分叉出新的 ad-hoc query path。 - 这条
forreceiver identity 现在也已验证可以跨过同文件 helper 的显式返回类型,而不是只识别字面量 / alias root:fn configs(config: Cfg) -> (Cfg, Cfg)与fn children(config: Cfg) -> [Child; 2]这类 helper 现在都已能把 element binding 传给后续for current in ...的 dependency field/method completion 与 method definition query。 - 这条
forreceiver identity 现在也已验证可以跨过 dependency method 的显式 iterable 返回类型,而不是只识别 local helper:config.children()与config.pair()这类 dependency method-call root 现在也已能把 element binding 传给后续for current in ...的 dependency field/method completion 与 method definition query。 - 这条
forreceiver identity 现在也已验证可以直接落在 dependency field iterable root 上,而不是只识别 helper/call:config.children与config.pair这类 dependency field root 现在也已能把 element binding 传给后续for current in ...的 dependency field/method completion 与 method definition query。 - 这条
forreceiver identity 现在也已验证可以穿过?继续保留 iterable element binding:config.children?与config.pair()?这类 question-wrapped field/method iterable root 现在也已能把解包后的 element binding 传给后续for current in ...的 dependency field/method completion 与 method definition query。 - 这条
forreceiver identity 现在也已验证可以跨过同文件本地 receiver method,而不是只认 dependency interface / free function:config.children()与self.pair()这类 local method iterable root 现在也已能把返回类型里的 element binding 传给后续for current in ...的 dependency field/method completion 与 method definition query。 - 这条
forreceiver identity 现在也已验证可以让?与 structured root 叠加,而不是只能各自单独工作:(if flag { config.children? } else { config.children? })与match flag { true => config.pair()?, false => config.pair()? }这类 root 现在也已能把解包后的 element binding 传给后续for current in ...的 dependency field/method completion 与 method definition query。 - 这轮继续沿 imported dependency value root 这条 cross-file completion / identity contract 往前拆 standalone regression:
return load().va/return load().ge这组 imported dependency function-result root member completion,以及return current.va/return current.ge这组 imported dependency static root member completion,现在都已在成功 package analysis 路径与 broken-source fallback 上由独立 regression 锁住;这让 value-position 的 imported dependency function / static root token member completion 不再只散落在既有混合bindings回归里。 - 这轮继续沿同一条 imported dependency value root 线前推 standalone member query:
let first = load().value; let second = load().value/let first = load().get(); let second = load().get()这组 imported dependency function-result root member token,以及let first = current.value; let second = current.value/let first = current.get(); let second = current.get()这组 imported dependency static root member token,现在都已在成功 package analysis 路径与 broken-source fallback 上由独立 regression 锁住 hover / definition / declaration / references;这让 value-position 的 imported dependency function / static root member query 也不再只散落在既有混合bindings回归里。 - 这轮继续沿同一条 imported dependency value root 线把 standalone member
typeDefinition也抽出来:return load().leaf.value/return load().leaf().value这组 imported dependency function-result root member token,以及return current.leaf.value/return current.leaf().value这组 imported dependency static root member token,现在都已在成功 package analysis 路径与 broken-source fallback 上由独立 regression 锁住到 dependency publicLeafdeclaration;这让 value-position 的 imported dependency function / static root membertypeDefinition也不再只散落在既有混合测试里。 - 这轮再把同一条 imported dependency value root 的最小 standalone
bindingsregression 也抽出来:return load().value与return current.value这两条路径,现已在成功 package analysis 路径上单独锁住 dependency field definition,而let first = load().get()/let second = current.get(); return "oops"这组 imported dependency function-result / static root 绑定后的 direct member definition,也已在 broken-source fallback 上由独立 regression 锁住到 dependency public method declaration;这让 value-position 的 imported dependency function / static root 最小 local-binding contract 也不再只散落在既有混合bindings回归里。 - dependency
.qi的 rename 消费这轮继续把第一条真实编辑链路从 alias 形态扩到完整 import-local name:除了use demo.dep.Config as Cfg与 grouped import alias 之外,use demo.dep.Config与use demo.dep.{Config}这类 direct import local name 现在也都已支持最小prepareRename/rename,并直接产出当前文件内的 rename edits;其中 direct import 定义位不会误改 dependency path,而是会自动重写成Config as Settings这类合法 alias 形式,再同步更新当前文件里的 type/value 使用位。同一条 bridge 现在继续复用 package analysis 成功路径与 dependency-only broken-source fallback,因此当前文件即使暂时存在 same-file semantic errors,只要语法仍可恢复、dependency package 仍可装载,这条 dependency import-local rename 也不会整体失效。当前仍刻意不开放 dependency member token rename 与跨文件 workspace rename。 - 显式 type-namespace 位置上的最小
textDocument/typeDefinition现也已接到同一份 analysis identity truth surface,并开始小步扩到 value-position 的受控子集:same-file type use 当前覆盖 struct / enum / trait / type alias / generic 定义,same-file local import type alias use 会优先跳到底层本地类型定义,而 package-aware 成功分析路径下的 dependency import/type root(例如Buf[Int])也已可跳到 dependency.qiartifact 内的 public type declaration;与此同时,dependency enum variant token 现在也可跳到 dependency public enum declaration,对能从语法局部恢复出 dependency struct 类型的 named local value,value token 本身现在也可跳到 dependency public struct declaration,而 dependency struct field token 本身现在也可在字段声明类型唯一映射到 dependency public type 时跳到对应.qipublic type declaration,dependency method token 本身现在也可在返回类型唯一映射到 dependency public type 时跳到对应.qipublic type declaration;当 field/method token 后面直接接?时,这条跳转还会优先落到Option[T]/Result[T, E]解包后的 dependency public type;当当前文档存在 same-file semantic errors、但语法仍可恢复且 dependency package 仍可加载时,这几条 dependency typeDefinition 都已补上 broken-source fallback;这轮继续把 value-roottypeDefinition的 success-path 局部绑定形态从大矩阵里拆出来:除了前两轮已单独锁住的let current = config.child?; current.value这类 question-unwrapped local root token,以及let project = (current: Cfg) => current.value这类 typed closure param root token之外,这轮再把let alias = config; alias.value这类 named local root token、let current = config.child; let alias = current; alias.value这类 field-projection result direct alias local root token、let current = config.child(); let alias = current; alias.value这类 method-call result direct alias local root token、let Cfg { child } = config; child.value这类 destructured local root token、extend Cfg { pub fn read(self) -> Int { return self.value } }这类selfreceiver root token、for current in (config, config) { current.value }/for current in [config.child(), config.child()] { current.value }这类 inline tuple/arrayforloop binding root token、let current = if flag { config.child() } else { config.child() }; current.value、let current = match flag { ... }; current.value这类 structured result local root token,以及let current = { config.child() }; current.value这类 block tail result local 的 success-path struct 跳转也单独抽成独立 regression;这轮又把这两条 inline tuple/arrayforloop binding direct root token 的 broken-source fallback struct 跳转也分别锁住,因此它们的 value-roottypeDefinition合同现已闭合;与此同时,let current = config.child(); let alias = current; let value = alias.value; return "oops"这条 method-call result direct alias local root token 的 broken-source fallback struct 跳转这轮也已单独锁住,因此这条 alias roottypeDefinition合同现在也已闭合,而let current = config.child; let alias = current; let value = alias.value; return "oops"这条 field-projection result direct alias local root token 的 broken-source fallback struct 跳转这轮也已单独锁住,因此这条 alias roottypeDefinition合同现在也已闭合;这轮再把extend Cfg { pub fn read(self) -> Int { let value = self.value; return "oops" } }这条selfreceiver root token 的 broken-source fallback struct 跳转也单独锁住,因此这条 self roottypeDefinition合同现在也已闭合;这轮再把let project = (current: Cfg) => { let value = current.value; return "oops" }这条 typed closure param root token 的 broken-source fallback struct 跳转也单独锁住,因此这条 typed closure roottypeDefinition合同现在也已闭合;这轮再把let current = { config.child() }; let alias = current; let value = alias.value; return "oops"这条 block-tail result direct alias local root token 的 broken-source fallback struct 跳转也单独锁住,因此这条 alias roottypeDefinition合同现在也已闭合。与此同时,let current = if flag { config.child() } else { config.child() }; let alias = current; alias.value、let current = match flag { ... }; let alias = current; alias.value与let current = { config.child() }; let alias = current; alias.value这组 structured/block-tail direct alias value-roottypeDefinition,现在也都已在成功 package analysis 路径与 broken-source fallback 上单独锁住到 dependency public struct declaration;而let current = if flag { config.child() } else { config.child() }; let alias = current; alias.leaf.value、let current = match flag { true => config.child(), false => config.child() }; let alias = current; alias.leaf().value、let current = { config.child() }; let alias = current; alias.leaf.value与let current = { config.child() }; let alias = current; alias.leaf().value这类 structured/block-tail alias receiver 上的 dependency field/method token,也已在成功 package analysis 路径与 broken-source fallback 上单独锁住到 dependency publicLeafdeclaration 的typeDefinition;当前仍不做更广义值位推断 type jump,也不扩到任意表达式 receiver 或更广义 non-type-context fallback。 - 这轮再把最直接的 named local direct root
typeDefinitionfallback 也单独抽成独立 regression:let current = config; let value = current.value; return "oops"这条路径上的currenttoken,现已在成功 package analysis 路径与 broken-source fallback 上都锁到 dependency publicConfigdeclaration;连同此前已单独锁住的 success-path regression,这条 named local direct roottypeDefinition合同现也已闭合。 - 这轮再把最直接的 destructured local direct root
typeDefinitionfallback 也单独抽成独立 regression:let Cfg { child } = config; let value = child.value; return "oops"这条路径上的childtoken,现已在成功 package analysis 路径与 broken-source fallback 上都锁到 dependency publicChilddeclaration;连同此前已单独锁住的 success-path regression,这条 destructured local direct roottypeDefinition合同现也已闭合。 - 这轮再把最直接的 direct field-projection result local root
typeDefinitionfallback 也单独抽成独立 regression:let current = config.child; let value = current.value; return "oops"这条路径上的currenttoken,现已在成功 package analysis 路径与 broken-source fallback 上都锁到 dependency publicChilddeclaration;连同此前已单独锁住的 success-path regression,这条 projected-field result local direct roottypeDefinition合同现也已闭合。 - 这轮再把最直接的 direct method-call result local root
typeDefinitionfallback 也单独抽成独立 regression:let current = config.child(); let value = current.value; return "oops"这条路径上的currenttoken,现已在成功 package analysis 路径与 broken-source fallback 上都锁到 dependency publicChilddeclaration;连同此前已单独锁住的 success-path regression,这条 method-result local direct roottypeDefinition合同现也已闭合。
当前进度对账
本轮已按代码和测试重新核对当前入口文档,结果如下:
crates/ql-cli/tests/executable_examples.rs当前编码了60个 sync local executable case。crates/ql-cli/tests/executable_examples.rs当前编码了222个 async local executable case。- 这些 case 默认指向本地忽略的
ramdon_tests/...smoke 目录;当前 checkout 不提交该目录。 - async 本地样例的历史命名编号曾走到
225,但编号最大值不等于当前注册 case 数;入口文档已经统一按测试矩阵表述。
当前最值得继续推进的方向
- 继续沿已开放的 async executable / library 子集扩真实用户可写 surface,而不是另开 ABI 或 runtime 设计。
- 继续让 task-handle、dynamic path、
for await、awaitedmatch这几条线共享同一份 truth source。 - 按已固定顺序继续推进 Phase 8:dependency
.qi的 syntax-aware load、public symbol index、hover / definition / declaration / references、第一段 imported local-name rename(现已覆盖 alias 与 direct import),以及use ...导入路径 completion、import-root/enum-variant/struct-field-token 的最小 broken-source query fallback 已落地;下一步应继续扩真正需要的 cross-file completion/identity contract 与更广义 rename truth surface,但暂时仍不直接跳到 full workspace rename。
归档入口
如果你需要追溯更细的历史记录,请看: