12dc24f460
This commit is a response to feedback on the displayed type signatures results, by making generics act stricter. Generics are tightened by making order significant. This means `Vec<Allocator>` now matches only with a true vector of allocators, instead of matching the second type param. It also makes unboxing within generics stricter, so `Result<A, B>` only matches if `B` is in the error type and `A` is in the success type. The top level of the function search is unaffected. Find the discussion on: * <https://rust-lang.zulipchat.com/#narrow/stream/393423-t-rustdoc.2Fmeetings/topic/meeting.202024-07-08/near/449965149> * <https://github.com/rust-lang/rust/pull/124544#issuecomment-2204272265> * <https://rust-lang.zulipchat.com/#narrow/channel/266220-t-rustdoc/topic/deciding.20on.20semantics.20of.20generics.20in.20rustdoc.20search/near/476841363>
174 lines
3.9 KiB
JavaScript
174 lines
3.9 KiB
JavaScript
// exact-check
|
|
|
|
const EXPECTED = [
|
|
// not a HOF query
|
|
{
|
|
'query': 'u32 -> !',
|
|
'others': [],
|
|
},
|
|
|
|
// ML-style higher-order function notation
|
|
{
|
|
'query': 'bool, (first<u32> -> !) -> ()',
|
|
'others': [
|
|
{"path": "hof", "name": "fn_ptr"},
|
|
],
|
|
},
|
|
{
|
|
'query': 'u8, (second<u32> -> !) -> ()',
|
|
'others': [
|
|
{"path": "hof", "name": "fn_once"},
|
|
],
|
|
},
|
|
{
|
|
'query': 'i8, (third<u32> -> !) -> ()',
|
|
'others': [
|
|
{"path": "hof", "name": "fn_mut"},
|
|
],
|
|
},
|
|
{
|
|
'query': 'char, (u32 -> !) -> ()',
|
|
'others': [
|
|
{"path": "hof", "name": "fn_"},
|
|
],
|
|
},
|
|
{
|
|
'query': '(first<u32> -> !) -> ()',
|
|
'others': [
|
|
{"path": "hof", "name": "fn_ptr"},
|
|
],
|
|
},
|
|
{
|
|
'query': '(second<u32> -> !) -> ()',
|
|
'others': [
|
|
{"path": "hof", "name": "fn_once"},
|
|
],
|
|
},
|
|
{
|
|
'query': '(third<u32> -> !) -> ()',
|
|
'others': [
|
|
{"path": "hof", "name": "fn_mut"},
|
|
],
|
|
},
|
|
{
|
|
'query': '(u32 -> !) -> ()',
|
|
'others': [
|
|
{"path": "hof", "name": "fn_"},
|
|
],
|
|
},
|
|
{
|
|
'query': '(str, str -> i8) -> ()',
|
|
'others': [
|
|
{"path": "hof", "name": "multiple"},
|
|
],
|
|
},
|
|
{
|
|
'query': '(str ->) -> ()',
|
|
'others': [
|
|
{"path": "hof", "name": "multiple"},
|
|
],
|
|
},
|
|
{
|
|
'query': '(-> i8) -> ()',
|
|
'others': [
|
|
{"path": "hof", "name": "multiple"},
|
|
],
|
|
},
|
|
{
|
|
'query': '(str -> str) -> ()',
|
|
// params and return are not the same
|
|
'others': [],
|
|
},
|
|
{
|
|
'query': '(i8 ->) -> ()',
|
|
// params and return are not the same
|
|
'others': [],
|
|
},
|
|
{
|
|
'query': '(-> str) -> ()',
|
|
// params and return are not the same
|
|
'others': [],
|
|
},
|
|
|
|
// Rust-style higher-order function notation
|
|
{
|
|
'query': 'bool, fn(first<u32>) -> ! -> ()',
|
|
'others': [
|
|
{"path": "hof", "name": "fn_ptr"},
|
|
],
|
|
},
|
|
{
|
|
'query': 'u8, fnonce(second<u32>) -> ! -> ()',
|
|
'others': [
|
|
{"path": "hof", "name": "fn_once"},
|
|
],
|
|
},
|
|
{
|
|
'query': 'u8, fn(second<u32>) -> ! -> ()',
|
|
// fnonce != fn
|
|
'others': [],
|
|
},
|
|
{
|
|
'query': 'i8, fnmut(third<u32>) -> ! -> ()',
|
|
'others': [
|
|
{"path": "hof", "name": "fn_mut"},
|
|
],
|
|
},
|
|
{
|
|
'query': 'i8, fn(third<u32>) -> ! -> ()',
|
|
// fnmut != fn
|
|
'others': [],
|
|
},
|
|
{
|
|
'query': 'char, fn(u32) -> ! -> ()',
|
|
'others': [
|
|
{"path": "hof", "name": "fn_"},
|
|
],
|
|
},
|
|
{
|
|
'query': 'char, fnmut(u32) -> ! -> ()',
|
|
// fn != fnmut
|
|
'others': [],
|
|
},
|
|
{
|
|
'query': 'fn(first<u32>) -> ! -> ()',
|
|
'others': [
|
|
{"path": "hof", "name": "fn_ptr"},
|
|
],
|
|
},
|
|
{
|
|
'query': 'fnonce(second<u32>) -> ! -> ()',
|
|
'others': [
|
|
{"path": "hof", "name": "fn_once"},
|
|
],
|
|
},
|
|
{
|
|
'query': 'fnmut(third<u32>) -> ! -> ()',
|
|
'others': [
|
|
{"path": "hof", "name": "fn_mut"},
|
|
],
|
|
},
|
|
{
|
|
'query': 'fn() -> ! -> ()',
|
|
'others': [
|
|
// fn matches primitive:fn and trait:Fn
|
|
{"path": "hof", "name": "fn_"},
|
|
{"path": "hof", "name": "fn_ptr"},
|
|
],
|
|
},
|
|
{
|
|
'query': 'trait:fn() -> ! -> ()',
|
|
'others': [
|
|
// fn matches primitive:fn and trait:Fn
|
|
{"path": "hof", "name": "fn_"},
|
|
],
|
|
},
|
|
{
|
|
'query': 'primitive:fn() -> ! -> ()',
|
|
'others': [
|
|
// fn matches primitive:fn and trait:Fn
|
|
{"path": "hof", "name": "fn_ptr"},
|
|
],
|
|
},
|
|
];
|