mirror of
				https://github.com/rust-lang/rust.git
				synced 2025-10-31 04:57:19 +00:00 
			
		
		
		
	 0ea58e2346
			
		
	
	
		0ea58e2346
		
	
	
	
	
		
			
			Since the two are counted separately elsewhere, they should get
their own limits, too. The biggest problem with combining them
is that paths are loosely checked by not requiring every component
to match, which means that if they are short and matched loosely,
they can easily find "drunk typist" matches that make no sense,
like this old result:
    std::collections::btree_map::itermut matching slice::itermut
    maxEditDistance = ("slice::itermut".length) / 3 = 14 / 3 = 4
    editDistance("std", "slice") = 4
    editDistance("itermut", "itermut") = 0
        4 + 0 <= 4 PASS
Of course, `slice::itermut` should not match stuff from btreemap.
`slice` should not match `std`.
The new result counts them separately:
    maxPathEditDistance = "slice".length / 3 = 5 / 3 = 1
    maxEditDistance = "itermut".length / 3 = 7 / 3 = 2
    editDistance("std", "slice") = 4
        4 <= 1 FAIL
Effectively, this makes path queries less "typo-resistant".
It's not zero, but it means `vec` won't match the `v1` prelude.
Queries without parent paths are unchanged.
		
	
			
		
			
				
	
	
		
			36 lines
		
	
	
		
			1.0 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			36 lines
		
	
	
		
			1.0 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
| // exact-check
 | |
| 
 | |
| const EXPECTED = [
 | |
|     {
 | |
|         'query': 'xxxxxxxxxxx::hocuspocusprestidigitation',
 | |
|         // do not match abracadabra::hocuspocusprestidigitation
 | |
|         'others': [],
 | |
|     },
 | |
|     {
 | |
|         // exact match
 | |
|         'query': 'abracadabra::hocuspocusprestidigitation',
 | |
|         'others': [
 | |
|             { 'path': 'abracadabra', 'name': 'HocusPocusPrestidigitation' },
 | |
|         ],
 | |
|     },
 | |
|     {
 | |
|         // swap br/rb; that's edit distance 2, where maxPathEditDistance = 3 (11 / 3)
 | |
|         'query': 'arbacadarba::hocuspocusprestidigitation',
 | |
|         'others': [
 | |
|             { 'path': 'abracadabra', 'name': 'HocusPocusPrestidigitation' },
 | |
|         ],
 | |
|     },
 | |
|     {
 | |
|         // truncate 5 chars, where maxEditDistance = 7 (21 / 3)
 | |
|         'query': 'abracadarba::hocusprestidigitation',
 | |
|         'others': [
 | |
|             { 'path': 'abracadabra', 'name': 'HocusPocusPrestidigitation' },
 | |
|         ],
 | |
|     },
 | |
|     {
 | |
|         // truncate 9 chars, where maxEditDistance = 5 (17 / 3)
 | |
|         'query': 'abracadarba::hprestidigitation',
 | |
|         'others': [],
 | |
|     },
 | |
| ];
 |