package lsp import ( "context" "go.lsp.dev/protocol" "go.lsp.dev/uri" ) func (s *server) DidOpen(ctx context.Context, params *protocol.DidOpenTextDocumentParams) error { s.mu.Lock() s.docs[params.TextDocument.URI] = docState{ text: params.TextDocument.Text, version: params.TextDocument.Version, languageID: params.TextDocument.LanguageID, } s.mu.Unlock() return nil } func (s *server) DidChange(ctx context.Context, params *protocol.DidChangeTextDocumentParams) error { s.mu.Lock() defer s.mu.Unlock() state, ok := s.docs[params.TextDocument.URI] if !ok { return nil } state.version = params.TextDocument.Version for _, ch := range params.ContentChanges { switch ev := ch.(type) { case *protocol.TextDocumentContentChangeWholeDocument: state.text = ev.Text case *protocol.TextDocumentContentChangePartial: // TODO: incremental edit — apply range replacement _ = ev } } s.docs[params.TextDocument.URI] = state return nil } func (s *server) DidClose(ctx context.Context, params *protocol.DidCloseTextDocumentParams) error { s.mu.Lock() defer s.mu.Unlock() delete(s.docs, params.TextDocument.URI) return nil } func (s *server) DidSave(ctx context.Context, params *protocol.DidSaveTextDocumentParams) error { return nil } func (s *server) GetText(uri uri.URI) (string, bool) { s.mu.RLock() defer s.mu.RUnlock() state, ok := s.docs[uri] return state.text, ok }