code: func handleExtensionsParseDidStart(p *Params) ([]gqlerrors.FormattedError, parseFinishFuncHandler) {
  	fs := map[string]ParseFinishFunc{}
  	errs := gqlerrors.FormattedErrors{}
  	for _, ext := range p.Schema.extensions {
  		var (
  			ctx      context.Context
  			finishFn ParseFinishFunc
  		)
  		// catch panic from an extension's parseDidStart functions
  		func() {
  			defer func() {
  				if r := recover(); r != nil {
  					errs = append(errs, gqlerrors.FormatError(fmt.Errorf("%s.ParseDidStart: %v", ext.Name(), r.(error))))
  				}
  			}()
  			ctx, finishFn = ext.ParseDidStart(p.Context)
  			// update context
  			p.Context = ctx
  			fs[ext.Name()] = finishFn
  		}()
  	}
  	return errs, func(err error) []gqlerrors.FormattedError {
  		errs := gqlerrors.FormattedErrors{}
  		for name, fn := range fs {
  			func() {
  				// catch panic from a finishFn
  				defer func() {
  					if r := recover(); r != nil {
  						errs = append(errs, gqlerrors.FormatError(fmt.Errorf("%s.ParseFinishFunc: %v", name, r.(error))))
  					}
  				}()
  				fn(err)
  			}()
  		}
  		return errs
  	}
  }
docs: // handleExtensionsParseDidStart runs the ParseDidStart functions for each extension