Skip to content

Commit e8999c1

Browse files
committed
Add tests for impl trait with use bound
1 parent ea0d68c commit e8999c1

File tree

1 file changed

+87
-1
lines changed

1 file changed

+87
-1
lines changed

tests/syntax-rust/syntax_test_generics.rs

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

0 commit comments

Comments
 (0)