@@ -129,7 +129,10 @@ func NewBasicJob(inputs *search.Inputs, b query.Basic) (job.Job, error) {
129
129
})
130
130
}
131
131
132
- searcherJob := NewTextSearchJob (b , inputs , resultTypes , repoOptions )
132
+ searcherJob , err := NewTextSearchJob (b , inputs , resultTypes , repoOptions )
133
+ if err != nil {
134
+ return nil , err
135
+ }
133
136
addJob (searcherJob )
134
137
}
135
138
}
@@ -276,10 +279,13 @@ func NewBasicJob(inputs *search.Inputs, b query.Basic) (job.Job, error) {
276
279
return basicJob , nil
277
280
}
278
281
279
- func NewTextSearchJob (b query.Basic , inputs * search.Inputs , types result.Types , options search.RepoOptions ) job.Job {
282
+ func NewTextSearchJob (b query.Basic , inputs * search.Inputs , types result.Types , options search.RepoOptions ) ( job.Job , error ) {
280
283
// searcher to use full deadline if timeout: set or we are not batch.
281
284
useFullDeadline := b .GetTimeout () != nil || b .Count () != nil || inputs .Protocol != search .Batch
282
- patternInfo := toTextPatternInfo (b , types , inputs .Features , inputs .DefaultLimit ())
285
+ patternInfo , err := toTextPatternInfo (b , types , inputs .Features , inputs .DefaultLimit ())
286
+ if err != nil {
287
+ return nil , err
288
+ }
283
289
284
290
searcherJob := & searcher.TextSearchJob {
285
291
PatternInfo : patternInfo ,
@@ -294,7 +300,7 @@ func NewTextSearchJob(b query.Basic, inputs *search.Inputs, types result.Types,
294
300
child : & reposPartialJob {searcherJob },
295
301
repoOpts : options ,
296
302
containsRefGlobs : query .ContainsRefGlobs (b .ToParseTree ()),
297
- }
303
+ }, nil
298
304
}
299
305
300
306
// orderRacingJobs ensures that searcher and repo search jobs only ever run
@@ -391,7 +397,10 @@ func NewFlatJob(searchInputs *search.Inputs, f query.Flat) (job.Job, error) {
391
397
}
392
398
393
399
if resultTypes .Has (result .TypeStructural ) {
394
- patternInfo := toTextPatternInfo (f .ToBasic (), resultTypes , searchInputs .Features , searchInputs .DefaultLimit ())
400
+ patternInfo , err := toTextPatternInfo (f .ToBasic (), resultTypes , searchInputs .Features , searchInputs .DefaultLimit ())
401
+ if err != nil {
402
+ return nil , err
403
+ }
395
404
searcherArgs := & search.SearcherParameters {
396
405
PatternInfo : patternInfo ,
397
406
UseFullDeadline : useFullDeadline ,
@@ -671,7 +680,7 @@ func toSymbolSearchRequest(f query.Flat, feat *search.Features) (*searcher.Symbo
671
680
}
672
681
673
682
// toTextPatternInfo converts a query to internal values that drive text search.
674
- func toTextPatternInfo (b query.Basic , resultTypes result.Types , feat * search.Features , defaultLimit int ) * search.TextPatternInfo {
683
+ func toTextPatternInfo (b query.Basic , resultTypes result.Types , feat * search.Features , defaultLimit int ) ( * search.TextPatternInfo , error ) {
675
684
// Handle file: and -file: filters.
676
685
filesInclude , filesExclude := b .IncludeExcludeValues (query .FieldFile )
677
686
@@ -691,8 +700,16 @@ func toTextPatternInfo(b query.Basic, resultTypes result.Types, feat *search.Fea
691
700
selector , _ := filter .SelectPathFromString (b .FindValue (query .FieldSelect )) // Invariant: select is validated
692
701
count := b .MaxResults (defaultLimit )
693
702
703
+ q := protocol .FromJobNode (b .Pattern )
704
+ if p , ok := q .(* protocol.PatternNode ); ok {
705
+ if p .Value == "" && len (filesExclude ) == 0 && len (filesInclude ) == 0 &&
706
+ len (langExclude ) == 0 && len (langExclude ) == 0 {
707
+ return nil , errors .New ("At least one of pattern and include/exclude patterns must be non-empty" )
708
+ }
709
+ }
710
+
694
711
return & search.TextPatternInfo {
695
- Query : protocol . FromJobNode ( b . Pattern ) ,
712
+ Query : q ,
696
713
IsStructuralPat : b .IsStructural (),
697
714
IsCaseSensitive : b .IsCaseSensitive (),
698
715
FileMatchLimit : int32 (count ),
@@ -707,7 +724,7 @@ func toTextPatternInfo(b query.Basic, resultTypes result.Types, feat *search.Fea
707
724
CombyRule : b .FindValue (query .FieldCombyRule ),
708
725
Index : b .Index (),
709
726
Select : selector ,
710
- }
727
+ }, nil
711
728
}
712
729
713
730
func toLangFilters (aliases []string ) []string {
0 commit comments