Skip to content

Commit 35723d0

Browse files
committed
Add tests for impl trait with use bound
1 parent ca2c76d commit 35723d0

File tree

1 file changed

+87
-1
lines changed

1 file changed

+87
-1
lines changed

Rust/tests/syntax_test_generics.rs

Lines changed: 87 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -442,8 +442,94 @@ fn function<const N: u16>() {
442442
// ^^^ storage.type.numeric
443443
let b: Byte<b'a'>;
444444
// ^^^^^^ meta.function meta.block meta.generic
445-
// ^^^^ string.quoted.single.rust
445+
// ^^^^ string.quoted.single
446446
// ^ storage.type.string
447447
// ^ punctuation.definition.string.begin
448448
// ^ punctuation.definition.string.end
449449
}
450+
451+
fn impl_trait_return_use_bound<'a>() -> impl for<'b> Trait1<Item = impl Trait2<'a> + use<'a>> {}
452+
// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ meta.function meta.function.return-type
453+
// ^^ punctuation.separator
454+
// ^^^^ storage.type.impl
455+
// ^^^ keyword.other
456+
// ^ meta.generic punctuation.definition.generic.begin
457+
// ^ meta.generic punctuation.definition.generic.end
458+
// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ meta.generic
459+
// ^ meta.generic punctuation.definition.generic.begin
460+
// ^ meta.generic keyword.operator
461+
// ^^^^ meta.generic storage.type.impl
462+
// ^^^^ meta.generic meta.generic
463+
// ^ punctuation.definition.generic.begin
464+
// ^^ storage.modifier.lifetime
465+
// ^ punctuation.definition.generic.end
466+
// ^ keyword.operator
467+
// ^^^^ meta.generic meta.generic
468+
// ^ punctuation.definition.generic.begin
469+
// ^^ storage.modifier.lifetime
470+
// ^ punctuation.definition.generic.end
471+
// ^ punctuation.definition.generic.end
472+
473+
fn impl_trait_use<'a, foo>() -> impl Trait1 + use<'a, Self, foo> {}
474+
// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ meta.function meta.function.return-type
475+
// ^^^^^^^^^^^^^^^ meta.generic
476+
// ^ punctuation.definition.generic.begin
477+
// ^^ storage.modifier.lifetime
478+
// ^ punctuation.separator
479+
// ^^^^ storage.type
480+
// ^ punctuation.separator
481+
// ^ punctuation.definition.generic.end
482+
483+
fn impl_trait_return1<'a, 'b>() -> impl Trait<&'a u8, Ty = impl Sized + 'b> {}
484+
// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ meta.function meta.function.return-type
485+
// ^^ punctuation.separator
486+
// ^^^^ storage.type.impl
487+
// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ meta.generic
488+
// ^ punctuation.definition.generic.begin
489+
// ^ keyword.operator
490+
// ^^ storage.modifier.lifetime
491+
// ^^ storage.type
492+
// ^ punctuation.separator
493+
// ^ keyword.operator
494+
// ^^^^ storage.type.impl
495+
// ^^^^^ support.type
496+
// ^ keyword.operator
497+
// ^^ storage.modifier.lifetime
498+
// ^ punctuation.definition.generic.end
499+
fn impl_trait_return2() -> impl Debug + 'a {}
500+
// ^^^^^^^^^^^^^^^^^^ meta.function meta.function.return-type
501+
// ^^^^ storage.type.impl
502+
// ^ keyword.operator
503+
// ^^ storage.modifier.lifetime
504+
505+
fn impl_trait_param(x: impl FnOnce(&[u8]) -> &[u8]) {}
506+
// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ meta.function meta.function.parameters
507+
// ^^^^ storage.type.impl
508+
// ^^^^^^ support.type
509+
// ^ meta.group punctuation.section.group.begin
510+
// ^ meta.group keyword.operator
511+
// ^ meta.group punctuation.section.group.begin
512+
// ^^ meta.group storage.type
513+
// ^^ meta.group punctuation.section.group.end
514+
// ^^^^^^^^ meta.function meta.function.parameters meta.function.return-type
515+
// ^^ punctuation.separator
516+
// ^ meta.function.parameters keyword.operator
517+
// ^ meta.function.parameters punctuation.section.group.begin
518+
// ^^ meta.function.parameters storage.type
519+
// ^ meta.function.parameters punctuation.section.group.end
520+
521+
522+
fn impl_trait_with_plus() -> impl Iterator<Item = hir::GenericParam<'hir>> + Captures<'a> + Captures<'s> {}
523+
// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ meta.function meta.function.return-type
524+
// ^^^^ storage.type.impl
525+
// ^^^^^^^^ support.type
526+
// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ meta.generic
527+
// ^ keyword.operator
528+
// ^^^^ storage.modifier.lifetime
529+
// ^ keyword.operator
530+
// ^^^^ meta.generic
531+
// ^^ storage.modifier.lifetime
532+
// ^ keyword.operator
533+
// ^^^^ meta.generic
534+
// ^^ storage.modifier.lifetime
535+

0 commit comments

Comments
 (0)