internal/lsp: update column mapper with content on incremental changes
Fixes golang/go#32114 Change-Id: If2ffade3d8d1e026e3b0aa7f2c9db4dc46d7c8b2 Reviewed-on: https://go-review.googlesource.com/c/tools/+/178157 Run-TryBot: Rebecca Stambler <rstambler@golang.org> Reviewed-by: Ian Cottrell <iancottrell@google.com> TryBot-Result: Gobot Gobot <gobot@golang.org>
This commit is contained in:
parent
d88f79806b
commit
9558fe4a78
|
@ -23,14 +23,13 @@ func NewURI(uri span.URI) string {
|
||||||
return string(uri)
|
return string(uri)
|
||||||
}
|
}
|
||||||
|
|
||||||
func NewColumnMapper(uri span.URI, fn string, fset *token.FileSet, f *token.File, content []byte) *ColumnMapper {
|
func NewColumnMapper(uri span.URI, filename string, fset *token.FileSet, f *token.File, content []byte) *ColumnMapper {
|
||||||
var converter *span.TokenConverter
|
var converter *span.TokenConverter
|
||||||
if f == nil {
|
if f == nil {
|
||||||
converter = span.NewContentConverter(fn, content)
|
converter = span.NewContentConverter(filename, content)
|
||||||
} else {
|
} else {
|
||||||
converter = span.NewTokenConverter(fset, f)
|
converter = span.NewTokenConverter(fset, f)
|
||||||
}
|
}
|
||||||
|
|
||||||
return &ColumnMapper{
|
return &ColumnMapper{
|
||||||
URI: uri,
|
URI: uri,
|
||||||
Converter: converter,
|
Converter: converter,
|
||||||
|
|
|
@ -88,10 +88,6 @@ func Diagnostics(ctx context.Context, v View, uri span.URI) (map[span.URI][]Diag
|
||||||
}
|
}
|
||||||
// Updates to the diagnostics for this package may need to be propagated.
|
// Updates to the diagnostics for this package may need to be propagated.
|
||||||
for _, f := range gof.GetActiveReverseDeps(ctx) {
|
for _, f := range gof.GetActiveReverseDeps(ctx) {
|
||||||
if f == nil {
|
|
||||||
v.Session().Logger().Errorf(ctx, "nil file in reverse active dependencies for %s", f.URI())
|
|
||||||
continue
|
|
||||||
}
|
|
||||||
pkg := f.GetPackage(ctx)
|
pkg := f.GetPackage(ctx)
|
||||||
if pkg == nil {
|
if pkg == nil {
|
||||||
continue
|
continue
|
||||||
|
|
|
@ -65,11 +65,16 @@ func (s *Server) applyChanges(ctx context.Context, params *protocol.DidChangeTex
|
||||||
|
|
||||||
uri := span.NewURI(params.TextDocument.URI)
|
uri := span.NewURI(params.TextDocument.URI)
|
||||||
view := s.session.ViewOf(uri)
|
view := s.session.ViewOf(uri)
|
||||||
file, m, err := getSourceFile(ctx, view, uri)
|
f, m, err := getSourceFile(ctx, view, uri)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return "", jsonrpc2.NewErrorf(jsonrpc2.CodeInternalError, "file not found")
|
return "", jsonrpc2.NewErrorf(jsonrpc2.CodeInternalError, "file not found")
|
||||||
}
|
}
|
||||||
content := file.GetContent(ctx)
|
fset := f.GetFileSet(ctx)
|
||||||
|
filename, err := f.URI().Filename()
|
||||||
|
if err != nil {
|
||||||
|
return "", jsonrpc2.NewErrorf(jsonrpc2.CodeInternalError, "no filename for %s", uri)
|
||||||
|
}
|
||||||
|
content := f.GetContent(ctx)
|
||||||
for _, change := range params.ContentChanges {
|
for _, change := range params.ContentChanges {
|
||||||
spn, err := m.RangeSpan(*change.Range)
|
spn, err := m.RangeSpan(*change.Range)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
@ -87,6 +92,9 @@ func (s *Server) applyChanges(ctx context.Context, params *protocol.DidChangeTex
|
||||||
buf.WriteString(change.Text)
|
buf.WriteString(change.Text)
|
||||||
buf.Write(content[end:])
|
buf.Write(content[end:])
|
||||||
content = buf.Bytes()
|
content = buf.Bytes()
|
||||||
|
|
||||||
|
// Update column mapper along with the content.
|
||||||
|
m = protocol.NewColumnMapper(f.URI(), filename, fset, nil, content)
|
||||||
}
|
}
|
||||||
return string(content), nil
|
return string(content), nil
|
||||||
}
|
}
|
||||||
|
|
|
@ -51,13 +51,11 @@ func getSourceFile(ctx context.Context, v source.View, uri span.URI) (source.Fil
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, nil, err
|
return nil, nil, err
|
||||||
}
|
}
|
||||||
|
filename, err := f.URI().Filename()
|
||||||
fname, err := f.URI().Filename()
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, nil, err
|
return nil, nil, err
|
||||||
}
|
}
|
||||||
|
m := protocol.NewColumnMapper(f.URI(), filename, f.GetFileSet(ctx), f.GetToken(ctx), f.GetContent(ctx))
|
||||||
m := protocol.NewColumnMapper(f.URI(), fname, f.GetFileSet(ctx), f.GetToken(ctx), f.GetContent(ctx))
|
|
||||||
|
|
||||||
return f, m, nil
|
return f, m, nil
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue