@@ -63,6 +63,12 @@ const TY_PRIMITIVE = itemTypes.indexOf("primitive");
6363const  TY_GENERIC  =  itemTypes . indexOf ( "generic" ) ; 
6464const  TY_IMPORT  =  itemTypes . indexOf ( "import" ) ; 
6565const  TY_TRAIT  =  itemTypes . indexOf ( "trait" ) ; 
66+ // used for isType 
67+ const  TY_STRUCT  =  itemTypes . indexOf ( "struct" ) ; 
68+ const  TY_ENUM  =  itemTypes . indexOf ( "enum" ) ; 
69+ const  TY_UNION  =  itemTypes . indexOf ( "union" ) ; 
70+ const  TY_PRIMATIVE  =  itemTypes . indexOf ( "primative" ) ; 
71+ const  TY_FOREIGN_TYPE  =  itemTypes . indexOf ( "foreigntype" ) ; 
6672const  ROOT_PATH  =  typeof  window  !==  "undefined"  ? window . rootPath  : "../" ; 
6773
6874// Hard limit on how deep to recurse into generics when doing type-driven search. 
@@ -250,6 +256,18 @@ function prevIs(parserState, lookingFor) {
250256 return  false ; 
251257} 
252258
259+ function  isType ( ty )  { 
260+  return  ty  ===  TY_STRUCT  ||  ty  ===  TY_ENUM  ||  ty  ===  TY_UNION  || 
261+  ty  ===  TY_PRIMATIVE  ||  ty  ===  TY_FOREIGN_TYPE  ||  ty  ===  - 1 ; 
262+ } 
263+ 
264+ /** 
265+  * This function removes any queryElem that cannot be a function argument. 
266+  */ 
267+ function  filterOnlyTypes ( elems )  { 
268+  return  elems . filter ( elem  =>  isType ( elem . typeFilter ) ) ; 
269+ } 
270+ 
253271/** 
254272 * Returns `true` if the last element in the `elems` argument has generics. 
255273 * 
@@ -1870,6 +1888,8 @@ class DocSearch {
18701888 correction : null , 
18711889 proposeCorrectionFrom : null , 
18721890 proposeCorrectionTo : null , 
1891+  // used for type-and-name searches 
1892+  extraNameElem : null , 
18731893 // bloom filter build from type ids 
18741894 typeFingerprint : new  Uint32Array ( 4 ) , 
18751895 } ; 
@@ -2002,6 +2022,17 @@ class DocSearch {
20022022 query . literalSearch  =  parserState . totalElems  >  1 ; 
20032023 } 
20042024 query . foundElems  =  query . elems . length  +  query . returned . length ; 
2025+  if  ( query . returned . length  >  0  ||  query . elems . length  >  1 )  { 
2026+  for  ( const  elem  of  query . elems )  { 
2027+  if  ( ! isType ( elem . typeFilter ) )  { 
2028+  query . extraNameElem  =  elem ; 
2029+  query . elems  =  filterOnlyTypes ( query . elems ) ; 
2030+  query . hasReturnArrow  =  true ; 
2031+  console . log ( query . elems ) ; 
2032+  break ; 
2033+  } 
2034+  } 
2035+  } 
20052036 query . totalElems  =  parserState . totalElems ; 
20062037 return  query ; 
20072038 } 
@@ -3687,7 +3718,7 @@ class DocSearch {
36873718 * @param  {integer } pos - Position in the `searchIndex`. 
36883719 * @param  {Object } results 
36893720 */ 
3690-  function  handleArgs ( row ,  pos ,  results )  { 
3721+  function  handleArgs ( row ,  pos ,  results ,   maxEditDistance )  { 
36913722 if  ( ! row  ||  ( filterCrates  !==  null  &&  row . crate  !==  filterCrates )  ||  ! row . type )  { 
36923723 return ; 
36933724 } 
@@ -3724,8 +3755,26 @@ class DocSearch {
37243755 return ; 
37253756 } 
37263757
3758+  let  name_dist  =  0 ; 
3759+  let  path_dist  =  tfpDist ; 
3760+  const  name_elem  =  parsedQuery . extraNameElem ; 
3761+  if  ( name_elem  !==  null )  { 
3762+  if  ( ! typePassesFilter ( name_elem . typeFilter ,  row . ty ) )  { 
3763+  return ; 
3764+  } 
3765+  name_dist  =  editDistance ( 
3766+  row . normalizedName ,  name_elem . normalizedPathLast ,  maxEditDistance ) ; 
3767+  if  ( row . normalizedName . includes ( name_elem . normalizedPathLast ) )  { 
3768+  name_dist  =  name_dist  /  3 ; 
3769+  } 
3770+  if  ( name_dist  >  maxEditDistance )  { 
3771+  return ; 
3772+  } 
3773+  const  real_path_dist  =  checkPath ( name_elem . fullPath ,  row ) ; 
3774+  path_dist  =  ( path_dist  +  real_path_dist )  /  2 ; 
3775+  } 
37273776 results . max_dist  =  Math . max ( results . max_dist  ||  0 ,  tfpDist ) ; 
3728-  addIntoResults ( results ,  row . id ,  pos ,  0 ,   tfpDist ,  0 ,  Number . MAX_VALUE ) ; 
3777+  addIntoResults ( results ,  row . id ,  pos ,  name_dist ,   path_dist ,  0 ,  Number . MAX_VALUE ) ; 
37293778 } 
37303779
37313780 /** 
@@ -3928,7 +3977,7 @@ class DocSearch {
39283977 parsedQuery . elems . sort ( sortQ ) ; 
39293978 parsedQuery . returned . sort ( sortQ ) ; 
39303979 for  ( let  i  =  0 ,  nSearchIndex  =  this . searchIndex . length ;  i  <  nSearchIndex ;  ++ i )  { 
3931-  handleArgs ( this . searchIndex [ i ] ,  i ,  results_others ) ; 
3980+  handleArgs ( this . searchIndex [ i ] ,  i ,  results_others ,   maxEditDistance ) ; 
39323981 } 
39333982 } 
39343983 } ; 
0 commit comments