diff --git a/CHANGELOG.md b/CHANGELOG.md index 1074925..ada49d6 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,8 @@ # Unreleased +* Support generic argument binding + - Useful for associated type constraints, such as `trait Foo: Bar>` + # v0.3.0 * Support attributes on `broadcast group` items diff --git a/src/lib.rs b/src/lib.rs index 6e47294..b08db3f 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -793,6 +793,7 @@ fn to_doc<'a>( Rule::assoc_type_arg => unsupported(pair), Rule::lifetime_arg => map_to_doc(ctx, arena, pair), Rule::const_arg => unsupported(pair), + Rule::generic_args_binding => map_to_doc(ctx, arena, pair), Rule::macro_call => s, Rule::macro_call_stmt => s, Rule::punctuation => map_to_doc(ctx, arena, pair), diff --git a/src/verus.pest b/src/verus.pest index b0a1c43..c5c4427 100644 --- a/src/verus.pest +++ b/src/verus.pest @@ -453,7 +453,8 @@ generic_arg_list_with_colons = { } generic_arg = { - type_arg + generic_args_binding + | type_arg | assoc_type_arg | lifetime_arg | const_arg @@ -477,6 +478,10 @@ const_arg = { expr } +generic_args_binding = { + identifier ~ eq_str ~ type +} + // TODO: Special handling for the calc! and state_machine! macros? macro_call = { attr* ~ path ~ bang_str ~ !"=" ~ token_tree diff --git a/tests/verus-consistency.rs b/tests/verus-consistency.rs index fcc9db4..58e7ef9 100644 --- a/tests/verus-consistency.rs +++ b/tests/verus-consistency.rs @@ -2094,3 +2094,22 @@ proof fn b() } // verus! "###); } + +#[test] +fn verus_generic_arg_binding() { + let file = r###" +verus! { +pub trait Foo: View> { +} +} // verus! +"###; + assert_snapshot!(parse_and_format(file).unwrap(), @r###" + verus! { + + pub trait Foo: View> { + + } + + } // verus! + "###); +}