From 1d6f71ec85b4a2e8584e24949e6b68421746ff5a Mon Sep 17 00:00:00 2001 From: Nadrieril Date: Sun, 19 Jan 2025 02:07:30 +0100 Subject: [PATCH] Replace "Expression" style with more-legible "Let" style --- src/analyses/compute_rules.rs | 26 ++-- src/ast/printer.rs | 18 +-- src/cli.rs | 4 +- src/solvers/ty_based.rs | 4 +- src/wasm.rs | 11 +- tests/generate_design_doc.rs | 2 +- ...undle_rules@min_ergonomics-Expression.snap | 67 -------- .../bundle_rules@min_ergonomics-Let.snap | 67 ++++++++ .../bundle_rules@nadri-Expression.snap | 71 --------- tests/snapshots/bundle_rules@nadri-Let.snap | 71 +++++++++ .../bundle_rules@rfc3627-Expression.snap | 139 ----------------- tests/snapshots/bundle_rules@rfc3627-Let.snap | 139 +++++++++++++++++ .../bundle_rules@rfc3627_2021-Expression.snap | 143 ------------------ .../bundle_rules@rfc3627_2021-Let.snap | 143 ++++++++++++++++++ ...dle_rules@rfc3627_2024_min-Expression.snap | 99 ------------ .../bundle_rules@rfc3627_2024_min-Let.snap | 99 ++++++++++++ .../bundle_rules@stable_rust-Expression.snap | 107 ------------- .../bundle_rules@stable_rust-Let.snap | 107 +++++++++++++ .../bundle_rules@stateless-Expression.snap | 71 --------- .../snapshots/bundle_rules@stateless-Let.snap | 71 +++++++++ ....snap => bundle_rules@structural-Let.snap} | 38 ++--- .../bundle_rules@waffle-Expression.snap | 91 ----------- tests/snapshots/bundle_rules@waffle-Let.snap | 91 +++++++++++ tests/snapshots/generate_design_doc.snap | 68 ++++----- .../trace_cli@11515459865669657874.snap | 4 +- .../trace_cli@16736406663811832092.snap | 4 +- .../trace_cli@17515479014605656910.snap | 4 +- .../trace_cli@3615762548608754050.snap | 4 +- .../trace_solver@10689482223350950673.snap | 4 +- .../trace_solver@10807759740653107329.snap | 2 +- .../trace_solver@10865220688936575713.snap | 6 +- .../trace_solver@11182522368387210600.snap | 6 +- .../trace_solver@11476299158837609649.snap | 10 +- .../trace_solver@1232619334709257022.snap | 6 +- .../trace_solver@12489069223383884812.snap | 6 +- .../trace_solver@12579012087920145589.snap | 6 +- .../trace_solver@12655381257351702186.snap | 6 +- .../trace_solver@12809305407466269816.snap | 8 +- .../trace_solver@12915023738034626330.snap | 8 +- .../trace_solver@13290325879162841754.snap | 4 +- .../trace_solver@13548974902697677505.snap | 4 +- .../trace_solver@13600049696705482403.snap | 8 +- .../trace_solver@13765067313599283775.snap | 4 +- .../trace_solver@14374729414625685518.snap | 6 +- .../trace_solver@14448888793953596513.snap | 10 +- .../trace_solver@15128702307283337718.snap | 4 +- .../trace_solver@15439890668531526513.snap | 6 +- .../trace_solver@15462702399771430733.snap | 4 +- .../trace_solver@15512033932901969966.snap | 8 +- .../trace_solver@15592177441332287830.snap | 6 +- .../trace_solver@15612835296036204153.snap | 10 +- .../trace_solver@15656926055703108454.snap | 6 +- .../trace_solver@15938986002444711672.snap | 8 +- .../trace_solver@16170381397687968370.snap | 10 +- .../trace_solver@16171401228296909003.snap | 6 +- .../trace_solver@16448033867548462768.snap | 6 +- .../trace_solver@16449937220397754470.snap | 2 +- .../trace_solver@16653908557512966839.snap | 6 +- .../trace_solver@16737089013440978764.snap | 6 +- .../trace_solver@16945717239014280128.snap | 8 +- .../trace_solver@17090698843216923551.snap | 6 +- .../trace_solver@17267759939354941938.snap | 8 +- .../trace_solver@17289495115225778387.snap | 6 +- .../trace_solver@17515349904032664008.snap | 6 +- .../trace_solver@17866092833099573719.snap | 6 +- .../trace_solver@237299396515860850.snap | 6 +- .../trace_solver@2477365679140863486.snap | 8 +- .../trace_solver@2841597620561875668.snap | 2 +- .../trace_solver@3151172932322996502.snap | 8 +- .../trace_solver@3220219759119512955.snap | 10 +- .../trace_solver@3285859787782258601.snap | 2 +- .../trace_solver@3290708013228492874.snap | 8 +- .../trace_solver@3443663663802049203.snap | 8 +- .../trace_solver@3476826824019878644.snap | 6 +- .../trace_solver@3867501932879384401.snap | 6 +- .../trace_solver@4026935597091880141.snap | 4 +- .../trace_solver@428329153827781543.snap | 4 +- .../trace_solver@438755831144266037.snap | 6 +- .../trace_solver@4537001535850509439.snap | 6 +- .../trace_solver@4565781073236055611.snap | 6 +- .../trace_solver@4725884600475691186.snap | 6 +- .../trace_solver@4768981282991870779.snap | 6 +- .../trace_solver@5271415905759418211.snap | 6 +- .../trace_solver@5505637041493281647.snap | 6 +- .../trace_solver@5540120967807313941.snap | 6 +- .../trace_solver@5681143726589435347.snap | 4 +- .../trace_solver@6251645678868280809.snap | 8 +- .../trace_solver@6700969450215207705.snap | 8 +- .../trace_solver@7838488033653042879.snap | 6 +- .../trace_solver@7899415904620908758.snap | 8 +- .../trace_solver@8098284767807828361.snap | 8 +- .../trace_solver@8513047613916112359.snap | 10 +- .../trace_solver@8660489408052045213.snap | 6 +- .../trace_solver@8733002960365789612.snap | 6 +- .../trace_solver@8759904168187478288.snap | 4 +- .../trace_solver@9203076157971134756.snap | 10 +- .../trace_solver@9601516325954291897.snap | 6 +- .../trace_solver@9761305899459510603.snap | 6 +- tests/trace_solver.rs | 2 +- web/src/components/Solver.jsx | 4 +- 100 files changed, 1103 insertions(+), 1108 deletions(-) delete mode 100644 tests/snapshots/bundle_rules@min_ergonomics-Expression.snap create mode 100644 tests/snapshots/bundle_rules@min_ergonomics-Let.snap delete mode 100644 tests/snapshots/bundle_rules@nadri-Expression.snap create mode 100644 tests/snapshots/bundle_rules@nadri-Let.snap delete mode 100644 tests/snapshots/bundle_rules@rfc3627-Expression.snap create mode 100644 tests/snapshots/bundle_rules@rfc3627-Let.snap delete mode 100644 tests/snapshots/bundle_rules@rfc3627_2021-Expression.snap create mode 100644 tests/snapshots/bundle_rules@rfc3627_2021-Let.snap delete mode 100644 tests/snapshots/bundle_rules@rfc3627_2024_min-Expression.snap create mode 100644 tests/snapshots/bundle_rules@rfc3627_2024_min-Let.snap delete mode 100644 tests/snapshots/bundle_rules@stable_rust-Expression.snap create mode 100644 tests/snapshots/bundle_rules@stable_rust-Let.snap delete mode 100644 tests/snapshots/bundle_rules@stateless-Expression.snap create mode 100644 tests/snapshots/bundle_rules@stateless-Let.snap rename tests/snapshots/{bundle_rules@structural-Expression.snap => bundle_rules@structural-Let.snap} (51%) delete mode 100644 tests/snapshots/bundle_rules@waffle-Expression.snap create mode 100644 tests/snapshots/bundle_rules@waffle-Let.snap diff --git a/src/analyses/compute_rules.rs b/src/analyses/compute_rules.rs index af64d62..a60a3ac 100644 --- a/src/analyses/compute_rules.rs +++ b/src/analyses/compute_rules.rs @@ -46,7 +46,7 @@ pub fn compute_rules<'a>(ctx: TypingCtx<'a>) -> Vec> { match pred.typing_rule(ctx) { Ok(rule) => { if TRACE { - let rule_str = rule.display(PredicateStyle::Expression).unwrap(); + let rule_str = rule.display(PredicateStyle::Let).unwrap(); let rule_str = rule_str.replace("\n", "\n "); println!(" Pushing rule:\n {rule_str}"); } @@ -185,8 +185,8 @@ impl TypeOfInterest { #[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Encode, Decode)] pub enum PredicateStyle { - /// `pattern @ expression : ty` - Expression, + /// `let pattern : ty = expression` + Let, /// `state ⊢ pattern : ty` Sequent { /// Which type is shown in the sequent. @@ -207,7 +207,7 @@ pub struct PredicateExplanation { impl PredicateStyle { pub(crate) const KNOWN_PREDICATE_STYLES: &[(&str, PredicateStyle)] = &[ - ("Expression", PredicateStyle::Expression), + ("Let", PredicateStyle::Let), ( "SequentUserVisible", PredicateStyle::Sequent { @@ -228,7 +228,7 @@ impl PredicateStyle { pub fn to_name(&self) -> &str { match self { - PredicateStyle::Expression => "Expression", + PredicateStyle::Let => "Let", PredicateStyle::Sequent { ty: TypeOfInterest::UserVisible, .. @@ -252,7 +252,7 @@ impl PredicateStyle { pub fn type_of_interest(self) -> TypeOfInterest { match self { - PredicateStyle::Expression => TypeOfInterest::UserVisible, + PredicateStyle::Let => TypeOfInterest::UserVisible, PredicateStyle::Sequent { ty, .. } => ty, } } @@ -271,7 +271,7 @@ impl PredicateStyle { /// Same as `self` but displays all the bits of state we know about. pub fn with_maximal_state(self) -> Self { match self { - PredicateStyle::Expression => PredicateStyle::Expression, + PredicateStyle::Let => PredicateStyle::Let, PredicateStyle::Sequent { ty, .. } => PredicateStyle::Sequent { ty, show_reference_state: true, @@ -285,7 +285,7 @@ impl PredicateStyle { let mut components = vec![]; match self { - PredicateStyle::Expression => { + PredicateStyle::Let => { components.push(format!("{} is an expression", "e".code())); } PredicateStyle::Sequent { @@ -401,7 +401,7 @@ impl<'a> TypingRule<'a> { // selected style. match style { // This style can display all expressions. - Expression => {} + Let => {} // In this style, only a few select expressions can be branched on (i.e. in the // postcondition). We error if the expression is not of an appropriate shape. Sequent { @@ -445,7 +445,7 @@ impl<'a> TypingRule<'a> { let cstrs = self.collect_side_constraints(); let mut postconditions = vec![RenderablePredicate::Pred(self.postcondition)]; match style { - Expression => { + Let => { if cstrs.abstract_expr_is_not_ref { postconditions.push(RenderablePredicate::ExprNotRef(abstract_expr)); } @@ -457,7 +457,7 @@ impl<'a> TypingRule<'a> { } if let Some(mtbl) = cstrs.scrutinee_mutability { match style { - Expression => { + Let => { postconditions.push(RenderablePredicate::Mutability(abstract_expr, mtbl)); } Sequent { @@ -558,7 +558,7 @@ fn bundle_rules() -> anyhow::Result<()> { for ((name, options), toi) in bundles { let style = match toi { - None => PredicateStyle::Expression, + None => PredicateStyle::Let, Some(ty) => { PredicateStyle::sequent_with_minimal_state(ty, options.into(), options.into()) } @@ -579,7 +579,7 @@ fn bundle_rules() -> anyhow::Result<()> { let _ = writeln!(&mut rules_str, "{rule}\n"); } Err(err) => { - let rule = rule.display(PredicateStyle::Expression).unwrap(); + let rule = rule.display(PredicateStyle::Let).unwrap(); let _ = writeln!( &mut rules_str, "ERROR can't display the following rule with the requested style ({err:?})" diff --git a/src/ast/printer.rs b/src/ast/printer.rs index 07d6c14..bc3bfd5 100644 --- a/src/ast/printer.rs +++ b/src/ast/printer.rs @@ -215,15 +215,6 @@ impl TypingResult<'_> { } impl<'a> TypingPredicate<'a> { - /// Display as `let ...`. - pub fn display_as_let<'d>(&self, a: &'d Arenas<'d>) -> DisplayTree<'d> { - self.pat - .to_display_tree(a) - .sep_then(a, ": ", self.expr.ty) - .sep_then(a, " = ", self.expr.to_string()) - .preceded(a, "let ") - } - pub fn display(&self, style: PredicateStyle) -> String { let a = &Arenas::default(); self.display_to_tree(a, style).to_string() @@ -232,11 +223,12 @@ impl<'a> TypingPredicate<'a> { /// Display according to the given predicate style. pub fn display_to_tree<'d>(&self, a: &'d Arenas<'d>, style: PredicateStyle) -> DisplayTree<'d> { match style { - PredicateStyle::Expression => self + PredicateStyle::Let => self .pat .to_display_tree(a) - .sep_then(a, " @ ", self.expr.to_string()) - .sep_then(a, ": ", self.expr.ty), + .sep_then(a, ": ", self.expr.ty) + .sep_then(a, " = ", self.expr.to_string()) + .preceded(a, "let "), PredicateStyle::Sequent { ty: toi, show_reference_state, @@ -424,7 +416,7 @@ impl Display for TypingRequest<'_> { impl Display for TypingPredicate<'_> { fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { - write!(f, "{}", self.display(PredicateStyle::Expression)) + write!(f, "{}", self.display(PredicateStyle::Let)) } } diff --git a/src/cli.rs b/src/cli.rs index 00385c6..9df7d68 100644 --- a/src/cli.rs +++ b/src/cli.rs @@ -41,7 +41,7 @@ impl CliState { name: "predicate_style", values: &[ OptionValue { - name: "Expression", + name: "Let", doc: "TODO", }, OptionValue { @@ -54,7 +54,7 @@ impl CliState { }, ], doc: "the style of the typing predicate; not all rulesets can be expressed in all styles, \ - only `Expression` is compatible with all rulesets", + only `Let` is compatible with all rulesets", }]; pub fn new() -> Self { diff --git a/src/solvers/ty_based.rs b/src/solvers/ty_based.rs index 3f0f013..6af5d08 100644 --- a/src/solvers/ty_based.rs +++ b/src/solvers/ty_based.rs @@ -60,7 +60,7 @@ impl<'a> TypingSolver<'a> { "\n", self.done_predicates .iter() - .map(|p| p.display_as_let(a)) + .map(|p| p.display_to_tree(a, PredicateStyle::Let)) .chain(self.predicates.iter().map(|p| p.display_to_tree(a, style))), ) } @@ -82,7 +82,7 @@ impl<'a> TypingSolver<'a> { .err() .map(|err| format!(" // Borrow-check error: {err:?}")) .unwrap_or_default(); - let p = p.display_as_let(a); + let p = p.display_to_tree(a, PredicateStyle::Let); p.sep_then(a, ";", bck) }), ) diff --git a/src/wasm.rs b/src/wasm.rs index e87abe6..85675d3 100644 --- a/src/wasm.rs +++ b/src/wasm.rs @@ -193,8 +193,8 @@ impl PredicateStyleJs { left: &RuleSetJs, right: &RuleSetJs, ) -> Option { - let style = if name == "Expression" { - PredicateStyle::Expression + let style = if name == "Let" { + PredicateStyle::Let } else { let ty = TypeOfInterest::from_str(name).ok()?; let left = left.as_ruleset(); @@ -205,13 +205,16 @@ impl PredicateStyleJs { } pub fn to_name(&self) -> String { - self.0.type_of_interest().to_str() + match self.0 { + PredicateStyle::Let => "Let".to_string(), + PredicateStyle::Sequent { ty, .. } => ty.to_str(), + } } pub fn doc(&self) -> String { let mut out = String::new(); match self.0 { - PredicateStyle::Expression => { + PredicateStyle::Let => { let _ = write!( &mut out, "Track the user-observable type along with the expression being matched on" diff --git a/tests/generate_design_doc.rs b/tests/generate_design_doc.rs index 8a35f37..f0d8795 100644 --- a/tests/generate_design_doc.rs +++ b/tests/generate_design_doc.rs @@ -29,7 +29,7 @@ fn generate_design_doc() -> anyhow::Result<()> { let a = &Arenas::default(); for (example, comment) in examples { let req = TypingRequest::parse(a, &example).unwrap(); - let (trace, _) = trace_solver(a, req, options, PredicateStyle::Expression); + let (trace, _) = trace_solver(a, req, options, PredicateStyle::Let); writeln!(&mut doc, "- `{example}` => {comment}")?; writeln!(&mut doc, "```rust")?; writeln!(&mut doc, "{trace}```")?; diff --git a/tests/snapshots/bundle_rules@min_ergonomics-Expression.snap b/tests/snapshots/bundle_rules@min_ergonomics-Expression.snap deleted file mode 100644 index 7b1ee4b..0000000 --- a/tests/snapshots/bundle_rules@min_ergonomics-Expression.snap +++ /dev/null @@ -1,67 +0,0 @@ ---- -source: src/analyses/compute_rules.rs -info: - bundle_name: min_ergonomics - options: - match_constructor_through_ref: true - eat_inherited_ref_alone: false - inherited_ref_on_ref: Error - fallback_to_outer: "No" - allow_ref_pat_on_ref_mut: false - simplify_deref_mut: true - downgrade_mut_inside_shared: false - eat_mut_inside_shared: false - ref_binding_on_inherited: Error - mut_binding_on_inherited: Error ---- -p0 @ e.0: T0, p1 @ e.1: T1 ---------------------------- "Constructor" -[p0, p1] @ e: [T0, T1] - -p0 @ &(*e).0: &T0, p1 @ &(*e).1: &T1 -------------------------------------- "ConstructorRef" -[p0, p1] @ e: &[T0, T1] - -p0 @ &mut (*e).0: &mut T0, p1 @ &mut (*e).1: &mut T1 ------------------------------------------------------ "ConstructorRef" -[p0, p1] @ e: &mut [T0, T1] - -[p0, p1] @ &**e: &T -------------------- "ConstructorMultiRef" -[p0, p1] @ e: &&T - -[p0, p1] @ &**e: &T ---------------------- "ConstructorMultiRef" -[p0, p1] @ e: &&mut T - -[p0, p1] @ &**e: &T ---------------------- "ConstructorMultiRef" -[p0, p1] @ e: &mut &T - -[p0, p1] @ &mut **e: &mut T ---------------------------- "ConstructorMultiRef" -[p0, p1] @ e: &mut &mut T - -p @ *e: T --------------------------------- "Deref" -&p @ e: &T, e is not a reference - -p @ *e: T ----------------------------------------- "Deref" -&mut p @ e: &mut T, e is not a reference - -x @ &e: &T ----------------------------------- "BindingBorrow" -ref x @ e: T, e is not a reference - -x @ &mut e: &mut T --------------------------------------- "BindingBorrow" -ref mut x @ e: T, e is not a reference - - --------- "Binding" -x @ e: T - - ----------------------------------- "Binding" -mut x @ e: T, e is not a reference diff --git a/tests/snapshots/bundle_rules@min_ergonomics-Let.snap b/tests/snapshots/bundle_rules@min_ergonomics-Let.snap new file mode 100644 index 0000000..13a409a --- /dev/null +++ b/tests/snapshots/bundle_rules@min_ergonomics-Let.snap @@ -0,0 +1,67 @@ +--- +source: src/analyses/compute_rules.rs +info: + bundle_name: min_ergonomics + options: + match_constructor_through_ref: true + eat_inherited_ref_alone: false + inherited_ref_on_ref: Error + fallback_to_outer: "No" + allow_ref_pat_on_ref_mut: false + simplify_deref_mut: true + downgrade_mut_inside_shared: false + eat_mut_inside_shared: false + ref_binding_on_inherited: Error + mut_binding_on_inherited: Error +--- +let p0: T0 = e.0, let p1: T1 = e.1 +----------------------------------- "Constructor" +let [p0, p1]: [T0, T1] = e + +let p0: &T0 = &(*e).0, let p1: &T1 = &(*e).1 +--------------------------------------------- "ConstructorRef" +let [p0, p1]: &[T0, T1] = e + +let p0: &mut T0 = &mut (*e).0, let p1: &mut T1 = &mut (*e).1 +------------------------------------------------------------- "ConstructorRef" +let [p0, p1]: &mut [T0, T1] = e + +let [p0, p1]: &T = &**e +----------------------- "ConstructorMultiRef" +let [p0, p1]: &&T = e + +let [p0, p1]: &T = &**e +------------------------- "ConstructorMultiRef" +let [p0, p1]: &&mut T = e + +let [p0, p1]: &T = &**e +------------------------- "ConstructorMultiRef" +let [p0, p1]: &mut &T = e + +let [p0, p1]: &mut T = &mut **e +------------------------------- "ConstructorMultiRef" +let [p0, p1]: &mut &mut T = e + +let p: T = *e +------------------------------------ "Deref" +let &p: &T = e, e is not a reference + +let p: T = *e +-------------------------------------------- "Deref" +let &mut p: &mut T = e, e is not a reference + +let x: &T = &e +-------------------------------------- "BindingBorrow" +let ref x: T = e, e is not a reference + +let x: &mut T = &mut e +------------------------------------------ "BindingBorrow" +let ref mut x: T = e, e is not a reference + + +------------ "Binding" +let x: T = e + + +-------------------------------------- "Binding" +let mut x: T = e, e is not a reference diff --git a/tests/snapshots/bundle_rules@nadri-Expression.snap b/tests/snapshots/bundle_rules@nadri-Expression.snap deleted file mode 100644 index 8ae5355..0000000 --- a/tests/snapshots/bundle_rules@nadri-Expression.snap +++ /dev/null @@ -1,71 +0,0 @@ ---- -source: src/analyses/compute_rules.rs -info: - bundle_name: nadri - options: - match_constructor_through_ref: true - eat_inherited_ref_alone: true - inherited_ref_on_ref: EatOuter - fallback_to_outer: "No" - allow_ref_pat_on_ref_mut: true - simplify_deref_mut: true - downgrade_mut_inside_shared: false - eat_mut_inside_shared: true - ref_binding_on_inherited: Error - mut_binding_on_inherited: Keep ---- -p0 @ e.0: T0, p1 @ e.1: T1 ---------------------------- "Constructor" -[p0, p1] @ e: [T0, T1] - -p0 @ &(*e).0: &T0, p1 @ &(*e).1: &T1 -------------------------------------- "ConstructorRef" -[p0, p1] @ e: &[T0, T1] - -p0 @ &mut (*e).0: &mut T0, p1 @ &mut (*e).1: &mut T1 ------------------------------------------------------ "ConstructorRef" -[p0, p1] @ e: &mut [T0, T1] - -[p0, p1] @ &**e: &T -------------------- "ConstructorMultiRef" -[p0, p1] @ e: &&T - -[p0, p1] @ &**e: &T ---------------------- "ConstructorMultiRef" -[p0, p1] @ e: &&mut T - -[p0, p1] @ &**e: &T ---------------------- "ConstructorMultiRef" -[p0, p1] @ e: &mut &T - -[p0, p1] @ &mut **e: &mut T ---------------------------- "ConstructorMultiRef" -[p0, p1] @ e: &mut &mut T - -p @ *e: T ----------- "Deref" -&p @ e: &T - -p @ *e: T ------------------- "Deref" -&mut p @ e: &mut T - -p @ *&*e: T --------------- "DerefMutWithShared" -&p @ e: &mut T - -x @ &e: &T ----------------------------------- "BindingBorrow" -ref x @ e: T, e is not a reference - -x @ &mut e: &mut T --------------------------------------- "BindingBorrow" -ref mut x @ e: T, e is not a reference - - --------- "Binding" -x @ e: T - - ------------- "Binding" -mut x @ e: T diff --git a/tests/snapshots/bundle_rules@nadri-Let.snap b/tests/snapshots/bundle_rules@nadri-Let.snap new file mode 100644 index 0000000..80f5a52 --- /dev/null +++ b/tests/snapshots/bundle_rules@nadri-Let.snap @@ -0,0 +1,71 @@ +--- +source: src/analyses/compute_rules.rs +info: + bundle_name: nadri + options: + match_constructor_through_ref: true + eat_inherited_ref_alone: true + inherited_ref_on_ref: EatOuter + fallback_to_outer: "No" + allow_ref_pat_on_ref_mut: true + simplify_deref_mut: true + downgrade_mut_inside_shared: false + eat_mut_inside_shared: true + ref_binding_on_inherited: Error + mut_binding_on_inherited: Keep +--- +let p0: T0 = e.0, let p1: T1 = e.1 +----------------------------------- "Constructor" +let [p0, p1]: [T0, T1] = e + +let p0: &T0 = &(*e).0, let p1: &T1 = &(*e).1 +--------------------------------------------- "ConstructorRef" +let [p0, p1]: &[T0, T1] = e + +let p0: &mut T0 = &mut (*e).0, let p1: &mut T1 = &mut (*e).1 +------------------------------------------------------------- "ConstructorRef" +let [p0, p1]: &mut [T0, T1] = e + +let [p0, p1]: &T = &**e +----------------------- "ConstructorMultiRef" +let [p0, p1]: &&T = e + +let [p0, p1]: &T = &**e +------------------------- "ConstructorMultiRef" +let [p0, p1]: &&mut T = e + +let [p0, p1]: &T = &**e +------------------------- "ConstructorMultiRef" +let [p0, p1]: &mut &T = e + +let [p0, p1]: &mut T = &mut **e +------------------------------- "ConstructorMultiRef" +let [p0, p1]: &mut &mut T = e + +let p: T = *e +-------------- "Deref" +let &p: &T = e + +let p: T = *e +---------------------- "Deref" +let &mut p: &mut T = e + +let p: T = *&*e +------------------ "DerefMutWithShared" +let &p: &mut T = e + +let x: &T = &e +-------------------------------------- "BindingBorrow" +let ref x: T = e, e is not a reference + +let x: &mut T = &mut e +------------------------------------------ "BindingBorrow" +let ref mut x: T = e, e is not a reference + + +------------ "Binding" +let x: T = e + + +---------------- "Binding" +let mut x: T = e diff --git a/tests/snapshots/bundle_rules@rfc3627-Expression.snap b/tests/snapshots/bundle_rules@rfc3627-Expression.snap deleted file mode 100644 index c49420f..0000000 --- a/tests/snapshots/bundle_rules@rfc3627-Expression.snap +++ /dev/null @@ -1,139 +0,0 @@ ---- -source: src/analyses/compute_rules.rs -info: - bundle_name: rfc3627 - options: - match_constructor_through_ref: true - eat_inherited_ref_alone: true - inherited_ref_on_ref: EatInner - fallback_to_outer: EatOuter - allow_ref_pat_on_ref_mut: true - simplify_deref_mut: true - downgrade_mut_inside_shared: true - eat_mut_inside_shared: true - ref_binding_on_inherited: ResetBindingMode - mut_binding_on_inherited: Error ---- -p0 @ e.0: T0, p1 @ e.1: T1 ---------------------------- "Constructor" -[p0, p1] @ e: [T0, T1] - -p0 @ &(*e).0: &T0, p1 @ &(*e).1: &T1 -------------------------------------- "ConstructorRef" -[p0, p1] @ e: &[T0, T1] - -p0 @ &mut (*e).0: &mut T0, p1 @ &mut (*e).1: &mut T1 ------------------------------------------------------ "ConstructorRef" -[p0, p1] @ e: &mut [T0, T1], e mutable - -p0 @ &(*e).0: &T0, p1 @ &(*e).1: &T1 ----------------------------------------- "ConstructorRef(ForceReadOnly)" -[p0, p1] @ e: &mut [T0, T1], e read-only - -[p0, p1] @ &**e: &T -------------------- "ConstructorMultiRef" -[p0, p1] @ e: &&T - -[p0, p1] @ &**e: &T ---------------------- "ConstructorMultiRef" -[p0, p1] @ e: &&mut T - -[p0, p1] @ &**e: &T ---------------------- "ConstructorMultiRef" -[p0, p1] @ e: &mut &T - -[p0, p1] @ &mut **e: &mut T ------------------------------------- "ConstructorMultiRef" -[p0, p1] @ e: &mut &mut T, e mutable - -[p0, p1] @ &**e: &T --------------------------------------- "ConstructorMultiRef(ForceReadOnly)" -[p0, p1] @ e: &mut &mut T, e read-only - -p @ *e: T --------------------------------- "Deref(EatOuter)" -&p @ e: &T, e is not a reference - -p @ *&e: T ---------------------------------- "Deref(EatOuter)" -&p @ &e: &T, T is not a reference - -p @ *e: T ----------------------------------------- "Deref(EatOuter)" -&mut p @ e: &mut T, e is not a reference - -p @ *&mut e: T ---------------------------------------------- "Deref(EatOuter)" -&mut p @ &mut e: &mut T, T is not a reference - -p @ &*e: &T ------------- "Deref(EatInner)" -&p @ &e: &&T - -p @ &*e: &T --------------------- "Deref(EatInner)" -&mut p @ &e: &&mut T - -p @ &mut *e: &mut T ---------------------------------------- "Deref(EatInner)" -&mut p @ &mut e: &mut &mut T, e mutable - -p @ *&mut e: &T ------------------------- "Deref(EatInner, FallbackToOuter(EatOuter))" -&mut p @ &mut e: &mut &T - -p @ &*e: &T --------------------- "Deref(EatInner, ForceReadOnly)" -&p @ &mut e: &mut &T - -p @ &*e: &T ------------------------------------------ "Deref(EatInner, ForceReadOnly)" -&mut p @ &mut e: &mut &mut T, e read-only - -p @ *&*e: T ------------------------------------- "DerefMutWithShared(EatOuter)" -&p @ e: &mut T, e is not a reference - -p @ *&*&mut e: T ------------------------------------------ "DerefMutWithShared(EatOuter)" -&p @ &mut e: &mut T, T is not a reference - -p @ &*&*e: &T ----------------- "DerefMutWithShared(EatInner)" -&p @ &e: &&mut T - -p @ &*&*e: &T ------------------------- "DerefMutWithShared(EatInner)" -&p @ &mut e: &mut &mut T - -ref x @ e: T --------------- "RefBindingResetBindingMode" -ref x @ &e: &T - -ref x @ e: T ----------------------- "RefBindingResetBindingMode" -ref x @ &mut e: &mut T - -ref mut x @ e: T ------------------- "RefBindingResetBindingMode" -ref mut x @ &e: &T - -ref mut x @ e: T --------------------------- "RefBindingResetBindingMode" -ref mut x @ &mut e: &mut T - -x @ &e: &T ----------------------------------- "BindingBorrow" -ref x @ e: T, e is not a reference - -x @ &mut e: &mut T --------------------------------------- "BindingBorrow" -ref mut x @ e: T, e is not a reference - - --------- "Binding" -x @ e: T - - ----------------------------------- "Binding" -mut x @ e: T, e is not a reference diff --git a/tests/snapshots/bundle_rules@rfc3627-Let.snap b/tests/snapshots/bundle_rules@rfc3627-Let.snap new file mode 100644 index 0000000..0da532e --- /dev/null +++ b/tests/snapshots/bundle_rules@rfc3627-Let.snap @@ -0,0 +1,139 @@ +--- +source: src/analyses/compute_rules.rs +info: + bundle_name: rfc3627 + options: + match_constructor_through_ref: true + eat_inherited_ref_alone: true + inherited_ref_on_ref: EatInner + fallback_to_outer: EatOuter + allow_ref_pat_on_ref_mut: true + simplify_deref_mut: true + downgrade_mut_inside_shared: true + eat_mut_inside_shared: true + ref_binding_on_inherited: ResetBindingMode + mut_binding_on_inherited: Error +--- +let p0: T0 = e.0, let p1: T1 = e.1 +----------------------------------- "Constructor" +let [p0, p1]: [T0, T1] = e + +let p0: &T0 = &(*e).0, let p1: &T1 = &(*e).1 +--------------------------------------------- "ConstructorRef" +let [p0, p1]: &[T0, T1] = e + +let p0: &mut T0 = &mut (*e).0, let p1: &mut T1 = &mut (*e).1 +------------------------------------------------------------- "ConstructorRef" +let [p0, p1]: &mut [T0, T1] = e, e mutable + +let p0: &T0 = &(*e).0, let p1: &T1 = &(*e).1 +--------------------------------------------- "ConstructorRef(ForceReadOnly)" +let [p0, p1]: &mut [T0, T1] = e, e read-only + +let [p0, p1]: &T = &**e +----------------------- "ConstructorMultiRef" +let [p0, p1]: &&T = e + +let [p0, p1]: &T = &**e +------------------------- "ConstructorMultiRef" +let [p0, p1]: &&mut T = e + +let [p0, p1]: &T = &**e +------------------------- "ConstructorMultiRef" +let [p0, p1]: &mut &T = e + +let [p0, p1]: &mut T = &mut **e +---------------------------------------- "ConstructorMultiRef" +let [p0, p1]: &mut &mut T = e, e mutable + +let [p0, p1]: &T = &**e +------------------------------------------ "ConstructorMultiRef(ForceReadOnly)" +let [p0, p1]: &mut &mut T = e, e read-only + +let p: T = *e +------------------------------------ "Deref(EatOuter)" +let &p: &T = e, e is not a reference + +let p: T = *&e +------------------------------------- "Deref(EatOuter)" +let &p: &T = &e, T is not a reference + +let p: T = *e +-------------------------------------------- "Deref(EatOuter)" +let &mut p: &mut T = e, e is not a reference + +let p: T = *&mut e +------------------------------------------------- "Deref(EatOuter)" +let &mut p: &mut T = &mut e, T is not a reference + +let p: &T = &*e +---------------- "Deref(EatInner)" +let &p: &&T = &e + +let p: &T = &*e +------------------------ "Deref(EatInner)" +let &mut p: &&mut T = &e + +let p: &mut T = &mut *e +------------------------------------------- "Deref(EatInner)" +let &mut p: &mut &mut T = &mut e, e mutable + +let p: &T = *&mut e +---------------------------- "Deref(EatInner, FallbackToOuter(EatOuter))" +let &mut p: &mut &T = &mut e + +let p: &T = &*e +------------------------ "Deref(EatInner, ForceReadOnly)" +let &p: &mut &T = &mut e + +let p: &T = &*e +--------------------------------------------- "Deref(EatInner, ForceReadOnly)" +let &mut p: &mut &mut T = &mut e, e read-only + +let p: T = *&*e +---------------------------------------- "DerefMutWithShared(EatOuter)" +let &p: &mut T = e, e is not a reference + +let p: T = *&*&mut e +--------------------------------------------- "DerefMutWithShared(EatOuter)" +let &p: &mut T = &mut e, T is not a reference + +let p: &T = &*&*e +-------------------- "DerefMutWithShared(EatInner)" +let &p: &&mut T = &e + +let p: &T = &*&*e +---------------------------- "DerefMutWithShared(EatInner)" +let &p: &mut &mut T = &mut e + +let ref x: T = e +------------------ "RefBindingResetBindingMode" +let ref x: &T = &e + +let ref x: T = e +-------------------------- "RefBindingResetBindingMode" +let ref x: &mut T = &mut e + +let ref mut x: T = e +---------------------- "RefBindingResetBindingMode" +let ref mut x: &T = &e + +let ref mut x: T = e +------------------------------ "RefBindingResetBindingMode" +let ref mut x: &mut T = &mut e + +let x: &T = &e +-------------------------------------- "BindingBorrow" +let ref x: T = e, e is not a reference + +let x: &mut T = &mut e +------------------------------------------ "BindingBorrow" +let ref mut x: T = e, e is not a reference + + +------------ "Binding" +let x: T = e + + +-------------------------------------- "Binding" +let mut x: T = e, e is not a reference diff --git a/tests/snapshots/bundle_rules@rfc3627_2021-Expression.snap b/tests/snapshots/bundle_rules@rfc3627_2021-Expression.snap deleted file mode 100644 index 74afc6b..0000000 --- a/tests/snapshots/bundle_rules@rfc3627_2021-Expression.snap +++ /dev/null @@ -1,143 +0,0 @@ ---- -source: src/analyses/compute_rules.rs -info: - bundle_name: rfc3627_2021 - options: - match_constructor_through_ref: true - eat_inherited_ref_alone: true - inherited_ref_on_ref: EatBoth - fallback_to_outer: EatOuter - allow_ref_pat_on_ref_mut: true - simplify_deref_mut: true - downgrade_mut_inside_shared: true - eat_mut_inside_shared: true - ref_binding_on_inherited: ResetBindingMode - mut_binding_on_inherited: ResetBindingMode ---- -p0 @ e.0: T0, p1 @ e.1: T1 ---------------------------- "Constructor" -[p0, p1] @ e: [T0, T1] - -p0 @ &(*e).0: &T0, p1 @ &(*e).1: &T1 -------------------------------------- "ConstructorRef" -[p0, p1] @ e: &[T0, T1] - -p0 @ &mut (*e).0: &mut T0, p1 @ &mut (*e).1: &mut T1 ------------------------------------------------------ "ConstructorRef" -[p0, p1] @ e: &mut [T0, T1], e mutable - -p0 @ &(*e).0: &T0, p1 @ &(*e).1: &T1 ----------------------------------------- "ConstructorRef(ForceReadOnly)" -[p0, p1] @ e: &mut [T0, T1], e read-only - -[p0, p1] @ &**e: &T -------------------- "ConstructorMultiRef" -[p0, p1] @ e: &&T - -[p0, p1] @ &**e: &T ---------------------- "ConstructorMultiRef" -[p0, p1] @ e: &&mut T - -[p0, p1] @ &**e: &T ---------------------- "ConstructorMultiRef" -[p0, p1] @ e: &mut &T - -[p0, p1] @ &mut **e: &mut T ------------------------------------- "ConstructorMultiRef" -[p0, p1] @ e: &mut &mut T, e mutable - -[p0, p1] @ &**e: &T --------------------------------------- "ConstructorMultiRef(ForceReadOnly)" -[p0, p1] @ e: &mut &mut T, e read-only - -p @ *e: T --------------------------------- "Deref(EatOuter)" -&p @ e: &T, e is not a reference - -p @ *&e: T ---------------------------------- "Deref(EatOuter)" -&p @ &e: &T, T is not a reference - -p @ *e: T ----------------------------------------- "Deref(EatOuter)" -&mut p @ e: &mut T, e is not a reference - -p @ *&mut e: T ---------------------------------------------- "Deref(EatOuter)" -&mut p @ &mut e: &mut T, T is not a reference - -p @ *e: T ------------- "Deref(EatBoth)" -&p @ &e: &&T - -p @ *e: T --------------------- "Deref(EatBoth)" -&p @ &mut e: &mut &T - -p @ *e: T --------------------- "Deref(EatBoth)" -&mut p @ &e: &&mut T - -p @ *e: T ----------------------------- "Deref(EatBoth)" -&mut p @ &mut e: &mut &mut T - -p @ *&mut e: &T ------------------------- "Deref(EatBoth, FallbackToOuter(EatOuter))" -&mut p @ &mut e: &mut &T - -p @ *&*e: T ------------------------------------- "DerefMutWithShared(EatOuter)" -&p @ e: &mut T, e is not a reference - -p @ *&*&mut e: T ------------------------------------------ "DerefMutWithShared(EatOuter)" -&p @ &mut e: &mut T, T is not a reference - -p @ *&*e: T ----------------- "DerefMutWithShared(EatBoth)" -&p @ &e: &&mut T - -p @ *&*e: T ------------------------- "DerefMutWithShared(EatBoth)" -&p @ &mut e: &mut &mut T - -ref x @ e: T --------------- "RefBindingResetBindingMode" -ref x @ &e: &T - -ref x @ e: T ----------------------- "RefBindingResetBindingMode" -ref x @ &mut e: &mut T - -ref mut x @ e: T ------------------- "RefBindingResetBindingMode" -ref mut x @ &e: &T - -ref mut x @ e: T --------------------------- "RefBindingResetBindingMode" -ref mut x @ &mut e: &mut T - -mut x @ e: T --------------- "MutBindingResetBindingMode" -mut x @ &e: &T - -mut x @ e: T ----------------------- "MutBindingResetBindingMode" -mut x @ &mut e: &mut T - -x @ &e: &T ----------------------------------- "BindingBorrow" -ref x @ e: T, e is not a reference - -x @ &mut e: &mut T --------------------------------------- "BindingBorrow" -ref mut x @ e: T, e is not a reference - - --------- "Binding" -x @ e: T - - ----------------------------------- "Binding" -mut x @ e: T, e is not a reference diff --git a/tests/snapshots/bundle_rules@rfc3627_2021-Let.snap b/tests/snapshots/bundle_rules@rfc3627_2021-Let.snap new file mode 100644 index 0000000..89b957d --- /dev/null +++ b/tests/snapshots/bundle_rules@rfc3627_2021-Let.snap @@ -0,0 +1,143 @@ +--- +source: src/analyses/compute_rules.rs +info: + bundle_name: rfc3627_2021 + options: + match_constructor_through_ref: true + eat_inherited_ref_alone: true + inherited_ref_on_ref: EatBoth + fallback_to_outer: EatOuter + allow_ref_pat_on_ref_mut: true + simplify_deref_mut: true + downgrade_mut_inside_shared: true + eat_mut_inside_shared: true + ref_binding_on_inherited: ResetBindingMode + mut_binding_on_inherited: ResetBindingMode +--- +let p0: T0 = e.0, let p1: T1 = e.1 +----------------------------------- "Constructor" +let [p0, p1]: [T0, T1] = e + +let p0: &T0 = &(*e).0, let p1: &T1 = &(*e).1 +--------------------------------------------- "ConstructorRef" +let [p0, p1]: &[T0, T1] = e + +let p0: &mut T0 = &mut (*e).0, let p1: &mut T1 = &mut (*e).1 +------------------------------------------------------------- "ConstructorRef" +let [p0, p1]: &mut [T0, T1] = e, e mutable + +let p0: &T0 = &(*e).0, let p1: &T1 = &(*e).1 +--------------------------------------------- "ConstructorRef(ForceReadOnly)" +let [p0, p1]: &mut [T0, T1] = e, e read-only + +let [p0, p1]: &T = &**e +----------------------- "ConstructorMultiRef" +let [p0, p1]: &&T = e + +let [p0, p1]: &T = &**e +------------------------- "ConstructorMultiRef" +let [p0, p1]: &&mut T = e + +let [p0, p1]: &T = &**e +------------------------- "ConstructorMultiRef" +let [p0, p1]: &mut &T = e + +let [p0, p1]: &mut T = &mut **e +---------------------------------------- "ConstructorMultiRef" +let [p0, p1]: &mut &mut T = e, e mutable + +let [p0, p1]: &T = &**e +------------------------------------------ "ConstructorMultiRef(ForceReadOnly)" +let [p0, p1]: &mut &mut T = e, e read-only + +let p: T = *e +------------------------------------ "Deref(EatOuter)" +let &p: &T = e, e is not a reference + +let p: T = *&e +------------------------------------- "Deref(EatOuter)" +let &p: &T = &e, T is not a reference + +let p: T = *e +-------------------------------------------- "Deref(EatOuter)" +let &mut p: &mut T = e, e is not a reference + +let p: T = *&mut e +------------------------------------------------- "Deref(EatOuter)" +let &mut p: &mut T = &mut e, T is not a reference + +let p: T = *e +---------------- "Deref(EatBoth)" +let &p: &&T = &e + +let p: T = *e +------------------------ "Deref(EatBoth)" +let &p: &mut &T = &mut e + +let p: T = *e +------------------------ "Deref(EatBoth)" +let &mut p: &&mut T = &e + +let p: T = *e +-------------------------------- "Deref(EatBoth)" +let &mut p: &mut &mut T = &mut e + +let p: &T = *&mut e +---------------------------- "Deref(EatBoth, FallbackToOuter(EatOuter))" +let &mut p: &mut &T = &mut e + +let p: T = *&*e +---------------------------------------- "DerefMutWithShared(EatOuter)" +let &p: &mut T = e, e is not a reference + +let p: T = *&*&mut e +--------------------------------------------- "DerefMutWithShared(EatOuter)" +let &p: &mut T = &mut e, T is not a reference + +let p: T = *&*e +-------------------- "DerefMutWithShared(EatBoth)" +let &p: &&mut T = &e + +let p: T = *&*e +---------------------------- "DerefMutWithShared(EatBoth)" +let &p: &mut &mut T = &mut e + +let ref x: T = e +------------------ "RefBindingResetBindingMode" +let ref x: &T = &e + +let ref x: T = e +-------------------------- "RefBindingResetBindingMode" +let ref x: &mut T = &mut e + +let ref mut x: T = e +---------------------- "RefBindingResetBindingMode" +let ref mut x: &T = &e + +let ref mut x: T = e +------------------------------ "RefBindingResetBindingMode" +let ref mut x: &mut T = &mut e + +let mut x: T = e +------------------ "MutBindingResetBindingMode" +let mut x: &T = &e + +let mut x: T = e +-------------------------- "MutBindingResetBindingMode" +let mut x: &mut T = &mut e + +let x: &T = &e +-------------------------------------- "BindingBorrow" +let ref x: T = e, e is not a reference + +let x: &mut T = &mut e +------------------------------------------ "BindingBorrow" +let ref mut x: T = e, e is not a reference + + +------------ "Binding" +let x: T = e + + +-------------------------------------- "Binding" +let mut x: T = e, e is not a reference diff --git a/tests/snapshots/bundle_rules@rfc3627_2024_min-Expression.snap b/tests/snapshots/bundle_rules@rfc3627_2024_min-Expression.snap deleted file mode 100644 index 25e07cc..0000000 --- a/tests/snapshots/bundle_rules@rfc3627_2024_min-Expression.snap +++ /dev/null @@ -1,99 +0,0 @@ ---- -source: src/analyses/compute_rules.rs -info: - bundle_name: rfc3627_2024_min - options: - match_constructor_through_ref: true - eat_inherited_ref_alone: false - inherited_ref_on_ref: EatInner - fallback_to_outer: "No" - allow_ref_pat_on_ref_mut: false - simplify_deref_mut: true - downgrade_mut_inside_shared: false - eat_mut_inside_shared: true - ref_binding_on_inherited: ResetBindingMode - mut_binding_on_inherited: Error ---- -p0 @ e.0: T0, p1 @ e.1: T1 ---------------------------- "Constructor" -[p0, p1] @ e: [T0, T1] - -p0 @ &(*e).0: &T0, p1 @ &(*e).1: &T1 -------------------------------------- "ConstructorRef" -[p0, p1] @ e: &[T0, T1] - -p0 @ &mut (*e).0: &mut T0, p1 @ &mut (*e).1: &mut T1 ------------------------------------------------------ "ConstructorRef" -[p0, p1] @ e: &mut [T0, T1] - -[p0, p1] @ &**e: &T -------------------- "ConstructorMultiRef" -[p0, p1] @ e: &&T - -[p0, p1] @ &**e: &T ---------------------- "ConstructorMultiRef" -[p0, p1] @ e: &&mut T - -[p0, p1] @ &**e: &T ---------------------- "ConstructorMultiRef" -[p0, p1] @ e: &mut &T - -[p0, p1] @ &mut **e: &mut T ---------------------------- "ConstructorMultiRef" -[p0, p1] @ e: &mut &mut T - -p @ *e: T --------------------------------- "Deref(EatOuter)" -&p @ e: &T, e is not a reference - -p @ *e: T ----------------------------------------- "Deref(EatOuter)" -&mut p @ e: &mut T, e is not a reference - -p @ &*e: &T ------------- "Deref(EatInner)" -&p @ &e: &&T - -p @ &mut *e: &mut T --------------------- "Deref(EatInner)" -&p @ &mut e: &mut &T - -p @ &*e: &T --------------------- "Deref(EatInner)" -&mut p @ &e: &&mut T - -p @ &mut *e: &mut T ----------------------------- "Deref(EatInner)" -&mut p @ &mut e: &mut &mut T - -ref x @ e: T --------------- "RefBindingResetBindingMode" -ref x @ &e: &T - -ref x @ e: T ----------------------- "RefBindingResetBindingMode" -ref x @ &mut e: &mut T - -ref mut x @ e: T ------------------- "RefBindingResetBindingMode" -ref mut x @ &e: &T - -ref mut x @ e: T --------------------------- "RefBindingResetBindingMode" -ref mut x @ &mut e: &mut T - -x @ &e: &T ----------------------------------- "BindingBorrow" -ref x @ e: T, e is not a reference - -x @ &mut e: &mut T --------------------------------------- "BindingBorrow" -ref mut x @ e: T, e is not a reference - - --------- "Binding" -x @ e: T - - ----------------------------------- "Binding" -mut x @ e: T, e is not a reference diff --git a/tests/snapshots/bundle_rules@rfc3627_2024_min-Let.snap b/tests/snapshots/bundle_rules@rfc3627_2024_min-Let.snap new file mode 100644 index 0000000..62ca42c --- /dev/null +++ b/tests/snapshots/bundle_rules@rfc3627_2024_min-Let.snap @@ -0,0 +1,99 @@ +--- +source: src/analyses/compute_rules.rs +info: + bundle_name: rfc3627_2024_min + options: + match_constructor_through_ref: true + eat_inherited_ref_alone: false + inherited_ref_on_ref: EatInner + fallback_to_outer: "No" + allow_ref_pat_on_ref_mut: false + simplify_deref_mut: true + downgrade_mut_inside_shared: false + eat_mut_inside_shared: true + ref_binding_on_inherited: ResetBindingMode + mut_binding_on_inherited: Error +--- +let p0: T0 = e.0, let p1: T1 = e.1 +----------------------------------- "Constructor" +let [p0, p1]: [T0, T1] = e + +let p0: &T0 = &(*e).0, let p1: &T1 = &(*e).1 +--------------------------------------------- "ConstructorRef" +let [p0, p1]: &[T0, T1] = e + +let p0: &mut T0 = &mut (*e).0, let p1: &mut T1 = &mut (*e).1 +------------------------------------------------------------- "ConstructorRef" +let [p0, p1]: &mut [T0, T1] = e + +let [p0, p1]: &T = &**e +----------------------- "ConstructorMultiRef" +let [p0, p1]: &&T = e + +let [p0, p1]: &T = &**e +------------------------- "ConstructorMultiRef" +let [p0, p1]: &&mut T = e + +let [p0, p1]: &T = &**e +------------------------- "ConstructorMultiRef" +let [p0, p1]: &mut &T = e + +let [p0, p1]: &mut T = &mut **e +------------------------------- "ConstructorMultiRef" +let [p0, p1]: &mut &mut T = e + +let p: T = *e +------------------------------------ "Deref(EatOuter)" +let &p: &T = e, e is not a reference + +let p: T = *e +-------------------------------------------- "Deref(EatOuter)" +let &mut p: &mut T = e, e is not a reference + +let p: &T = &*e +---------------- "Deref(EatInner)" +let &p: &&T = &e + +let p: &mut T = &mut *e +------------------------ "Deref(EatInner)" +let &p: &mut &T = &mut e + +let p: &T = &*e +------------------------ "Deref(EatInner)" +let &mut p: &&mut T = &e + +let p: &mut T = &mut *e +-------------------------------- "Deref(EatInner)" +let &mut p: &mut &mut T = &mut e + +let ref x: T = e +------------------ "RefBindingResetBindingMode" +let ref x: &T = &e + +let ref x: T = e +-------------------------- "RefBindingResetBindingMode" +let ref x: &mut T = &mut e + +let ref mut x: T = e +---------------------- "RefBindingResetBindingMode" +let ref mut x: &T = &e + +let ref mut x: T = e +------------------------------ "RefBindingResetBindingMode" +let ref mut x: &mut T = &mut e + +let x: &T = &e +-------------------------------------- "BindingBorrow" +let ref x: T = e, e is not a reference + +let x: &mut T = &mut e +------------------------------------------ "BindingBorrow" +let ref mut x: T = e, e is not a reference + + +------------ "Binding" +let x: T = e + + +-------------------------------------- "Binding" +let mut x: T = e, e is not a reference diff --git a/tests/snapshots/bundle_rules@stable_rust-Expression.snap b/tests/snapshots/bundle_rules@stable_rust-Expression.snap deleted file mode 100644 index f6ef431..0000000 --- a/tests/snapshots/bundle_rules@stable_rust-Expression.snap +++ /dev/null @@ -1,107 +0,0 @@ ---- -source: src/analyses/compute_rules.rs -info: - bundle_name: stable_rust - options: - match_constructor_through_ref: true - eat_inherited_ref_alone: false - inherited_ref_on_ref: EatBoth - fallback_to_outer: "No" - allow_ref_pat_on_ref_mut: false - simplify_deref_mut: true - downgrade_mut_inside_shared: false - eat_mut_inside_shared: true - ref_binding_on_inherited: ResetBindingMode - mut_binding_on_inherited: ResetBindingMode ---- -p0 @ e.0: T0, p1 @ e.1: T1 ---------------------------- "Constructor" -[p0, p1] @ e: [T0, T1] - -p0 @ &(*e).0: &T0, p1 @ &(*e).1: &T1 -------------------------------------- "ConstructorRef" -[p0, p1] @ e: &[T0, T1] - -p0 @ &mut (*e).0: &mut T0, p1 @ &mut (*e).1: &mut T1 ------------------------------------------------------ "ConstructorRef" -[p0, p1] @ e: &mut [T0, T1] - -[p0, p1] @ &**e: &T -------------------- "ConstructorMultiRef" -[p0, p1] @ e: &&T - -[p0, p1] @ &**e: &T ---------------------- "ConstructorMultiRef" -[p0, p1] @ e: &&mut T - -[p0, p1] @ &**e: &T ---------------------- "ConstructorMultiRef" -[p0, p1] @ e: &mut &T - -[p0, p1] @ &mut **e: &mut T ---------------------------- "ConstructorMultiRef" -[p0, p1] @ e: &mut &mut T - -p @ *e: T --------------------------------- "Deref(EatOuter)" -&p @ e: &T, e is not a reference - -p @ *e: T ----------------------------------------- "Deref(EatOuter)" -&mut p @ e: &mut T, e is not a reference - -p @ *e: T ------------- "Deref(EatBoth)" -&p @ &e: &&T - -p @ *e: T --------------------- "Deref(EatBoth)" -&p @ &mut e: &mut &T - -p @ *e: T --------------------- "Deref(EatBoth)" -&mut p @ &e: &&mut T - -p @ *e: T ----------------------------- "Deref(EatBoth)" -&mut p @ &mut e: &mut &mut T - -ref x @ e: T --------------- "RefBindingResetBindingMode" -ref x @ &e: &T - -ref x @ e: T ----------------------- "RefBindingResetBindingMode" -ref x @ &mut e: &mut T - -ref mut x @ e: T ------------------- "RefBindingResetBindingMode" -ref mut x @ &e: &T - -ref mut x @ e: T --------------------------- "RefBindingResetBindingMode" -ref mut x @ &mut e: &mut T - -mut x @ e: T --------------- "MutBindingResetBindingMode" -mut x @ &e: &T - -mut x @ e: T ----------------------- "MutBindingResetBindingMode" -mut x @ &mut e: &mut T - -x @ &e: &T ----------------------------------- "BindingBorrow" -ref x @ e: T, e is not a reference - -x @ &mut e: &mut T --------------------------------------- "BindingBorrow" -ref mut x @ e: T, e is not a reference - - --------- "Binding" -x @ e: T - - ----------------------------------- "Binding" -mut x @ e: T, e is not a reference diff --git a/tests/snapshots/bundle_rules@stable_rust-Let.snap b/tests/snapshots/bundle_rules@stable_rust-Let.snap new file mode 100644 index 0000000..59c8473 --- /dev/null +++ b/tests/snapshots/bundle_rules@stable_rust-Let.snap @@ -0,0 +1,107 @@ +--- +source: src/analyses/compute_rules.rs +info: + bundle_name: stable_rust + options: + match_constructor_through_ref: true + eat_inherited_ref_alone: false + inherited_ref_on_ref: EatBoth + fallback_to_outer: "No" + allow_ref_pat_on_ref_mut: false + simplify_deref_mut: true + downgrade_mut_inside_shared: false + eat_mut_inside_shared: true + ref_binding_on_inherited: ResetBindingMode + mut_binding_on_inherited: ResetBindingMode +--- +let p0: T0 = e.0, let p1: T1 = e.1 +----------------------------------- "Constructor" +let [p0, p1]: [T0, T1] = e + +let p0: &T0 = &(*e).0, let p1: &T1 = &(*e).1 +--------------------------------------------- "ConstructorRef" +let [p0, p1]: &[T0, T1] = e + +let p0: &mut T0 = &mut (*e).0, let p1: &mut T1 = &mut (*e).1 +------------------------------------------------------------- "ConstructorRef" +let [p0, p1]: &mut [T0, T1] = e + +let [p0, p1]: &T = &**e +----------------------- "ConstructorMultiRef" +let [p0, p1]: &&T = e + +let [p0, p1]: &T = &**e +------------------------- "ConstructorMultiRef" +let [p0, p1]: &&mut T = e + +let [p0, p1]: &T = &**e +------------------------- "ConstructorMultiRef" +let [p0, p1]: &mut &T = e + +let [p0, p1]: &mut T = &mut **e +------------------------------- "ConstructorMultiRef" +let [p0, p1]: &mut &mut T = e + +let p: T = *e +------------------------------------ "Deref(EatOuter)" +let &p: &T = e, e is not a reference + +let p: T = *e +-------------------------------------------- "Deref(EatOuter)" +let &mut p: &mut T = e, e is not a reference + +let p: T = *e +---------------- "Deref(EatBoth)" +let &p: &&T = &e + +let p: T = *e +------------------------ "Deref(EatBoth)" +let &p: &mut &T = &mut e + +let p: T = *e +------------------------ "Deref(EatBoth)" +let &mut p: &&mut T = &e + +let p: T = *e +-------------------------------- "Deref(EatBoth)" +let &mut p: &mut &mut T = &mut e + +let ref x: T = e +------------------ "RefBindingResetBindingMode" +let ref x: &T = &e + +let ref x: T = e +-------------------------- "RefBindingResetBindingMode" +let ref x: &mut T = &mut e + +let ref mut x: T = e +---------------------- "RefBindingResetBindingMode" +let ref mut x: &T = &e + +let ref mut x: T = e +------------------------------ "RefBindingResetBindingMode" +let ref mut x: &mut T = &mut e + +let mut x: T = e +------------------ "MutBindingResetBindingMode" +let mut x: &T = &e + +let mut x: T = e +-------------------------- "MutBindingResetBindingMode" +let mut x: &mut T = &mut e + +let x: &T = &e +-------------------------------------- "BindingBorrow" +let ref x: T = e, e is not a reference + +let x: &mut T = &mut e +------------------------------------------ "BindingBorrow" +let ref mut x: T = e, e is not a reference + + +------------ "Binding" +let x: T = e + + +-------------------------------------- "Binding" +let mut x: T = e, e is not a reference diff --git a/tests/snapshots/bundle_rules@stateless-Expression.snap b/tests/snapshots/bundle_rules@stateless-Expression.snap deleted file mode 100644 index d4abb44..0000000 --- a/tests/snapshots/bundle_rules@stateless-Expression.snap +++ /dev/null @@ -1,71 +0,0 @@ ---- -source: src/analyses/compute_rules.rs -info: - bundle_name: stateless - options: - match_constructor_through_ref: true - eat_inherited_ref_alone: true - inherited_ref_on_ref: EatOuter - fallback_to_outer: "No" - allow_ref_pat_on_ref_mut: true - simplify_deref_mut: true - downgrade_mut_inside_shared: false - eat_mut_inside_shared: true - ref_binding_on_inherited: AllocTemporary - mut_binding_on_inherited: Keep ---- -p0 @ e.0: T0, p1 @ e.1: T1 ---------------------------- "Constructor" -[p0, p1] @ e: [T0, T1] - -p0 @ &(*e).0: &T0, p1 @ &(*e).1: &T1 -------------------------------------- "ConstructorRef" -[p0, p1] @ e: &[T0, T1] - -p0 @ &mut (*e).0: &mut T0, p1 @ &mut (*e).1: &mut T1 ------------------------------------------------------ "ConstructorRef" -[p0, p1] @ e: &mut [T0, T1] - -[p0, p1] @ &**e: &T -------------------- "ConstructorMultiRef" -[p0, p1] @ e: &&T - -[p0, p1] @ &**e: &T ---------------------- "ConstructorMultiRef" -[p0, p1] @ e: &&mut T - -[p0, p1] @ &**e: &T ---------------------- "ConstructorMultiRef" -[p0, p1] @ e: &mut &T - -[p0, p1] @ &mut **e: &mut T ---------------------------- "ConstructorMultiRef" -[p0, p1] @ e: &mut &mut T - -p @ *e: T ----------- "Deref" -&p @ e: &T - -p @ *e: T ------------------- "Deref" -&mut p @ e: &mut T - -p @ *&*e: T --------------- "DerefMutWithShared" -&p @ e: &mut T - -x @ &e: &T ------------- "BindingBorrow" -ref x @ e: T - -x @ &mut e: &mut T ------------------- "BindingBorrow" -ref mut x @ e: T - - --------- "Binding" -x @ e: T - - ------------- "Binding" -mut x @ e: T diff --git a/tests/snapshots/bundle_rules@stateless-Let.snap b/tests/snapshots/bundle_rules@stateless-Let.snap new file mode 100644 index 0000000..e105b2c --- /dev/null +++ b/tests/snapshots/bundle_rules@stateless-Let.snap @@ -0,0 +1,71 @@ +--- +source: src/analyses/compute_rules.rs +info: + bundle_name: stateless + options: + match_constructor_through_ref: true + eat_inherited_ref_alone: true + inherited_ref_on_ref: EatOuter + fallback_to_outer: "No" + allow_ref_pat_on_ref_mut: true + simplify_deref_mut: true + downgrade_mut_inside_shared: false + eat_mut_inside_shared: true + ref_binding_on_inherited: AllocTemporary + mut_binding_on_inherited: Keep +--- +let p0: T0 = e.0, let p1: T1 = e.1 +----------------------------------- "Constructor" +let [p0, p1]: [T0, T1] = e + +let p0: &T0 = &(*e).0, let p1: &T1 = &(*e).1 +--------------------------------------------- "ConstructorRef" +let [p0, p1]: &[T0, T1] = e + +let p0: &mut T0 = &mut (*e).0, let p1: &mut T1 = &mut (*e).1 +------------------------------------------------------------- "ConstructorRef" +let [p0, p1]: &mut [T0, T1] = e + +let [p0, p1]: &T = &**e +----------------------- "ConstructorMultiRef" +let [p0, p1]: &&T = e + +let [p0, p1]: &T = &**e +------------------------- "ConstructorMultiRef" +let [p0, p1]: &&mut T = e + +let [p0, p1]: &T = &**e +------------------------- "ConstructorMultiRef" +let [p0, p1]: &mut &T = e + +let [p0, p1]: &mut T = &mut **e +------------------------------- "ConstructorMultiRef" +let [p0, p1]: &mut &mut T = e + +let p: T = *e +-------------- "Deref" +let &p: &T = e + +let p: T = *e +---------------------- "Deref" +let &mut p: &mut T = e + +let p: T = *&*e +------------------ "DerefMutWithShared" +let &p: &mut T = e + +let x: &T = &e +---------------- "BindingBorrow" +let ref x: T = e + +let x: &mut T = &mut e +---------------------- "BindingBorrow" +let ref mut x: T = e + + +------------ "Binding" +let x: T = e + + +---------------- "Binding" +let mut x: T = e diff --git a/tests/snapshots/bundle_rules@structural-Expression.snap b/tests/snapshots/bundle_rules@structural-Let.snap similarity index 51% rename from tests/snapshots/bundle_rules@structural-Expression.snap rename to tests/snapshots/bundle_rules@structural-Let.snap index e81f873..f331611 100644 --- a/tests/snapshots/bundle_rules@structural-Expression.snap +++ b/tests/snapshots/bundle_rules@structural-Let.snap @@ -14,30 +14,30 @@ info: ref_binding_on_inherited: AllocTemporary mut_binding_on_inherited: Keep --- -p0 @ e.0: T0, p1 @ e.1: T1 ---------------------------- "Constructor" -[p0, p1] @ e: [T0, T1] +let p0: T0 = e.0, let p1: T1 = e.1 +----------------------------------- "Constructor" +let [p0, p1]: [T0, T1] = e -p @ *e: T ----------- "Deref" -&p @ e: &T +let p: T = *e +-------------- "Deref" +let &p: &T = e -p @ *e: T ------------------- "Deref" -&mut p @ e: &mut T +let p: T = *e +---------------------- "Deref" +let &mut p: &mut T = e -x @ &e: &T ------------- "BindingBorrow" -ref x @ e: T +let x: &T = &e +---------------- "BindingBorrow" +let ref x: T = e -x @ &mut e: &mut T ------------------- "BindingBorrow" -ref mut x @ e: T +let x: &mut T = &mut e +---------------------- "BindingBorrow" +let ref mut x: T = e --------- "Binding" -x @ e: T +------------ "Binding" +let x: T = e ------------- "Binding" -mut x @ e: T +---------------- "Binding" +let mut x: T = e diff --git a/tests/snapshots/bundle_rules@waffle-Expression.snap b/tests/snapshots/bundle_rules@waffle-Expression.snap deleted file mode 100644 index b85a68d..0000000 --- a/tests/snapshots/bundle_rules@waffle-Expression.snap +++ /dev/null @@ -1,91 +0,0 @@ ---- -source: src/analyses/compute_rules.rs -info: - bundle_name: waffle - options: - match_constructor_through_ref: true - eat_inherited_ref_alone: true - inherited_ref_on_ref: EatOuter - fallback_to_outer: EatOuter - allow_ref_pat_on_ref_mut: false - simplify_deref_mut: true - downgrade_mut_inside_shared: true - eat_mut_inside_shared: true - ref_binding_on_inherited: ResetBindingMode - mut_binding_on_inherited: Error ---- -p0 @ e.0: T0, p1 @ e.1: T1 ---------------------------- "Constructor" -[p0, p1] @ e: [T0, T1] - -p0 @ &(*e).0: &T0, p1 @ &(*e).1: &T1 -------------------------------------- "ConstructorRef" -[p0, p1] @ e: &[T0, T1] - -p0 @ &mut (*e).0: &mut T0, p1 @ &mut (*e).1: &mut T1 ------------------------------------------------------ "ConstructorRef" -[p0, p1] @ e: &mut [T0, T1], e mutable - -p0 @ &(*e).0: &T0, p1 @ &(*e).1: &T1 ----------------------------------------- "ConstructorRef(ForceReadOnly)" -[p0, p1] @ e: &mut [T0, T1], e read-only - -[p0, p1] @ &**e: &T -------------------- "ConstructorMultiRef" -[p0, p1] @ e: &&T - -[p0, p1] @ &**e: &T ---------------------- "ConstructorMultiRef" -[p0, p1] @ e: &&mut T - -[p0, p1] @ &**e: &T ---------------------- "ConstructorMultiRef" -[p0, p1] @ e: &mut &T - -[p0, p1] @ &mut **e: &mut T ------------------------------------- "ConstructorMultiRef" -[p0, p1] @ e: &mut &mut T, e mutable - -[p0, p1] @ &**e: &T --------------------------------------- "ConstructorMultiRef(ForceReadOnly)" -[p0, p1] @ e: &mut &mut T, e read-only - -p @ *e: T ----------- "Deref" -&p @ e: &T - -p @ *e: T ------------------- "Deref" -&mut p @ e: &mut T - -ref x @ e: T --------------- "RefBindingResetBindingMode" -ref x @ &e: &T - -ref x @ e: T ----------------------- "RefBindingResetBindingMode" -ref x @ &mut e: &mut T - -ref mut x @ e: T ------------------- "RefBindingResetBindingMode" -ref mut x @ &e: &T - -ref mut x @ e: T --------------------------- "RefBindingResetBindingMode" -ref mut x @ &mut e: &mut T - -x @ &e: &T ----------------------------------- "BindingBorrow" -ref x @ e: T, e is not a reference - -x @ &mut e: &mut T --------------------------------------- "BindingBorrow" -ref mut x @ e: T, e is not a reference - - --------- "Binding" -x @ e: T - - ----------------------------------- "Binding" -mut x @ e: T, e is not a reference diff --git a/tests/snapshots/bundle_rules@waffle-Let.snap b/tests/snapshots/bundle_rules@waffle-Let.snap new file mode 100644 index 0000000..3109fd7 --- /dev/null +++ b/tests/snapshots/bundle_rules@waffle-Let.snap @@ -0,0 +1,91 @@ +--- +source: src/analyses/compute_rules.rs +info: + bundle_name: waffle + options: + match_constructor_through_ref: true + eat_inherited_ref_alone: true + inherited_ref_on_ref: EatOuter + fallback_to_outer: EatOuter + allow_ref_pat_on_ref_mut: false + simplify_deref_mut: true + downgrade_mut_inside_shared: true + eat_mut_inside_shared: true + ref_binding_on_inherited: ResetBindingMode + mut_binding_on_inherited: Error +--- +let p0: T0 = e.0, let p1: T1 = e.1 +----------------------------------- "Constructor" +let [p0, p1]: [T0, T1] = e + +let p0: &T0 = &(*e).0, let p1: &T1 = &(*e).1 +--------------------------------------------- "ConstructorRef" +let [p0, p1]: &[T0, T1] = e + +let p0: &mut T0 = &mut (*e).0, let p1: &mut T1 = &mut (*e).1 +------------------------------------------------------------- "ConstructorRef" +let [p0, p1]: &mut [T0, T1] = e, e mutable + +let p0: &T0 = &(*e).0, let p1: &T1 = &(*e).1 +--------------------------------------------- "ConstructorRef(ForceReadOnly)" +let [p0, p1]: &mut [T0, T1] = e, e read-only + +let [p0, p1]: &T = &**e +----------------------- "ConstructorMultiRef" +let [p0, p1]: &&T = e + +let [p0, p1]: &T = &**e +------------------------- "ConstructorMultiRef" +let [p0, p1]: &&mut T = e + +let [p0, p1]: &T = &**e +------------------------- "ConstructorMultiRef" +let [p0, p1]: &mut &T = e + +let [p0, p1]: &mut T = &mut **e +---------------------------------------- "ConstructorMultiRef" +let [p0, p1]: &mut &mut T = e, e mutable + +let [p0, p1]: &T = &**e +------------------------------------------ "ConstructorMultiRef(ForceReadOnly)" +let [p0, p1]: &mut &mut T = e, e read-only + +let p: T = *e +-------------- "Deref" +let &p: &T = e + +let p: T = *e +---------------------- "Deref" +let &mut p: &mut T = e + +let ref x: T = e +------------------ "RefBindingResetBindingMode" +let ref x: &T = &e + +let ref x: T = e +-------------------------- "RefBindingResetBindingMode" +let ref x: &mut T = &mut e + +let ref mut x: T = e +---------------------- "RefBindingResetBindingMode" +let ref mut x: &T = &e + +let ref mut x: T = e +------------------------------ "RefBindingResetBindingMode" +let ref mut x: &mut T = &mut e + +let x: &T = &e +-------------------------------------- "BindingBorrow" +let ref x: T = e, e is not a reference + +let x: &mut T = &mut e +------------------------------------------ "BindingBorrow" +let ref mut x: T = e, e is not a reference + + +------------ "Binding" +let x: T = e + + +-------------------------------------- "Binding" +let mut x: T = e, e is not a reference diff --git a/tests/snapshots/generate_design_doc.snap b/tests/snapshots/generate_design_doc.snap index 15b1e91..87c9a0b 100644 --- a/tests/snapshots/generate_design_doc.snap +++ b/tests/snapshots/generate_design_doc.snap @@ -3,11 +3,11 @@ source: tests/generate_design_doc.rs --- - `[&x]: &[&T]` => `x: &T` ```rust -[&x] @ s: &[&T] +let [&x]: &[&T] = s // Applying rule `ConstructorRef` -&x @ &(*s).0: &&T +let &x: &&T = &(*s).0 // Applying rule `Deref` -x @ *&(*s).0: &T +let x: &T = *&(*s).0 // Applying rule `Binding` let x: &T = *&(*s).0 @@ -17,11 +17,11 @@ let x: &T = (*s).0; - `[&x]: &[&mut T]` => `x: &mut T`, move error ```rust -[&x] @ s: &[&mut T] +let [&x]: &[&mut T] = s // Applying rule `ConstructorRef` -&x @ &(*s).0: &&mut T +let &x: &&mut T = &(*s).0 // Applying rule `Deref` -x @ *&(*s).0: &mut T +let x: &mut T = *&(*s).0 // Applying rule `Binding` let x: &mut T = *&(*s).0 @@ -31,13 +31,13 @@ let x: &mut T = (*s).0; // Borrow-check error: CantCopyRefMut - `[&&mut x]: &[&mut T]` => `x: T` ```rust -[&&mut x] @ s: &[&mut T] +let [&&mut x]: &[&mut T] = s // Applying rule `ConstructorRef` -&&mut x @ &(*s).0: &&mut T +let &&mut x: &&mut T = &(*s).0 // Applying rule `Deref` -&mut x @ *&(*s).0: &mut T +let &mut x: &mut T = *&(*s).0 // Applying rule `Deref` -x @ **&(*s).0: T +let x: T = **&(*s).0 // Applying rule `Binding` let x: T = **&(*s).0 @@ -47,11 +47,11 @@ let x: T = *(*s).0; - `[&mut x]: &mut [&T]` => `x: &T` ```rust -[&mut x] @ s: &mut [&T] +let [&mut x]: &mut [&T] = s // Applying rule `ConstructorRef` -&mut x @ &mut (*s).0: &mut &T +let &mut x: &mut &T = &mut (*s).0 // Applying rule `Deref` -x @ *&mut (*s).0: &T +let x: &T = *&mut (*s).0 // Applying rule `Binding` let x: &T = *&mut (*s).0 @@ -61,21 +61,21 @@ let x: &T = (*s).0; - `[&mut x]: &[&mut T]` => type error ```rust -[&mut x] @ s: &[&mut T] +let [&mut x]: &[&mut T] = s // Applying rule `ConstructorRef` -&mut x @ &(*s).0: &&mut T -// Type error for `&mut x @ &(*s).0: &&mut T`: MutabilityMismatch +let &mut x: &&mut T = &(*s).0 +// Type error for `let &mut x: &&mut T = &(*s).0`: MutabilityMismatch ``` - `&[[x]]: &[&mut [T]]` => `x: &mut T`, borrow error ```rust -&[[x]] @ s: &[&mut [T]] +let &[[x]]: &[&mut [T]] = s // Applying rule `Deref` -[[x]] @ *s: [&mut [T]] +let [[x]]: [&mut [T]] = *s // Applying rule `Constructor` -[x] @ (*s).0: &mut [T] +let [x]: &mut [T] = (*s).0 // Applying rule `ConstructorRef` -x @ &mut (*(*s).0).0: &mut T +let x: &mut T = &mut (*(*s).0).0 // Applying rule `Binding` let x: &mut T = &mut (*(*s).0).0 @@ -85,15 +85,15 @@ let x: &mut T = &mut (*(*s).0).0; // Borrow-check error: MutBorrowBehindSharedBo - `&[[&x]]: &[&mut [T]]` => `x: T`, borrow error if we don't use simplification rules ```rust -&[[&x]] @ s: &[&mut [T]] +let &[[&x]]: &[&mut [T]] = s // Applying rule `Deref` -[[&x]] @ *s: [&mut [T]] +let [[&x]]: [&mut [T]] = *s // Applying rule `Constructor` -[&x] @ (*s).0: &mut [T] +let [&x]: &mut [T] = (*s).0 // Applying rule `ConstructorRef` -&x @ &mut (*(*s).0).0: &mut T +let &x: &mut T = &mut (*(*s).0).0 // Applying rule `DerefMutWithShared` -x @ *&*&mut (*(*s).0).0: T +let x: T = *&*&mut (*(*s).0).0 // Applying rule `Binding` let x: T = *&*&mut (*(*s).0).0 @@ -103,15 +103,15 @@ let x: T = (*(*s).0).0; - `&[[&mut x]]: &[&mut [T]]` => `x: T`, borrow error if we don't use simplification rules ```rust -&[[&mut x]] @ s: &[&mut [T]] +let &[[&mut x]]: &[&mut [T]] = s // Applying rule `Deref` -[[&mut x]] @ *s: [&mut [T]] +let [[&mut x]]: [&mut [T]] = *s // Applying rule `Constructor` -[&mut x] @ (*s).0: &mut [T] +let [&mut x]: &mut [T] = (*s).0 // Applying rule `ConstructorRef` -&mut x @ &mut (*(*s).0).0: &mut T +let &mut x: &mut T = &mut (*(*s).0).0 // Applying rule `Deref` -x @ *&mut (*(*s).0).0: T +let x: T = *&mut (*(*s).0).0 // Applying rule `Binding` let x: T = *&mut (*(*s).0).0 @@ -121,13 +121,13 @@ let x: T = (*(*s).0).0; - `[&ref mut x]: &mut [T]` => `x: &mut T`, borrow error ```rust -[&ref mut x] @ s: &mut [T] +let [&ref mut x]: &mut [T] = s // Applying rule `ConstructorRef` -&ref mut x @ &mut (*s).0: &mut T +let &ref mut x: &mut T = &mut (*s).0 // Applying rule `DerefMutWithShared` -ref mut x @ *&*&mut (*s).0: T +let ref mut x: T = *&*&mut (*s).0 // Applying rule `BindingBorrow` -x @ &mut *&*&mut (*s).0: &mut T +let x: &mut T = &mut *&*&mut (*s).0 // Applying rule `Binding` let x: &mut T = &mut *&*&mut (*s).0 diff --git a/tests/snapshots/trace_cli@11515459865669657874.snap b/tests/snapshots/trace_cli@11515459865669657874.snap index e5e2b8c..62ef2bf 100644 --- a/tests/snapshots/trace_cli@11515459865669657874.snap +++ b/tests/snapshots/trace_cli@11515459865669657874.snap @@ -25,8 +25,8 @@ Options are: How to handle a `mut x` binding on an inherited reference - simplify_deref_mut: false | true Whether to simplify `*&mut expr`, which removes some borrow errors -- predicate_style: Expression | SequentUserVisible | SequentInMemory - the style of the typing predicate; not all rulesets can be expressed in all styles, only `Expression` is compatible with all rulesets +- predicate_style: Let | SequentUserVisible | SequentInMemory + the style of the typing predicate; not all rulesets can be expressed in all styles, only `Let` is compatible with all rulesets There also exist some predefined option-bundles. Activate one with `set ` - nadri: A reasonable proposal; like `stateless` but forbids `ref` bindings that create temporaries diff --git a/tests/snapshots/trace_cli@16736406663811832092.snap b/tests/snapshots/trace_cli@16736406663811832092.snap index 7284813..0fb0294 100644 --- a/tests/snapshots/trace_cli@16736406663811832092.snap +++ b/tests/snapshots/trace_cli@16736406663811832092.snap @@ -25,8 +25,8 @@ Options are: How to handle a `mut x` binding on an inherited reference - simplify_deref_mut: false | true Whether to simplify `*&mut expr`, which removes some borrow errors -- predicate_style: Expression | SequentUserVisible | SequentInMemory - the style of the typing predicate; not all rulesets can be expressed in all styles, only `Expression` is compatible with all rulesets +- predicate_style: Let | SequentUserVisible | SequentInMemory + the style of the typing predicate; not all rulesets can be expressed in all styles, only `Let` is compatible with all rulesets There also exist some predefined option-bundles. Activate one with `set ` - nadri: A reasonable proposal; like `stateless` but forbids `ref` bindings that create temporaries diff --git a/tests/snapshots/trace_cli@17515479014605656910.snap b/tests/snapshots/trace_cli@17515479014605656910.snap index e1a816c..3c00d45 100644 --- a/tests/snapshots/trace_cli@17515479014605656910.snap +++ b/tests/snapshots/trace_cli@17515479014605656910.snap @@ -25,8 +25,8 @@ Options are: How to handle a `mut x` binding on an inherited reference - simplify_deref_mut: false | true Whether to simplify `*&mut expr`, which removes some borrow errors -- predicate_style: Expression | SequentUserVisible | SequentInMemory - the style of the typing predicate; not all rulesets can be expressed in all styles, only `Expression` is compatible with all rulesets +- predicate_style: Let | SequentUserVisible | SequentInMemory + the style of the typing predicate; not all rulesets can be expressed in all styles, only `Let` is compatible with all rulesets There also exist some predefined option-bundles. Activate one with `set ` - nadri: A reasonable proposal; like `stateless` but forbids `ref` bindings that create temporaries diff --git a/tests/snapshots/trace_cli@3615762548608754050.snap b/tests/snapshots/trace_cli@3615762548608754050.snap index 9bfc403..7f16dc2 100644 --- a/tests/snapshots/trace_cli@3615762548608754050.snap +++ b/tests/snapshots/trace_cli@3615762548608754050.snap @@ -26,8 +26,8 @@ Options are: How to handle a `mut x` binding on an inherited reference - simplify_deref_mut: false | true Whether to simplify `*&mut expr`, which removes some borrow errors -- predicate_style: Expression | SequentUserVisible | SequentInMemory - the style of the typing predicate; not all rulesets can be expressed in all styles, only `Expression` is compatible with all rulesets +- predicate_style: Let | SequentUserVisible | SequentInMemory + the style of the typing predicate; not all rulesets can be expressed in all styles, only `Let` is compatible with all rulesets There also exist some predefined option-bundles. Activate one with `set ` - nadri: A reasonable proposal; like `stateless` but forbids `ref` bindings that create temporaries diff --git a/tests/snapshots/trace_solver@10689482223350950673.snap b/tests/snapshots/trace_solver@10689482223350950673.snap index 3f0ef07..46eb028 100644 --- a/tests/snapshots/trace_solver@10689482223350950673.snap +++ b/tests/snapshots/trace_solver@10689482223350950673.snap @@ -15,9 +15,9 @@ info: bundle_name: stateless request: "&x: &&mut T" --- -&x @ s: &&mut T +let &x: &&mut T = s // Applying rule `Deref` -x @ *s: &mut T +let x: &mut T = *s // Applying rule `Binding` let x: &mut T = *s diff --git a/tests/snapshots/trace_solver@10807759740653107329.snap b/tests/snapshots/trace_solver@10807759740653107329.snap index 0c6f476..c1c8c31 100644 --- a/tests/snapshots/trace_solver@10807759740653107329.snap +++ b/tests/snapshots/trace_solver@10807759740653107329.snap @@ -15,7 +15,7 @@ info: bundle_name: stateless request: "x: &T" --- -x @ s: &T +let x: &T = s // Applying rule `Binding` let x: &T = s diff --git a/tests/snapshots/trace_solver@10865220688936575713.snap b/tests/snapshots/trace_solver@10865220688936575713.snap index 3a1ddf2..8f1027d 100644 --- a/tests/snapshots/trace_solver@10865220688936575713.snap +++ b/tests/snapshots/trace_solver@10865220688936575713.snap @@ -15,11 +15,11 @@ info: bundle_name: stateless request: "[&x]: &[&T]" --- -[&x] @ s: &[&T] +let [&x]: &[&T] = s // Applying rule `ConstructorRef` -&x @ &(*s).0: &&T +let &x: &&T = &(*s).0 // Applying rule `Deref` -x @ *&(*s).0: &T +let x: &T = *&(*s).0 // Applying rule `Binding` let x: &T = *&(*s).0 diff --git a/tests/snapshots/trace_solver@11182522368387210600.snap b/tests/snapshots/trace_solver@11182522368387210600.snap index dfbd2ee..0097860 100644 --- a/tests/snapshots/trace_solver@11182522368387210600.snap +++ b/tests/snapshots/trace_solver@11182522368387210600.snap @@ -15,7 +15,7 @@ info: bundle_name: ~ request: "[&x]: &[[T]]" --- -[&x] @ s: &[[T]] +let [&x]: &[[T]] = s // Applying rule `ConstructorRef` -&x @ &(*s).0: &[T] -// Type error for `&x @ &(*s).0: &[T]`: InheritedRefIsAlone +let &x: &[T] = &(*s).0 +// Type error for `let &x: &[T] = &(*s).0`: InheritedRefIsAlone diff --git a/tests/snapshots/trace_solver@11476299158837609649.snap b/tests/snapshots/trace_solver@11476299158837609649.snap index 1a9994d..2bab8db 100644 --- a/tests/snapshots/trace_solver@11476299158837609649.snap +++ b/tests/snapshots/trace_solver@11476299158837609649.snap @@ -15,15 +15,15 @@ info: bundle_name: ~ request: "[mut ref x]: &[T]" --- -[mut ref x] @ s: &[T] +let [mut ref x]: &[T] = s // Applying rule `ConstructorRef` -mut ref x @ &(*s).0: &T +let mut ref x: &T = &(*s).0 // Applying rule `BindingBorrow` -mut x @ &&(*s).0: &&T +let mut x: &&T = &&(*s).0 // Applying rule `MutBindingResetBindingMode` -mut x @ &(*s).0: &T +let mut x: &T = &(*s).0 // Applying rule `MutBindingResetBindingMode` -mut x @ (*s).0: T +let mut x: T = (*s).0 // Applying rule `Binding` let mut x: T = (*s).0 diff --git a/tests/snapshots/trace_solver@1232619334709257022.snap b/tests/snapshots/trace_solver@1232619334709257022.snap index 29dd43b..4b23723 100644 --- a/tests/snapshots/trace_solver@1232619334709257022.snap +++ b/tests/snapshots/trace_solver@1232619334709257022.snap @@ -15,11 +15,11 @@ info: bundle_name: stateless request: "&[x]: &&mut [T]" --- -&[x] @ s: &&mut [T] +let &[x]: &&mut [T] = s // Applying rule `Deref` -[x] @ *s: &mut [T] +let [x]: &mut [T] = *s // Applying rule `ConstructorRef` -x @ &mut (**s).0: &mut T +let x: &mut T = &mut (**s).0 // Applying rule `Binding` let x: &mut T = &mut (**s).0 diff --git a/tests/snapshots/trace_solver@12489069223383884812.snap b/tests/snapshots/trace_solver@12489069223383884812.snap index eb34911..0c8540d 100644 --- a/tests/snapshots/trace_solver@12489069223383884812.snap +++ b/tests/snapshots/trace_solver@12489069223383884812.snap @@ -15,11 +15,11 @@ info: bundle_name: stateless request: "&ref x: &T" --- -&ref x @ s: &T +let &ref x: &T = s // Applying rule `Deref` -ref x @ *s: T +let ref x: T = *s // Applying rule `BindingBorrow` -x @ &*s: &T +let x: &T = &*s // Applying rule `Binding` let x: &T = &*s diff --git a/tests/snapshots/trace_solver@12579012087920145589.snap b/tests/snapshots/trace_solver@12579012087920145589.snap index 1b9dd06..eda11be 100644 --- a/tests/snapshots/trace_solver@12579012087920145589.snap +++ b/tests/snapshots/trace_solver@12579012087920145589.snap @@ -15,11 +15,11 @@ info: bundle_name: rfc3627 request: "[&mut x]: &mut [&T]" --- -[&mut x] @ s: &mut [&T] +let [&mut x]: &mut [&T] = s // Applying rule `ConstructorRef` -&mut x @ &mut (*s).0: &mut &T +let &mut x: &mut &T = &mut (*s).0 // Applying rule `Deref(EatInner, FallbackToOuter(EatOuter))` -x @ *&mut (*s).0: &T +let x: &T = *&mut (*s).0 // Applying rule `Binding` let x: &T = *&mut (*s).0 diff --git a/tests/snapshots/trace_solver@12655381257351702186.snap b/tests/snapshots/trace_solver@12655381257351702186.snap index 7455464..48f9859 100644 --- a/tests/snapshots/trace_solver@12655381257351702186.snap +++ b/tests/snapshots/trace_solver@12655381257351702186.snap @@ -15,11 +15,11 @@ info: bundle_name: stateless request: "[x]: &mut &[T]" --- -[x] @ s: &mut &[T] +let [x]: &mut &[T] = s // Applying rule `ConstructorMultiRef` -[x] @ &**s: &[T] +let [x]: &[T] = &**s // Applying rule `ConstructorRef` -x @ &(*&**s).0: &T +let x: &T = &(*&**s).0 // Applying rule `Binding` let x: &T = &(*&**s).0 diff --git a/tests/snapshots/trace_solver@12809305407466269816.snap b/tests/snapshots/trace_solver@12809305407466269816.snap index 208ec21..2b8de01 100644 --- a/tests/snapshots/trace_solver@12809305407466269816.snap +++ b/tests/snapshots/trace_solver@12809305407466269816.snap @@ -15,13 +15,13 @@ info: bundle_name: ~ request: "[ref x]: &mut [T]" --- -[ref x] @ s: &mut [T] +let [ref x]: &mut [T] = s // Applying rule `ConstructorRef` -ref x @ &mut (*s).0: &mut T +let ref x: &mut T = &mut (*s).0 // Applying rule `RefBindingResetBindingMode` -ref x @ (*s).0: T +let ref x: T = (*s).0 // Applying rule `BindingBorrow` -x @ &(*s).0: &T +let x: &T = &(*s).0 // Applying rule `Binding` let x: &T = &(*s).0 diff --git a/tests/snapshots/trace_solver@12915023738034626330.snap b/tests/snapshots/trace_solver@12915023738034626330.snap index 4249d9e..574dc67 100644 --- a/tests/snapshots/trace_solver@12915023738034626330.snap +++ b/tests/snapshots/trace_solver@12915023738034626330.snap @@ -15,13 +15,13 @@ info: bundle_name: stable_rust request: "&[&x]: &&[&&T]" --- -&[&x] @ s: &&[&&T] +let &[&x]: &&[&&T] = s // Applying rule `Deref(EatOuter)` -[&x] @ *s: &[&&T] +let [&x]: &[&&T] = *s // Applying rule `ConstructorRef` -&x @ &(**s).0: &&&T +let &x: &&&T = &(**s).0 // Applying rule `Deref(EatBoth)` -x @ *(**s).0: &T +let x: &T = *(**s).0 // Applying rule `Binding` let x: &T = *(**s).0 diff --git a/tests/snapshots/trace_solver@13290325879162841754.snap b/tests/snapshots/trace_solver@13290325879162841754.snap index 142a12f..709511c 100644 --- a/tests/snapshots/trace_solver@13290325879162841754.snap +++ b/tests/snapshots/trace_solver@13290325879162841754.snap @@ -15,9 +15,9 @@ info: bundle_name: stateless request: "&mut x: &mut &mut T" --- -&mut x @ s: &mut &mut T +let &mut x: &mut &mut T = s // Applying rule `Deref` -x @ *s: &mut T +let x: &mut T = *s // Applying rule `Binding` let x: &mut T = *s diff --git a/tests/snapshots/trace_solver@13548974902697677505.snap b/tests/snapshots/trace_solver@13548974902697677505.snap index ed1c0c1..0af5d0e 100644 --- a/tests/snapshots/trace_solver@13548974902697677505.snap +++ b/tests/snapshots/trace_solver@13548974902697677505.snap @@ -15,9 +15,9 @@ info: bundle_name: stateless request: "[x]: [&mut T]" --- -[x] @ s: [&mut T] +let [x]: [&mut T] = s // Applying rule `Constructor` -x @ s.0: &mut T +let x: &mut T = s.0 // Applying rule `Binding` let x: &mut T = s.0 diff --git a/tests/snapshots/trace_solver@13600049696705482403.snap b/tests/snapshots/trace_solver@13600049696705482403.snap index 952ad0e..feafcdf 100644 --- a/tests/snapshots/trace_solver@13600049696705482403.snap +++ b/tests/snapshots/trace_solver@13600049696705482403.snap @@ -15,13 +15,13 @@ info: bundle_name: ~ request: "[ref mut x]: &mut [T]" --- -[ref mut x] @ s: &mut [T] +let [ref mut x]: &mut [T] = s // Applying rule `ConstructorRef` -ref mut x @ &mut (*s).0: &mut T +let ref mut x: &mut T = &mut (*s).0 // Applying rule `RefBindingResetBindingMode` -ref mut x @ (*s).0: T +let ref mut x: T = (*s).0 // Applying rule `BindingBorrow` -x @ &mut (*s).0: &mut T +let x: &mut T = &mut (*s).0 // Applying rule `Binding` let x: &mut T = &mut (*s).0 diff --git a/tests/snapshots/trace_solver@13765067313599283775.snap b/tests/snapshots/trace_solver@13765067313599283775.snap index c50cbbb..f4731a7 100644 --- a/tests/snapshots/trace_solver@13765067313599283775.snap +++ b/tests/snapshots/trace_solver@13765067313599283775.snap @@ -15,5 +15,5 @@ info: bundle_name: stateless request: "&x: T" --- -&x @ s: T -// Type error for `&x @ s: T`: TypeMismatch +let &x: T = s +// Type error for `let &x: T = s`: TypeMismatch diff --git a/tests/snapshots/trace_solver@14374729414625685518.snap b/tests/snapshots/trace_solver@14374729414625685518.snap index a7c2061..168a1e8 100644 --- a/tests/snapshots/trace_solver@14374729414625685518.snap +++ b/tests/snapshots/trace_solver@14374729414625685518.snap @@ -15,11 +15,11 @@ info: bundle_name: ~ request: "[&mut x]: &mut [&T]" --- -[&mut x] @ s: &mut [&T] +let [&mut x]: &mut [&T] = s // Applying rule `ConstructorRef` -&mut x @ &mut (*s).0: &mut &T +let &mut x: &mut &T = &mut (*s).0 // Applying rule `Deref` -x @ *&mut (*s).0: &T +let x: &T = *&mut (*s).0 // Applying rule `Binding` let x: &T = *&mut (*s).0 diff --git a/tests/snapshots/trace_solver@14448888793953596513.snap b/tests/snapshots/trace_solver@14448888793953596513.snap index 3636d81..c57ded6 100644 --- a/tests/snapshots/trace_solver@14448888793953596513.snap +++ b/tests/snapshots/trace_solver@14448888793953596513.snap @@ -15,11 +15,11 @@ info: bundle_name: ~ request: "&[[&x]]: &[&mut [T]]" --- -&[[&x]] @ s: &[&mut [T]] +let &[[&x]]: &[&mut [T]] = s // Applying rule `Deref` -[[&x]] @ *s: [&mut [T]] +let [[&x]]: [&mut [T]] = *s // Applying rule `Constructor` -[&x] @ (*s).0: &mut [T] +let [&x]: &mut [T] = (*s).0 // Applying rule `ConstructorRef` -&x @ &mut (*(*s).0).0: &mut T -// Type error for `&x @ &mut (*(*s).0).0: &mut T`: MutabilityMismatch +let &x: &mut T = &mut (*(*s).0).0 +// Type error for `let &x: &mut T = &mut (*(*s).0).0`: MutabilityMismatch diff --git a/tests/snapshots/trace_solver@15128702307283337718.snap b/tests/snapshots/trace_solver@15128702307283337718.snap index cf9c9a7..8dfe92f 100644 --- a/tests/snapshots/trace_solver@15128702307283337718.snap +++ b/tests/snapshots/trace_solver@15128702307283337718.snap @@ -15,9 +15,9 @@ info: bundle_name: stateless request: "&x: &T" --- -&x @ s: &T +let &x: &T = s // Applying rule `Deref` -x @ *s: T +let x: T = *s // Applying rule `Binding` let x: T = *s diff --git a/tests/snapshots/trace_solver@15439890668531526513.snap b/tests/snapshots/trace_solver@15439890668531526513.snap index e0d8235..616db13 100644 --- a/tests/snapshots/trace_solver@15439890668531526513.snap +++ b/tests/snapshots/trace_solver@15439890668531526513.snap @@ -15,11 +15,11 @@ info: bundle_name: stable_rust request: "[&x]: &[&T]" --- -[&x] @ s: &[&T] +let [&x]: &[&T] = s // Applying rule `ConstructorRef` -&x @ &(*s).0: &&T +let &x: &&T = &(*s).0 // Applying rule `Deref(EatBoth)` -x @ *(*s).0: T +let x: T = *(*s).0 // Applying rule `Binding` let x: T = *(*s).0 diff --git a/tests/snapshots/trace_solver@15462702399771430733.snap b/tests/snapshots/trace_solver@15462702399771430733.snap index 3fe7a8b..b665732 100644 --- a/tests/snapshots/trace_solver@15462702399771430733.snap +++ b/tests/snapshots/trace_solver@15462702399771430733.snap @@ -15,9 +15,9 @@ info: bundle_name: stateless request: "ref x: T" --- -ref x @ s: T +let ref x: T = s // Applying rule `BindingBorrow` -x @ &s: &T +let x: &T = &s // Applying rule `Binding` let x: &T = &s diff --git a/tests/snapshots/trace_solver@15512033932901969966.snap b/tests/snapshots/trace_solver@15512033932901969966.snap index 1a5ff12..38dd63d 100644 --- a/tests/snapshots/trace_solver@15512033932901969966.snap +++ b/tests/snapshots/trace_solver@15512033932901969966.snap @@ -15,13 +15,13 @@ info: bundle_name: ~ request: "[&ref mut x]: &mut [T]" --- -[&ref mut x] @ s: &mut [T] +let [&ref mut x]: &mut [T] = s // Applying rule `ConstructorRef` -&ref mut x @ &mut (*s).0: &mut T +let &ref mut x: &mut T = &mut (*s).0 // Applying rule `DerefMutWithShared` -ref mut x @ *&*&mut (*s).0: T +let ref mut x: T = *&*&mut (*s).0 // Applying rule `BindingBorrow` -x @ &mut *&*&mut (*s).0: &mut T +let x: &mut T = &mut *&*&mut (*s).0 // Applying rule `Binding` let x: &mut T = &mut *&*&mut (*s).0 diff --git a/tests/snapshots/trace_solver@15592177441332287830.snap b/tests/snapshots/trace_solver@15592177441332287830.snap index 17cd6c7..b14b685 100644 --- a/tests/snapshots/trace_solver@15592177441332287830.snap +++ b/tests/snapshots/trace_solver@15592177441332287830.snap @@ -15,11 +15,11 @@ info: bundle_name: stable_rust request: "[&x]: &[&&T]" --- -[&x] @ s: &[&&T] +let [&x]: &[&&T] = s // Applying rule `ConstructorRef` -&x @ &(*s).0: &&&T +let &x: &&&T = &(*s).0 // Applying rule `Deref(EatBoth)` -x @ *(*s).0: &T +let x: &T = *(*s).0 // Applying rule `Binding` let x: &T = *(*s).0 diff --git a/tests/snapshots/trace_solver@15612835296036204153.snap b/tests/snapshots/trace_solver@15612835296036204153.snap index 94c981b..7bc8ffb 100644 --- a/tests/snapshots/trace_solver@15612835296036204153.snap +++ b/tests/snapshots/trace_solver@15612835296036204153.snap @@ -15,15 +15,15 @@ info: bundle_name: stateless request: "&[[&x]]: &[&mut [T]]" --- -&[[&x]] @ s: &[&mut [T]] +let &[[&x]]: &[&mut [T]] = s // Applying rule `Deref` -[[&x]] @ *s: [&mut [T]] +let [[&x]]: [&mut [T]] = *s // Applying rule `Constructor` -[&x] @ (*s).0: &mut [T] +let [&x]: &mut [T] = (*s).0 // Applying rule `ConstructorRef` -&x @ &mut (*(*s).0).0: &mut T +let &x: &mut T = &mut (*(*s).0).0 // Applying rule `DerefMutWithShared` -x @ *&*&mut (*(*s).0).0: T +let x: T = *&*&mut (*(*s).0).0 // Applying rule `Binding` let x: T = *&*&mut (*(*s).0).0 diff --git a/tests/snapshots/trace_solver@15656926055703108454.snap b/tests/snapshots/trace_solver@15656926055703108454.snap index 60a3fad..f323b53 100644 --- a/tests/snapshots/trace_solver@15656926055703108454.snap +++ b/tests/snapshots/trace_solver@15656926055703108454.snap @@ -15,11 +15,11 @@ info: bundle_name: stateless request: "[ref x]: &mut [T]" --- -[ref x] @ s: &mut [T] +let [ref x]: &mut [T] = s // Applying rule `ConstructorRef` -ref x @ &mut (*s).0: &mut T +let ref x: &mut T = &mut (*s).0 // Applying rule `BindingBorrow` -x @ &&mut (*s).0: &&mut T +let x: &&mut T = &&mut (*s).0 // Applying rule `Binding` let x: &&mut T = &&mut (*s).0 diff --git a/tests/snapshots/trace_solver@15938986002444711672.snap b/tests/snapshots/trace_solver@15938986002444711672.snap index ecdf067..aba38fe 100644 --- a/tests/snapshots/trace_solver@15938986002444711672.snap +++ b/tests/snapshots/trace_solver@15938986002444711672.snap @@ -15,13 +15,13 @@ info: bundle_name: rfc3627 request: "[&mut ref mut x]: &mut [&T]" --- -[&mut ref mut x] @ s: &mut [&T] +let [&mut ref mut x]: &mut [&T] = s // Applying rule `ConstructorRef` -&mut ref mut x @ &mut (*s).0: &mut &T +let &mut ref mut x: &mut &T = &mut (*s).0 // Applying rule `Deref(EatInner, FallbackToOuter(EatOuter))` -ref mut x @ *&mut (*s).0: &T +let ref mut x: &T = *&mut (*s).0 // Applying rule `BindingBorrow` -x @ &mut *&mut (*s).0: &mut &T +let x: &mut &T = &mut *&mut (*s).0 // Applying rule `Binding` let x: &mut &T = &mut *&mut (*s).0 diff --git a/tests/snapshots/trace_solver@16170381397687968370.snap b/tests/snapshots/trace_solver@16170381397687968370.snap index 2a02127..d1bbb6e 100644 --- a/tests/snapshots/trace_solver@16170381397687968370.snap +++ b/tests/snapshots/trace_solver@16170381397687968370.snap @@ -15,16 +15,16 @@ info: bundle_name: stateless request: "[x, &y]: &[T, U]" --- -[x, &y] @ s: &[T, U] +let [x, &y]: &[T, U] = s // Applying rule `ConstructorRef` -x @ &(*s).0: &T -&y @ &(*s).1: &U +let x: &T = &(*s).0 +let &y: &U = &(*s).1 // Applying rule `Binding` let x: &T = &(*s).0 -&y @ &(*s).1: &U +let &y: &U = &(*s).1 // Applying rule `Deref` let x: &T = &(*s).0 -y @ *&(*s).1: U +let y: U = *&(*s).1 // Applying rule `Binding` let x: &T = &(*s).0 let y: U = *&(*s).1 diff --git a/tests/snapshots/trace_solver@16171401228296909003.snap b/tests/snapshots/trace_solver@16171401228296909003.snap index 306931c..ce713bd 100644 --- a/tests/snapshots/trace_solver@16171401228296909003.snap +++ b/tests/snapshots/trace_solver@16171401228296909003.snap @@ -15,11 +15,11 @@ info: bundle_name: stateless request: "[x]: &&mut [T]" --- -[x] @ s: &&mut [T] +let [x]: &&mut [T] = s // Applying rule `ConstructorMultiRef` -[x] @ &**s: &[T] +let [x]: &[T] = &**s // Applying rule `ConstructorRef` -x @ &(*&**s).0: &T +let x: &T = &(*&**s).0 // Applying rule `Binding` let x: &T = &(*&**s).0 diff --git a/tests/snapshots/trace_solver@16448033867548462768.snap b/tests/snapshots/trace_solver@16448033867548462768.snap index 103823e..21004fe 100644 --- a/tests/snapshots/trace_solver@16448033867548462768.snap +++ b/tests/snapshots/trace_solver@16448033867548462768.snap @@ -15,11 +15,11 @@ info: bundle_name: ~ request: "[mut x]: &[T]" --- -[mut x] @ s: &[T] +let [mut x]: &[T] = s // Applying rule `ConstructorRef` -mut x @ &(*s).0: &T +let mut x: &T = &(*s).0 // Applying rule `MutBindingResetBindingMode` -mut x @ (*s).0: T +let mut x: T = (*s).0 // Applying rule `Binding` let mut x: T = (*s).0 diff --git a/tests/snapshots/trace_solver@16449937220397754470.snap b/tests/snapshots/trace_solver@16449937220397754470.snap index 4c242f5..4476d4b 100644 --- a/tests/snapshots/trace_solver@16449937220397754470.snap +++ b/tests/snapshots/trace_solver@16449937220397754470.snap @@ -15,7 +15,7 @@ info: bundle_name: stateless request: "x: T" --- -x @ s: T +let x: T = s // Applying rule `Binding` let x: T = s diff --git a/tests/snapshots/trace_solver@16653908557512966839.snap b/tests/snapshots/trace_solver@16653908557512966839.snap index 596bf82..a6e861a 100644 --- a/tests/snapshots/trace_solver@16653908557512966839.snap +++ b/tests/snapshots/trace_solver@16653908557512966839.snap @@ -15,11 +15,11 @@ info: bundle_name: stateless request: "&ref mut x: &mut T" --- -&ref mut x @ s: &mut T +let &ref mut x: &mut T = s // Applying rule `DerefMutWithShared` -ref mut x @ *&*s: T +let ref mut x: T = *&*s // Applying rule `BindingBorrow` -x @ &mut *&*s: &mut T +let x: &mut T = &mut *&*s // Applying rule `Binding` let x: &mut T = &mut *&*s diff --git a/tests/snapshots/trace_solver@16737089013440978764.snap b/tests/snapshots/trace_solver@16737089013440978764.snap index ceceaf4..e01664e 100644 --- a/tests/snapshots/trace_solver@16737089013440978764.snap +++ b/tests/snapshots/trace_solver@16737089013440978764.snap @@ -15,11 +15,11 @@ info: bundle_name: stateless request: "[&x]: &[&mut T]" --- -[&x] @ s: &[&mut T] +let [&x]: &[&mut T] = s // Applying rule `ConstructorRef` -&x @ &(*s).0: &&mut T +let &x: &&mut T = &(*s).0 // Applying rule `Deref` -x @ *&(*s).0: &mut T +let x: &mut T = *&(*s).0 // Applying rule `Binding` let x: &mut T = *&(*s).0 diff --git a/tests/snapshots/trace_solver@16945717239014280128.snap b/tests/snapshots/trace_solver@16945717239014280128.snap index dec3cd1..d634860 100644 --- a/tests/snapshots/trace_solver@16945717239014280128.snap +++ b/tests/snapshots/trace_solver@16945717239014280128.snap @@ -15,13 +15,13 @@ info: bundle_name: stateless request: "[x, y]: &[T, U]" --- -[x, y] @ s: &[T, U] +let [x, y]: &[T, U] = s // Applying rule `ConstructorRef` -x @ &(*s).0: &T -y @ &(*s).1: &U +let x: &T = &(*s).0 +let y: &U = &(*s).1 // Applying rule `Binding` let x: &T = &(*s).0 -y @ &(*s).1: &U +let y: &U = &(*s).1 // Applying rule `Binding` let x: &T = &(*s).0 let y: &U = &(*s).1 diff --git a/tests/snapshots/trace_solver@17090698843216923551.snap b/tests/snapshots/trace_solver@17090698843216923551.snap index 61fe5d1..b693a38 100644 --- a/tests/snapshots/trace_solver@17090698843216923551.snap +++ b/tests/snapshots/trace_solver@17090698843216923551.snap @@ -15,11 +15,11 @@ info: bundle_name: ~ request: "[&x]: &mut [&T]" --- -[&x] @ s: &mut [&T] +let [&x]: &mut [&T] = s // Applying rule `ConstructorRef` -&x @ &mut (*s).0: &mut &T +let &x: &mut &T = &mut (*s).0 // Applying rule `DerefMutWithShared` -x @ *&*&mut (*s).0: &T +let x: &T = *&*&mut (*s).0 // Applying rule `Binding` let x: &T = *&*&mut (*s).0 diff --git a/tests/snapshots/trace_solver@17267759939354941938.snap b/tests/snapshots/trace_solver@17267759939354941938.snap index 748cb86..aa411ba 100644 --- a/tests/snapshots/trace_solver@17267759939354941938.snap +++ b/tests/snapshots/trace_solver@17267759939354941938.snap @@ -15,13 +15,13 @@ info: bundle_name: rfc3627 request: "[&mut &x]: &[&mut T]" --- -[&mut &x] @ s: &[&mut T] +let [&mut &x]: &[&mut T] = s // Applying rule `ConstructorRef` -&mut &x @ &(*s).0: &&mut T +let &mut &x: &&mut T = &(*s).0 // Applying rule `Deref(EatInner)` -&x @ &*(*s).0: &T +let &x: &T = &*(*s).0 // Applying rule `Deref(EatOuter)` -x @ *&*(*s).0: T +let x: T = *&*(*s).0 // Applying rule `Binding` let x: T = *&*(*s).0 diff --git a/tests/snapshots/trace_solver@17289495115225778387.snap b/tests/snapshots/trace_solver@17289495115225778387.snap index f245955..605e9d3 100644 --- a/tests/snapshots/trace_solver@17289495115225778387.snap +++ b/tests/snapshots/trace_solver@17289495115225778387.snap @@ -15,11 +15,11 @@ info: bundle_name: rfc3627 request: "&[x]: &[&mut T]" --- -&[x] @ s: &[&mut T] +let &[x]: &[&mut T] = s // Applying rule `Deref(EatOuter)` -[x] @ *s: [&mut T] +let [x]: [&mut T] = *s // Applying rule `Constructor` -x @ (*s).0: &mut T +let x: &mut T = (*s).0 // Applying rule `Binding` let x: &mut T = (*s).0 diff --git a/tests/snapshots/trace_solver@17515349904032664008.snap b/tests/snapshots/trace_solver@17515349904032664008.snap index 1d28b7b..be36c70 100644 --- a/tests/snapshots/trace_solver@17515349904032664008.snap +++ b/tests/snapshots/trace_solver@17515349904032664008.snap @@ -15,11 +15,11 @@ info: bundle_name: stateless request: "&mut ref mut x: &mut T" --- -&mut ref mut x @ s: &mut T +let &mut ref mut x: &mut T = s // Applying rule `Deref` -ref mut x @ *s: T +let ref mut x: T = *s // Applying rule `BindingBorrow` -x @ &mut *s: &mut T +let x: &mut T = &mut *s // Applying rule `Binding` let x: &mut T = &mut *s diff --git a/tests/snapshots/trace_solver@17866092833099573719.snap b/tests/snapshots/trace_solver@17866092833099573719.snap index 22c54ec..db3486e 100644 --- a/tests/snapshots/trace_solver@17866092833099573719.snap +++ b/tests/snapshots/trace_solver@17866092833099573719.snap @@ -15,7 +15,7 @@ info: bundle_name: ~ request: "[&mut x]: &[&mut T]" --- -[&mut x] @ s: &[&mut T] +let [&mut x]: &[&mut T] = s // Applying rule `ConstructorRef` -&mut x @ &(*s).0: &&mut T -// Type error for `&mut x @ &(*s).0: &&mut T`: MutabilityMismatch +let &mut x: &&mut T = &(*s).0 +// Type error for `let &mut x: &&mut T = &(*s).0`: MutabilityMismatch diff --git a/tests/snapshots/trace_solver@237299396515860850.snap b/tests/snapshots/trace_solver@237299396515860850.snap index 790366a..e769279 100644 --- a/tests/snapshots/trace_solver@237299396515860850.snap +++ b/tests/snapshots/trace_solver@237299396515860850.snap @@ -15,11 +15,11 @@ info: bundle_name: rfc3627 request: "[&mut x]: &[&mut T]" --- -[&mut x] @ s: &[&mut T] +let [&mut x]: &[&mut T] = s // Applying rule `ConstructorRef` -&mut x @ &(*s).0: &&mut T +let &mut x: &&mut T = &(*s).0 // Applying rule `Deref(EatInner)` -x @ &*(*s).0: &T +let x: &T = &*(*s).0 // Applying rule `Binding` let x: &T = &*(*s).0 diff --git a/tests/snapshots/trace_solver@2477365679140863486.snap b/tests/snapshots/trace_solver@2477365679140863486.snap index 786e84f..5704f49 100644 --- a/tests/snapshots/trace_solver@2477365679140863486.snap +++ b/tests/snapshots/trace_solver@2477365679140863486.snap @@ -15,13 +15,13 @@ info: bundle_name: ~ request: "[ref mut x]: &[T]" --- -[ref mut x] @ s: &[T] +let [ref mut x]: &[T] = s // Applying rule `ConstructorRef` -ref mut x @ &(*s).0: &T +let ref mut x: &T = &(*s).0 // Applying rule `RefBindingResetBindingMode` -ref mut x @ (*s).0: T +let ref mut x: T = (*s).0 // Applying rule `BindingBorrow` -x @ &mut (*s).0: &mut T +let x: &mut T = &mut (*s).0 // Applying rule `Binding` let x: &mut T = &mut (*s).0 diff --git a/tests/snapshots/trace_solver@2841597620561875668.snap b/tests/snapshots/trace_solver@2841597620561875668.snap index 2a3c1c1..3932b94 100644 --- a/tests/snapshots/trace_solver@2841597620561875668.snap +++ b/tests/snapshots/trace_solver@2841597620561875668.snap @@ -15,7 +15,7 @@ info: bundle_name: ~ request: "mut x: &T" --- -mut x @ s: &T +let mut x: &T = s // Applying rule `Binding` let mut x: &T = s diff --git a/tests/snapshots/trace_solver@3151172932322996502.snap b/tests/snapshots/trace_solver@3151172932322996502.snap index 815b1c6..2101979 100644 --- a/tests/snapshots/trace_solver@3151172932322996502.snap +++ b/tests/snapshots/trace_solver@3151172932322996502.snap @@ -15,13 +15,13 @@ info: bundle_name: ~ request: "[ref x]: &[T]" --- -[ref x] @ s: &[T] +let [ref x]: &[T] = s // Applying rule `ConstructorRef` -ref x @ &(*s).0: &T +let ref x: &T = &(*s).0 // Applying rule `RefBindingResetBindingMode` -ref x @ (*s).0: T +let ref x: T = (*s).0 // Applying rule `BindingBorrow` -x @ &(*s).0: &T +let x: &T = &(*s).0 // Applying rule `Binding` let x: &T = &(*s).0 diff --git a/tests/snapshots/trace_solver@3220219759119512955.snap b/tests/snapshots/trace_solver@3220219759119512955.snap index 2a38347..cc885c9 100644 --- a/tests/snapshots/trace_solver@3220219759119512955.snap +++ b/tests/snapshots/trace_solver@3220219759119512955.snap @@ -15,15 +15,15 @@ info: bundle_name: ~ request: "&[[&mut x]]: &[&mut [T]]" --- -&[[&mut x]] @ s: &[&mut [T]] +let &[[&mut x]]: &[&mut [T]] = s // Applying rule `Deref` -[[&mut x]] @ *s: [&mut [T]] +let [[&mut x]]: [&mut [T]] = *s // Applying rule `Constructor` -[&mut x] @ (*s).0: &mut [T] +let [&mut x]: &mut [T] = (*s).0 // Applying rule `ConstructorRef` -&mut x @ &mut (*(*s).0).0: &mut T +let &mut x: &mut T = &mut (*(*s).0).0 // Applying rule `Deref` -x @ *&mut (*(*s).0).0: T +let x: T = *&mut (*(*s).0).0 // Applying rule `Binding` let x: T = *&mut (*(*s).0).0 diff --git a/tests/snapshots/trace_solver@3285859787782258601.snap b/tests/snapshots/trace_solver@3285859787782258601.snap index 819d1f3..dd08d86 100644 --- a/tests/snapshots/trace_solver@3285859787782258601.snap +++ b/tests/snapshots/trace_solver@3285859787782258601.snap @@ -15,7 +15,7 @@ info: bundle_name: stateless request: "x: &mut T" --- -x @ s: &mut T +let x: &mut T = s // Applying rule `Binding` let x: &mut T = s diff --git a/tests/snapshots/trace_solver@3290708013228492874.snap b/tests/snapshots/trace_solver@3290708013228492874.snap index 7c06789..2ab02ca 100644 --- a/tests/snapshots/trace_solver@3290708013228492874.snap +++ b/tests/snapshots/trace_solver@3290708013228492874.snap @@ -15,13 +15,13 @@ info: bundle_name: stable_rust request: "[&x]: &&[&&T]" --- -[&x] @ s: &&[&&T] +let [&x]: &&[&&T] = s // Applying rule `ConstructorMultiRef` -[&x] @ &**s: &[&&T] +let [&x]: &[&&T] = &**s // Applying rule `ConstructorRef` -&x @ &(*&**s).0: &&&T +let &x: &&&T = &(*&**s).0 // Applying rule `Deref(EatBoth)` -x @ *(*&**s).0: &T +let x: &T = *(*&**s).0 // Applying rule `Binding` let x: &T = *(*&**s).0 diff --git a/tests/snapshots/trace_solver@3443663663802049203.snap b/tests/snapshots/trace_solver@3443663663802049203.snap index 29a8b99..00d36ba 100644 --- a/tests/snapshots/trace_solver@3443663663802049203.snap +++ b/tests/snapshots/trace_solver@3443663663802049203.snap @@ -15,13 +15,13 @@ info: bundle_name: stateless request: "[&ref mut x]: &mut [T]" --- -[&ref mut x] @ s: &mut [T] +let [&ref mut x]: &mut [T] = s // Applying rule `ConstructorRef` -&ref mut x @ &mut (*s).0: &mut T +let &ref mut x: &mut T = &mut (*s).0 // Applying rule `DerefMutWithShared` -ref mut x @ *&*&mut (*s).0: T +let ref mut x: T = *&*&mut (*s).0 // Applying rule `BindingBorrow` -x @ &mut *&*&mut (*s).0: &mut T +let x: &mut T = &mut *&*&mut (*s).0 // Applying rule `Binding` let x: &mut T = &mut *&*&mut (*s).0 diff --git a/tests/snapshots/trace_solver@3476826824019878644.snap b/tests/snapshots/trace_solver@3476826824019878644.snap index 07e804c..625db54 100644 --- a/tests/snapshots/trace_solver@3476826824019878644.snap +++ b/tests/snapshots/trace_solver@3476826824019878644.snap @@ -15,11 +15,11 @@ info: bundle_name: waffle request: "&[x]: &[&mut T]" --- -&[x] @ s: &[&mut T] +let &[x]: &[&mut T] = s // Applying rule `Deref` -[x] @ *s: [&mut T] +let [x]: [&mut T] = *s // Applying rule `Constructor` -x @ (*s).0: &mut T +let x: &mut T = (*s).0 // Applying rule `Binding` let x: &mut T = (*s).0 diff --git a/tests/snapshots/trace_solver@3867501932879384401.snap b/tests/snapshots/trace_solver@3867501932879384401.snap index 37014b9..45ae9a4 100644 --- a/tests/snapshots/trace_solver@3867501932879384401.snap +++ b/tests/snapshots/trace_solver@3867501932879384401.snap @@ -15,11 +15,11 @@ info: bundle_name: stateless request: "[ref mut x]: &[T]" --- -[ref mut x] @ s: &[T] +let [ref mut x]: &[T] = s // Applying rule `ConstructorRef` -ref mut x @ &(*s).0: &T +let ref mut x: &T = &(*s).0 // Applying rule `BindingBorrow` -x @ &mut &(*s).0: &mut &T +let x: &mut &T = &mut &(*s).0 // Applying rule `Binding` let x: &mut &T = &mut &(*s).0 diff --git a/tests/snapshots/trace_solver@4026935597091880141.snap b/tests/snapshots/trace_solver@4026935597091880141.snap index c68d02c..87ceb9e 100644 --- a/tests/snapshots/trace_solver@4026935597091880141.snap +++ b/tests/snapshots/trace_solver@4026935597091880141.snap @@ -15,9 +15,9 @@ info: bundle_name: stateless request: "[x]: &[T]" --- -[x] @ s: &[T] +let [x]: &[T] = s // Applying rule `ConstructorRef` -x @ &(*s).0: &T +let x: &T = &(*s).0 // Applying rule `Binding` let x: &T = &(*s).0 diff --git a/tests/snapshots/trace_solver@428329153827781543.snap b/tests/snapshots/trace_solver@428329153827781543.snap index e70cf14..88d7607 100644 --- a/tests/snapshots/trace_solver@428329153827781543.snap +++ b/tests/snapshots/trace_solver@428329153827781543.snap @@ -15,5 +15,5 @@ info: bundle_name: ~ request: "&x: &mut T" --- -&x @ s: &mut T -// Type error for `&x @ s: &mut T`: MutabilityMismatch +let &x: &mut T = s +// Type error for `let &x: &mut T = s`: MutabilityMismatch diff --git a/tests/snapshots/trace_solver@438755831144266037.snap b/tests/snapshots/trace_solver@438755831144266037.snap index 17be8b4..275198e 100644 --- a/tests/snapshots/trace_solver@438755831144266037.snap +++ b/tests/snapshots/trace_solver@438755831144266037.snap @@ -15,11 +15,11 @@ info: bundle_name: stateless request: "&ref mut x: &T" --- -&ref mut x @ s: &T +let &ref mut x: &T = s // Applying rule `Deref` -ref mut x @ *s: T +let ref mut x: T = *s // Applying rule `BindingBorrow` -x @ &mut *s: &mut T +let x: &mut T = &mut *s // Applying rule `Binding` let x: &mut T = &mut *s diff --git a/tests/snapshots/trace_solver@4537001535850509439.snap b/tests/snapshots/trace_solver@4537001535850509439.snap index fae53b3..191bc27 100644 --- a/tests/snapshots/trace_solver@4537001535850509439.snap +++ b/tests/snapshots/trace_solver@4537001535850509439.snap @@ -15,11 +15,11 @@ info: bundle_name: rfc3627 request: "[&x]: &mut [&T]" --- -[&x] @ s: &mut [&T] +let [&x]: &mut [&T] = s // Applying rule `ConstructorRef` -&x @ &mut (*s).0: &mut &T +let &x: &mut &T = &mut (*s).0 // Applying rule `Deref(EatInner, ForceReadOnly)` -x @ &*(*s).0: &T +let x: &T = &*(*s).0 // Applying rule `Binding` let x: &T = &*(*s).0 diff --git a/tests/snapshots/trace_solver@4565781073236055611.snap b/tests/snapshots/trace_solver@4565781073236055611.snap index e6ffc19..20079ad 100644 --- a/tests/snapshots/trace_solver@4565781073236055611.snap +++ b/tests/snapshots/trace_solver@4565781073236055611.snap @@ -15,7 +15,7 @@ info: bundle_name: rfc3627 request: "[mut x]: &[T]" --- -[mut x] @ s: &[T] +let [mut x]: &[T] = s // Applying rule `ConstructorRef` -mut x @ &(*s).0: &T -// Type error for `mut x @ &(*s).0: &T`: MutBindingOnInhRef +let mut x: &T = &(*s).0 +// Type error for `let mut x: &T = &(*s).0`: MutBindingOnInhRef diff --git a/tests/snapshots/trace_solver@4725884600475691186.snap b/tests/snapshots/trace_solver@4725884600475691186.snap index d772a60..1da0c48 100644 --- a/tests/snapshots/trace_solver@4725884600475691186.snap +++ b/tests/snapshots/trace_solver@4725884600475691186.snap @@ -15,7 +15,7 @@ info: bundle_name: stable_rust request: "[&x]: &[T]" --- -[&x] @ s: &[T] +let [&x]: &[T] = s // Applying rule `ConstructorRef` -&x @ &(*s).0: &T -// Type error for `&x @ &(*s).0: &T`: InheritedRefIsAlone +let &x: &T = &(*s).0 +// Type error for `let &x: &T = &(*s).0`: InheritedRefIsAlone diff --git a/tests/snapshots/trace_solver@4768981282991870779.snap b/tests/snapshots/trace_solver@4768981282991870779.snap index a08cf4d..c2d5f9c 100644 --- a/tests/snapshots/trace_solver@4768981282991870779.snap +++ b/tests/snapshots/trace_solver@4768981282991870779.snap @@ -15,11 +15,11 @@ info: bundle_name: rfc3627 request: "&[x]: &&mut [T]" --- -&[x] @ s: &&mut [T] +let &[x]: &&mut [T] = s // Applying rule `Deref(EatOuter)` -[x] @ *s: &mut [T] +let [x]: &mut [T] = *s // Applying rule `ConstructorRef(ForceReadOnly)` -x @ &(**s).0: &T +let x: &T = &(**s).0 // Applying rule `Binding` let x: &T = &(**s).0 diff --git a/tests/snapshots/trace_solver@5271415905759418211.snap b/tests/snapshots/trace_solver@5271415905759418211.snap index 810a801..5ed7be2 100644 --- a/tests/snapshots/trace_solver@5271415905759418211.snap +++ b/tests/snapshots/trace_solver@5271415905759418211.snap @@ -15,11 +15,11 @@ info: bundle_name: stateless request: "[x]: &mut &mut [T]" --- -[x] @ s: &mut &mut [T] +let [x]: &mut &mut [T] = s // Applying rule `ConstructorMultiRef` -[x] @ &mut **s: &mut [T] +let [x]: &mut [T] = &mut **s // Applying rule `ConstructorRef` -x @ &mut (*&mut **s).0: &mut T +let x: &mut T = &mut (*&mut **s).0 // Applying rule `Binding` let x: &mut T = &mut (*&mut **s).0 diff --git a/tests/snapshots/trace_solver@5505637041493281647.snap b/tests/snapshots/trace_solver@5505637041493281647.snap index 72a9465..1283c8e 100644 --- a/tests/snapshots/trace_solver@5505637041493281647.snap +++ b/tests/snapshots/trace_solver@5505637041493281647.snap @@ -15,11 +15,11 @@ info: bundle_name: stateless request: "&[x]: &[&mut T]" --- -&[x] @ s: &[&mut T] +let &[x]: &[&mut T] = s // Applying rule `Deref` -[x] @ *s: [&mut T] +let [x]: [&mut T] = *s // Applying rule `Constructor` -x @ (*s).0: &mut T +let x: &mut T = (*s).0 // Applying rule `Binding` let x: &mut T = (*s).0 diff --git a/tests/snapshots/trace_solver@5540120967807313941.snap b/tests/snapshots/trace_solver@5540120967807313941.snap index 2d719b7..c8bc0fb 100644 --- a/tests/snapshots/trace_solver@5540120967807313941.snap +++ b/tests/snapshots/trace_solver@5540120967807313941.snap @@ -15,11 +15,11 @@ info: bundle_name: stateless request: "[ref mut x]: &mut [T]" --- -[ref mut x] @ s: &mut [T] +let [ref mut x]: &mut [T] = s // Applying rule `ConstructorRef` -ref mut x @ &mut (*s).0: &mut T +let ref mut x: &mut T = &mut (*s).0 // Applying rule `BindingBorrow` -x @ &mut &mut (*s).0: &mut &mut T +let x: &mut &mut T = &mut &mut (*s).0 // Applying rule `Binding` let x: &mut &mut T = &mut &mut (*s).0 diff --git a/tests/snapshots/trace_solver@5681143726589435347.snap b/tests/snapshots/trace_solver@5681143726589435347.snap index 7e3a597..d7efbba 100644 --- a/tests/snapshots/trace_solver@5681143726589435347.snap +++ b/tests/snapshots/trace_solver@5681143726589435347.snap @@ -15,9 +15,9 @@ info: bundle_name: stateless request: "ref mut x: T" --- -ref mut x @ s: T +let ref mut x: T = s // Applying rule `BindingBorrow` -x @ &mut s: &mut T +let x: &mut T = &mut s // Applying rule `Binding` let x: &mut T = &mut s diff --git a/tests/snapshots/trace_solver@6251645678868280809.snap b/tests/snapshots/trace_solver@6251645678868280809.snap index 3cf12f7..3a78e14 100644 --- a/tests/snapshots/trace_solver@6251645678868280809.snap +++ b/tests/snapshots/trace_solver@6251645678868280809.snap @@ -15,13 +15,13 @@ info: bundle_name: stateless request: "&[[x]]: &[&mut [T]]" --- -&[[x]] @ s: &[&mut [T]] +let &[[x]]: &[&mut [T]] = s // Applying rule `Deref` -[[x]] @ *s: [&mut [T]] +let [[x]]: [&mut [T]] = *s // Applying rule `Constructor` -[x] @ (*s).0: &mut [T] +let [x]: &mut [T] = (*s).0 // Applying rule `ConstructorRef` -x @ &mut (*(*s).0).0: &mut T +let x: &mut T = &mut (*(*s).0).0 // Applying rule `Binding` let x: &mut T = &mut (*(*s).0).0 diff --git a/tests/snapshots/trace_solver@6700969450215207705.snap b/tests/snapshots/trace_solver@6700969450215207705.snap index 2b9c06e..28c4142 100644 --- a/tests/snapshots/trace_solver@6700969450215207705.snap +++ b/tests/snapshots/trace_solver@6700969450215207705.snap @@ -15,13 +15,13 @@ info: bundle_name: stateless request: "[x]: &&&[T]" --- -[x] @ s: &&&[T] +let [x]: &&&[T] = s // Applying rule `ConstructorMultiRef` -[x] @ &**s: &&[T] +let [x]: &&[T] = &**s // Applying rule `ConstructorMultiRef` -[x] @ &**&**s: &[T] +let [x]: &[T] = &**&**s // Applying rule `ConstructorRef` -x @ &(*&**&**s).0: &T +let x: &T = &(*&**&**s).0 // Applying rule `Binding` let x: &T = &(*&**&**s).0 diff --git a/tests/snapshots/trace_solver@7838488033653042879.snap b/tests/snapshots/trace_solver@7838488033653042879.snap index 8b4bdc2..ecf5215 100644 --- a/tests/snapshots/trace_solver@7838488033653042879.snap +++ b/tests/snapshots/trace_solver@7838488033653042879.snap @@ -15,11 +15,11 @@ info: bundle_name: stateless request: "[ref x]: &[T]" --- -[ref x] @ s: &[T] +let [ref x]: &[T] = s // Applying rule `ConstructorRef` -ref x @ &(*s).0: &T +let ref x: &T = &(*s).0 // Applying rule `BindingBorrow` -x @ &&(*s).0: &&T +let x: &&T = &&(*s).0 // Applying rule `Binding` let x: &&T = &&(*s).0 diff --git a/tests/snapshots/trace_solver@7899415904620908758.snap b/tests/snapshots/trace_solver@7899415904620908758.snap index 1ecb83a..12d28fc 100644 --- a/tests/snapshots/trace_solver@7899415904620908758.snap +++ b/tests/snapshots/trace_solver@7899415904620908758.snap @@ -15,13 +15,13 @@ info: bundle_name: stateless request: "[&mut ref x]: [&mut T]" --- -[&mut ref x] @ s: [&mut T] +let [&mut ref x]: [&mut T] = s // Applying rule `Constructor` -&mut ref x @ s.0: &mut T +let &mut ref x: &mut T = s.0 // Applying rule `Deref` -ref x @ *s.0: T +let ref x: T = *s.0 // Applying rule `BindingBorrow` -x @ &*s.0: &T +let x: &T = &*s.0 // Applying rule `Binding` let x: &T = &*s.0 diff --git a/tests/snapshots/trace_solver@8098284767807828361.snap b/tests/snapshots/trace_solver@8098284767807828361.snap index 3179167..d8e38a2 100644 --- a/tests/snapshots/trace_solver@8098284767807828361.snap +++ b/tests/snapshots/trace_solver@8098284767807828361.snap @@ -15,13 +15,13 @@ info: bundle_name: stateless request: "[&&mut x]: &[&mut T]" --- -[&&mut x] @ s: &[&mut T] +let [&&mut x]: &[&mut T] = s // Applying rule `ConstructorRef` -&&mut x @ &(*s).0: &&mut T +let &&mut x: &&mut T = &(*s).0 // Applying rule `Deref` -&mut x @ *&(*s).0: &mut T +let &mut x: &mut T = *&(*s).0 // Applying rule `Deref` -x @ **&(*s).0: T +let x: T = **&(*s).0 // Applying rule `Binding` let x: T = **&(*s).0 diff --git a/tests/snapshots/trace_solver@8513047613916112359.snap b/tests/snapshots/trace_solver@8513047613916112359.snap index a866a13..c87946e 100644 --- a/tests/snapshots/trace_solver@8513047613916112359.snap +++ b/tests/snapshots/trace_solver@8513047613916112359.snap @@ -15,15 +15,15 @@ info: bundle_name: ~ request: "&[[&x]]: &[&mut [T]]" --- -&[[&x]] @ s: &[&mut [T]] +let &[[&x]]: &[&mut [T]] = s // Applying rule `Deref` -[[&x]] @ *s: [&mut [T]] +let [[&x]]: [&mut [T]] = *s // Applying rule `Constructor` -[&x] @ (*s).0: &mut [T] +let [&x]: &mut [T] = (*s).0 // Applying rule `ConstructorRef` -&x @ &mut (*(*s).0).0: &mut T +let &x: &mut T = &mut (*(*s).0).0 // Applying rule `DerefMutWithShared` -x @ *&*&mut (*(*s).0).0: T +let x: T = *&*&mut (*(*s).0).0 // Applying rule `Binding` let x: T = *&*&mut (*(*s).0).0 diff --git a/tests/snapshots/trace_solver@8660489408052045213.snap b/tests/snapshots/trace_solver@8660489408052045213.snap index 73f65c2..5b5b6a7 100644 --- a/tests/snapshots/trace_solver@8660489408052045213.snap +++ b/tests/snapshots/trace_solver@8660489408052045213.snap @@ -15,11 +15,11 @@ info: bundle_name: stateless request: "&mut ref x: &mut T" --- -&mut ref x @ s: &mut T +let &mut ref x: &mut T = s // Applying rule `Deref` -ref x @ *s: T +let ref x: T = *s // Applying rule `BindingBorrow` -x @ &*s: &T +let x: &T = &*s // Applying rule `Binding` let x: &T = &*s diff --git a/tests/snapshots/trace_solver@8733002960365789612.snap b/tests/snapshots/trace_solver@8733002960365789612.snap index 0cc1bd1..e9af480 100644 --- a/tests/snapshots/trace_solver@8733002960365789612.snap +++ b/tests/snapshots/trace_solver@8733002960365789612.snap @@ -15,7 +15,7 @@ info: bundle_name: stateless request: "[&mut x]: &[&mut T]" --- -[&mut x] @ s: &[&mut T] +let [&mut x]: &[&mut T] = s // Applying rule `ConstructorRef` -&mut x @ &(*s).0: &&mut T -// Type error for `&mut x @ &(*s).0: &&mut T`: MutabilityMismatch +let &mut x: &&mut T = &(*s).0 +// Type error for `let &mut x: &&mut T = &(*s).0`: MutabilityMismatch diff --git a/tests/snapshots/trace_solver@8759904168187478288.snap b/tests/snapshots/trace_solver@8759904168187478288.snap index a7d90b1..240d58b 100644 --- a/tests/snapshots/trace_solver@8759904168187478288.snap +++ b/tests/snapshots/trace_solver@8759904168187478288.snap @@ -15,9 +15,9 @@ info: bundle_name: stateless request: "mut ref mut x: T" --- -mut ref mut x @ s: T +let mut ref mut x: T = s // Applying rule `BindingBorrow` -mut x @ &mut s: &mut T +let mut x: &mut T = &mut s // Applying rule `Binding` let mut x: &mut T = &mut s diff --git a/tests/snapshots/trace_solver@9203076157971134756.snap b/tests/snapshots/trace_solver@9203076157971134756.snap index ee0bae3..c81b81a 100644 --- a/tests/snapshots/trace_solver@9203076157971134756.snap +++ b/tests/snapshots/trace_solver@9203076157971134756.snap @@ -15,15 +15,15 @@ info: bundle_name: stateless request: "&[[&mut x]]: &[&mut [T]]" --- -&[[&mut x]] @ s: &[&mut [T]] +let &[[&mut x]]: &[&mut [T]] = s // Applying rule `Deref` -[[&mut x]] @ *s: [&mut [T]] +let [[&mut x]]: [&mut [T]] = *s // Applying rule `Constructor` -[&mut x] @ (*s).0: &mut [T] +let [&mut x]: &mut [T] = (*s).0 // Applying rule `ConstructorRef` -&mut x @ &mut (*(*s).0).0: &mut T +let &mut x: &mut T = &mut (*(*s).0).0 // Applying rule `Deref` -x @ *&mut (*(*s).0).0: T +let x: T = *&mut (*(*s).0).0 // Applying rule `Binding` let x: T = *&mut (*(*s).0).0 diff --git a/tests/snapshots/trace_solver@9601516325954291897.snap b/tests/snapshots/trace_solver@9601516325954291897.snap index f5e7cd3..921107e 100644 --- a/tests/snapshots/trace_solver@9601516325954291897.snap +++ b/tests/snapshots/trace_solver@9601516325954291897.snap @@ -15,11 +15,11 @@ info: bundle_name: stateless request: "[&mut x]: &mut [&T]" --- -[&mut x] @ s: &mut [&T] +let [&mut x]: &mut [&T] = s // Applying rule `ConstructorRef` -&mut x @ &mut (*s).0: &mut &T +let &mut x: &mut &T = &mut (*s).0 // Applying rule `Deref` -x @ *&mut (*s).0: &T +let x: &T = *&mut (*s).0 // Applying rule `Binding` let x: &T = *&mut (*s).0 diff --git a/tests/snapshots/trace_solver@9761305899459510603.snap b/tests/snapshots/trace_solver@9761305899459510603.snap index 9e3e2d6..b842c67 100644 --- a/tests/snapshots/trace_solver@9761305899459510603.snap +++ b/tests/snapshots/trace_solver@9761305899459510603.snap @@ -15,11 +15,11 @@ info: bundle_name: stateless request: "[&x]: &mut [&T]" --- -[&x] @ s: &mut [&T] +let [&x]: &mut [&T] = s // Applying rule `ConstructorRef` -&x @ &mut (*s).0: &mut &T +let &x: &mut &T = &mut (*s).0 // Applying rule `DerefMutWithShared` -x @ *&*&mut (*s).0: &T +let x: &T = *&*&mut (*s).0 // Applying rule `Binding` let x: &T = *&*&mut (*s).0 diff --git a/tests/trace_solver.rs b/tests/trace_solver.rs index 7330e26..32929b0 100644 --- a/tests/trace_solver.rs +++ b/tests/trace_solver.rs @@ -33,7 +33,7 @@ fn trace_solver(test_case: TestCase<'_>) -> anyhow::Result<()> { let a = &Arenas::default(); let req = TypingRequest::parse(a, &test_case.request).unwrap(); let (trace, _) = - typing_rust_patterns::trace_solver(a, req, test_case.options, PredicateStyle::Expression); + typing_rust_patterns::trace_solver(a, req, test_case.options, PredicateStyle::Let); insta::with_settings!({ prepend_module_to_snapshot => false, omit_expression => true, diff --git a/web/src/components/Solver.jsx b/web/src/components/Solver.jsx index 640d66a..3847892 100644 --- a/web/src/components/Solver.jsx +++ b/web/src/components/Solver.jsx @@ -98,7 +98,7 @@ export function Help({show, setShow, style}) { } -const availableStyles = ['UserVisible', 'InMemory', 'Expression']; +const availableStyles = ['UserVisible', 'InMemory', 'Let']; export function MainNavBar({compare, setCompare, style, setStyleName, styleMap}) { const navigate = useNavigate() @@ -408,7 +408,7 @@ export default function Solver() { const [optionsRight, setOptionsRight] = useStateInParams(sp, 'opts2', RuleSetJs.from_bundle_name('rfc3627', 'rfc3627'), RuleSetJs.decode, (o) => o.encode()); const [inputQuery, setInputQuery] = useStateInParams(sp, 'q', "[&x]: &mut [&T]"); const [mode, setMode] = useStateInParams(sp, 'mode', 'typechecker', validateIn(['typechecker', 'rules', 'compare'])); - const [styleName, setStyleName] = useStateInParams(sp, 'style', 'UserVisible', validateIn(['UserVisible', 'InMemory', 'Expression', 'Sequent', 'SequentBindingMode'])); + const [styleName, setStyleName] = useStateInParams(sp, 'style', 'UserVisible', validateIn(['UserVisible', 'InMemory', 'Let', 'Sequent', 'SequentBindingMode'])); // Map from style name to predicate style. Takes into account the selected // options to hide parts of the predicate we don't care about.