1
0
mirror of https://github.com/golang/go synced 2024-11-05 14:36:11 -07:00
go/internal/lsp/workspace.go
Rebecca Stambler 62a0bb781d gopls, internal/lsp: support an extra formatting hook for gofumpt
This change reworks CL 240118 to apply gofumpt directly as a formatter,
not an analyzer. Depending on how gofumpt changes, we may be able to use
it as an analyzer in the future, but for now it's just easier to add it
as a formatting hook.

Fixes golang/go#39805

Change-Id: I227fde4b1916d8a82557f30dfca88e155136dff5
Reviewed-on: https://go-review.googlesource.com/c/tools/+/241985
Run-TryBot: Rebecca Stambler <rstambler@golang.org>
TryBot-Result: Gobot Gobot <gobot@golang.org>
Reviewed-by: Heschi Kreinick <heschi@google.com>
2020-07-13 21:42:47 +00:00

59 lines
1.6 KiB
Go

// Copyright 2019 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.
package lsp
import (
"context"
"golang.org/x/tools/internal/lsp/protocol"
"golang.org/x/tools/internal/lsp/source"
"golang.org/x/tools/internal/span"
errors "golang.org/x/xerrors"
)
func (s *Server) didChangeWorkspaceFolders(ctx context.Context, params *protocol.DidChangeWorkspaceFoldersParams) error {
event := params.Event
for _, folder := range event.Removed {
view := s.session.View(folder.Name)
if view != nil {
view.Shutdown(ctx)
} else {
return errors.Errorf("view %s for %v not found", folder.Name, folder.URI)
}
}
return s.addFolders(ctx, event.Added)
}
func (s *Server) addView(ctx context.Context, name string, uri span.URI) (source.View, source.Snapshot, error) {
s.stateMu.Lock()
state := s.state
s.stateMu.Unlock()
if state < serverInitialized {
return nil, nil, errors.Errorf("addView called before server initialized")
}
options := s.session.Options()
if err := s.fetchConfig(ctx, name, uri, &options); err != nil {
return nil, nil, err
}
return s.session.NewView(ctx, name, uri, options)
}
func (s *Server) didChangeConfiguration(ctx context.Context, changed interface{}) error {
// go through all the views getting the config
for _, view := range s.session.Views() {
options := view.Options()
if err := s.fetchConfig(ctx, view.Name(), view.Folder(), &options); err != nil {
return err
}
view, err := view.SetOptions(ctx, options)
if err != nil {
return err
}
go s.diagnoseDetached(view.Snapshot())
}
return nil
}