|
376 | 376 |
|
377 | 377 | for (var z = 0; z < split.length; ++z) {
|
378 | 378 | if (split[z] === "") {
|
379 |
| - split.slice(z, 1); |
| 379 | + split.splice(z, 1); |
380 | 380 | z -= 1;
|
381 | 381 | }
|
382 | 382 | }
|
|
526 | 526 | return literalSearch === true ? false : lev_distance;
|
527 | 527 | }
|
528 | 528 |
|
529 |
| - function checkPath(startsWith, ty) { |
530 |
| - var lev_total = 0; |
| 529 | + function checkPath(startsWith, lastElem, ty) { |
| 530 | + var ret_lev = MAX_LEV_DISTANCE + 1; |
531 | 531 | var path = ty.path.split("::");
|
| 532 | + |
| 533 | + if (ty.parent && ty.parent.name) { |
| 534 | + path.push(ty.parent.name.toLowerCase()); |
| 535 | + } |
| 536 | + |
532 | 537 | if (startsWith.length > path.length) {
|
533 | 538 | return MAX_LEV_DISTANCE + 1;
|
534 | 539 | }
|
535 |
| - for (var i = path.length - 1; i < startsWith.length; ++i) { |
536 |
| - var lev = levenshtein(startsWith[i], path[i]); |
537 |
| - if (lev > MAX_LEV_DISTANCE) { |
538 |
| - return MAX_LEV_DISTANCE + 1; |
| 540 | + for (var i = 0; i < path.length; ++i) { |
| 541 | + if (i + startsWith.length > path.length) { |
| 542 | + break; |
| 543 | + } |
| 544 | + var lev_total = 0; |
| 545 | + var aborted = false; |
| 546 | + for (var x = 0; x < startsWith.length; ++x) { |
| 547 | + var lev = levenshtein(path[i + x], startsWith[x]); |
| 548 | + if (lev > MAX_LEV_DISTANCE) { |
| 549 | + aborted = true; |
| 550 | + break; |
| 551 | + } |
| 552 | + lev_total += lev; |
| 553 | + } |
| 554 | + if (aborted === false) { |
| 555 | + var extra = MAX_LEV_DISTANCE + 1; |
| 556 | + if (i + startsWith.length < path.length) { |
| 557 | + extra = levenshtein(path[i + startsWith.length], lastElem); |
| 558 | + } |
| 559 | + if (extra > MAX_LEV_DISTANCE) { |
| 560 | + extra = levenshtein(ty.name, lastElem); |
| 561 | + } |
| 562 | + if (extra < MAX_LEV_DISTANCE + 1) { |
| 563 | + lev_total += extra; |
| 564 | + ret_lev = Math.min(ret_lev, |
| 565 | + Math.round(lev_total / (startsWith.length + 1))); |
| 566 | + } |
539 | 567 | }
|
540 |
| - lev_total += lev; |
541 | 568 | }
|
542 |
| - return Math.round(lev_total / startsWith.length); |
| 569 | + return ret_lev; |
543 | 570 | }
|
544 | 571 |
|
545 | 572 | function typePassesFilter(filter, type) {
|
|
701 | 728 | }
|
702 | 729 | var lev_add = 0;
|
703 | 730 | if (paths.length > 1) {
|
704 |
| - var lev = checkPath(startsWith, ty); |
| 731 | + var lev = checkPath(startsWith, paths[paths.length - 1], ty); |
705 | 732 | if (lev > MAX_LEV_DISTANCE) {
|
706 | 733 | continue;
|
707 | 734 | } else if (lev > 0) {
|
|
0 commit comments