mirror of
https://github.com/sourcegraph/sourcegraph.git
synced 2026-02-06 19:51:50 +00:00
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:
parent
53871e771a
commit
5affc2dba5
@ -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",
|
||||
|
||||
@ -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
|
||||
}
|
||||
|
||||
@ -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_) }
|
||||
|
||||
@ -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
|
||||
}
|
||||
|
||||
@ -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
|
||||
|
||||
@ -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_,
|
||||
}
|
||||
}
|
||||
|
||||
@ -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}
|
||||
}
|
||||
|
||||
Loading…
Reference in New Issue
Block a user