chore(codeintel): replaces lsp.Range uses with scip.Range (#64178)

Collecting some red-line brownie points

## Test plan
Existing tests continue to pass
This commit is contained in:
Christoph Hegemann 2024-07-31 12:25:33 +02:00 committed by GitHub
parent 53871e771a
commit 5affc2dba5
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
7 changed files with 33 additions and 82 deletions

View File

@ -48,7 +48,6 @@ go_library(
"@com_github_graph_gophers_graphql_go//relay",
"@com_github_life4_genesis//slices",
"@com_github_sourcegraph_conc//iter",
"@com_github_sourcegraph_go_lsp//:go-lsp",
"@com_github_sourcegraph_log//:log",
"@com_github_sourcegraph_scip//bindings/go/scip",
"@com_github_wk8_go_ordered_map_v2//:go-ordered-map",

View File

@ -4,7 +4,7 @@ import (
"context"
"encoding/base64"
"encoding/json"
"github.com/sourcegraph/go-lsp"
"github.com/sourcegraph/scip/bindings/go/scip"
"github.com/sourcegraph/sourcegraph/cmd/frontend/graphqlbackend/graphqlutil"
@ -150,9 +150,5 @@ func (s scipOccurrence) Symbol() (*string, error) {
func (s scipOccurrence) Range() (resolverstubs.RangeResolver, error) {
// FIXME(issue: GRAPH-571): Below code is correct iff the indexer uses UTF-16 offsets
r := scip.NewRangeUnchecked(s.impl.Range)
return newRangeResolver(lsp.Range{
Start: lsp.Position{Line: int(r.Start.Line), Character: int(r.Start.Character)},
End: lsp.Position{Line: int(r.End.Line), Character: int(r.End.Character)},
}), nil
return newRangeResolver(scip.NewRangeUnchecked(s.impl.Range)), nil
}

View File

@ -4,10 +4,9 @@ import (
"context"
"time"
"github.com/sourcegraph/go-lsp"
"github.com/sourcegraph/scip/bindings/go/scip"
"github.com/sourcegraph/sourcegraph/internal/codeintel/codenav"
"github.com/sourcegraph/sourcegraph/internal/codeintel/codenav/shared"
resolverstubs "github.com/sourcegraph/sourcegraph/internal/codeintel/resolvers"
)
@ -25,35 +24,25 @@ func (r *gitBlobLSIFDataResolver) Hover(ctx context.Context, args *resolverstubs
ctx, _, endObservation := observeResolver(ctx, &err, r.operations.hover, time.Second, getObservationArgs(&requestArgs))
defer endObservation()
text, rx, exists, err := r.codeNavSvc.GetHover(ctx, requestArgs, r.requestState)
text, range_, exists, err := r.codeNavSvc.GetHover(ctx, requestArgs, r.requestState)
if err != nil || !exists {
return nil, err
}
return newHoverResolver(text, sharedRangeTolspRange(rx)), nil
return newHoverResolver(text, range_.ToSCIPRange()), nil
}
//
//
type hoverResolver struct {
text string
lspRange lsp.Range
text string
range_ scip.Range
}
func newHoverResolver(text string, lspRange lsp.Range) resolverstubs.HoverResolver {
func newHoverResolver(text string, range_ scip.Range) resolverstubs.HoverResolver {
return &hoverResolver{
text: text,
lspRange: lspRange,
text: text,
range_: range_,
}
}
func (r *hoverResolver) Markdown() resolverstubs.Markdown { return resolverstubs.Markdown(r.text) }
func (r *hoverResolver) Range() resolverstubs.RangeResolver { return newRangeResolver(r.lspRange) }
//
//
func sharedRangeTolspRange(r shared.Range) lsp.Range {
return lsp.Range{Start: convertPosition(r.Start.Line, r.Start.Character), End: convertPosition(r.End.Line, r.End.Character)}
}
func (r *hoverResolver) Range() resolverstubs.RangeResolver { return newRangeResolver(r.range_) }

View File

@ -63,7 +63,7 @@ type codeIntelligenceRangeResolver struct {
}
func (r *codeIntelligenceRangeResolver) Range(ctx context.Context) (resolverstubs.RangeResolver, error) {
return newRangeResolver(convertRange(r.r.Range)), nil
return newRangeResolver(r.r.Range.ToSCIPRange()), nil
}
func (r *codeIntelligenceRangeResolver) Definitions(ctx context.Context) (resolverstubs.LocationConnectionResolver, error) {
@ -79,5 +79,5 @@ func (r *codeIntelligenceRangeResolver) Implementations(ctx context.Context) (re
}
func (r *codeIntelligenceRangeResolver) Hover(ctx context.Context) (resolverstubs.HoverResolver, error) {
return newHoverResolver(r.r.HoverText, convertRange(r.r.Range)), nil
return newHoverResolver(r.r.HoverText, r.r.Range.ToSCIPRange()), nil
}

View File

@ -27,7 +27,7 @@ func (r *gitBlobLSIFDataResolver) Stencil(ctx context.Context) (_ []resolverstub
resolvers := make([]resolverstubs.RangeResolver, 0, len(ranges))
for _, r := range ranges {
resolvers = append(resolvers, newRangeResolver(convertRange(r)))
resolvers = append(resolvers, newRangeResolver(r.ToSCIPRange()))
}
return resolvers, nil

View File

@ -229,6 +229,6 @@ func (u *usageRangeResolver) Path() string {
func (u *usageRangeResolver) Range() resolverstubs.RangeResolver {
return &rangeResolver{
lspRange: convertRange(shared.TranslateRange(u.range_)),
range_: u.range_,
}
}

View File

@ -5,7 +5,7 @@ import (
"fmt"
"strconv"
"github.com/sourcegraph/go-lsp"
"github.com/sourcegraph/scip/bindings/go/scip"
"github.com/sourcegraph/sourcegraph/internal/api"
"github.com/sourcegraph/sourcegraph/internal/codeintel/codenav/shared"
@ -47,22 +47,18 @@ func resolveLocation(ctx context.Context, locationResolver *gitresolvers.CachedL
return nil, err
}
lspRange := convertRange(location.TargetRange)
return newLocationResolver(treeResolver, &lspRange), nil
return newLocationResolver(treeResolver, location.TargetRange.ToSCIPRange()), nil
}
//
//
type locationResolver struct {
resource resolverstubs.GitTreeEntryResolver
lspRange *lsp.Range
range_ scip.Range
}
func newLocationResolver(resource resolverstubs.GitTreeEntryResolver, lspRange *lsp.Range) resolverstubs.LocationResolver {
func newLocationResolver(resource resolverstubs.GitTreeEntryResolver, range_ scip.Range) resolverstubs.LocationResolver {
return &locationResolver{
resource: resource,
lspRange: lspRange,
range_: range_,
}
}
@ -73,10 +69,7 @@ func (r *locationResolver) Range() resolverstubs.RangeResolver {
}
func (r *locationResolver) rangeInternal() *rangeResolver {
if r.lspRange == nil {
return nil
}
return &rangeResolver{*r.lspRange}
return &rangeResolver{r.range_}
}
func (r *locationResolver) URL(ctx context.Context) (string, error) {
@ -88,65 +81,39 @@ func (r *locationResolver) CanonicalURL() string {
}
func (r *locationResolver) urlPath(prefix string) string {
url := prefix
if r.lspRange != nil {
url += "?L" + r.rangeInternal().urlFragment()
}
return url
return prefix + "?L" + r.rangeInternal().urlFragment()
}
//
//
type rangeResolver struct{ range_ scip.Range }
type rangeResolver struct{ lspRange lsp.Range }
func newRangeResolver(lspRange lsp.Range) resolverstubs.RangeResolver {
func newRangeResolver(range_ scip.Range) resolverstubs.RangeResolver {
return &rangeResolver{
lspRange: lspRange,
range_: range_,
}
}
func (r *rangeResolver) Start() resolverstubs.PositionResolver { return r.start() }
func (r *rangeResolver) End() resolverstubs.PositionResolver { return r.end() }
func (r *rangeResolver) start() *positionResolver { return &positionResolver{r.lspRange.Start} }
func (r *rangeResolver) end() *positionResolver { return &positionResolver{r.lspRange.End} }
func (r *rangeResolver) start() *positionResolver { return &positionResolver{r.range_.Start} }
func (r *rangeResolver) end() *positionResolver { return &positionResolver{r.range_.End} }
func (r *rangeResolver) urlFragment() string {
if r.lspRange.Start == r.lspRange.End {
if r.range_.Start == r.range_.End {
return r.start().urlFragment(false)
}
hasCharacter := r.lspRange.Start.Character != 0 || r.lspRange.End.Character != 0
hasCharacter := r.range_.Start.Character != 0 || r.range_.End.Character != 0
return r.start().urlFragment(hasCharacter) + "-" + r.end().urlFragment(hasCharacter)
}
//
//
type positionResolver struct{ pos scip.Position }
type positionResolver struct{ pos lsp.Position }
// func newPositionResolver(pos lsp.Position) resolverstubs.PositionResolver {
// return &positionResolver{pos: pos}
// }
func (r *positionResolver) Line() int32 { return int32(r.pos.Line) }
func (r *positionResolver) Character() int32 { return int32(r.pos.Character) }
func (r *positionResolver) Line() int32 { return r.pos.Line }
func (r *positionResolver) Character() int32 { return r.pos.Character }
func (r *positionResolver) urlFragment(forceIncludeCharacter bool) string {
if !forceIncludeCharacter && r.pos.Character == 0 {
return strconv.Itoa(r.pos.Line + 1)
return strconv.Itoa(int(r.pos.Line + 1))
}
return fmt.Sprintf("%d:%d", r.pos.Line+1, r.pos.Character+1)
}
//
//
// convertRange creates an LSP range from a bundle range.
func convertRange(r shared.Range) lsp.Range {
return lsp.Range{Start: convertPosition(r.Start.Line, r.Start.Character), End: convertPosition(r.End.Line, r.End.Character)}
}
func convertPosition(line, character int) lsp.Position {
return lsp.Position{Line: line, Character: character}
}