MCPcopy Index your code
hub / github.com/microsoft/typescript-go / readLoop

Method readLoop

internal/lsp/server.go:447–516  ·  view source on GitHub ↗
(ctx context.Context)

Source from the content-addressed store, hash-verified

445}
446
447func (s *Server) readLoop(ctx context.Context) error {
448 for {
449 if err := ctx.Err(); err != nil {
450 return err
451 }
452 msg, err := s.read()
453 if err != nil {
454 if errors.Is(err, lsproto.ErrorCodeInvalidRequest) || errors.Is(err, lsproto.ErrorCodeInvalidParams) {
455 var id *jsonrpc.ID
456 if errors.Is(err, lsproto.ErrorCodeInvalidParams) {
457 if msg != nil && msg.Kind == jsonrpc.MessageKindRequest {
458 id = msg.AsRequest().ID
459 }
460 }
461 if err := s.sendError(id, err); err != nil {
462 return err
463 }
464 continue
465 }
466 return err
467 }
468
469 if s.initializeParams == nil && msg.Kind == jsonrpc.MessageKindRequest {
470 req := msg.AsRequest()
471 if req.Method == lsproto.MethodInitialize {
472 params, err := lsproto.UnmarshalParams[*lsproto.InitializeParams](req)
473 if err != nil {
474 if err := s.sendError(req.ID, err); err != nil {
475 return err
476 }
477 continue
478 }
479 resp, err := s.handleInitialize(ctx, params, req)
480 if err != nil {
481 return err
482 }
483 if err := s.sendResult(req.ID, resp); err != nil {
484 return err
485 }
486 } else {
487 if err := s.sendError(req.ID, lsproto.ErrorCodeServerNotInitialized); err != nil {
488 return err
489 }
490 }
491 continue
492 }
493
494 if msg.Kind == jsonrpc.MessageKindResponse {
495 resp := msg.AsResponse()
496 s.pendingServerRequestsMu.Lock()
497 if respChan, ok := s.pendingServerRequests[*resp.ID]; ok {
498 respChan <- resp
499 close(respChan)
500 delete(s.pendingServerRequests, *resp.ID)
501 }
502 s.pendingServerRequestsMu.Unlock()
503 } else {
504 req := msg.AsRequest()

Callers 1

RunMethod · 0.95

Calls 10

readMethod · 0.95
sendErrorMethod · 0.95
handleInitializeMethod · 0.95
sendResultMethod · 0.95
cancelRequestMethod · 0.95
AsRequestMethod · 0.80
AsResponseMethod · 0.80
PutMethod · 0.80
LockMethod · 0.45
UnlockMethod · 0.45

Tested by

no test coverage detected