Skip to content
This repository was archived by the owner on Sep 30, 2024. It is now read-only.

Commit 81fa144

Browse files
author
Christoph Hegemann
authored
refactor: steps the usage cursor provenance state in a single place (#64321)
Adds a second function to determine the initial cursor based on the requested provenances. ## Test plan N/A
1 parent 3efa77a commit 81fa144

File tree

3 files changed

+33
-17
lines changed

3 files changed

+33
-17
lines changed

internal/codeintel/codenav/transport/graphql/root_resolver.go

Lines changed: 7 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -271,24 +271,18 @@ func (r *rootResolver) UsagesForSymbol(ctx context.Context, unresolvedArgs *reso
271271
remainingCount := int(args.RemainingCount)
272272
provsForSCIPData := args.Symbol.ProvenancesForSCIPData()
273273
usageResolvers := []resolverstubs.UsageResolver{}
274-
cursor := args.Cursor
275274

276-
if cursor.IsPrecise() && !provsForSCIPData.Precise {
277-
cursor = codenav.UsagesCursor{CursorType: codenav.CursorTypeSyntactic}
278-
}
279-
if provsForSCIPData.Precise && cursor.IsPrecise() {
275+
cursor := args.Cursor
276+
if cursor.IsPrecise() {
280277
nextPreciseCursor, preciseUsageResolvers := r.preciseUsages(ctx, trace, args, remainingCount)
281278
usageResolvers = append(usageResolvers, preciseUsageResolvers...)
282279
numPreciseResults = len(preciseUsageResolvers)
283280
remainingCount -= min(remainingCount, numPreciseResults)
284-
cursor = nextPreciseCursor.UnwrapOr(codenav.UsagesCursor{CursorType: codenav.CursorTypeSyntactic})
281+
cursor = cursor.AdvanceCursor(nextPreciseCursor, provsForSCIPData)
285282
}
286283

287-
if cursor.IsSyntactic() && !provsForSCIPData.Syntactic {
288-
cursor = codenav.UsagesCursor{CursorType: codenav.CursorTypeSearchBased}
289-
}
290284
previousSyntacticSearch := core.None[codenav.PreviousSyntacticSearch]()
291-
if provsForSCIPData.Syntactic && cursor.IsSyntactic() && remainingCount > 0 {
285+
if cursor.IsSyntactic() && remainingCount > 0 {
292286
usagesForSymbolArgs := codenav.UsagesForSymbolArgs{
293287
Repo: args.Repo,
294288
Commit: args.CommitID,
@@ -300,13 +294,10 @@ func (r *rootResolver) UsagesForSymbol(ctx context.Context, unresolvedArgs *reso
300294
usageResolvers = append(usageResolvers, syntacticUsageResolvers...)
301295
numSyntacticResults = len(syntacticUsageResolvers)
302296
remainingCount -= min(remainingCount, numSyntacticResults)
303-
cursor = nextSyntacticCursor.UnwrapOr(codenav.UsagesCursor{CursorType: codenav.CursorTypeSearchBased})
297+
cursor = cursor.AdvanceCursor(nextSyntacticCursor, provsForSCIPData)
304298
}
305299

306-
if cursor.IsSearchBased() && !provsForSCIPData.SearchBased {
307-
cursor = codenav.UsagesCursor{CursorType: codenav.CursorTypeDone}
308-
}
309-
if provsForSCIPData.SearchBased && cursor.IsSearchBased() && remainingCount > 0 {
300+
if cursor.IsSearchBased() && remainingCount > 0 {
310301
usagesForSymbolArgs := codenav.UsagesForSymbolArgs{
311302
Repo: args.Repo,
312303
Commit: args.CommitID,
@@ -318,7 +309,7 @@ func (r *rootResolver) UsagesForSymbol(ctx context.Context, unresolvedArgs *reso
318309
)
319310
usageResolvers = append(usageResolvers, searchBasedUsageResolvers...)
320311
numSearchBasedResults = len(searchBasedUsageResolvers)
321-
cursor = nextSearchBasedCursor.UnwrapOr(codenav.UsagesCursor{CursorType: codenav.CursorTypeDone})
312+
cursor = cursor.AdvanceCursor(nextSearchBasedCursor, provsForSCIPData)
322313
}
323314

324315
pageInfo := resolverstubs.NewSimplePageInfo(false)

internal/codeintel/codenav/types.go

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -418,6 +418,31 @@ func (c UsagesCursor) IsDone() bool {
418418
return c.CursorType == CursorTypeDone
419419
}
420420

421+
func (c UsagesCursor) AdvanceCursor(nextCursor core.Option[UsagesCursor], provenances ForEachProvenance[bool]) UsagesCursor {
422+
if next, isSome := nextCursor.Get(); isSome {
423+
return next
424+
}
425+
if c.IsPrecise() && provenances.Syntactic {
426+
return UsagesCursor{CursorType: CursorTypeSyntactic}
427+
} else if (c.IsPrecise() || c.IsSyntactic()) && provenances.SearchBased {
428+
return UsagesCursor{CursorType: CursorTypeSearchBased}
429+
} else {
430+
return UsagesCursor{CursorType: CursorTypeDone}
431+
}
432+
}
433+
434+
func InitialCursor(provenances ForEachProvenance[bool]) UsagesCursor {
435+
if provenances.Precise {
436+
return UsagesCursor{CursorType: CursorTypeDefinitions}
437+
} else if provenances.Syntactic {
438+
return UsagesCursor{CursorType: CursorTypeSyntactic}
439+
} else if provenances.SearchBased {
440+
return UsagesCursor{CursorType: CursorTypeSearchBased}
441+
} else {
442+
return UsagesCursor{CursorType: CursorTypeDone}
443+
}
444+
}
445+
421446
func (c UsagesCursor) Encode() string {
422447
return encodeViaJSON(c)
423448
}

internal/codeintel/resolvers/codenav.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -346,7 +346,7 @@ func (args *UsagesForSymbolArgs) Resolve(
346346
return out, errors.Wrap(err, "invalid after: cursor")
347347
}
348348
} else {
349-
cursor.CursorType = codenav.CursorTypeDefinitions
349+
cursor = codenav.InitialCursor(resolvedSymbol.ProvenancesForSCIPData())
350350
}
351351

352352
scipRange, err := scip.NewRange([]int32{

0 commit comments

Comments
 (0)