code: func (f *file) checkContextKeyType(x *ast.CallExpr) {
  	sel, ok := x.Fun.(*ast.SelectorExpr)
  	if !ok {
  		return
  	}
  	pkg, ok := sel.X.(*ast.Ident)
  	if !ok || pkg.Name != "context" {
  		return
  	}
  	if sel.Sel.Name != "WithValue" {
  		return
  	}
  
  	// key is second argument to context.WithValue
  	if len(x.Args) != 3 {
  		return
  	}
  	key := f.pkg.typesInfo.Types[x.Args[1]]
  
  	if ktyp, ok := key.Type.(*types.Basic); ok && ktyp.Kind() != types.Invalid {
  		f.errorf(x, 1.0, category("context"), fmt.Sprintf("should not use basic type %s as key in context.WithValue", key.Type))
  	}
  }
docs: // checkContextKeyType reports an error if the call expression calls
  // context.WithValue with a key argument of basic type.