diff --git a/grammar.js b/grammar.js index 1907a3a3..d660238f 100644 --- a/grammar.js +++ b/grammar.js @@ -529,7 +529,12 @@ module.exports = grammar({ trait_bounds: $ => seq( ':', sepBy1('+', choice( - $._type, + prec(1, seq( + optional("~const"), + optional("async"), + optional("!"), + $._type + )), $.lifetime, $.higher_ranked_trait_bound, )), diff --git a/test/corpus/declarations.txt b/test/corpus/declarations.txt index 77195e86..de9b13c0 100644 --- a/test/corpus/declarations.txt +++ b/test/corpus/declarations.txt @@ -1909,6 +1909,35 @@ impl> HasNodeId for T {} (type_identifier) (declaration_list))) +================================================================================ +Trait bounds with modifiers +================================================================================ + +impl Foo for Bar {} +impl Foo for Bar {} + +-------------------------------------------------------------------------------- + +(source_file + (impl_item + (type_parameters + (type_parameter + (type_identifier) + (trait_bounds + (type_identifier)))) + (type_identifier) + (type_identifier) + (declaration_list)) + (impl_item + (type_parameters + (type_parameter + (type_identifier) + (trait_bounds + (type_identifier)))) + (type_identifier) + (type_identifier) + (declaration_list))) + ================================================================================ Macro invocations inside trait declarations ================================================================================