@@ -587,6 +587,44 @@ function getNextElem(query, parserState, elems, isInGenerics) {
587
587
/** @type {rustdoc.ParserQueryElement[] } */
588
588
const generics = [ ] ;
589
589
590
+ /** @type {function(string, string): void } */
591
+ const handleRefOrPtr = ( chr , name ) => {
592
+ if ( parserState . typeFilter !== null && parserState . typeFilter !== "primitive" ) {
593
+ throw [
594
+ "Invalid search type: primitive " ,
595
+ chr ,
596
+ " and " ,
597
+ parserState . typeFilter ,
598
+ " both specified" ,
599
+ ] ;
600
+ }
601
+ parserState . typeFilter = null ;
602
+ parserState . pos += 1 ;
603
+ let c = parserState . userQuery [ parserState . pos ] ;
604
+ while ( c === " " && parserState . pos < parserState . length ) {
605
+ parserState . pos += 1 ;
606
+ c = parserState . userQuery [ parserState . pos ] ;
607
+ }
608
+ const generics = [ ] ;
609
+ if ( parserState . userQuery . slice ( parserState . pos , parserState . pos + 3 ) === "mut" ) {
610
+ generics . push ( makePrimitiveElement ( "mut" , { typeFilter : "keyword" } ) ) ;
611
+ parserState . pos += 3 ;
612
+ c = parserState . userQuery [ parserState . pos ] ;
613
+ } else if ( chr === "*" && parserState . userQuery . slice ( pos , pos + 5 ) === "const" ) {
614
+ // make *const T parse the same as *T
615
+ parserState . pos += 5 ;
616
+ c = parserState . userQuery [ parserState . pos ] ;
617
+ }
618
+ while ( c === " " && parserState . pos < parserState . length ) {
619
+ parserState . pos += 1 ;
620
+ c = parserState . userQuery [ parserState . pos ] ;
621
+ }
622
+ if ( ! isEndCharacter ( c ) && parserState . pos < parserState . length ) {
623
+ getFilteredNextElem ( query , parserState , generics , isInGenerics ) ;
624
+ }
625
+ elems . push ( makePrimitiveElement ( name , { generics } ) ) ;
626
+ }
627
+
590
628
skipWhitespace ( parserState ) ;
591
629
let start = parserState . pos ;
592
630
let end ;
@@ -636,36 +674,9 @@ function getNextElem(query, parserState, elems, isInGenerics) {
636
674
elems . push ( makePrimitiveElement ( name , { bindingName, generics } ) ) ;
637
675
}
638
676
} else if ( parserState . userQuery [ parserState . pos ] === "&" ) {
639
- if ( parserState . typeFilter !== null && parserState . typeFilter !== "primitive" ) {
640
- throw [
641
- "Invalid search type: primitive " ,
642
- "&" ,
643
- " and " ,
644
- parserState . typeFilter ,
645
- " both specified" ,
646
- ] ;
647
- }
648
- parserState . typeFilter = null ;
649
- parserState . pos += 1 ;
650
- let c = parserState . userQuery [ parserState . pos ] ;
651
- while ( c === " " && parserState . pos < parserState . length ) {
652
- parserState . pos += 1 ;
653
- c = parserState . userQuery [ parserState . pos ] ;
654
- }
655
- const generics = [ ] ;
656
- if ( parserState . userQuery . slice ( parserState . pos , parserState . pos + 3 ) === "mut" ) {
657
- generics . push ( makePrimitiveElement ( "mut" , { typeFilter : "keyword" } ) ) ;
658
- parserState . pos += 3 ;
659
- c = parserState . userQuery [ parserState . pos ] ;
660
- }
661
- while ( c === " " && parserState . pos < parserState . length ) {
662
- parserState . pos += 1 ;
663
- c = parserState . userQuery [ parserState . pos ] ;
664
- }
665
- if ( ! isEndCharacter ( c ) && parserState . pos < parserState . length ) {
666
- getFilteredNextElem ( query , parserState , generics , isInGenerics ) ;
667
- }
668
- elems . push ( makePrimitiveElement ( "reference" , { generics } ) ) ;
677
+ handleRefOrPtr ( "&" , "reference" ) ;
678
+ } else if ( parserState . userQuery [ parserState . pos ] === "*" ) {
679
+ handleRefOrPtr ( "*" , "pointer" ) ;
669
680
} else {
670
681
const isStringElem = parserState . userQuery [ start ] === "\"" ;
671
682
// We handle the strings on their own mostly to make code easier to follow.
@@ -1185,6 +1196,7 @@ class DocSearch {
1185
1196
this . typeNameIdOfUnit = - 1 ;
1186
1197
this . typeNameIdOfTupleOrUnit = - 1 ;
1187
1198
this . typeNameIdOfReference = - 1 ;
1199
+ this . typeNameIdOfPointer = - 1 ;
1188
1200
this . typeNameIdOfHof = - 1 ;
1189
1201
1190
1202
this . utf8decoder = new TextDecoder ( ) ;
@@ -1224,6 +1236,7 @@ class DocSearch {
1224
1236
tupleOrUnit ,
1225
1237
// reference matches `&`
1226
1238
reference ,
1239
+ pointer ,
1227
1240
// never matches `!`
1228
1241
never ,
1229
1242
] = await Promise . all ( [
@@ -1239,6 +1252,7 @@ class DocSearch {
1239
1252
nn . search ( "unit" ) ,
1240
1253
nn . search ( "()" ) ,
1241
1254
nn . search ( "reference" ) ,
1255
+ nn . search ( "pointer" ) ,
1242
1256
nn . search ( "never" ) ,
1243
1257
] ) ;
1244
1258
/**
@@ -1270,6 +1284,7 @@ class DocSearch {
1270
1284
this . typeNameIdOfUnit = await first ( unit , TY_PRIMITIVE , "" ) ;
1271
1285
this . typeNameIdOfTupleOrUnit = await first ( tupleOrUnit , TY_PRIMITIVE , "" ) ;
1272
1286
this . typeNameIdOfReference = await first ( reference , TY_PRIMITIVE , "" ) ;
1287
+ this . typeNameIdOfPointer = await first ( pointer , TY_PRIMITIVE , "" ) ;
1273
1288
this . typeNameIdOfHof = await first ( hof , TY_PRIMITIVE , "" ) ;
1274
1289
this . typeNameIdOfNever = await first ( never , TY_PRIMITIVE , "" ) ;
1275
1290
}
0 commit comments