github.com/april1989/origin-go-tools@v0.0.32/internal/lsp/workspace.go (about) 1 // Copyright 2019 The Go Authors. All rights reserved. 2 // Use of this source code is governed by a BSD-style 3 // license that can be found in the LICENSE file. 4 5 package lsp 6 7 import ( 8 "context" 9 10 "github.com/april1989/origin-go-tools/internal/lsp/protocol" 11 "github.com/april1989/origin-go-tools/internal/lsp/source" 12 "github.com/april1989/origin-go-tools/internal/span" 13 errors "golang.org/x/xerrors" 14 ) 15 16 func (s *Server) didChangeWorkspaceFolders(ctx context.Context, params *protocol.DidChangeWorkspaceFoldersParams) error { 17 event := params.Event 18 for _, folder := range event.Removed { 19 view := s.session.View(folder.Name) 20 if view != nil { 21 view.Shutdown(ctx) 22 } else { 23 return errors.Errorf("view %s for %v not found", folder.Name, folder.URI) 24 } 25 } 26 return s.addFolders(ctx, event.Added) 27 } 28 29 func (s *Server) addView(ctx context.Context, name string, uri span.URI) (source.View, source.Snapshot, func(), error) { 30 s.stateMu.Lock() 31 state := s.state 32 s.stateMu.Unlock() 33 if state < serverInitialized { 34 return nil, nil, func() {}, errors.Errorf("addView called before server initialized") 35 } 36 37 options := s.session.Options() 38 if err := s.fetchConfig(ctx, name, uri, &options); err != nil { 39 return nil, nil, func() {}, err 40 } 41 return s.session.NewView(ctx, name, uri, options) 42 } 43 44 func (s *Server) didChangeConfiguration(ctx context.Context, changed interface{}) error { 45 // go through all the views getting the config 46 for _, view := range s.session.Views() { 47 options := view.Options() 48 if err := s.fetchConfig(ctx, view.Name(), view.Folder(), &options); err != nil { 49 return err 50 } 51 view, err := view.SetOptions(ctx, options) 52 if err != nil { 53 return err 54 } 55 go func() { 56 snapshot, release := view.Snapshot(ctx) 57 defer release() 58 s.diagnoseDetached(snapshot) 59 }() 60 } 61 return nil 62 }